<?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>231253</bug_id>
          
          <creation_ts>2021-10-05 14:15:35 -0700</creation_ts>
          <short_desc>[GPU Process] [Filters 23/23] Implement filters in GPU Process</short_desc>
          <delta_ts>2024-01-15 17:06: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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=233843</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=233849</see_also>
          <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>267561</dependson>
    
    <dependson>225088</dependson>
    
    <dependson>232369</dependson>
    
    <dependson>232413</dependson>
    
    <dependson>232457</dependson>
    
    <dependson>232469</dependson>
    
    <dependson>232551</dependson>
    
    <dependson>232705</dependson>
    
    <dependson>232831</dependson>
    
    <dependson>232832</dependson>
    
    <dependson>232833</dependson>
    
    <dependson>232840</dependson>
    
    <dependson>232841</dependson>
    
    <dependson>232842</dependson>
    
    <dependson>232843</dependson>
    
    <dependson>232844</dependson>
    
    <dependson>232845</dependson>
    
    <dependson>232972</dependson>
    
    <dependson>233008</dependson>
    
    <dependson>233214</dependson>
    
    <dependson>233487</dependson>
    
    <dependson>233500</dependson>
    
    <dependson>233510</dependson>
    
    <dependson>233516</dependson>
    
    <dependson>233613</dependson>
    
    <dependson>233618</dependson>
    
    <dependson>233843</dependson>
    
    <dependson>233849</dependson>
    
    <dependson>233893</dependson>
    
    <dependson>233973</dependson>
    
    <dependson>233989</dependson>
    
    <dependson>234024</dependson>
    
    <dependson>234027</dependson>
    
    <dependson>234086</dependson>
    
    <dependson>234099</dependson>
    
    <dependson>234108</dependson>
    
    <dependson>234109</dependson>
    
    <dependson>234130</dependson>
    
    <dependson>234918</dependson>
    
    <dependson>235376</dependson>
    
    <dependson>239984</dependson>
    
    <dependson>240269</dependson>
    
    <dependson>240274</dependson>
    
    <dependson>240777</dependson>
    
    <dependson>240807</dependson>
    
    <dependson>240808</dependson>
    
    <dependson>240809</dependson>
    
    <dependson>240810</dependson>
    
    <dependson>240811</dependson>
    
    <dependson>241535</dependson>
    
    <dependson>242359</dependson>
    
    <dependson>243415</dependson>
    
    <dependson>243432</dependson>
    
    <dependson>267349</dependson>
          <blocked>236508</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1800756</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 14:15:35 -0700</bug_when>
    <thetext>Move applying the effects and caching the results to GPUProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800788</commentid>
    <comment_count>1</comment_count>
      <attachid>440274</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 15:08:35 -0700</bug_when>
    <thetext>Created attachment 440274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800841</commentid>
    <comment_count>2</comment_count>
      <attachid>440290</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 16:34:27 -0700</bug_when>
    <thetext>Created attachment 440290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800876</commentid>
    <comment_count>3</comment_count>
      <attachid>440304</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-05 17:10:40 -0700</bug_when>
    <thetext>Created attachment 440304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801006</commentid>
    <comment_count>4</comment_count>
      <attachid>440349</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-06 02:44:15 -0700</bug_when>
    <thetext>Created attachment 440349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801406</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-06 16:26:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/83957362&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802561</commentid>
    <comment_count>6</comment_count>
      <attachid>440768</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-11 02:46:37 -0700</bug_when>
    <thetext>Created attachment 440768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802562</commentid>
    <comment_count>7</comment_count>
      <attachid>440769</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-11 03:04:10 -0700</bug_when>
    <thetext>Created attachment 440769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803024</commentid>
    <comment_count>8</comment_count>
      <attachid>440906</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-12 01:22:46 -0700</bug_when>
    <thetext>Created attachment 440906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803036</commentid>
    <comment_count>9</comment_count>
      <attachid>440911</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-12 02:05:42 -0700</bug_when>
    <thetext>Created attachment 440911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805673</commentid>
    <comment_count>10</comment_count>
      <attachid>441629</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-18 12:11:59 -0700</bug_when>
    <thetext>Created attachment 441629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807570</commentid>
    <comment_count>11</comment_count>
      <attachid>442131</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-22 00:57:31 -0700</bug_when>
    <thetext>Created attachment 442131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807577</commentid>
    <comment_count>12</comment_count>
      <attachid>442133</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-22 01:17:40 -0700</bug_when>
    <thetext>Created attachment 442133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808326</commentid>
    <comment_count>13</comment_count>
      <attachid>442350</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 02:36:07 -0700</bug_when>
    <thetext>Created attachment 442350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808327</commentid>
    <comment_count>14</comment_count>
      <attachid>442351</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 02:44:09 -0700</bug_when>
    <thetext>Created attachment 442351
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808328</commentid>
    <comment_count>15</comment_count>
      <attachid>442352</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 03:05:33 -0700</bug_when>
    <thetext>Created attachment 442352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808766</commentid>
    <comment_count>16</comment_count>
      <attachid>442466</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-25 23:06:01 -0700</bug_when>
    <thetext>Created attachment 442466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821735</commentid>
    <comment_count>17</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-08 12:51:33 -0800</bug_when>
    <thetext>Let&apos;s have this bug as an umbrella for all GPUProcess filter feature bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830631</commentid>
    <comment_count>18</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-01-13 10:59:44 -0800</bug_when>
    <thetext>*** Bug 219423 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1955559</commentid>
    <comment_count>19</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2023-05-15 18:03:10 -0700</bug_when>
    <thetext>All the dependent bugs were resolved. Resolve as Fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440274</attachid>
            <date>2021-10-05 15:08:35 -0700</date>
            <delta_ts>2021-10-05 16:34:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211005150833.patch</filename>
            <type>text/plain</type>
            <size>669549</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTk5NzYzMzY3MzJmNjUx
MTBlM2RkMThiNDcxYWI5MThkZmNlMmY5My4uMzhjNzkxMDMyYzk5MzYwNjQ5YTU3YWZmMjEwMmZh
YWFiNjQwMDc0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTA5LTI4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbQmlnU3VyIHdr
MiBEZWJ1ZyBpT1MxNCBdIHdlYnJ0Yy92aWRlby1tdXRlLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IDJlZWViNDI2OTU3YTBmZmVjNjJjMTUyODkxZDI1MDZiMWJjZDhhYTkuLmQ5
NzlmMmNhNmJlNmM4ZjFlZGE5NGJjZTBiNTcyYzRlZmIwNWJlODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMjEtMTAtMDUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2Vzcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVu
Y2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOjpGaWx0
ZXJHZW9tZXRyeVJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlOjp0YWtlR2VvbWV0cnkpOgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5j
ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2U6
OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oOiBBZGRl
ZC4KKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpGaWx0ZXJSZWZlcmVuY2UpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OnRha2VGaWx0ZXIpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVy
ZW5jZTo6ZGVjb2RlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAg
ICAgICAgKHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQpOgorICAgICAgICAq
IFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRlcmVkSW1hZ2VG
b3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMDktMjggIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRXhwbGljaXRseSBkZW55ICdzeXN0ZW0tcHJp
dmlsZWdlJyBpbiB0aGUgc2FuZGJveCBwcm9maWxlIGFzIGEgaGFyZGVuaW5nIG1lYXN1cmUgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IGU0M2FmZGNhZWYyMGRmYzQzYTVmMDY5Y2Q0YWQyZGFhMTZkOWM5ZWMu
LjdkNDlmM2QyYzRlMjFjODcxMTA3NGNkYmE1ZGQ3NTNjMjUzMzFmMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0yMDQxLDE0ICsyMDQxLDM1IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJl
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29t
cG9zaXRlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdh
cmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lT
T1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94LmNwcApAQCAtMjYyOSw3ICsyNjUwLDYgQEAgc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3BwCiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWlu
ZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAotc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJv
cGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3By
b3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApp
bmRleCA2YzRjZjA3NDYwYmFkZWJjMzMxNzE2OTA4MzlhNTdiMGQwOWE0ZjkxLi5iYzJiMmU5YmU0
MzZjY2UyMDhmZTlhZmYwNjU4MTEzNjdjM2JmZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQK
QEAgLTM5NSw3ICszOTUsOCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVURldmljZU1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDAyOGU1ZDk1YzY5YjZmNzRh
MzUyZTMwOWRmOTJlMTA1MTA2YWI3Mi4uMjA3NjQ0MjA4M2FhMjU5MGNjOTJiZjcyZTI1OTA4MGFl
ZGQ1MDI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMjMzLDcgKzIzMyw2IEBACiAJCTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVE
RSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5r
QnVpbGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExh
eW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsg
fTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTEx
MjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovOyB9OwotCQkwODFFQkYzQjBG
RDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYgLyog
Rm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NzQsOCArNzczLDYgQEAK
IAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAz
MjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsKIAkJMkIzNjVDODQxNTI1MTE5RTAwOTFE
MjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxp
cHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsg
fTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0
QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRB
M0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJ
MkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQy
MURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi87IH07
CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIx
NDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi87IH07
CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDkxREE2M0E3
OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgKi87IH07CkBAIC0yMjc3LDYgKzIyNzQs
MTUgQEAKIAkJNzFFQURDRDgyMjA4N0U3MjAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFQURDRDYyMjA4N0U2RDAw
NjVBNDVGIC8qIFBvaW50ZXJJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUZD
RUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2
OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyMDBDRjU5MjcwOUFCRkIwMDUxNUMyNCAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFB
RSAvKiBGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3MjAwQ0Y1QTI3MDlBQzExMDA1MTVDMjQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY2MjcwM0Q2
NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVCMjcwOUFDQjYwMDUxNUMyNCAvKiBGaWx0
ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAwQ0Y1QzI3MDlBRDNBMDA1
MTVDMjQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUNBOEY1MjcwMzk0NTYwMEMwREQ2NSAvKiBGaWx0ZXJS
ZXByZXNlbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMDBDRjVEMjcwOUFEQ0UwMDUxNUMyNCAvKiBGaWx0ZXJPdXRwdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTc4RDQzMjZGRTlE
RTcwMEZEMkM1NiAvKiBGaWx0ZXJPdXRwdXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAwQ0Y2NTI3MEMwNjE3MDA1MTVDMjQgLyogRmlsdGVy
R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjY4MjcwQzQ3ODcw
MDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZl
cmVuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QjI3MENENjA5MDA1MTVDMjQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUg
LyogQ1NTRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzIwMENGNkMyNzBDRDYxOTAwNTE1QzI0IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkIyNzAzREE5QTAw
M0M1QUFFIC8qIFNWR0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMy
MjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNW
R1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5NzQy
NTEyQkEzQjAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8q
IEltYWdlQml0bWFwQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0yNjk3LDggKzI3MDMsNiBAQAogCQk4NDIyNDE5NDEwN0U3OEE3MDA3
NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaCAqLzsgfTsKIAkJODQzMDBCRDYxMjBDOUFBQzAwMjE5NTRBIC8q
IFNWR1BhdGhTdHJpbmdTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291
cmNlLmggKi87IH07CiAJCTg0MzAwQkQ4MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDMwMEJE
NzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovOyB9OwotCQk4NDVFNzJGODBG
RDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi87
IH07Ci0JCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZEMjYyMzkwMEE4
N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLzsgfTsKIAkJODQ2NTBFN0UyMzg3QUQ3RDAwNjI2NkUyIC8q
IE1lZGlhUXVlcnlMaXN0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0NjUwRTdDMjM4N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2
ZW50LmggKi87IH07CiAJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRT
b3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLzsgfTsKIAkJ
ODQ3MzBENzkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVDMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggKi87IH07CkBAIC02MDUyLDggKzYwNTYsNiBAQAog
CQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURF
IC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0
ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQz
NEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVB
MzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8q
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjIwMCw4ICs2MjAyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0
MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRP
bmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25s
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFC
MDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQg
LyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENT
U0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFC
QjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEz
Qjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAv
KiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzA5LDEwICs3MzA5LDYgQEAKIAkJ
MkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hh
cnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4
QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyog
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUx
OEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURB
NjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlO
ZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJL
aXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwNDQ0LDEwICsxMDQ0MCwyMCBAQAogCQk3MUY2RUU0MTI1NUVERjlDMDBGQzRDNUIgLyogR3Jp
ZFRyYWNrU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmlk
VHJhY2tTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0
Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNo
UG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50
cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjU3MjcwNzhDNDIwMDUx
NUMyNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJHZW9t
ZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y1RTI3MEFEMTM3MDA1
MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlck91dHB1
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjVGMjcwQkIwMTkwMDUx
NUMyNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjEyNzBCQkRBODAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjIyNzBCQkRGQjAwNTE1QzI0IC8qIEZp
bHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIwMENGNjMyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJl
c3VsdFNvZnR3YXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY2MjcwQzMyMUQwMDUxNUMyNCAvKiBG
aWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAv
KiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBT
VkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1
ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENB
RDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVl
UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NkYyNTEyQUMw
NDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFC
NDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjFDQThGNTI3MDM5NDU2MDBDMERENjUgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI0MkFDOTUyNTc1OEZFMDAwNUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVu
dGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDQ3Miw5ICsxMDQ3OCwzNSBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQy
RTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
WFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZB
MDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEw
MDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1
NiAvKiBGaWx0ZXJPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyT3V0cHV0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2
ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyog
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2
NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmls
dGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENjkyNzAz
RDhFNTAwM0M1QUFFIC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkEyNzAzREE5
QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNENzAyNzA1NzUwNDAwM0M1QUFFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkE4M0Q3MTI3MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8q
IEZFT2Zmc2V0U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2Fy
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDczMjcwNTdDQkUwMDND
NUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1v
cnBob2xvZ3lTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVNZXJnZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNENzUyNzA1ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8q
IEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVB
QUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQTgzRDdCMjcwNUIyQzkwMDNDNUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdE
MjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkE4M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyogRkVEcm9wU2hhZG93
U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEcm9wU2hhZG93U29mdHdhcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3RjI3MDYzRjRDMDAzQzVBQUUg
LyogRkVUaWxlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUaWxlU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVB
QUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJi
dWxlbmNlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4
MTI3MDY0NkUyMDAzQzVBQUUgLyogRkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQTgzRDgyMjcwNjUxMUIwMDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNEODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFD
IC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTA0ODYsNiArMTA1MTgsOCBAQAogCQk3MkJBQzNBQzIzRTFF
NTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBC
MDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkw
QTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQy
RjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0
MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMTQxNyw5ICsxMTQ1MSw2IEBACiAJCTg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0
QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU3RyaW5n
U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjcwRkQyNjFF
RTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjkwRkQyNjIzOTAw
QTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJG
QTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1
MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5
TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlh
UXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU4
MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xOTM3NCw4ICsxOTQwNSw5IEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBF
OSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggKi8sCisJCQkJNzIwMENGNjIyNzBCQkRGQjAwNTE1
QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MjAwQ0Y1RjI3MEJCMDE5
MDA1MTVDMjQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gY29yZWltYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIyOTU5LDYgKzIy
OTkxLDMyIEBACiAJCQlwYXRoID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q4MjI3
MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NTI3
MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4
M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCAq
LywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5j
cHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4NjAwM0M1QUFFIC8qIEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAv
KiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzgyNzA1OEMwMzAwM0M1
QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0IyNzA1QjJDOTAwM0M1
QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDgxMjcwNjQ2
RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc0Mjcw
NTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDczMjcw
NTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
NzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgz
RDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
ODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3
MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovLAor
CQkJCTcyMDBDRjY0MjcwQkMyQzgwMDUxNUMyNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oICov
LAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNw
cCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3
YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NU
ZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MjUwMDIsNiArMjUwNjAsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVy
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNE
NkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovLAogCQkJCUExRTExNTQzMTMwMTVDM0Qw
MDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDVBMTI0OEYw
QjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBNzVFOEI4MDBFMURF
MkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCkBAIC0yNTAzOCwxNSArMjUwOTcsMjMgQEAK
IAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBE
NkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYx
RUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUg
LyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAg
Ki8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAot
CQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAg
Ki8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
LmggKi8sCisJCQkJNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmgg
Ki8sCisJCQkJNzIwMENGNjYyNzBDMzIxRDAwNTE1QzI0IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAq
LywKKwkJCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywK
IAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywK
IAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJ
CQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLAog
CQkJCTQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8sCisJ
CQkJNzIwMENGNUUyNzBBRDEzNzAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5jcHAgKi8sCisJCQkJ
NzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlck91dHB1dC5oICovLAorCQkJCTcyMDBD
RjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKKwkJCQk3MjFDQThG
NTI3MDM5NDU2MDBDMERENjUgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkM5
MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEz
QTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQxMjQ4
RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0RTAw
NTRBQzhDIC8qIFBvaW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYwQjMw
MEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8sCkBAIC0yNjgwNSwxMCArMjY4NzIsOSBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZF
SW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdl
LmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8s
Ci0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovLAotCQkJCTA4
MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKLQkJCQkw
ODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovLAorCQkJCTcy
QTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZC
MjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLywKKwkJCQk3MjAwQ0Y1NzI3MDc4QzQy
MDA1MTVDMjQgLyogU1ZHRmlsdGVyR2VvbWV0cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmls
dGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTg4Nyw4ICsyOTk1Myw4IEBA
CiAJCQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIu
aCAqLywKIAkJCQk5MzkyRjE0RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICov
LAogCQkJCTkzOTJGMTRCMEFEMTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJ
CTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNG
QjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNE
QzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAz
QzVBQUUgLyogQ1NTRmlsdGVyLmggKi8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8q
IENTU1ZhbHVlS2V5LmggKi8sCiAJCQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50
UmVnaW9uLmNwcCAqLywKIAkJCQlFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdp
b24uaCAqLywKQEAgLTMxOTY0LDYgKzMyMDMwLDcgQEAKIAkJCQlBQTIxRUNDRDBBQkYwRkM2MDAy
QjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzlF
MTQxQkIyMTVCQjAwQ0FBOEJGIC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk0NDc2QkRCMURGQ0FDMDMwMDY5MEUyMyAvKiBDU1NEZWZlcnJlZFBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNkIyNzBDRDYwOTAwNTE1QzI0IC8qIENTU0ZpbHRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJCMEM1QjgxN0JCRDYyOTAwM0QzNjc3IC8qIENTU0Zp
bHRlckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjRCNEQ2MENCNDI5OEEwMDVG
MkI2MiAvKiBDU1NGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRkQwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjQ2Mywx
MiArMzI1MzAsMTYgQEAKIAkJCQk5MzEyQkFEOTI2RjNBQzlBMDBGRERGNUYgLyogRmlsZVN5c3Rl
bUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2
NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIw
MzFDQyAvKiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNTkyNzA5QUJGQjAw
NTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMw
RjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0
ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNjUyNzBDMDYxNzAwNTE1QzI0
IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNUMyNzA5QUQzQTAwNTE1QzI0IC8qIEZpbHRlclJlcHJl
c2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y1QjI3MDlBQ0I2MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRG
MDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3
RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM1MzM2LDggKzM1NDA3LDcgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQg
LyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA5Myw3ICszNjE2Myw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlhZTll
NTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li4yMTExZmEyODY0MWE2ZjM1OWMwMWZlZWE2
ODQwMGMwM2IxNTg0OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0x
MTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpu
dWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7
CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNl
dFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVn
aW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2Zp
bHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0
byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0
cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0
dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8RmlsdGVyR2VvbWV0cnk+KGltYWdlUmVjdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0
byBmaWx0ZXJlZEltYWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3Zl
KGdlb21ldHJ5KSkpCisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJu
IG91dHB1dC0+Y29weUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9
CiAKIHZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IElu
dFJlY3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2
YWIyMjIxODEuLjg4YTMxMDI3Nzk4MmYzMjdkMjQzOTQ2ZWVlZjUyNmU1ZjcyMDk3NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAKQEAgLTEzOCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgc3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3Jl
KSA9IGZpbHRlci5hcHBseSh0aGlzLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAg
fQorCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDk0ZTFh
MGY3OWI0ZmUzZmExNTIxZTllZDUyMjc5ZDRiZTAwNzgyYWYuLjU3MzkyYWRjNGU4MmE5Mzc0YTg1
MDAzYTQ1YzY0MTg4MjQwNjU5YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5j
bHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCkBAIC02MDMsNiArNjA1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zp
bHRlckltYWdlQnVmZmVyKEZpbHRlciYgZmlsdGVyLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBhdXRv
IFtmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdF0gPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIFdU
Rk1vdmUoZ2VvbWV0cnkpKTsKKyAgICBpZiAoZmlsdGVyZEltYWdlKQorICAgICAgICBkcmF3SW1h
Z2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogewog
ICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggODk0NmViMjA4NDUxYzhiYmI5NDBhYjQxNTA3OWVhODE2
ZTliNTlhZS4uNTkxMmM1Y2RjNjkyNWIwMjI3ZTUzMTdlOTZkYmM1MjhkMjk0ZWQ1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVu
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKQEAgLTQ0MCw2ICs0NDIs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVySW1hZ2VC
dWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
RmlsdGVyR2VvbWV0cnk+JiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGIx
ZThkM2IwNGFiMjYwNTEzMjg4NmEwYTgwMzA1MDhhMTMxNjEyODAuLmFlZDU1MzIxNGYyMmFkY2Ux
MTdhZDdiMGNhMjdmOGVmYjBmMDhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDIsNiArNDIsOSBAQCBjbGFzcyBEcmF3aW5nQ29u
dGV4dDsKIHN0cnVjdCBJdGVtQnVmZmVySGFuZGxlOwogfQogCitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKKwogY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXIsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8SW1hZ2VCdWZmZXI+IHsKIHB1YmxpYzoKICAgICAvLyBXaWxs
IHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC0xMDYsNiAr
MTA5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFn
ZShjb25zdCBGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpID0gMDsK
IAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250
ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQppbmRleCBkNGZhM2M0YmZhZDM0YWFm
MzA5M2E5ZjAyNDg2YmI3MjdmOThkNGFhLi5kNDVhYjMzYzQ0MDhlZDYzNjA3NDYxNGQ0NmY0NTlk
YTZmNTFkNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM3
LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogU2hvdWxkIHNo
YXJlIHRoZXNlIHZhbHVlcyB3aXRoIENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUg
dGhlc2UgdmFsdWVzIHdpdGggRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgogc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxD
b25zdGFudHNbM11bM10gPSB7CiAgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAw
LjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0ZDU1
YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2lt
cG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1P
QkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpDX0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBDSUNv
bnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsKLWNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3Jl
YXRlKEZpbHRlckVmZmVjdCYpOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29u
dGV4dCgpOwotICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQot
ICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJl
c3VsdCgpIGZpbmFsOwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKFNvdXJjZUdyYXBoaWMmKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJ
SW1hZ2U+PiYpOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJh
bnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFn
ZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRyPElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1dElt
YWdlQnVmZmVyOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM4NmZjNGMyM2FmOTU0NTU1N2E1NThjOGM0NTFlMTlhOGEzOGZiNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgi
Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2lt
cG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJ
bWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAg
ICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVmZmVjdCkpCi0gICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPigpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdp
dGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKLSAgICByZXR1
cm4gY2lDb250ZXh0OwotfQotCi1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewotICAg
IGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBpc051
bGxPckxpbmVhcihlZmZlY3QucmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0
LmdyZWVuRnVuY3Rpb24oKSkKLSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJsdWVG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLX0K
LQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5nZSBy
ZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAgICAg
c3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAg
ICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2Fz
dDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRy
b3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxh
c3RFZmZlY3QpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dElt
YWdlczsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsK
LSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAgICAg
ICBpZiAoIWlucHV0SW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShl
ZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkg
ewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICBy
ZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVj
dCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAgICAg
cmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZl
Y3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRv
d25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0
IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNl
dDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCi17
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUlt
YWdlKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgaWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQotICAg
ICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFj
ZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAgIAot
ICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0
aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgo
Y29uc3QgRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMu
YXQoMCk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9h
dHMoZWZmZWN0LnZhbHVlcygpKTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAotICAg
IHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklY
TUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0
XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25l
bnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1
dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAg
ICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAg
ICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0g
IGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFs
dWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sx
MF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0
QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVl
c1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0g
IFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91
dHB1dEltYWdlOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRy
YW5zZmVyJiBlZmZlY3QsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNm
ZXIgZnVuY3Rpb25zCi0gICAgQVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbihlZmZlY3QpKTsKLQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0
KDApOwotICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xv
clBvbHlub21pYWwiXTsKLSAgICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0
KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZpY2ll
bnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBmdW5jdGlvbikgewotICAgICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSKQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjowIFc6
MF0gZm9yS2V5OmtleV07Ci0gICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJlZENv
ZWZmaWNpZW50cyIsIGVmZmVjdC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMo
QCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0gICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVGdW5j
dGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwg
ZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRwdXRJ
bWFnZTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGlm
ICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdDSUZp
bHRlcnMoKmluKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
b3V0cHV0KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJpbmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICByZXR1
cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0KQotewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291
dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0
KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkg
Ym91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRD
b2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVj
dC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9IG51
bGxwdHI7Ci19Ci0KLUZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19Ci0g
ICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYmU1NjFiNzAxYmNhMDViMjQ0ZTUyNWUxNzhl
YzI0ZjZkZGQxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lN
QUdFKQorCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHQuaCIKKworT0JKQ19DTEFTUyBDSUltYWdlOwor
T0JKQ19DTEFTUyBDSUNvbnRleHQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0Q29yZUltYWdlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisKKyAgICB2b2lkIHNldEltYWdlKFJl
dGFpblB0cjxDSUltYWdlPiYmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlOworICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IG1faW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdENvcmVJbWFnZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkg
PT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43Mjc5MmIxYWJlOTcwZDhjZGY4OWFmODVhNThkNTRkNWFiODAwYmI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDU1IEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0
Q29yZUltYWdlLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCA8Q29yZUltYWdl
L0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9ydCA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQor
eworICAgIEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQor
CitSZWZQdHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVy
SWZFeGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOworfQorCitJbWFnZUJ1ZmZl
ciogRmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhp
Y0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmOGE4MGNiZmQ2NzI4MzZk
Zjg5OTVjZjM5ZDQzZGE1YmQ4NTUwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpA
QCAtMCwwICsxLDU2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNp
bXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2U7CisgICAg
aWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQorICAgICAgICBpbWFn
ZSA9IFtDSUltYWdlIGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1
ZmZlcj4oKnNvdXJjZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5h
dGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVyUmVzdWx0Q29y
ZUltYWdlPihyZXN1bHQpLnNldEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2Yx
OC4uZGU2NjA2OGNkZDBhOWNiNTc0YzBhY2JiYzhjOGM2MGE2Nzc0ZmYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywxNSArMTA3LDE4IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQq
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHRzJiByZXN1bHRzLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIg
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsg
KnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1
bHQgPSBmaWx0ZXIoKS5jcmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzIsNyBA
QCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNl
UGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJj
ZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJ
ZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VS
VChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQzLDggQEAgdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBd
OwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNl
QkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwg
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJy
YXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggMWU0NzIx
N2UwNzRjZTU4N2JjYWZmY2ZlYWI0YzMxMDBiZGExNWNhNC4uYzBiYmQ2ZGQ2NTNhZjlkNTY1Yjkw
MGQ3MTVkYWYwZjQ4MmY1ZmVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtMjIyLDYgKzIyMiwxNCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdAogICAg
IGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciosIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRy
eT4mJikKK3sKKy8vICAgIGlmIChtX2RlbGVnYXRlKQorLy8gICAgICAgIG1fZGVsZWdhdGUtPnJl
Y29yZEltYWdlQnVmZmVyVXNlKCpzb3VyY2VJbWFnZSk7CisvLyAgICByZWNvcmRGaWx0ZXJVc2Uo
ZmlsdGVyKTsKKy8vICAgIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGZpbHRlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewog
ICAgIGFwcGVuZDxTYXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggMzFhNTIyODkwYjdlZTRlNjUwZjViYTViYjFiN2U1MjQ2MmFmMTYxMC4uZTFiOWEwNTg2
N2YxNGE0NDQzZjAxZWYzOGQzYzZhMTIyNTc0OTQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0xMjgsNiArMTI4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFm
MThmYmI2MmMyY2VkOS4uMzU2ZTM1OTMzZmNlYmQ1YzdmMjg3MDRiMDI2Y2QwNTYxMWZlN2RiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBmaWx0
ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Qmxl
bmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxl
bmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IG1fbW9k
ZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2Rl
KSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogewot
ICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9k
ZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9t
b2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAg
IGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9
XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwg
IlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVj
MjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJhMjMyMzNhYmE5
YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVC
bGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVC
bGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJlZjxGRUJsZW5k
PiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpOwogCiBw
cml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRN
b2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
QmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1
NC4uZGI0OGRjZGQ0MTM4ZGE2ZWYzNTkzNzRjMzE4NTkyNzdlMGFiY2M5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQsMTkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUg
dHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhX
VEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7
CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorRkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZs
b2F0PiYmIHZhbHVlcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmls
dGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4Ojpz
ZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQpAQCAtNjMsMjU4ICs1NSw0MyBAQCBib29sIEZF
Q29sb3JNYXRyaXg6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlcykKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBmbG9hdCByID0gcmVkOwotICAg
IGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxw
aGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZh
bHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdy
ZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIg
KyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVl
c1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10g
KiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2
YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNb
MTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykK
LXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBi
ID0gYmx1ZTsKLQotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25l
bnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRz
WzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKLSAgICBibHVlICAg
ID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRz
WzhdOwotfQotCi0vLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBm
dW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0
JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKLXsKLSAgICBh
bHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKLSAg
ICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVlID0gMDsKLX0KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVm
ZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZm
ZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUu
YXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0
YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhl
IEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBi
YWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZh
bHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29y
ID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAg
ICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
LSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
N10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzdd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAg
ICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2
aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewot
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29tcG9uZW50c1swXSA9
ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1
ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNv
bXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVd
ID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAt
IDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CiB9Ci0j
ZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsK
LSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICBlbHNlIGlmIChm
aWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpCi0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0
aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0
ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXpl
KSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQg
Kz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZs
b2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAg
ZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAg
ICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIp
OwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxv
YXQgLyAxODApOworICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0g
c2luSHVlICogMC4yMTM7CisgICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43
MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUg
KiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNv
c0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1
ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0g
MC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNb
Nl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9u
ZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBj
b21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29sb3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
cGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBl
ZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVl
cywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5n
ZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQpAQCAtMzM5LDEwICsxMTYsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVDb2xvck1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCBt
X3R5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0
cyA8PCAiIHZhbHVlcz1cIiI7CkBAIC0zNTcsOSArMTMzLDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xv
ck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAg
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1
Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLmY2MTIxM2ZlNjBmZTBiNGNjM2QyY2RlZjliNjQyZjQ2
ZGI0ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszNyw3IEBA
IGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKKyAgICBzdGF0
aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9h
dD4mJik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDYsNTQgKzQ1LDIy
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0
PiYmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb2xvck1hdHJpeCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbG9yTWF0cml4
VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGluZSB2
b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAu
Nzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVl
KTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0g
PSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0g
MC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBp
RmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAx
ODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVl
ICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBz
aW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3
MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAq
IDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29z
SHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0gMC4wNzIg
LSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNbNl0gPSAw
LjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9uZW50c1s3
XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25l
bnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwotfQotCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uZmVi
ODA4NmVhZjUyYzJjMjkwNDhiZjVlZmFkYmIyZjI3YjNjZGM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMTM4ICsyNSwzMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9u
ZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyKQotICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKLSAgICAsIG1fZ3Jl
ZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQotICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0
aW9uKQotICAgICwgbV9hbHBoYUZ1bmN0aW9uKGFscGhhRnVuY3Rpb24pCi17Ci19Ci0KLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24s
IGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1
ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAo
biAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRv
dWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAg
ICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2
MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsK
LSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6
bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2td
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGRUNvbXBvbmVu
dFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBt
X3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQorICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVu
Y3Rpb24pCisgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCisgICAgLCBtX2FscGhh
RnVuY3Rpb24oYWxwaGFGdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhy
ZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJl
Y3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhl
bEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwotICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKQorRmlsdGVyUmVzdWx0KiBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseShG
aWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZm
ZXIqKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxl
W2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBl
ID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lE
RU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxl
LCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRl
R2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJB
WV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVd
KHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlv
bi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9i
bHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVm
ZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb25lbnRU
cmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA0LDkgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNm
ZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAgICAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEsOSArMTE1LDYgQEAgVGV4dFN0
cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBt
X2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6
ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNzYxMDY5ZGI4OWU0Mzc3NGE4NzY4MzY5ZTk1NTZlNjcxNjE0
NGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzI0LDYgQEAKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQ29tcG9uZW50VHJhbnNm
ZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAg
IHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0
ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90
LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUs
IExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBU
YWJsZSYgYWxwaGFUYWJsZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBt
X2dyZWVuRnVuY3Rpb247CkBAIC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVy
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhi
NTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLmNmMDRlNDNjNTUyMjkwNzFk
M2YxZjMyNTQ0Zjg5ZjQ1OWJhNThhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDE5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29t
cG9zaXRlQXJpdGhtZXRpY05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkK
K1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVy
YXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZF
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVP
cGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykK
QEAgLTQyLDI2NCArNDUsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVm
PEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0
ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRl
T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAg
IGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBt
X2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAo
bV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsK
IH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMg
PT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAK
IGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lk
IEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZF
Q29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChtX3R5cGUg
IT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KKyAgICAvLyBGb3IgSW4gYW5k
IEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgorICAg
IC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOIHx8IG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUCkKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdp
bmdSZWN0KGlucHV0cywgaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpKTsKICAgICAKLXN0YXRpYyB1
bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwotICAgIHVuc2ln
bmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJldHVybiBidWZmWyEhKHVj
ICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5z
aWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVs
QXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewot
ICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAg
ICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxl
ZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDAp
IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEg
KyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVk
SzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2Nh
bGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAg
ICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0v
LyBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGlt
aXphdGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBp
bnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2Fy
ZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci17Ci0gICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwotICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKLSAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVw
cGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49
IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgewotICAgICAgICBpZiAoazQpIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChrNCkgewotICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoazEpCi0gICAg
ICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
aW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgaW50IGxl
bmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0
PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUg
ZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFy
aXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0
YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4g
YW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgot
ICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBj
bGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5m
bHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0g
ICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJv
dGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEFyaXRobWV0aWMg
bWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBj
YW4ndAorICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAg
CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSk7
CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0cik7CiB9CiAKLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3Np
dGVPcGVyYXRpb25UeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3Ip
IHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTggKzEyOSwxMyBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb21w
b3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvc2l0ZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwotICAgIGlmIChtX3R5
cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICB0cyA8PCAiIG9wZXJh
dGlvbj1cIiIgPDwgbV9jb21wb3NpdGVPcGVyYXRvciA8PCAiXCIiOworICAgIGlmIChtX2NvbXBv
c2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAg
IHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1c
IiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcx
MDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uOTlmMjkwNWRjZmJjMDRjOGZjMWVhNThm
MWMwYTVmMWI4OWViNDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDkgQEAKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKK2VudW0gRkVDb21wb3NpdGVPcGVyYXRvciB7CiAgICAgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTiAgICA9IDAsIAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVIgICAgICAgPSAxLAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOICAgICAgICAgPSAyLApA
QCAtNDEsMTAgKzM5LDEwIEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CiAKIGNsYXNz
IEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUNv
bXBvc2l0ZT4gY3JlYXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKIAotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSk7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBib29s
IHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgZmxvYXQg
azEoKSBjb25zdCB7IHJldHVybiBtX2sxOyB9CiAgICAgYm9vbCBzZXRLMShmbG9hdCk7CkBAIC01
OCwzMCArNTYsMjAgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQog
Ci0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCk7Ci0jZW5kaWYKLQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90
eXBlOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAgICBm
bG9hdCBtX2sxOwogICAgIGZsb2F0IG1fazI7CiAgICAgZmxvYXQgbV9rMzsKQEAgLTg5LDQgKzc3
LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKaW5kZXggNzViMmU3YzZlYTEzYzJjMWMyZjhmNjVkM2RiNGVkNWNjM2Fm
ZGE4Zi4uMTEyMzkzYWIwODZjZWRiOGJlZjZlNjFkZTQwNDg3YThhOTkxNjk4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQs
MTkgKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1h
dHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCi0gICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6
ZSkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50
UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1v
ZGUsIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQor
CitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCisgICAgOiBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihk
aXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCiAgICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRP
ZmZzZXQpCkBAIC00OSwxNCArNTAsNiBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VS
VChtX2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252
b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNl
dCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtl
cm5lbE1hdHJpeCkpOwotfQotCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSkKIHsKICAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0
aCgpID4gMCk7CkBAIC0xMjAsMzE4ICsxMTMsMjAgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252
b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93
aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAg
ICAgQSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAg
ICB8ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
LSAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZh
bHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0
aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEw
LCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDog
MywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2lu
ZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAg
ICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRo
ZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4
MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgot
ICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lv
bgotICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwg
eDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4Mjog
MTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0g
ICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24g
RDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5
MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBD
IChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAg
YSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxz
IGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxz
IG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2Vy
bmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1
bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5j
dGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1v
biBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFz
IHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgot
Ki8KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShm
bG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK0Zsb2F0UmVjdCBGRUNvbnZv
bHZlTWF0cml4OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChjaGFubmVs
IDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAgICAg
ICAgcmV0dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcykKK0ZpbHRlclJlc3VsdCogRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/
IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwr
KywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7
Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNl
dChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQot
Ci0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRl
IG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlm
Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMg
bm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQu
eSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAg
aW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0g
KG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0g
b2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhh
VmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7
Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAg
ICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQg
KyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkg
PSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlw
UmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwot
ICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0g
ICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAg
ICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtl
cm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5j
cmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0K
LQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9O
T05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAg
ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHgg
Pj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0
aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBl
bHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8
IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBw
YWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkg
Kz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAg
IH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAq
IDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsK
LSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3Jl
YXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMg
dGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNl
cnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAw
LCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9k
aXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAg
ICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBp
bnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsK
LSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwot
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0
YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhl
bEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJ
bmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAg
ICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsK
LSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8g
RGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAg
Ly8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdB
WVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291
cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVs
czxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVu
ZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRv
IHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldElu
dGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZl
QWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgx
LCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxz
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9w
cmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVs
QXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJh
eSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFs
aXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxs
eSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAt
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhl
aWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAg
fHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRp
bWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0
KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVj
dERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlv
bnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAv
IHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50
LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAq
IGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAo
aW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAg
ICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJp
Z2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3Rhcmdl
dE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdo
dCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20s
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3Rhcmdl
dE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAg
ICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCkBAIC00NTMsMTAgKzE0OCw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBF
ZGdlTW9kZVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNv
bnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbnZv
bHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZl
TWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwg
IlwiICIKICAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCkBAIC00
NjUsOSArMTU5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1v
ZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0
aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZl
QWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2
ZTFlNTAwNTRlMTNkYmEuLjFhNjk1YjRkOTIxZjI2ODY2ZjBkYTNkMTJiOWNmMmI2MGUzOTc0MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszOCw3IEBAIGVudW0gRWRnZU1vZGVU
eXBlIHsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYs
IGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBj
cmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlh
cywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3Qg
SW50U2l6ZSYpOwpAQCAtNjcsNDEgKzY1LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNl
cnZlQWxwaGEoYm9vbCk7CiAKIHByaXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3Rvcjxm
bG9hdD4ga2VybmVsTWF0cml4OwotICAgIH07Ci0KLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRl
ciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9v
bCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZv
bHZlTWF0cml4IjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHkpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJS
ZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLjU5NzlkMGZj
OWExMDlhMmU3NDY1OWNjOThhNGNjZWQ0MTBjNzU5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGln
aHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VD
b25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0
YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlm
ZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2Fs
ZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0
YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxV
bml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxV
bml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4u
OTYwMDYyMDQ5YTIyZmU1YTg1Y2JmZWJiMzQ5ZWNmMWFiZDQxNzk3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSwyMSArMjYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBM
aWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGlu
ZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZp
bHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdo
dFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9
Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAg
ICAKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkZFRGlmZnVzZUxpZ2h0aW5nIjsgfQorCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZjNTYz
ZmExLi5kODUyMDQxYzM4ODI5MDU4OWVmNzExM2Y5MmExYjU5YzJlNjcwZGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTMyICsyNSw1MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNl
bWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3Bs
YWNlbWVudE1hcCkKLSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQot
ICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxl
KHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9y
LCBzY2FsZSkpOwogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBt
X3NjYWxlKHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50
TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsK
IH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feENoYW5u
ZWxTZWxlY3RvciA9PSB4Q2hhbm5lbFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3hDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVs
U2VsZWN0b3IpICE9IG1feENoYW5uZWxTZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hhbm5lbFNl
bGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0g
eUNoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3lDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IpICE9IG1feUNoYW5uZWxT
ZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2Nh
bGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikKLXsKLSAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycg
cHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKLSAgICAvLyBh
bmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3Vy
Y2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCi0gICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4K
LSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0
IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6
c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsK
LX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5z
Zm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYg
KGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAh
PSBtX3NjYWxlOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorRmxvYXRSZWN0IEZF
RGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGNvbnN0
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhl
bCArIHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKGlucHV0cyk7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgp
ID49IDIpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAg
ICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVu
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+bGVuZ3Ro
KCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKLQotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQo
KSAqIDAuNTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGluMiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAgICAgCi0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0g
eENoYW5uZWxJbmRleCgpOwotICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVs
SW5kZXgoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgaW50IHJvd0J5dGVzID0gcGFp
bnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5
dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3Rp
bmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0
aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChz
cmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kg
Pj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUp
CkBAIC0xNzQsMTcgKzk2LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
Y2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxT
ZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVm
ZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3
M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLjM5Y2U1NDljZjE5ZWFjMGRhNTI4ZjYyYmYz
MDI0ODNkNjE1MTBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNz
IEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4g
Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2Vs
ZWN0b3I7IH0KICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSk7CkBAIC00OCwyMiArNDcsMjEgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50
TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1l
bnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKworICAgIGludCB4Q2hhbm5l
bEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGlu
dCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsg
fQogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RURpc3BsYWNlbWVudE1hcCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZp
bHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1f
eUNoYW5uZWxTZWxlY3RvcjsKQEAgLTcxLDQgKzY5LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDVjZTdiZTNhNDcxYjQ3
YjhkZDU0MjZkOTY1YmJmZTc4OWY2YmJkZDguLjgwODc1Yjg4YzQyNzNhNjJhOGMwOTBiZWQ1ZTE4
NzE3NzhlNDAxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOTggKzI0LDQ4IEBACiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBm
aWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwg
bV9zdGRZKHN0ZFkpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLSAgICAsIG1fc2hh
ZG93Q29sb3Ioc2hhZG93Q29sb3IpCi0gICAgLCBtX3NoYWRvd09wYWNpdHkoc2hhZG93T3BhY2l0
eSkKLXsKLX0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNo
YWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgs
IGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIGNvbG9yLCBvcGFjaXR5KSk7CiB9
CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGRURy
b3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKKyAgICA6IG1fc3Rk
WChzdGRYKQorICAgICwgbV9zdGRZKHN0ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShk
eSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAg
ICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3
aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNv
bHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAw
LjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hh
ZG93OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0
aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5
KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0g
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dD
b2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxB
cnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24p
OworICAgIHJldHVybiB7IH07CisvLyAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OworLy8KKy8vICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOworLy8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwor
Ly8gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwor
Ly8KKy8vICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLwor
Ly8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BT
aGFkb3c6Om91dHNldHMoKSBjb25zdApAQCAtMTI4LDE0ICs3OSwyMyBAQCBJbnRPdXRzZXRzIEZF
RHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVE
cm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNo
YWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNo
YWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAi
LCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5
IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFj
aXR5IDw8ICJdXG4iOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9w
U2hhZG93IjsKKyAgICB0cyAgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWQorICAgICAgICA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8
PCBtX2R5CisgICAgICAgIDw8ICJcIiBjb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQobV9jb2xvcikgPDwiXCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2Vl
ZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+
IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0
IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0
ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpAQCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBm
bG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9p
ZCBzZXRjQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0g
ICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsg
fQotICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hh
ZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhG
aWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7
CiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29s
b3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dPcGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAg
ZmxvYXQgbV9vcGFjaXR5OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKaW5kZXggYjQyMzU1MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOWJjYTJk
NWRjYTQ5NDUyZjdlNGM4YzhiZDc5OGMwOTJkZGM5MjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsyNSw1NSBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxv
b2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29k
PiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fb3BhY2l0eShvcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2Qo
ZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAotYm9vbCBGRUZsb29kOjpz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK2Jvb2wgRkVGbG9vZDo6c2V0Q29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCisg
ICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zs
b29kQ29sb3IgPSBjb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkK
K2Jvb2wgRkVGbG9vZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX2Zs
b29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkpCisgICAgaWYgKG1fb3BhY2l0eSA9PSBvcGFjaXR5
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNp
dHk7CisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7Cit9
CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIGNvbG9yKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0
cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAgICA8PCAi
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICB0cyAg
PDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CisgICAgdHMgIDw8ICIgY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKCkpIDw8ICJcIiAiCisgICAgICAgIDw8
ICJvcGFjaXR5PVwiIiA8PCBvcGFjaXR5KCkgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uNzk4
NmQ0NjY4NGJmNThhYmNiY2U4NGNmYjY2YTIxMjI4MDhhZTc5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDIgKzIzLDM1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAK
LSAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xv
cjsgfQotICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOworICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBib29sIHNldENvbG9y
KGNvbnN0IENvbG9yJik7CiAKLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2Zsb29kT3BhY2l0eTsgfQotICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKLQot
I2lmICFVU0UoQ0cpCi0gICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVy
cG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJy
ZW50Ci0gICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3It
aW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogcHJpdmF0
ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRmxv
b2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xvciBt
X2Zsb29kQ29sb3I7Ci0gICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CisgICAgQ29sb3IgbV9jb2xv
cjsKKyAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4
YWIzNjM5NDM2NS4uYzcwNTk0MDk3NGViYTljNjA3NWM1OWQyMGNlZmM1MDI5NDc0Njc4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsNDUwICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2Vy
bmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlv
biwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1Jl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMu
Ci0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAo
IShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7
Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAg
ICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1
c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNz
aWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQot
ICAgICwgbV9zdGRYKHgpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogbV9zdGRYKHgpCiAgICAgLCBt
X3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9
IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkK
LXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9k
ZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVk
IGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVM
aW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhL
ZXJuZWxTaXplKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5
LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0g
ICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBj
b25zdCBpbnQgY2hhbm5lbCA9IDM7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhl
aWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAg
IGludCBzdW0gPSAwOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJb
Y2hhbm5lbF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAg
ICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAg
ICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAg
ICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNl
dCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3Jj
UHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50
IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGlu
dCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQot
ewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0
V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhh
T25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBz
dHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxT
aXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEo
KTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAv
LyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSAr
IE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAg
PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZm
ZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAg
ICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAg
ICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxs
IHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICog
c3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEg
KyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBk
eExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0
clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUu
Ci0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUn
LgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBs
aW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0
YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAv
LyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7
IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZv
ciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBl
ZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQot
ICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBk
eCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
RyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAg
ICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
LT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFs
dWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07
Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
LT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICog
c3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0KQotewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVm
ZmVyLmRhdGEoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8
PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCBy
YWRpdXMuCi0gICAgaWYgKGtlcm5lbFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUg
Kz0gMTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5C
dWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVm
ZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVp
Z2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRl
OwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVm
ZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGgg
PSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0
OwotICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVy
bWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rp
b24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8g
dGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0g
ICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZm
ZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5l
bFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsK
LSAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lk
KiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENv
bnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVm
ZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7
Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVj
dEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2
SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1w
QnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBp
b0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlv
QnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3Ry
aWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwot
ICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRB
cnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVs
UG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAg
ICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgs
IGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1v
ZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwg
a2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24o
aSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAg
Ym94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwg
ZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vs
c2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6
ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAg
ICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAg
ICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVy
Lmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVm
ZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAg
fQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxB
cnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXpl
JiBwYWludFNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXpl
WSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1P
REVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0
YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5l
bFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFt
ZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRl
ci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFt
ZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNz
aWFuS2VybmVsRmFjdG9yKCkKIHsKLSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5s
aW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBr
ZXJuZWxTaXplWSAqIDAuNWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRT
aXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNp
b24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKLQotICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0
aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2Jz
IHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJs
b2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBi
eSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBi
bG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAg
ICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBq
b2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0g
IWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJl
bnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdo
dDsKLSAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZ
IDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1Np
emUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpv
YikgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVy
OwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFy
cmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVy
LmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRv
Z2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7
Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAg
ICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAg
IHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAg
ICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1Bp
eGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZv
cm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYg
KiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6
ZShmbG9hdCB2YWx1ZSkKIHsKICAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBB
IGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0
IGltYWdlIGJ1dAogICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBt
dWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0
aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAq
IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGlu
dD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkp
OwogfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRp
b24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3
MCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAot
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihzdGREZXZpYXRpb24pKi8pOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQog
ewogICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24pOwogCkBAIC00OTYsNTYgKzgzLDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
IHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigp
LCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMg
b3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3Qu
Ci0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkK
KyAgICAgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZ
KDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVz
dGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERy
YXdpbmdSZWN0KGlucHV0cywgZHJhd2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKQEAgLTU1NCwxNCArMTA1LDIxIEBAIEludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0g
c3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRz
KCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdh
dXNzaWFuQmx1ciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
WCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQz
ZS4uOTRhMGY1M2QxOTk5ZWE4YWM2NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw1OSArMjMsNDAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwog
CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHgpIHsgbV9zdGRYID0geDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7
CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAg
ICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQot
ICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBG
RUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAg
RkVHYXVzc2lhbkJsdXIoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7
IH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5C
bHVyKiBmaWx0ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFy
cmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQg
a2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxv
YXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjkwZThiOWZhNDIxMGRkNzYyYTRlNGQ5
MWRlMjUwMzQ4ODBmZDJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIs
IExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2Us
IFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IG1fY29sb3IoY29sb3IpCiAg
ICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFu
dChkaWZmdXNlQ29uc3RhbnQpCiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5p
dExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiB7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZh
Y2VTY2FsZSkKLXsKLSAgICBpZiAobV9zdXJmYWNlU2NhbGUgPT0gc3VyZmFjZVNjYWxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fbGlnaHRpbmdDb2xvciA9PSBsaWdodGlu
Z0NvbG9yKQorICAgIGlmIChtX2NvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVu
aXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17
Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0
TGVuZ3RoWTsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1
ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7Ci0KLS8vIFRoZXNlIGZhY3RvcnMg
YW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLXN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKLQotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgLTIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdo
dCwKLSAgICAgICAgLTIgKiBjZW50ZXIgLSByaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdo
dAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQsCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciAtIHJpZ2h0ICsgYm90dG9tTGVmdCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRv
bUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0
b20sCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciArIGJvdHRvbUxlZnQgKyAyICogYm90dG9t
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjps
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJp
Z2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAg
ICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAg
fTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
ck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0Ci17Ci0g
ICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldDsKLSAgICAKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSk7
Ci0KLSAgICBpbnQgbGVmdCA9IGFscGhhV2luZG93LmxlZnQoKTsKLSAgICBpbnQgdG9wTGVmdCA9
IGFscGhhV2luZG93LnRvcExlZnQoKTsKLSAgICBpbnQgdG9wID0gYWxwaGFXaW5kb3cudG9wKCk7
Ci0KLSAgICBpbnQgYm90dG9tTGVmdCA9IGFscGhhV2luZG93LmJvdHRvbUxlZnQoKTsKLSAgICBp
bnQgYm90dG9tID0gYWxwaGFXaW5kb3cuYm90dG9tKCk7Ci0KLSAgICAvLyBUaGUgYWxwaGFXaW5k
b3cgaGFzIGJlZW4gc2hpZnRlZCwgYW5kIGhlcmUgd2UgZmlsbCBpbiB0aGUgcmlnaHQgY29sdW1u
LgotICAgIGFscGhhV2luZG93LmFscGhhWzBdWzJdID0gdG9wUmlnaHQ7Ci0gICAgYWxwaGFXaW5k
b3cuYWxwaGFbMV1bMl0gPSByaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsyXVsyXSA9IGJv
dHRvbVJpZ2h0OwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFscGhhV2luZG93IGlzIHdv
cmtpbmcgd2l0aCBzb21lIHNwb3QtY2hlY2tzLgotICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3BM
ZWZ0KCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wTGVmdAotICAgIEFT
U0VSVChhbHBoYVdpbmRvdy50b3AoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcAotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJp
Z2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtdG9wTGVmdCAtIDIgKiB0
b3AgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAg
ICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAy
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtdG9w
TGVmdCAtIDIgKiB0b3AgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50
ZXIgKyAyICogcmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogY2VudGVy
ICsgcmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQogewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsK
LSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJpZ2h0LAotICAg
ICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgLSB0b3BSaWdodCArIGxlZnQgKyAyICogY2VudGVyICsg
cmlnaHQKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3VyZmFjZVNjYWxlLCBz
dXJmYWNlU2NhbGUpICE9IG1fc3VyZmFjZVNjYWxlOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
Citib29sIEZFTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyLAot
ICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgKyBsZWZ0ICsgMiAqIGNlbnRlcgotICAgIH07Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaWZmdXNlQ29uc3RhbnQsIGRpZmZ1c2VDb25zdGFu
dCkgIT0gbV9kaWZmdXNlQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwg
ZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK2Jvb2wgRkVMaWdodGluZzo6
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewotICAgIHNldFBp
eGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZh
Y3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckNvbnN0YW50KSAhPSBzcGVjdWxhckNvbnN0YW50OwogfQogCi12b2lkIEZF
TGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwy
RFZlY3RvciwgZmxvYXQgYWxwaGEpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKIHsKLSAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRh
LnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGln
aHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50
aW5nRGF0YSwgeCwgeSwgeik7Ci0KLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgIGlmIChu
b3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewotICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgw
LCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xp
Z2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3
YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Ziho
YWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVu
dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFs
VmVjdG9yID0gewotICAgICAgICAgICAgZmFjdG9yWCAqIG5vcm1hbDJEVmVjdG9yLndpZHRoKCkg
KiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIGZhY3RvclkgKiBub3JtYWwyRFZlY3Rv
ci5oZWlnaHQoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgMS4wZgotICAgICAg
ICB9OwotICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVu
Z3RoKCk7Ci0KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1
c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndh
eVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0g
MSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICog
KG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhh
bGZ3YXlWZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7Ci0gICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKLQotICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAotICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVj
dG9yLnkoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3Ry
ZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQotICAgIH07Ci0g
ICAgCi0gICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9u
ZW50KSAhPSBtX3NwZWN1bGFyRXhwb25lbnQ7CiB9CiAKLS8vIFRoaXMgYXBwZWFycyB0byByZWFk
IGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVh
ZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4K
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAg
QVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHBy
ZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cg
aXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3
byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVy
IGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxl
ZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhh
V2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJl
dmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5k
b3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0
Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShy
b3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9t
UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQg
KyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgYWxw
aGFXaW5kb3cuc2hpZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRh
LmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fa2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYKSAhPSBtX2tlcm5lbFVuaXRM
ZW5ndGhYOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQotewotICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lIC0gMTsKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcm93c1RvUHJv
Y2VzcyAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2Vzcykg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2Jz
Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAg
IGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2Ig
PiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInlTdGVwIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4
dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAg
ICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBqb2I7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3MgJSBqb2I7Ci0KLSAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAxOwotICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7
IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKLSAgICAgICAgICAgICAgICB5
U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsgMSA6IHlTdGVwOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVu
aXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGlu
Z0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0Rh
dGEpOwotI2VuZGlmCisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3Ro
WSwga2VybmVsVW5pdExlbmd0aFkpICE9IG1fa2VybmVsVW5pdExlbmd0aFk7CiB9CiAKLWJvb2wg
RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAogewotICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBp
ZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNw
ZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5z
LgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0g
MTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JDb21w
b25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7Ci0KLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGlu
Z0RhdGEpOwotCi0gICAgLy8gVG9wIGxlZnQuCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcExlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBUb3Agcmln
aHQuCi0gICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9w
UmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQg
PSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90
dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZz
ZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6
ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERl
Y3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNG
YWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIGlmICh3
aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cuCi0gICAgICAgIG9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYy
LCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBCb3R0b20gcm93Lgot
ICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRh
LmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoaGVpZ2h0ID49IDMp
IHsKLSAgICAgICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIFJpZ2h0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0
ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwg
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1h
bChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykg
ewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0gICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0
YSwgcGFpbnRpbmdEYXRhKTsKLSAgICB9Ci0KLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVs
T2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAg
ICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOwotICAgICAgICAgICAgdWludDhf
dCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTMg
PSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Ci0gICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8g
c2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsg
MywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW9t
ZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
LSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJv
d3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlv
dXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxl
LgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGlt
cGxlbWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1
dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRp
bmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDdmYjU2MDlkYmI1N2I3NjIwMWYzMzAzMzcwNTJlNDFhYzI1MDNjZjkuLmI4MjRjNDM2
N2QwMzkxMTllZWMyM2U2ZmVlYzI5ODdiYmIyNmIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDI3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRp
bmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0K
ICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZm
dXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25z
dGFudChmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQp
OwpAQCAtNTQsMTE1ICs1NiwyNSBAQCBwdWJsaWM6CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0
aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAgYm9vbCBzZXRL
ZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CisgICAgY29uc3Qg
TGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0K
LSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAg
ICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93
IHsKLSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRp
Y2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0
b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAg
ICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsx
XTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4
X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsx
XSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAg
ICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhf
dCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQot
ICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0g
PSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNo
aWZ0Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhp
cyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZTsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQg
d2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwot
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21S
b3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRv
bVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyog
ZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAg
IGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiop
OwotCi0gICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZl
Y3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9h
dCBhbHBoYSk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQ
YWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
Ci0KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVS
KEdDQ19DT01QQVRJQkxFKQotICAgIHN0YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxv
YXQgZXhwb25lbnQpOwotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLSNlbmRpZgot
Ci0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKKyAgICBGRUxpZ2h0
aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQg
bV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwog
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3Nv
dXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAw
MWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uYjRhZTY1MTU5NjE2NDg1NmJkODYz
YjNkZGEwNjQ2YjJlODFjODUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2Uo
RmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkK
K1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1
dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElu
cHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
KQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6
IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJP
ZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2ln
bmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7
CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBz
X2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30KKworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjph
cHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJP
ZkVmZmVjdElucHV0cyk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8g
aW5wdXRzU2l6ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAg
ICAgICBpbnB1dHMuYXBwZW5kKHN0YWNrLnRha2VMYXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJ
bWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1
cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIGlucHV0cywgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJl
YW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAg
IHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXpl
ID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0K
LSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1l
cmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNm
MThmMjYwNy4uZjNmNDVjMzY4YTNhYTMxZjM4NWQ2MmMwODQyYzYzZTY3YjVlOTRlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4
LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0
ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251
bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZl
Y3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdl
KHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlk
ZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzcz
YjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmYwYmM5ODEzMmY4ZDFkMzQyZmEzYWUwM2YxYTI2
NWE0MDIwNmViODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjY1ICsyNSw2MSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JD
b21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhv
bG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAg
LCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3Jl
YXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5
KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3Jw
aG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwg
ZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IG1fbW9ycGhvbG9neU9wZXJhdG9y
KG1vcnBob2xvZ3lPcGVyYXRvcikKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9y
YWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5
KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9n
eTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jv
b2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9y
IG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbW9ycGhvbG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3Bl
cmF0b3IpICE9IG1vcnBob2xvZ3lPcGVyYXRvcjsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKIHsKLSAgICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkg
IT0gbV9yYWRpdXNYOwogfQogCiBib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCBy
YWRpdXNZKQogewotICAgIGlmIChtX3JhZGl1c1kgPT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fcmFkaXVzWSA9IHJhZGl1c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lmlu
ZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRp
dXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50
ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5k
ZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4
KSAqIDQ7Ci19Ci0KLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9y
Q29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQ
YWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3Qg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKQotewotICAgIHJldHVybiBQ
YWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29t
cG9uZW50cykgfTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3Qg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4mIGIpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJu
IHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0g
PSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsg
cGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkg
PSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxB
cnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8
dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQot
Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11
bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3Rh
cnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsK
LSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJl
dHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVs
QXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJl
bXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFy
dCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBr
ZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBl
eHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5z
aXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwg
a2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0
cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5
cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVs
RXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0
dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7
Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNT
RVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBh
aW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWlu
dGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5y
YWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBj
b25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRp
dXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49
IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRy
ZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRp
dXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0g
ICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAg
ICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwot
Ci0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRo
ZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4K
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBl
eHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMg
ZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNY
KQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVs
QXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5
cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4
dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJh
eUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVs
VmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkp
LnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFk
aXVzWSwgcmFkaXVzWSkgIT0gbV9yYWRpdXNZOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJl
Y3QgRkVNb3JwaG9sb2d5OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFt
LT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJh
bS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7
CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwor
ICAgIGRyYXdpbmdSZWN0LmluZmxhdGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICBy
ZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAK
LXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQorRmlsdGVyUmVzdWx0KiBGRU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1
dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0
CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIg
b3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4K
LSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFp
bnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7
CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50
IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBw
YXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5n
RGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6
Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQg
KiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChv
cHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0
Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRv
IG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYg
KG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAi
am9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUg
c2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRv
dGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2Jz
V2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdo
dCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9
IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0g
MDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFy
YW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0u
ZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsK
LSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6
ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsK
LSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhy
ZWFkIG1vZGVsCi0gICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCku
Z2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFw
cGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJl
dHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBk
c3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQg
cmFkaXVzWSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBNb3JwaG9sb2d5T3BlcmF0b3ImIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAo
cmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5j
b3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQot
ewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZs
b29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChw
bGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdp
bmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJj
ZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJh
ZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndp
ZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVp
Z2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gs
IHJhZGl1c1kpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJy
YXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25Q
aXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdS
ZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhl
aWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1
c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5n
RGF0YSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAg
ICBicmVhazsKQEAgLTI5NywxNSArOTMsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0
aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0
b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1
cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAg
ICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZl
Y3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNm
MTRlZGYwNzVkZTM5YzVhMTEuLmExOTUwMTY5YTVkNWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBm
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTEgKzIzLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lP
cGVyYXRvciB7CiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZF
TU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0RJTEFURSA9IDIKQEAgLTM0LDEwICszNCwxMCBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRp
YyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhv
bG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3Jw
aG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9w
ZXJhdG9yOyB9CisgICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJh
dG9yKTsKIAogICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0K
ICAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwpAQCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9n
eShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVNb3JwaG9sb2d5IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVj
dCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFk
aXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAg
ICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAg
IGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAg
ICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0
YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5
cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1fbW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZs
b2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAw
MjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li43MWQ4NDA2NDM2MjYyZmU3
OTU2ODkzMjA3YWUzMzIxOTFmNzgwN2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcxICsyNSw0NSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCi0gICAgLCBtX2R4KGR4KQor
RkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IG1fZHgoZHgpCiAg
ICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6
OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9m
ZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9h
dFJlY3QgRkVPZmZzZXQ6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgbV9keCA9IGR4OworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1
dHNbMF0tPmRyYXdpbmdSZWN0KCk7CisgICAgZHJhd2luZ1JlY3QubW92ZSh7IG1fZHgsIG1fZHkg
fSk7CisgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogfQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeShm
bG9hdCBkeSkKK0ZpbHRlclJlc3VsdCogRkVPZmZzZXQ6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0
cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0g
ICAgbV9keSA9IGR5OwotfQotCi12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNv
bHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0g
ICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51
bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhh
SW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJl
dHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0
cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zm
c2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgoKSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwi
XVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAg
ICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFl
NWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmE5OGU0YTk5YzA1YjM3MWM1ZjRlNjBmYzNiZmJlNzU2MmJl
OTU3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2MCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkp
OworICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwog
CiAgICAgZmxvYXQgZHgoKSBjb25zdCB7IHJldHVybiBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChm
bG9hdCk7CisgICAgdm9pZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZs
b2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOwor
ICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2Rl
KERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwg
ZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25z
dCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVPZmZzZXQ6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9keDsKKyAgICBlbmNvZGVy
IDw8IG1fZHk7Cit9CiAKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxGRU9mZnNldD4+IEZFT2Zmc2V0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBkZWNvZGVyID4+IGR4OworICAgIGlmICghZHgp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAgIGlmICghZHkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVPZmZzZXQ6OmNyZWF0ZSgqZHgsICpkeSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApp
bmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi45OWFiOGRhNjRm
Y2Q1YTM2YjEyNjFmYTEyZjBkMWYwYThjMWRmMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNw
ZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3Vs
YXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAg
ICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBz
dXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5
cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFy
TGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGlu
Zyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkp
OwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJM
aWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3Bl
Y3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNl
KQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0
aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVNwZWN1
bGFyTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFy
Q29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0
TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5n
Ojp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdo
dGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQotewotICAg
IGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJF
eHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
dXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNw
ZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAg
PDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4i
OwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4
YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNiMjQ5NThhLi5jYWU1YjgyZmJlYmM1YWI2MzQz
NTY5MDVlOWJlN2U2ZjNmMDMyZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsy
OCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6
IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJM
aWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3Bl
Y3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVh
dGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAotICAgIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KLSAg
ICBib29sIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQotICAgIGJvb2wg
c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Citwcml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdo
dGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCi0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJGRVNwZWN1bGFyTGlnaHRpbmciOyB9CiAKLXBy
aXZhdGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRi
MmZjYWMyMGFkLi4xMzc5MmRkOGQwM2ZjMTliMmM2MzIxZTMxNjJmNzEzYTc3MTY3MzIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIx
LDgwICsyMiwzNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFVGlsZS5oIgog
Ci0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUg
IlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVUaWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0
ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpUaWxlKQorUmVmPEZFVGlsZT4g
RkVUaWxlOjpjcmVhdGUoKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsK
IH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJl
Y3QgRkVUaWxlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVUaWxlKGZpbHRlcikpOworICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXRzJyBzdWJyZWdp
b25zIGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmls
dGVyUmVzdWx0KiBGRVRpbGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1
ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUs
IGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAg
YXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZl
ciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWlu
QnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJl
c3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0
IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lv
biBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJh
Y2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgot
ICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQ
b2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9h
dFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0g
ICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlu
cHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAg
IHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2Fs
ZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0
aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBp
ZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0
aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29u
dGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2Nh
dGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZl
ciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJ
bWFnZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJ
bWFnZSkpOwotICAgIGlmICghdGlsZUltYWdlQ29weSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50
cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAtIG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAg
IGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25O
dWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmls
dGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJD
b250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51
bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
K1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJb
ZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotCisgICAgdHMgPDwgaW5kZW50IDw8ICJb
ZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFj
ZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjYxM2E1ODU2ZjVjOWIxOGRhZjc2MWNjZTc3OTQ4YWQ0
NmVhZTg2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVU
aWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBGRVRpbGUoRmlsdGVyJik7CisgICAgdXNp
bmcgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3Q7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJO
YW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVUaWxlOyB9CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0
ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ss
IEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFhOTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjgy
YmY4N2M1YTQxZGI0MzI5YjE2NDAzNTZjMTRjMzdkODUyNDY5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJl
bmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxv
a2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsMzEgKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJi
dWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVz
dWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKLSAgICByID0g
KGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0g
PSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNl
ZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4
Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEw
NDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3Jp
Z2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQw
OTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioq
MzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1
OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7
IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVm
PEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBu
dW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVy
YnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2Vl
ZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1
cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkKK0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNl
KFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisg
ICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgp
CiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3Rh
dmVzKG51bU9jdGF2ZXMpCkBAIC01OSw0MDUgKzQ2LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJi
dWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJl
cXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRj
aFRpbGVzKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIs
IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwg
c3RpdGNoVGlsZXMpKTsKLX0KLQogYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5j
ZVR5cGUgdHlwZSkKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZF
VHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0g
ICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV90eXBlLCB0eXBlKSAhPSBtX3R5
cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNl
RnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNlRnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5
WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJl
cXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jh
c2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkgIT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAot
Ym9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxvYXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNl
OjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9z
ZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5j
eVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VGcmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVy
YnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVtT2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1P
Y3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX251bU9j
dGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVs
ZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGls
ZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9
IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3Vs
YXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNpb24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBT
VkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0
ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIu
Ci1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAg
ICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3Jh
bmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBpZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJl
c3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNlZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0
dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0KLWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBv
bGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICog
KGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAg
Ly8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0g
MV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0
YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsK
LSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAg
cGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFk
aWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkg
ewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAg
ICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAg
Z3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
KHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXpl
KSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBz
X2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVu
dFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9
IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRp
ZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAv
PSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQg
aSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgewotICAgICAgICBpbnQgayA9IHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRh
LnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAgICAgIEFTU0VSVChqID49IDApOwotICAgICAg
ICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOwotICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgewotICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5l
bCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2No
YW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5l
bF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19i
bG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVs
ZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNo
VGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxl
U2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsK
LSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBX
aGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBh
ZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVv
dXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5j
eSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAg
ICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5
WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1u
ZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1
ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0g
ICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3Jm
KHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9h
dCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRp
bGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhp
Z2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZ
ID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5
WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwot
ICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgp
OwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0
aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1
ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0
YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNoRGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtl
biAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5o
dG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVy
YnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3Qg
U3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNv
bnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRpb24gewotICAgICAgICBpbnQgaW5kZXg7IC8v
IGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4
MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAs
IHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAgICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29t
cG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47
Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4
MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQgLSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9h
dCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRl
eCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwotICAgICAgICAgICAgbmV4dEluZGV4ID0g
aW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBT
aXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5u
V3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAg
ICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAgICAgIGluZGV4IC09
IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChieDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkK
LSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAg
ICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAgICAgIG5leHRJbmRleCAt
PSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5v
aXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgp
KTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGlu
Z2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3Rp
dGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFwWCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2go
c3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4
MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0gICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5
MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5l
eHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7
Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0
dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAg
ICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgu
aW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VT
ZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQotICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUo
cngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9
IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2
ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50
IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQot
ICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5k
ZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5u
ZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxv
YXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxv
YXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwot
Ci0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGlu
dCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBu
b2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOwotICAgICAgICAvLyBx
ID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICog
cVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwot
ICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5m
cmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAg
ZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIw
MSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07Ci0gICAgICAgIGludCBiMDEgPSBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwot
ICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25D
b2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKLSAgICAgICAg
cSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9p
c2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAg
ICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKLSAgICAgICAgaW50IGIx
MSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNl
WS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAt
IDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAg
cmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1
cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwoMCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5l
bCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDIpLAotICAgICAgICBub2lzZUZvckNoYW5u
ZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29s
b3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNS
R0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0
aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21w
b25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykK
LXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0
PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpj
bGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSks
IDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50Pihm
bG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1
KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0
YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1Db2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNl
ZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBwYWludGluZ0Rh
dGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5
WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2
ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJi
dWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3Rvcikg
LyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJz
KCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZlY3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAq
IDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAg
ICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAg
ICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBi
ZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAotICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFm
dGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBz
dGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAq
IHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0
YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNo
RGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBU
aGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAg
Ly8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0g
ICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVm
ICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVu
Y2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVk
KSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
U3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wg
RkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaFRpbGVzKQogewotICAgIEFT
U0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1
dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZ
KTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24u
d2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZp
bHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5z
Zm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAg
ICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0
ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24u
d2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwot
ICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQ
b2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwg
NCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVs
ICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0
Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3RpdGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIHBh
cmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBh
cmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVy
cy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJp
bWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91
dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVl
bmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAg
U3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZy
ZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAg
ICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUu
YXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBt
YXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBt
YXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygm
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVt
YmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0
byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVt
Sm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNp
emVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9i
c1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8g
bnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBu
dW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAg
IEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkp
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
LnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9
IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAg
ICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0p
KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBw
YWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIHJldHVybiBh
cHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00
NzYsMTAgKzEwNSw5IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVh
bSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVR1
cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVHVyYnVsZW5j
ZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0eXBlKCkgPDwgIlwiICIKICAgICAg
ICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJh
c2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8
ICJcIiAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2Qz
Y2NlY2I1Y2ZiLi44ZjcxMmZlZTUzYmMwYTY2MjIyZGNkZDVlMDQwYjcwYzMyZDU2ZDRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3Zh
biA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JD
b21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNyArMzYsNyBAQCBlbnVtIGNsYXNz
IFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0
ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAg
ICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9h
dCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAogICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUp
OwpAQCAtNTksNjggKzU3LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJv
b2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7
Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDAp
OyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVj
dCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQs
IGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0
IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAg
ICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAgICAgICAgICAsIGJhc2VGcmVx
dWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNl
RnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwot
ICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAg
ICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50
U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0g
ZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRy
YWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBN
aW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAg
IGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4K
LSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25Q
YXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4
Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5n
RGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZ
OwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lv
bldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRl
ciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworICAg
IEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0
IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hU
aWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBh
aW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRp
bGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29u
c3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5n
RGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBv
aW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWlu
dGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAg
RmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3Rh
dGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7CisgICAgYm9vbCBhcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAg
ICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwpAQCAtMTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyMmM4NjA4NGQx
NWYyNDA5NWU0OTg1NGZmZDkzZjcwNTk5YWYwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5
cGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fdHlwZSh0
eXBlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4g
RmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0
b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91dHB1dChXVEZNb3ZlKGdlb21ldHJ5KSwgbV9y
ZW5kZXJpbmdNb2RlKTsKKworICAgIGF1dG8gcmVzdWx0ID0gYXBwbHkob3V0cHV0LCBzdGFjaywg
c291cmNlSW1hZ2UpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIHJldHVybiB7IHJlc3Vs
dC0+aW1hZ2VCdWZmZXIoKSwgcmVzdWx0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkgfTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5
YzBjZTI2MTEwYmMxZi4uYjQ0MWY2ZTgxZDMwNjk2MDc2YWZjMGNmNmIxY2EzZTMyZmE1OWViMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMSw0MiBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmls
dGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJl
bmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZl
Y3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZp
bHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJz
b2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29s
dXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUo
ZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0Owor
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeyBDU1MsIFNWRyB9OwogCi0gICAgdm9pZCBz
ZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3Vy
Y2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXpl
IGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0K
LSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNv
bHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGZs
b2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZv
aWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9h
dFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZp
bHRlckdlb21ldHJ5PiYmKSBjb25zdDsKIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJz
b2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Citw
cm90ZWN0ZWQ6CisgICAgRmlsdGVyKFJlbmRlcmluZ01vZGUsIFR5cGUpOwogCi0gICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9
Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkg
eyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CisgICAgdmlydHVhbCBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGlz
U1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXND
U1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFJlbmRlcmluZ01vZGUgbV9y
ZW5kZXJpbmdNb2RlOworICAgIFR5cGUgbV90eXBlOworfTsKIAotICAgIHZpcnR1YWwgRmxvYXRT
aXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1
cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBm
aWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVn
aW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLXBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNv
bHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQot
ICAgIHsKLSAgICB9CituYW1lc3BhY2UgV1RGIHsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1h
Z2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlv
bjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJp
bmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsK
LSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFs
dWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlcjo6VHlwZTo6Q1NTLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6OlR5cGU6OlNWRworICAg
ID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2Ri
MTA4Li5mY2E4NDZkZjE1OGUzZTZhOTNjMGQwNmQ1YjNhMzliYzNkZjU5MDkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDM3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFD
Q0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRl
ckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBt
X2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewot
fQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0
ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRF
ZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQg
RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNW
RyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlm
IChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0
KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0
KSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBp
bnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7
CiB9CiAKLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAorRmlsdGVyUmVzdWx0KiBGaWx0
ZXJFZmZlY3Q6OmFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiBvdXRwdXQsIGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7
Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQs
IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9u
KTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlv
bigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2ludDsKLX0KLQotSW50UmVjdCBGaWx0ZXJFZmZl
Y3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZl
Y3RSZWN0KSBjb25zdAotewotICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50
UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlv
bigpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Jl
c3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKLQotICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUo
LW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybS5t
YXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNl
LCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lv
biBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVjdCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2ln
bmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAg
ICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5w
dXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdp
b24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRl
clJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAvLyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUgdGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1
YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0gICAgaWYgKGZpbHRlckVmZmVjdFR5cGUoKSA9
PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJv
dW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WChib3Vu
ZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91
bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0
V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAgICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJy
ZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsK
LSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7
Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8g
U2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGlu
ZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRV
bmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBD
bGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24uCi0gICAgYXV0byBh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAg
IGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOwotICAg
IGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7
Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4g
c3VicmVnaW9uOwotfQotCi1GaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3Qo
dW5zaWduZWQgbnVtYmVyKSBjb25zdAotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3RzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5w
dXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0
RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVm
ZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAg
dW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCog
aW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwotICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwg
YWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQot
dW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QK
LXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0
dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVmZmVjdHMpOwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6YXBwbHkoKQotewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
bV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAg
ICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAv
LyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhlIGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3Bh
Y2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQot
ICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFj
ZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RC
b3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29s
dXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fi
c29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVj
dCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxu
ICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKSk7Cisg
ICAgYXV0byBkcmF3aW5nUmVjdCA9IHRoaXMtPmRyYXdpbmdSZWN0KGlucHV0cywgb3V0cHV0Lmdl
b21ldHJ5KCkpOwogCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0g
ICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7
Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlv
bnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
Ci17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVy
IGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJh
eSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4
ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBp
bWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVy
IHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0
aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxB
cnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERh
dGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAgICAg
ICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgxNng0
X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0
ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVu
UGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5x
X3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAg
ICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJd
LCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEs
IHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9
IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5n
dGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlM
ZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFs
cGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGls
ZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUg
aW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAg
ICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4
ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0g
YTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIEluY3Jl
bWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQotewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBu
dWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0g
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQg
RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFs
bCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8v
IGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0
YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAg
IHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0
KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1
bHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFt
X2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJl
Y3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
ZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJl
Y3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0
IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xv
clNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNj
YWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2Vk
QXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNo
ZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICBhdXRvIHJlc3VsdCA9IG91dHB1dC5jcmVh
dGVGaWx0ZXJSZXN1bHQoZHJhd2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBw
aXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hl
Y2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3Qs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAg
IEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNp
emUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5
ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEp
OwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29w
eVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAg
IHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0
ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2Nh
bGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFj
aywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVk
UmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFp
bnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBk
ZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3Qg
ZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5t
YXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50
U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhPcmlnaW4gPSBzY2Fs
ZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewot
ICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKKyNpZiBVU0Uo
Q09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBpZiAoYXBwbHlDb3JlSW1hZ2UoaW5wdXRzLCBz
b3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYo
KTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVu
ZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGlu
dCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlP
cmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxl
ZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQot
ICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUg
PSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNj
YWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0
aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAq
IDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5
T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAg
d2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVs
LCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGlu
YXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0g
ICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShB
Q0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsK
LQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5
dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihz
b3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRo
ID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0
KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNl
Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAg
ICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEo
KSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0
aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0g
ICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBh
bHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkg
KiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsK
LSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRp
cGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVu
cHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0j
ZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7
Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5h
cmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0g
ZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsK
LSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxw
aGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8
aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFd
KSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0Nv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdl
QnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3Nh
cnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0
KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNj
YWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0g
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVy
Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2Zp
bHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBw
aXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1hdCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXIm
IGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1v
cmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXpl
IGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQot
ICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNl
IGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2Zp
bHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9y
U3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJz
aW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVy
IHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3Bh
Y2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVy
VG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRo
ZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5h
dGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0
ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsK
LX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAg
Ly8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShj
b2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVy
LT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAv
LyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAg
ICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29s
b3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFT
U0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3Vs
dENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0
Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNp
emUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVs
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5
SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9u
LCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNv
cHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBm
cm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7
Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVy
VG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNv
bG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0p
OwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlu
cHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAg
IGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAg
QVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwot
ICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNv
cHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgp
LCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBp
cyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25l
IHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAg
QVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNp
emUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3Jt
YXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Owot
fQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0
ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhp
cyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9y
ZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhl
bEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8v
IFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4g
ZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBj
b2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBp
bnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxz
Ci0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkg
IT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BB
UkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVTRShD
RykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFsbHku
Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlm
ICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JT
cGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlz
IHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5n
Ci0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11
bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29s
b3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNl
ID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6
bnVsbG9wdDsKICNlbmRpZgotfQogCi1UZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBz
dWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0
Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVudCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0
YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRhcmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYg
KHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewot
ICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2UiLCBtX2FscGhhSW1hZ2UpOwotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xvcnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNw
YWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVz
dWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgIHRzIDw8ICJcbiIgPDwgaW5kZW50OwotICAgIH0KLSAg
ICByZXR1cm4gdHM7Ci19CisgICAgaWYgKGFwcGx5U29mdHdhcmUoaW5wdXRzLCBzb3VyY2VJbWFn
ZSwgKnJlc3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
cikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUg
bW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwot
ICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZm
ZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRz
IDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IGJmYTg3N2NhYTNlNWY0MjEx
ZjczOWMxYmUzNzY3MDdkZjZlY2QyYTYuLmZiNWJlMWE5NDg1YmEwNWRiYzYwNzAwOGNiZmY4NTI0
NDQ1NmQyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjIsMzggKzIyLDE0IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRl
c3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwot
Ci10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9y
OwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3du
LAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJHZW9tZXRy
eTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0
PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGlj
OgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBCbGVuZCwKQEAgLTY3
LDcgKzQzLDYgQEAgcHVibGljOgogICAgICAgICBGbG9vZCwKICAgICAgICAgR2F1c3NpYW5CbHVy
LAogICAgICAgICBJbWFnZSwKLSAgICAgICAgTGlnaHRpbmcsCiAgICAgICAgIE1lcmdlLAogICAg
ICAgICBNb3JwaG9sb2d5LAogICAgICAgICBPZmZzZXQsCkBAIC03NywxODIgKzUyLDIyIEBAIHB1
YmxpYzoKICAgICAgICAgU291cmNlQWxwaGEsCiAgICAgICAgIFNvdXJjZUdyYXBoaWMKICAgICB9
OwotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgpOwotCi0gICAgdm9pZCBjbGVhclJlc3VsdCgp
OwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBs
aWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0g
ICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KLSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZm
ZWN0KHVuc2lnbmVkKSBjb25zdDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygp
IGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIHRv
dGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdDsKLSAgICAKLSAgICBpbmxpbmUgYm9vbCBo
YXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBw
bGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBk
b25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQK
LSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7
Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5wdXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIC8vIFNvbGlkIGJsYWNrIGltYWdl
IHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KLSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQotICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJv
b2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2UgPSBhbHBoYUltYWdlOyB9Ci0KLSAgICBJbnRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50UmVj
dDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1
dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9
Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZm
ZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1h
eEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAKLQotICAg
IHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBu
ZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRo
aXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIg
aW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMg
Y29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2
aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLQotICAgIHZpcnR1YWwgRmls
dGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29u
c3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0KLSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0
aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7Ci0KLSAg
ICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgU1ZHIHNwZWNpZmljIGFuZCB3aWxsIG1v
dmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgLy8gU2VlIGJ1ZyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2MTQuCi0gICAgYm9vbCBo
YXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgdm9pZCBzZXRIYXNYKGJvb2wgdmFs
dWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzWSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShib29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVl
OyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNXaWR0aDsgfQot
ICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0K
LQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KLSAg
ICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0K
LQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7
IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9
Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZm
ZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9h
dFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91
bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24o
Y29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPSByOyB9
Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9h
dFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBlIGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9Ci0KLSAgICBGaWx0ZXImIGZp
bHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0gICAgY29uc3QgRmlsdGVyJiBmaWx0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0gICAgYm9vbCBjbGlwc1RvQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9Ci0gICAgdm9pZCBzZXRDbGlwc1RvQm91bmRz
KGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRzID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29w
ZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xv
clNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNv
bG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwotICAgIAotICAgIHN0YXRp
YyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVl
cy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQo
dmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOwotICAgIAogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVm
ZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAg
IC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5
IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQg
ZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAv
LyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRp
dHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRp
cGxpZWRQaXhlbHMoKTsKLQotICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXBy
aXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQot
ICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0g
ICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVy
VG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVm
ZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhlbEJ1ZmZlciYpOwogICAgIAorcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0OwogCi0gICAgRmlsdGVy
JiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIElu
dFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXpl
IG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJy
ZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUg
cGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0Lgot
ICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lv
biBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNp
ZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lm
aWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOwotCi0gICAgLy8geCwg
eSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRl
ZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0
aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOwor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0ID0g
MDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29s
dXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0
ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJvb2wgbV9hbHBoYUltYWdlIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZh
bHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUg
cmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0
cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQotI2lmIEVOQUJMRShERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJT
UkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29s
b3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07CisjaWYgVVNFKENPUkVf
SU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3Bh
Y2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5
cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5UGxh
dGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZm
ZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUzNTY3ZmMzMWU1YjllOWE5ZWM2MDUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0q
IGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotCi0jaWYgVVNF
KENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShib29sIGFjY2Vs
ZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQot
ewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlmIChhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmlu
Z0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0
ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAgICBVTlVTRURfUEFSQU0obGFzdEVmZmVjdCk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotCi19IC8vIG5hbXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcxMzIyYjc1YTc1NzNlOWNjNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBt
ZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0q
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0q
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbHRl
ckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1
YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0
cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpID0gMDsKLSAgICAKLSAgICB2aXJ0
dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAgICAKLXByb3RlY3RlZDoK
LSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY2ZjFiMzNiYWVkN2Rm
MDhmMDQ1MmM2YzRhYjRhOTdjNWRjYzMwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOwor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3Mg
RmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVk
PEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24o
KSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0g
RmlsdGVyUmVwcmVzZW50YXRpb246OlRlc3RPdXRwdXQpIGNvbnN0ID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMyN2Nj
MmY0YjNlZjgxNDE3NjU0MWQ5M2NiNjE2MGNkMzc0ZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3Bw
CkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCkKKyAgICA6IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAsIG1fc291
cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKK3sKK30KKworRmxvYXRSZWN0IEZpbHRlckdl
b21ldHJ5OjptYXhEcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBG
bG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdAoreworICAgIHJldHVybiBkcmF3aW5nUmVjdDsK
Ky8vICAgICAgICBhdXRvIG1heERyYXdpbmdSZWN0ID0gZHJhd2luZ1JlY3Q7CisvLyAgICAgICAg
bWF4RHJhd2luZ1JlY3QuaW50ZXJzZWN0KG1heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpKTsK
Ky8vICAgICAgICByZXR1cm4gbWF4RHJhd2luZ1JlY3Q7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJH
ZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzKSBjb25zdAoreworICAgIGlmIChpbnB1dHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmlsdGVyUmVnaW9uKCk7CisKKyAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOworICAgIGZvciAoYXV0
byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0
aXZlU3VicmVnaW9uKCkpOworCisgICAgcmV0dXJuIHN1YnJlZ2lvbjsKK30KKworRmxvYXRSZWN0
IEZpbHRlckdlb21ldHJ5OjptYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHByaW1p
dGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgIHN1YnJlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyUmVn
aW9uKCkpOworICAgIHJldHVybiBzdWJyZWdpb247Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
Y29kZXI+IHZvaWQgRmlsdGVyR2VvbWV0cnk6OmVuY29kZShFbmNvZGVyJikgY29uc3QKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyR2VvbWV0cnk+PiBGaWx0ZXJHZW9tZXRyeTo6ZGVjb2RlKERlY29kZXImKQorewor
ICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0
cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yMzMzMzM4OWE2ZmZmZDQzMTZiOGFmODUyNDc0YWJiNmMwNGE3OWY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJG
aWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9t
ZXRyeSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFs
IH5GaWx0ZXJHZW9tZXRyeSgpID0gZGVmYXVsdDsKKworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIEZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsgfQorCisgICAg
dmlydHVhbCBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fi
c29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIHJlY3Q7IH0K
KworICAgIEZsb2F0UmVjdCBtYXhEcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWF4
UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25z
dDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+PiBkZWNvZGUoRGVjb2RlciYpOwor
Citwcm90ZWN0ZWQ6CisgICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworICAgIEZsb2F0UmVj
dCBtX3NvdXJjZUltYWdlUmVjdDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNkNzdlYTVmMDUxZTg0NWE5MzFlYmFjMmJhZmQ5
MWY5YjM2YTZjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5
PiYmIGdlb21ldHJ5LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBtX2dlb21l
dHJ5KFdURk1vdmUoZ2VvbWV0cnkpKQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01v
ZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmls
dGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZSgqbV9n
ZW9tZXRyeSwgZHJhd2luZ1JlY3QsIG1fcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZThj
ZmYxNzNiMDRlOTkzOTJhYjI3ZTE0MjJhY2I0YmY1MjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJH
ZW9tZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsKK2NsYXNzIEZpbHRlckZ1bmN0aW9uOworCitj
bGFzcyBGaWx0ZXJPdXRwdXQgeworcHVibGljOgorICAgIHVzaW5nIFJlc3VsdHMgPSBIYXNoTWFw
PFJlZjxjb25zdCBGaWx0ZXJGdW5jdGlvbj4sIFJlZjxGaWx0ZXJSZXN1bHQ+PjsKKworICAgIEZp
bHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYsIFJlbmRlcmluZ01v
ZGUpOworCisgICAgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KCkgeyByZXR1cm4gKm1fZ2VvbWV0
cnk7IH0KKyAgICBSZXN1bHRzJiByZXN1bHRzKCkgeyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdN
b2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29u
c3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJp
dmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cisg
ICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMDNhNWFiNzRjMDk0MGVmOGFhZTJmOWNlZTliNzVlMmYxZDA2NWFlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZWZlcmVuY2UuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlcjsKKwordXNpbmcgRmlsdGVyUmVmZXJlbmNlID0gUmVmPEZpbHRlcj47CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZGJmZjdkODA0N2NlZjllZjYzYTM2ZWNjMzVlNWU5YjIwMTFjZWU3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJSZXByZXNlbnRhdGlvbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitlbnVtIGNsYXNzIEZpbHRlclJlcHJlc2VudGF0aW9uIDogdWludDhfdCB7CisgICAg
VGVzdE91dHB1dCwKKyAgICBEZWJ1Z2dpbmcKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWRlMjJlZGI5NzViMGFiMDBmZTlhZDYzMDQ4
N2Q4ZjZkNGUyZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCkBAIC0wLDAgKzEsMzk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21l
dHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2lu
Y2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKGRyYXdpbmdSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhnZW9tZXRyeS50cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChkcmF3aW5n
UmVjdCkuc2l6ZSgpKSk7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShnZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkpOworI2VuZGlmCisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVyUmVzdWx0U29mdHdhcmUoZ2VvbWV0cnksIGRyYXdpbmdS
ZWN0LCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKwor
RmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5
LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCisgICAgOiBtX2dlb21ldHJ5KGdlb21ldHJ5KQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3
aW5nUmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9y
ZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9y
U3BhY2UpCit7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJSZXN1bHQ6OmFic29sdXRlRHJhd2luZ1Jl
Y3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2dlb21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVS
ZWN0KG1fZHJhd2luZ1JlY3QpOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxF
UkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsK
KyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9
IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNl
LmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlu
cHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwor
ICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAg
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29u
c3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3Rp
bmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAg
ICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwor
ICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5w
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNl
bHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsK
KyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFy
ZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50
ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQp
IHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAo
YWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVybiBhbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3Vu
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9
CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1
ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9Owor
ICAgIGF1dG8gbG9naWNhbFNpemUgPSBhYnNvbHV0ZURyYXdpbmdSZWN0KCkuc2l6ZSgpOworCisg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAg
ICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IElu
dFBvaW50KCksIEludFNpemUobG9naWNhbFNpemUpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxC
dWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzY2FsZWRTaXplKGxvZ2lj
YWxTaXplKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2Fs
ZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXpl
KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkpCisgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBw
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAg
ICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEo
KSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisK
K1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJ
bnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFy
ZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxv
d2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJl
YSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JT
cGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlclJlc3VsdDo6
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9m
IGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0
cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0
aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBp
eGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFj
ZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5v
dCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0
ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2Nh
bGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXpl
KCkpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYg
bm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54
KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5h
dGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBu
b3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkg
PD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0
LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwgMCkgeworICAgICAg
ICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50
IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6
ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAg
ICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOworICAgIGludCB5RGVzdCA9IDA7CisgICAg
aWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlP
cmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAg
IGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4p
ICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAq
IDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0
OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAo
KHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5
RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6
ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAg
ICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAgICAgICsreU9yaWdpbjsK
KyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0
Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0
ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXpl
IENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJ
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5z
IGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVy
CisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9y
bWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVy
dGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZm
ZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJ
bnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNj
YWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBh
biBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIs
IHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIs
IGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6
OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIGF1dG8q
IHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxC
dWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICAgICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICBJbnRS
ZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3Qo
KS5zaXplKCkpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZm
ZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCBy
ZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNv
bnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBw
aXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlm
IChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBp
eGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUlt
YWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1Jl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxC
dWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlclJl
c3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBv
cGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhh
dmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0
YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VB
cnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhl
bCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0
KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlM
ZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsg
KHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8v
IEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNp
eHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVlblBp
eGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVs
cy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAg
c2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4
dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0
ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGls
ZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9
IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3Ro
IC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBh
bmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0t
bnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEg
cGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8g
Q2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxv
Y2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Cisg
ICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQg
Zm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJS
ZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1
c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNl
CisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3Nhcnkg
SW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFu
c2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1
ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UsIGNvbG9yU3BhY2UpOworCisg
ICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0g
c3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVz
dWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJl
c3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1YjlkYTkxNTIzYTY4OGM0MmY2M2QyNWRhN2MzOGM5Y2UwMzMz
M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQg
OiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0
KCkgPSBkZWZhdWx0OworICAgIAorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd2luZ1JlY3Q7IH0KKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVj
dCgpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgCisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgCisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAg
ICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0g
YWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1
ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
KCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsK
KyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29y
cmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJS
ZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSk7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQg
Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpv
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xv
clNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJy
ZWdpb247CisgICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9OworICAgIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBtX2dlb21ldHJ5OworCisgICAgRmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7Cisg
ICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9u
U2NhbGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cisg
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7
Cit9OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3Vs
dD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApp
bmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4
NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5j
cHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9p
bnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
ckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKQogewotICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBh
IHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9u
IGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNl
VG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBa
LCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRp
cmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1h
cFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBt
X3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAg
ICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngo
KSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291
cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXgg
NzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNhMy4uMWUwNjlmOTI2YTgwM2Zj
YzJjMTQ2OTZjZmFlNmIyNTUzNTEwODlkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE5ICsyMSwxNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4g
U291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3Vy
Y2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U291cmNlQWxwaGEoKSk7CiB9CiAKIGNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZl
Y3ROYW1lKCkKQEAgLTQxLDM5ICszOSwyMSBAQCBjb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBo
YTo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3Vy
Y2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmlsdGVyUmVzdWx0KiBTb3Vy
Y2VBbHBoYTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVm
ZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci19Ci0KLXZvaWQgU291cmNlQWxwaGE6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAg
ICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBp
biA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBp
bnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVy
KQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBD
b21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZv
cm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBo
YTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNv
dXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6
IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQot
ewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQy
ZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uY2NkMWRiZjRmZWVjNTBlNWRhN2Y5OTUxZThhN2Iz
ZGM2NTNhNmIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBj
cmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRl
KCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRl
ckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZp
bHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIHVzaW5nIEZpbHRlckVmZmVjdDo6Rmls
dGVyRWZmZWN0OwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRl
clJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4
IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMxMTA3ZDc4MzkyZTkuLjRlMTdkZWZlODQyYjBi
ZjlhZDJjODExNTcyNTk1ZDYyZTE4MTVhOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTggKzIxLDE2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0
cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBo
aWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMo
ZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0K
IAogY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwy
NyArMzksMjAgQEAgY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgp
CiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2lu
Z1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0g
ICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBw
YWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIu
ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJ
bWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFwaGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91
dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25z
dAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJj
ZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpz
b3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IH0sIHNvdXJjZUltYWdlKTsKIH0KIAotVGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdAorVGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi4xMzVj
N2MwNzQyNzdjMWM4YWY2MDU3YTljZjk1Mjk0OWIzNTU1Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApA
QCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxw
b3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsx
OSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBT
b3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRl
KEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAg
IFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIpCi0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0Nv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgIH0KKyAgICB1c2lu
ZyBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdDsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KIAotICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1
bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2Vi
Q29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVy
cmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFw
aGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1h
Z2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNl
R3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAK
aW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAy
MDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0
byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxv
YXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjpp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9p
bnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkg
ei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9z
aXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0
aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAg
cGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFs
aXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25l
RnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZs
b2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYg
KGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xl
ID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5
MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRp
bmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWlu
dGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0g
ICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAg
ICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFy
RXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQot
ICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJ
dCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFy
RXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3Qu
bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7
CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFj
ZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBw
ZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2Vy
U3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQ
b3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkg
LSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlv
blZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8g
ICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBp
ZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1
dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9
IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGlt
aXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1p
dGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0g
LWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkw
LjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAg
IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGlt
aXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9
IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAg
IH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50
IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRp
bmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOworLy8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4
cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQg
PSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAg
ICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpD
b21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5n
RGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9h
dCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2NiZDkwOWJkYzAyOTM2MDZjNjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBp
bnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4yID0gaW5wdXRzWzFdLmdldCgpOworCisgICAg
YXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZl
cjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBy
ZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWI0OTkwMWU3YTMyZWM4ODVhMDQ2YjRk
M2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0g
Z3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhhOworCisgICAg
cmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICog
YiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFs
dWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4
XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciAr
IHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVl
c1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAq
IGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsK
K30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxv
YXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisK
KyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIg
KiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBj
b21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21w
b25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKK30KKwor
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4g
Q29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9h
dCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIx
MjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsK
KyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkK
K3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFj
Y2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sK
KyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQp
OworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgp
IHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQg
bWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0
cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24t
dkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVl
c1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9IHBp
eGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRo
ID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdo
dCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgc3Jj
LmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0Lndp
ZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5o
ZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAg
ICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0
cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
MV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSks
CisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICog
ZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2
SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29y
LCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJp
eFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAor
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBk
aXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQg
KiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29y
KSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSks
CisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4K
K3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVj
dG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1
bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVT
RShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+
KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJl
dHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAg
ICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRl
T2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAg
ICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAg
ICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsg
MSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAx
LCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAy
LCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMs
IGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFU
RToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVP
ZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAg
ICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAg
ICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAx
KTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwg
Z3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQg
Ymx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAg
IGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAg
ICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3Vs
dCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAg
IGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGlu
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9h
dFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4uYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUo
KSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OworICAgIAorICAgIEludFJlY3Qg
aW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBh
dXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1h
Z2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8g
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOworCisgICAgVmVjdG9y
PGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lv
bnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVs
QXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFy
cmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNBbHBoYUltYWdlKHRydWUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTNmMmRkZGJkNWZlNDkxMDE0MGMwZWM4ODBj
MTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
Zjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1MGRhNjY2ZGE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0ODg0OTA0NWZhZDc5YmFjZjBjY2M0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVy
Y3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZl
TWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4
OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwg
RmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYjM0MWYwZTU3NmRmM2JkMTM2ZjZhMWM3
N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVE
cm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE2
ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNlYWRjYThlNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9w
U2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJG
RUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0
ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAx
KTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAg
IEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisvLworLy8gICAgRmxvYXRTaXplIGJs
dXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwg
bV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7
CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAg
IEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKKy8vICAg
IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKy8vCisvLyAgICBHcmFwaGlj
c0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAg
cmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworLy8gICAgcmVzdWx0Q29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNl
dCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOworLy8KKy8vICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOworLy8K
Ky8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07
CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworLy8gICAgaWYgKCFwaXhlbEJ1ZmZlcikKKy8v
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisvLyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5
ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1h
Z2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8KKy8vICAgIHJlc3VsdEltYWdlLT5wdXRQaXhl
bEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworLy8KKy8vICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7Cisv
LyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CisvLyAgICByZXN1bHRDb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25P
dmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJmYmFlY2M5ZjIyZGJmZjIzZTkwYmUzNDJhYWIy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0
ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVz
dWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICAKKyAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVjdCwgY29sb3IpOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Q3MGE2ODBkOGVjMWM1
YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2Fy
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNjMTIwMTA5OWJkOTU5ZGZhY2Ix
MmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdF
RCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJn
ZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWY4MjViZGE4ZWMyMzUw
YmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVN
ZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlu
cHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKSB7CisgICAgICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZhNzc4YWFjNzkwNWY2NmM4YjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIw
MjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZF
TW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5
OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwg
RmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZkOGJkNzhmNjNmM2Q2MGRlOGIzZmIyNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zm
c2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmls
dGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0g
MSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGlt
YWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5z
aXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMzYTRjMWY4NjNlMTA2YTBmYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxlLmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgor
I2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJ
bWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisvLyAgICBBU1NFUlQoaW5wdXRz
LnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworLy8KKy8v
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKy8vICAgIGF1dG8g
aW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworLy8gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
aW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8KKy8vICAgIHJlc3VsdC5zZXRJ
c0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkpOworLy8KKy8vICAgIC8vIFNvdXJjZSBpbnB1
dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdp
b24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdl
IGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9u
LgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4ubWF4RWZmZWN0UmVjdCgpOworLy8gICAg
RmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKy8v
ICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRp
b24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlw
ZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAg
ICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRl
ci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorLy8KKy8vICAgIGF1dG8g
dGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJl
Y3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVu
ZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGlsZUltYWdlKQorLy8gICAgICAgIHJldHVybiBu
dWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRp
bGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWlu
TWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOworLy8gICAg
dGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi5hYnNvbHV0ZVBh
aW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8vICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7CisvLyAg
ICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisvLworLy8g
ICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CisvLyAgICBwYXR0ZXJuVHJhbnNm
b3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOwor
Ly8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJl
bGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKy8vCisv
LyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4p
KTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxl
bmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiNGFkN2MxMDg4ZjJhNTBkZDYwOWRmNjQ2ODA5
MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEg
SG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fi
b3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIw
MTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRVR1cmJ1
bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0
U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQxNjAwM2M0NmZmODczYWRmNjc5ZTYxZTc3ZTk3
MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsx
LDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFn
ZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAo
bV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAg
ICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKTsKKyAgICBt
X2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5w
dXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2lt
YWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRl
clJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM4YzQ1Njhm
NTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0
U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdhcmUgOiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsK
K3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsKKyAgICAKK3By
aXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VC
dWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRTb2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3Vs
dC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3
YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzlhY2E3MGVhNGY1MGNhM2I0
NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5j
cHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNl
QWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdl
dCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZXN1bHRJ
bWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9
LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworCisgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7CisgICAgcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2lu
dCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MTY0ZWI1ZDVlOGE0NDY0
OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291
cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUdyYXBo
aWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
c291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50
UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggNjRlOTgzODRhZjAwNGVm
Njk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uNzVmMzc3NTM1MTQxYzI5ZDIxM2Q1N2U0Y2YzZmQy
YjJmNDBlYjczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEs
NiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTEg
KzI4LDMwMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgog
Ci0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1
bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5j
bHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNs
dWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJj
ZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhp
Yy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
Ci0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0
cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRv
IGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9k
ZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRp
b25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIGZpbHRlcjsK
IH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEs
IDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMp
KQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9u
cywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01v
ZGUsIFR5cGU6OkNTUykKIHsKKyAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJh
dGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKIH0KIAotQ1NTRmlsdGVyOjp+
Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNW
R0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVm
ZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmls
dGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5k
ZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxl
bWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVu
ZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpj
cmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0Vm
ZmVjdCk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQor
c3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKIHsK
LSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBu
dWxscHRyOworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9k
dmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNj
YWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisg
ICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAor
ICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUo
aW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6
YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVj
dCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0
aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0
IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQog
ewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZH
UmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwg
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAi
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFk
ZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwot
ICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVy
LCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhp
bmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAg
ICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVu
ZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBj
bGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisg
ICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVy
cy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBw
YXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAg
ICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVD
b2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5w
dXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0Zp
bHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1
dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9u
LmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAg
IGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVj
dCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBp
ZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWls
ZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJk
QXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5k
ZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdC
KQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1l
bnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRl
cnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vs
c2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVy
LT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNl
RWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBl
bmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlv
bjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
TElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xv
cGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25z
LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIG1faGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsK
LSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0g
b3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
bigpOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFS
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7
Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKLSAgICBtX291dHNldHMgPSB7IH07CitzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5F
QVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9
IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQg
KyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAg
ICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAg
ICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlv
biwgLypjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9E
RV9OT05FIDoqLyBFREdFTU9ERV9EVVBMSUNBVEUpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlv
bi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmls
dGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAq
ZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBt
X3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7
Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3
aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24g
PSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZp
b3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVy
PiBmaWx0ZXI7CisKKyAgICAgICAgQVNTRVJUKGVmZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3Bl
cmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5D
RToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIs
ICplZmZlY3QsIGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAg
ICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJs
ZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3Vu
dCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3Jn
L2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFs
ZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg
MCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4y
MTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKLSAgICAgICAgICAgIGF1
dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51
c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAs
IDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYv
cmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAg
ICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0
b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAw
LAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMx
ICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVj
dCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgYXV0byYg
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1
dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9u
LmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAg
ICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OwotCi0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0
ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hU
TkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAg
ICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50
ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3BhY2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hU
TkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1
bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAg
ICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAg
ICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVy
RnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlv
bik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAg
ICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDog
ewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVy
RnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5j
dGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAg
ICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlh
dGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJv
cGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKworICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJs
dXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0g
ZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlv
bigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93
T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKworICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0
ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8g
cHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUg
c3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1l
ciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0g
RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAg
ICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlcikg
eworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAg
ICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFr
ZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYg
KG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZm
ZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lv
bik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAg
ICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShy
ZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxl
ZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKLSNlbmRpZgorICAgICAgICBtX2Z1bmN0aW9u
cy5hcHBlbmQoeyAqZWZmZWN0IH0pOworICAgIH0KKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWN0KQorSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogewot
ICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB8fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAg
ICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAgaWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1h
Z2VSZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9u
IDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygp
OwogCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25z
dCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2lu
dCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNl
IGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAg
IC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBo
aWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgbG9naWNh
bFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJ
bWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpj
cmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRl
clNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAg
ICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYK
LSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBD
U1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0
byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5k
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVn
aW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZp
bHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZl
Y3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0g
ICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBz
Y2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxh
c3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAg
IHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0
ZVJlc3VsdHMoKQorRmlsdGVyUmVzdWx0KiBDU1NGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYg
b3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UpIGNvbnN0CiB7Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlm
IChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3NvdXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwot
ICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFy
UmVzdWx0KCk7Ci19CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24tPmFwcGx5KG91dHB1dCwgc3RhY2ssIHNvdXJj
ZUltYWdlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKLXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2Vm
ZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAg
IG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9m
aWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBzdGFjay5hcHBlbmQoeyAqcmVzdWx0
IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygpLmFkZChmdW5jdGlvbiwgUmVmPEZpbHRlclJl
c3VsdD4oKnJlc3VsdCkpOwogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3Qu
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
Ci19Ci0KLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGly
dHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhl
IGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwg
c28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRpcnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9y
UmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAoaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkp
Ci0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWlu
dC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0gICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50Owot
fQotCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKSBjb25zdAotewotICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1f
ZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCi17
Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1h
eEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJj
ZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7Ci19CiAK
LXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVj
dFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVm
ZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RSZWN0KTsKKyAgICBBU1NFUlQoc3RhY2suc2l6
ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1
bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigpOwogfQogCi1JbnRSZWN0IENTU0ZpbHRlcjo6
b3V0cHV0UmVjdCgpIGNvbnN0CitUZXh0U3RyZWFtJiBDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0
aW9uKSBjb25zdAogewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdl
dCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJl
bmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJu
IGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBt
X2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICByZXR1cm4geyB9OwotfQotCi1JbnRPdXRzZXRz
IENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICghbV9vdXRzZXRzLmlz
WmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwotCi0gICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsK
LSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0
aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQw
OGI3NThlMzc1YzI1MmYyOWRiMGM1Li5iZDNmOGE3ZWM4M2ZlYTlmOWVlZTQzZmVmNTIxNjk4YTJj
ZjcwMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsODYgKzI2
LDU0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIklu
dFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlcjsKLWNs
YXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgU291cmNl
QWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVy
IHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07CiAKIGNsYXNzIENTU0ZpbHRlciBm
aW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KIAotICAg
IEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxl
bWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9p
ZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShSZW5kZXJFbGVtZW50JiwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKIAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0g
ICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRz
ZXRzIG91dHNldHMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2
aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJl
Y3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZp
bmFsOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVu
ZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZWNvZGVyPiBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVy
Pj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0g
ICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVj
dCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Cisg
ICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYpOwogCi0gICAgTGF5b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRp
cnR5UmVjdCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFs
OwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3Qg
bV9maWx0ZXJSZWdpb247CisgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+
IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhh
OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZh
bHNlIH07CiAKKyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CiAg
ICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKK307CiAKLSAgICBib29sIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHZvaWQgQ1NTRmlsdGVyOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Cit7CiAgICAgCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwot
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8Q1NT
RmlsdGVyPj4gQ1NTRmlsdGVyOjpkZWNvZGUoRGVjb2RlciYpCit7CisgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRl
cigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmls
dGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NT
OyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCmluZGV4IDE0YjAxZDYwNTJmYTI3Y2IyYzM1NjYxYzAyZWRkN2I4MzlkYWIy
NmQuLjJhNTFkYjgzN2Y5MTVlZmM0MzNlZDNjMmM0ZmViMTkyOGE1NGU4YWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRT
dHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3Mg
Q2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3RzQ2FjaGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRl
eHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3Bw
CmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4MThiNjFhMDVmOTViOTY0YTQuLmEyZWU3ODkw
YzRhN2VkZmRhYTNlYmRiYjdmNDQ1ZGIwNzk2MTcyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgogCi0jaW5j
bHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CkBAIC0xMTYsMzkgKzExNyw1MSBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVt
b3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAgICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMu
Y2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewot
ICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0
ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAg
ICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVs
c2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAg
IG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVy
LT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9CisgICAgbV9maWx0ZXIgPSBDU1NG
aWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVy
aW5nTW9kZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1
dENvbnRleHQoKQoreworICAgIHJldHVybiBtX3NvdXJjZUltYWdlID8gJm1fc291cmNlSW1hZ2Ut
PmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7
IG1fc291cmNlSW1hZ2VSZWN0LnNpemUoKSB9OworICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCAxLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAg
IC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXll
ci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0gICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHBy
b2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0g
ICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4g
aWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1
aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6
RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgbV9ncmFw
aGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJM
YXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFw
aGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewog
ICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byYg
ZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGF1dG8gZmlsdGVyU291cmNlUmVjdCA9IGZpbHRlci5j
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGZpbHRlckJveFJlY3QsIGRpcnR5UmVj
dCk7CisgICAgCisgICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZGlydHlSZWN0OworICAgIGlm
IChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCisgICAgICAgIGZpbHRlclNvdXJj
ZVJlY3QgKz0gZmlsdGVyLm91dHNldHMoKTsKKyAgICBmaWx0ZXJTb3VyY2VSZWN0LmludGVyc2Vj
dChmaWx0ZXJCb3hSZWN0KTsKKwogICAgIGlmIChmaWx0ZXJTb3VyY2VSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3Rv
cmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAg
ICAKKyAgICBpZiAoZmlsdGVyU291cmNlUmVjdCAhPSBtX3NvdXJjZUltYWdlUmVjdCkgeworICAg
ICAgICBtX3NvdXJjZUltYWdlUmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7CisgICAgICAgIG1fZ3Jh
cGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOworICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRl
ci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRp
cnR5UmVjdDsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUp
CisgICAgICAgIGlmICghbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQogICAgICAgICAgICAgbV9y
ZXBhaW50UmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKQEAgLTE1OSwxMSArMTcyLDkgQEAgR3JhcGhp
Y3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5s
b2NhdGlvbigpOwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICBmaWx0ZXIuYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwotICAgIGF1dG8qIHNvdXJj
ZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJj
ZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgp
KSkKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCk7CisgICAgYXV0byogc291cmNl
R3JhcGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGlj
c0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gVHJhbnNsYXRlIHRo
ZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBp
biB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIuCkBAIC0xNzcsMjUgKzE4OCwyNiBAQCBHcmFw
aGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdAogCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0
ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgQVNT
RVJUKG1fZmlsdGVyLT5pbnB1dENvbnRleHQoKSk7CisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgp
KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5
ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0Iik7CiAKICAgICBhdXRv
JiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3Jl
KCk7Ci0KLSAgICBmaWx0ZXIuYXBwbHkoKTsKLQotICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0
cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0
ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1f
cGFpbnRPZmZzZXQueSgpKTsKLQotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIu
b3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91
dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwotCi0gICAgZmlsdGVyLmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVy
RWZmZWN0IGRvbmVcbiIpOworICAgIGlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBh
dXRvIGdlb21ldHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJ
bWFnZVJlY3QsIG1fc291cmNlSW1hZ2VSZWN0KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJh
d0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShn
ZW9tZXRyeSkpOworCisvLworLy8gICAgLy8gR2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRy
YXcgaXQgaW4gcGxhY2UuCisvLyAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1
dFJlY3QoKTsKKy8vICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRP
ZmZzZXQueSgpKTsKKy8vCisvLyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdl
QnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSk7CisvLworLy8gICAgZmlsdGVyLmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworLy8KKy8vICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZp
bHRlckVmZmVjdCBkb25lXG4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1
Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3
MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3Mg
UmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwg
Y29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291
cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFw
aGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3Rv
cmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJl
bmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9h
dFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7
CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWlu
dAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQx
NjJiODFmZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkxZWM3NTU3YTEuLmE1MjgwYTdiZjcwMzA0NzY5
OGUyM2EyYTEyYmNhYjIxODVkMzVjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdS
ZW5kZXJpbmdDb250ZXh0LmgiCkBAIC04MCw2MiArODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwg
Ym9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxp
ZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24p
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlm
IChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5n
Qm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0
byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVp
bGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFBy
aW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWls
ZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0
ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVm
ZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZl
Y3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigp
KTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsK
LSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJl
c29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxl
bWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94
KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCku
Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFy
UkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAg
ICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVm
ZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAg
IExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSBy
ZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0
ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAg
IGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBm
aWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWluZykKLSAgICAgICAgICAgIGZp
bHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdy
ZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5v
dy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUgU1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJE
YXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3Vu
ZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgYXV0byByZW5kZXJp
bmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAKLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVz
b2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJF
bGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBT
VkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlm
ICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3go
KTsKKyAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2
ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVt
ZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOworCisgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKKyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0g
cmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKIAotICAgIC8vIERldGVybWlu
ZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCisgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0
ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9u
VG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRl
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMs
NjUgKzExMSwyMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBz
aGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRv
IHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0
YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVU
cmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAw
KTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIg
YW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0g
cmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUg
dGhlIGZpbHRlciByZXNvbHV0aW9uCiAgICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lv
biA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVy
RGF0YS0+ZHJhd2luZ1JlZ2lvbik7CisgICAgZmlsdGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsK
KyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9u
LnNpemUoKSwgZmlsdGVyRGF0YS0+c2NhbGUpOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0
ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxl
bWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3Jl
YXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdp
bmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmlt
aXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0
ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVz
KCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3Ig
ZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBi
ZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJl
Y3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwot
ICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCks
IHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAg
RmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVj
dCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZm
ZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+
bGFzdEVmZmVjdCgpKTsKLQotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhF
ZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28g
YmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRo
IG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRl
ci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBk
cmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0i
Li4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMg
ZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdl
IGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlmIChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9u
LmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNv
bnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBj
b250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBX
VEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBm
aWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4K
KyAgICAvLyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJhbnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUu
d2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShm
aWx0ZXJEYXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRl
ckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5n
TW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBh
dXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNl
bHNlCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7
CiAjZW5kaWYKKwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRy
YW5zZm9ybSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFz
b3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAu
Y29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAsMTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIC8vIFNl
dCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRl
ckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8v
IFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBo
aWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3Jh
cGhpYy0+Y29udGV4dCgpOwotICAKKyAgICAKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGlj
QnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENv
bnRleHQgPSBjb250ZXh0OwotCisgICAgCiAgICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29u
dGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJl
bmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RG
TW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsx
ODgsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0
RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVz
LmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBv
YmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0
aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVz
dWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJE
YXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5m
aWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVm
ZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1
aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlm
ICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3Rh
dGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5
KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJE
YXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBG
aWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBs
YXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2Up
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwot
Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmls
dGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKSk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0o
KSkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2Nh
bGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuc2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAg
ICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zv
cm0pOwotICAgICAgICB9CisgICAgICAgIGF1dG8gZ2VvbWV0cnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJEYXRhLmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJh
d2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVy
RGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmls
dGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RG
TW92ZShnZW9tZXRyeSkpOworICAgIAorICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRh
LnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNC
dWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3Vy
Y2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVz
b3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwNiwxMCAr
MjA3LDggQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5k
aW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWMKICAgICByZXR1cm4gU1ZHTGVuZ3RoQ29u
dGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgp
LCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgb2JqZWN0Lm9iamVjdEJvdW5kaW5nQm94
KCkpOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1
dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGlj
X2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2Rl
KCkpOwotCiAgICAgTE9HKEZpbHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmlt
aXRpdmVBdHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKIAogICAg
IGZvciAoY29uc3QgYXV0byYgb2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVy
RGF0YU1hcCkgewpAQCAtMzE3LDE2ICsyMTYsNiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwog
ICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKiBidWlsZGVyID0g
ZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBlZmZlY3Qg
PSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9iamVjdCk7Ci0gICAgICAgIGlmICghZWZmZWN0
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFNpbmNlIGFsbCBlZmZlY3RzIHNo
YXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUsIGFsbAotICAgICAgICAvLyBvciBub25lIG9m
IHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKLQogICAgICAg
ICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50
Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlk
YXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA1NjRhYWFkNDhhMjJlM2M0NTA3ZWVmNTBh
ZGM2NDQwMWQ4NzAzZjgzLi4xNDhhYzA4YjM5ZTgxY2YyOTZjNjRmY2JkZWQ4MzE5NmUxYTg5ZDc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNpbmNs
dWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAg
LTQyLDggKzQxLDcgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRGF0YSgpID0gZGVmYXVsdDsKIAot
ICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXI7CiAgICAgUmVm
UHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4
dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybTsKQEAgLTcxLDggKzY5LDYgQEAgcHVibGljOgogCiAgICAgRmxv
YXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRQcmltaXRpdmVz
KFNWR0ZpbHRlciYpIGNvbnN0OwotCiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0
ZXJVbml0cygpIGNvbnN0IHsgcmV0dXJuIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpOyB9
CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsg
cmV0dXJuIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4
IGI0NzM5NDM4YzVmM2UyYzY5MWVmM2IwMmJiYmVjOWQyOTIwNzAzYjcuLmQyZTU5ZDEzOWQ4Yzlm
NDJjNTdiMDRjYzlhYzczMWY3NGFlYThlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFs
aXphdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bWFnZS5oIgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNp
bmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94Lmgi
CiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5o
IgpAQCAtNDI4LDEzICs0MzAsOSBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci5wcmltaXRpdmVV
bml0cygpKTsKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFj
ZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAgICAgICBG
bG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVy
OjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJl
Y3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0
aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxGaWx0ZXI+IGR1
bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSkpIHsK
ICAgICAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLQot
ICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RF
ZmZlY3QoKSkKLSAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzKTsKKyAgICAgICAgICAgIGR1bW15RmlsdGVyLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkg
PT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewogICAgICAgICBjb25zdCBhdXRvJiBjbGlwcGVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyJj4ocmVzb3VyY2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3
OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2NDMxZjY4Ni4uMTYwZTAwZGNiZWQ2OTVmYjQwNzFlNjE3MWVj
ZjEyZjJlMTk2NGZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3Bw
CkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJGRUJsZW5kLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KIApAQCAtMTAwLDIwICsxMDAsMTUgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4y
KCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MiA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0
MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0
ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9kZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZl
Y3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7
Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0
OworICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgRkVCbGVuZDo6Y3JlYXRlKG1v
ZGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUw
Yjk0MWZjOGIwNmRlYzY2Li4yN2E4MmY1Y2NiNDcwZTYzMDZjNTViNDllYWU4MjY0MzNkZThkMmRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZm
ZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMu
LjhhYjgwYTI2OGU5ZmMzZDAyMWVkNDIzMzg5YmM0YjgwOTJjOGExMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBA
QAogI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogCkBAIC0xMDAsMTIgKzEwMCwxMSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzOwog
ICAgIENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlID0gdHlwZSgpOwpAQCAtMTM1LDE1ICsxMzQs
MTMgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYgc2l6ZSAhPSAyMCkKICAgICAgICAgICAgIHx8
IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAx
KQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIAogICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMo
KTsKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0
byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZN
b3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCmluZGV4IDdhYjRhYTQxODFlN2FiMTk4
YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLmNhN2E3ZDVmNTdkNjVhOGNiN2ViOTFmM2JkZDU0NjIy
OWQzOTRmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmluZGV4IGU4OTI2N2NlN2QzNDE0NmQyYTY1ZDZm
MDFkY2U1ZGVmNDljODJmNzguLjZiMTUxY2FiMjBhNDg5ODIzNTA5MDdmMzY1YTczY2Y0OGM2M2Q5
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1
bmNSRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJT
VkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAKQEAgLTYyLDEyICs2MiwxMSBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
bwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9
IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiByZWQ7CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbjsKQEAg
LTg1LDkgKzg0LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHQKICAgICAgICAgICAgIGFscGhh
ID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxkKS50cmFuc2ZlckZ1bmN0aW9uKCk7
CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3Jl
YXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsg
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSwgeyB7
ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5kZXggYmI1ODkzNDdkODgyNmRmYjM2MDllZGFj
NmU4Yjk5M2E0ZGQ1NDg2My4uZjIyZDUxYTJiZDhjMjM3NjVkYTk4YmZjMjVlNmEyOThhOGVmMmVh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogc3ZnQXR0
cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAz
Y2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUyMDVhYzk4MjM1Li42MzA2OTY3YzgzY2E2NDVm
MGQ4ZjY1YThhMzE5OThkMjc1ODNkMzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFQ29t
cG9zaXRlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDAsNyAr
NDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZH
TmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAg
IFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJh
dGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21w
b3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9w
ZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2sxPigpOwog
ICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0
dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxl
bWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFt
ZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlv
blR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBw
cm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZy
b21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAg
ICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVj
dCwgY29uc3QKIHsKICAgICBGRUNvbXBvc2l0ZSogY29tcG9zaXRlID0gc3RhdGljX2Nhc3Q8RkVD
b21wb3NpdGUqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0
b3JBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRPcGVyYXRpb24oc3ZnT3BlcmF0
b3IoKSk7CisgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldENvbXBvc2l0ZU9wZXJhdG9yKGNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRy
KQogICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLMShrMSgpKTsKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKQEAgLTEzMSwyMCArMTMxLDE1IEBAIHZvaWQgU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRl
ciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVp
bGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4yKCkpOworCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmlsdGVy
LCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKTsKLSAgICBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5w
dXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlu
cHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4g
ZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgRkVDb21wb3NpdGU6
OmNyZWF0ZShjb21wb3NpdGVPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKSwgeyB7
ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKaW5kZXggODFhNzhjODY1N2EwZmEzMDQ0ZGY1YjdjNWEw
ODBkNmU3Nzk3MjJmNi4uZGM5NTQ3OWI1NmFkOTU4ZTM2Y2VjZWFhM2JmNGJhNTYxNGI2NmJjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaApAQCAtMjcsMTUg
KzI3LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KLWlubGluZSB1bnNp
Z25lZCBTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7
IH0KK2lubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdG9yPjo6
aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOyB9CiAKIHRlbXBsYXRlPD4KLXN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21w
b3NpdGVPcGVyYXRpb25UeXBlPiB7CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3Np
dGVPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyBy
ZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0
b3IpIHsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfT1ZFUjoKQEAgLTU4LDcgKzU4LDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENv
bXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBGRUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3Zl
ciIpCiAgICAgICAgICAgICByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1
LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW4xLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFN0cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBt
X2luMi0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09w
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdPcGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+KCk7IH0KKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZh
bHVlPEZFQ29tcG9zaXRlT3BlcmF0b3I+KCk7IH0KICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0
dXJuIG1fazEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVy
biBtX2syLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4g
bV9rMy0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAg
U1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBT
VkdBbmltYXRlZFN0cmluZyYgaW4yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMjsgfQotICAgIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2
Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0
b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmlt
YXRlZE51bWJlciYgazFBbmltYXRlZCgpIHsgcmV0dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRl
ZE51bWJlciYgazJBbmltYXRlZCgpIHsgcmV0dXJuIG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51
bWJlciYgazNBbmltYXRlZCgpIHsgcmV0dXJuIG1fazM7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4yIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJh
dG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX09WRVIpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fY29tcG9z
aXRlT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazEg
eyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX2syIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMyB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhp
cykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKaW5k
ZXggNzhlNDAyMDdmNWIwMmY2NzBmMDQwYjI5Mzc1ZWFkN2MyYjQ1MmRlMC4uZmM2NzBjOWVjNTZj
NDFjMTA5Mjg1NDg0MjdjNWY2YThlMTg1YjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBpbjI7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3Zn
T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJh
dG9yOworICAgIFtJbXBsZW1lbnRlZEFzPWNvbXBvc2l0ZU9wZXJhdG9yXSByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
U1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5p
bWF0ZWROdW1iZXIgICAgICBrMzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IGY3NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1
YTgwYzZhMjZkZjEuLjA4YTkxNDYwNDU3YWY1MWJiNGQwY2U5NzE4ZjNiOTA5MTIwOGY3MDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJJ
bnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgpAQCAtMTkxLDEyICsxOTEsMTEgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmEKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVk
RWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpbnQgb3JkZXJYVmFsdWUgPSBvcmRlclgoKTsK
ICAgICBpbnQgb3JkZXJZVmFsdWUgPSBvcmRlclkoKTsKQEAgLTIwNiwyMiArMjA1LDIyIEBAIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgfQogICAgIC8vIFNwZWMgc2F5cyBvcmRlciBtdXN0
IGJlID4gMC4gQmFpbCBpZiBpdCBpcyBub3QuCiAgICAgaWYgKG9yZGVyWFZhbHVlIDwgMSB8fCBv
cmRlcllWYWx1ZSA8IDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIGF1dG8mIGtlcm5lbE1hdHJpeCA9IHRoaXMtPmtlcm5lbE1hdHJpeCgpOwogICAg
IGludCBrZXJuZWxNYXRyaXhTaXplID0ga2VybmVsTWF0cml4Lml0ZW1zKCkuc2l6ZSgpOwogICAg
IC8vIFRoZSBzcGVjIHNheXMgdGhpcyBpcyBhIHJlcXVpcmVtZW50LCBhbmQgc2hvdWxkIGJhaWwg
b3V0IGlmIGZhaWxzCiAgICAgaWYgKG9yZGVyWFZhbHVlICogb3JkZXJZVmFsdWUgIT0ga2VybmVs
TWF0cml4U2l6ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBpbnQgdGFyZ2V0WFZhbHVlID0gdGFyZ2V0WCgpOwogICAgIGludCB0YXJnZXRZVmFs
dWUgPSB0YXJnZXRZKCk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0
dHIpICYmICh0YXJnZXRYVmFsdWUgPCAwIHx8IHRhcmdldFhWYWx1ZSA+PSBvcmRlclhWYWx1ZSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRo
ZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXM6IHRhcmdldFggPSBmbG9vciAoIG9yZGVy
WCAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpKQog
ICAgICAgICB0YXJnZXRYVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlclhWYWx1
ZSAvIDIpKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0cikgJiYg
KHRhcmdldFlWYWx1ZSA8IDAgfHwgdGFyZ2V0WVZhbHVlID49IG9yZGVyWVZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMg
c2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0WSA9IGZsb29yICggb3JkZXJZIC8gMiAp
KQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0cikpCiAgICAgICAg
IHRhcmdldFlWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVyWVZhbHVlIC8gMikp
OwpAQCAtMjM0LDExICsyMzMsMTEgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAg
a2VybmVsVW5pdExlbmd0aFlWYWx1ZSA9IDE7CiAgICAgfQogICAgIGlmIChrZXJuZWxVbml0TGVu
Z3RoWFZhbHVlIDw9IDAgfHwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA8PSAwKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZsb2F0IGRpdmlzb3JW
YWx1ZSA9IGRpdmlzb3IoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29y
QXR0cikgJiYgIWRpdmlzb3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRy
KSkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbE1hdHJpeFNpemU7ICsraSkK
ICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSArPSBrZXJuZWxNYXRyaXguaXRlbXMoKVtpXS0+dmFs
dWUoKTsKQEAgLTI0Niw5ICsyNDUsMTggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAg
ICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNv
bnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllW
YWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdl
dFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwg
a2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZm
ZWN0OworICAgIHJldHVybiB7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZSgKKyAg
ICAgICAgICAgIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwKKyAgICAgICAgICAg
IGRpdmlzb3JWYWx1ZSwKKyAgICAgICAgICAgIGJpYXMoKSwKKyAgICAgICAgICAgIEludFBvaW50
KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwKKyAgICAgICAgICAgIGVkZ2VNb2RlKCksCisg
ICAgICAgICAgICBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRM
ZW5ndGhZVmFsdWUpLAorICAgICAgICAgICAgcHJlc2VydmVBbHBoYSgpLAorICAgICAgICAgICAg
a2VybmVsTWF0cml4KSwKKyAgICAgICAgeyB7ICppbnB1dDEgfSB9CisgICAgfTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMwMDI2OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkw
NDliMzM5Li44NDI1OTAyMGE4Njk5Njg5MDkwZDIzNWE2OTAyZTRhMzMxYzk3ZmZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAz
LDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVh
dGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZkOGU5NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0
YmRkNS4uNzFkOGM3ZjM5MGRiYmY1MTkyM2VmMDQxMzhjOTQ1Yjc2NjVmOTk1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAg
LTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KQEAgLTg5LDE0ICs4OSwxNCBAQCBib29sIFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZm
ZWN0LAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
ICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJl
ci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5z
dmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRp
bmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0
aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0
U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCiAgICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmct
PnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CiAKLSAgICBhdXRvJiBsaWdo
dFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmctPmxpZ2h0
U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJj
ZSY+KGRpZmZ1c2VMaWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVt
ZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0
aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTUxLDI4ICsxNTEsMjUgQEAg
dm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgU1ZHRkVMaWdodEUKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdo
dEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CiAgICAgaWYgKCFsaWdodEVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAg
IGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWls
ZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShm
aWx0ZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlB
cHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdD
b2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShm
aWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVu
aXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZm
ZWN0OworICAgIHJldHVybiB7IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZh
Y2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVs
VW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpLCB7IHsgKmlucHV0MSB9IH0gfTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLjdk
OTk0MzFlMTVlY2I2YjNiZjQwYmUyYWUyMjFmNjhkNTYwNmY2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZkNzIyZGZkMDUxNzNkOGMyLi45Mjdi
MzRmMzdhZDU2MjQxZTkwNzc2MjcyOTgxMWE4NWFjYjUxYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcApAQCAtMjIsNyArMjIs
NyBAQAogI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KIApAQCAtMTE1LDIwICsxMTUsMTUgQEAgdm9pZCBTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck4KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVk
RWZmZWN0KGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6
OmNyZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBz
Y2FsZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAg
ICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChp
bnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisg
ICAgcmV0dXJuIHsgRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCks
IHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9
IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1
ZDMuLjEyMzc4MDkwODVhZWQyMjc1YjViMDEwZjQ5OGNmZjZjYjViZTZkZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcg
KzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmNwcAppbmRleCBhNjg2YmI4ZmEzOGQ5ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZm
MmY3Li40YzE1M2JlYTE4ZDc3ZWNiNmMwZjIyZDdhMWIxZTAxMDQxYmI5NTVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcApAQCAtMzYsNyAr
MzYsNyBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50PiBTVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8
TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICByZXR1cm4g
RGlzdGFudExpZ2h0U291cmNlOjpjcmVhdGUoYXppbXV0aCgpLCBlbGV2YXRpb24oKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKaW5kZXggZmJk
ZjcxYzBlY2JkOWY5OTdkNjllYTY1NGI5ZjViYTAzMTdkNzFjYy4uNDE2ZmU2MGJlN2IxNmQ5MTgx
NWNiMzllZjUyM2E5ZjRlNGVhMWViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29u
c3QgU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2Yo
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4
IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2YTg5YmZjNWI2ODEuLjc5NTRlYzI3MDFiM2E4
NjhkOGQ2MGRlOWM1ZTQzNDM4Yzk1YmY0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJTVkdG
RURyb3BTaGFkb3dFbGVtZW50LmgiCiAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclN0eWxlLmgiCkBAIC05NywyNyArOTcsMjUgQEAgdm9pZCBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8
fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJl
ci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9y
KCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQx
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1
dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCks
IHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRp
b25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KSwgeyAqaW5wdXQxIH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2
MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0MmY3NDUxZC4uNTI3NWIxZmNhMDBlYmY1NTFl
YTBkZGFiYjQwYjU1ZGJkMjAyMTBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJz
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJy
aWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBlMTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIu
LmU2YjhhMjMxOGVjZjU0MmRkYzQ4YWQwZjI5Y2NkMzQ3Zjc3MjZhODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApAQCAtNTAsMjYgKzUwLDI2IEBAIGJvb2wgU1ZH
RkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCwgY29uc3QgUXVhCiAgICAgRkVGbG9vZCogZmxvb2QgPSBzdGF0aWNfY2FzdDxGRUZsb29k
Kj4oZWZmZWN0KTsKIAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxvb2RfY29sb3JB
dHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNldEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUo
KS5mbG9vZENvbG9yKCkpOworICAgICAgICByZXR1cm4gZmxvb2QtPnNldENvbG9yKHN0eWxlLnN2
Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZs
b29kX29wYWNpdHlBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNldEZsb29kT3BhY2l0eShz
dHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKTsKKyAgICAgICAgcmV0dXJuIGZsb29kLT5z
ZXRPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOwogCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYpIGNv
bnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAg
IHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+
c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkp
OwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJl
dHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJu
IHsgRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFjaXR5KSwgeyB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3
MjQ4YTFiNmY1Y2Y1MWZlZTkxMS4uNDgwNWUyM2ExYzczMGEyY2IxYWNmN2NjMzdlZDkzZmE4YTVj
YjEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2
LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJl
Z2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAg
ICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0
NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4uOWI2ZWUwNTI5MjM5OGM1NTFkYjc2Njg5NDczYTRlYjJk
OGQyZTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRl
ckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC05NSwxOCArOTUsMTYgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGRE
ZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmaWx0ZXIs
IHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKTsKLSAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAg
IHJldHVybiB7IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZp
YXRpb25ZKCksIGVkZ2VNb2RlKCkpLCB7ICppbnB1dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIy
YzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4uZWZkYmYwMDk1MDViMzBmODE5ZWQwYTJiNDIy
YjgzYzJhNWQ1MDU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmNwcAppbmRleCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi42Mzgz
NjEyMDFhNWM0Nzc0MjA2MDlkNGM1YTA3MjVkNGQwMjg0ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTE3NCwxNiArMTc0LDE3IEBAIHZvaWQgU1ZHRkVJ
bWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29y
a0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJl
bnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ciYpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUlt
YWdlOjpjcmVhdGVXaXRoSW1hZ2UoZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRl
cmVyKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4g
eyBGRUltYWdlOjpjcmVhdGUoeyAqbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpLCB7IH0gfTsKIAogICAgIGF1dG8gdGFy
Z2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCks
IHRyZWVTY29wZSgpKTsKICAgICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2Yo
dGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCks
IGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAKKyAgICByZXR1cm4geyB9OworLy8gICAgcmV0dXJuIHsgRkVJbWFnZTo6Y3JlYXRlV2l0aElS
SVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0
aW8oKSksIHsgfSB9OwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKaW5kZXggZDkzZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEy
NTZiYWRhMTU0YzVjNy4uZWUxMzk5YTYwN2MzNTFmNWVhZTkxYWI1NzA4ZTk4NjRkYWRjZTA5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwog
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVx
dWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUxpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgK
aW5kZXggY2QwYmZiOWVkY2ZkN2I0ZTFhZjM5YjU1ZWRiYmJkNzg0YWFlYTg5ZC4uM2ZmZTQ4ZjQ0
MDk3NGVlN2E5MWRmZGZlYTEyNDRmYTc0NmZkNTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgKQEAgLTI3LDEyICsyNywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNzIFNW
R0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19B
TExPQ0FURUQoU1ZHRkVMaWdodEVsZW1lbnQpOwogcHVibGljOgotICAgIHZpcnR1YWwgUmVmPExp
Z2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBj
b25zdCA9IDA7CiAgICAgc3RhdGljIFNWR0ZFTGlnaHRFbGVtZW50KiBmaW5kTGlnaHRFbGVtZW50
KGNvbnN0IFNWR0VsZW1lbnQqKTsKIAogICAgIGZsb2F0IGF6aW11dGgoKSBjb25zdCB7IHJldHVy
biBtX2F6aW11dGgtPmN1cnJlbnRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmNwcAppbmRleCBhNTcyYWQ1M2Q5ZjFkNjVkYTNkZWY0ZDUxMTNkNTBhNDI1MjE4
ODhhLi5kNGEyOTY0NjhjMjA2MmY0ZmRkY2UyYjcwYTdiYmIyMWM3OGI1YmFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNs
dWRlICJGRU1lcmdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiU1ZH
RkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApA
QCAtNDQsMjQgKzQzLDIyIEBAIFJlZjxTVkdGRU1lcmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1l
bnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJn
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gZWZm
ZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBl
ZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbWVy
Z2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNW
R0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3Qg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAg
IGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXIubmFtZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsK
ICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0
LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0
KCk7Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0
dXJuIHsgRkVNZXJnZTo6Y3JlYXRlKG1lcmdlSW5wdXRzLnNpemUoKSksIFdURk1vdmUobWVyZ2VJ
bnB1dHMpIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5k
ZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4MDJkMjgzY2Y0ZTNjMi4uZjRkNTA4OGEzMjJh
ZmRjOTNlNDU2YzEwYzM1YTZiOTQ0Yjc0MDBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0
eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3Bl
cnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3By
b3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0
eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3
OTVkMzIxYi4uNmE5NGE1ZGUxNjRkNDdlZTYxMmU1ZmI5ZTc3MjE3Mjg4ODFiMTRmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMjIsNyAr
MjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCIKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRl
ICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNl
clV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zOSw3
ICszOSw3IEBAIGlubGluZSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAg
IFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1faW4xPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAg
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRv
ckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9y
cGhvbG9neU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclBy
b3BlcnR5PFNWR05hbWVzOjpyYWRpdXNBdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9y
YWRpdXNYLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwog
fQpAQCAtNTksOSArNTksOSBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1
cyhmbG9hdCB4LCBmbG9hdCB5KQogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAg
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRz
PE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9y
cGhvbG9neU9wZXJhdG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFs
dWUgPiAwKQotICAgICAgICAgICAgbV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1v
cnBob2xvZ3lPcGVyYXRvclR5cGU+KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9tb3Jw
aG9sb2d5T3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHBy
b3BlcnR5VmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NSw3ICs4NSw3IEBA
IGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCogZWZmZWN0LCBjb25zCiB7CiAgICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5
ID0gc3RhdGljX2Nhc3Q8RkVNb3JwaG9sb2d5Kj4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNl
dE1vcnBob2xvZ3lPcGVyYXRvcihzdmdPcGVyYXRvcigpKTsKKyAgICAgICAgcmV0dXJuIG1vcnBo
b2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IoKSk7CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CiAgICAgICAgIC8vIEJvdGgg
c2V0UmFkaXVzIGZ1bmN0aW9ucyBzaG91bGQgYmUgZXZhbHVhdGVkIHNlcGFyYXRlbHkuCiAgICAg
ICAgIGJvb2wgaXNSYWRpdXNYQ2hhbmdlZCA9IG1vcnBob2xvZ3ktPnNldFJhZGl1c1gocmFkaXVz
WCgpKTsKQEAgLTExNCwyMSArMTE0LDE4IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmls
dGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChpbjEoKSk7CiAgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKICAgICBmbG9hdCB5
UmFkaXVzID0gcmFkaXVzWSgpOworICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1cyA8IDApCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xv
Z3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgcmV0dXJuIHsgRkVNb3JwaG9sb2d5OjpjcmVhdGUobW9ycGhvbG9neU9wZXJhdG9yKCks
IHhSYWRpdXMsIHlSYWRpdXMpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgK
aW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZmNjZhYTY2OS4uY2JmOTViOTNk
YjNiYThlYTVjY2MxNWRlZmQzNTVhZDYyNDE0ODhhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0yNiwxMiArMjYsMTIgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xv
Z3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3Bl
cmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJu
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7IH0KIAotICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKG1vcnBob2xvZ3lPcGVyYXRvcikg
ewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1vcnBob2xvZ3lPcGVyYXRvciBmcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0gImVyb2Rl
IikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU7CkBAIC02
MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVzKGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4x
LT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgc3ZnT3BlcmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9n
eU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3Bl
cmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRvci0+Y3VycmVudFZhbHVl
PE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJl
dHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgcmFkaXVzWSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVudFZhbHVlKCk7IH0KIAogICAgIFNWR0FuaW1h
dGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9Ci0gICAgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0
b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBtb3JwaG9sb2d5T3BlcmF0b3JBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CiAgICAgU1ZHQW5pbWF0ZWRO
dW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWDsgfQogICAgIFNWR0Fu
aW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQoKSB7IHJldHVybiBtX3JhZGl1c1k7IH0KIApA
QCAtODEsMTEgKzgxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZm
ZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdP
cGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1f
bW9ycGhvbG9neU9wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1i
ZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVh
dGUodGhpcykgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5pZGwKaW5kZXggYTJjMTgxZjJlNjM3Y2QzOTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4u
MmQyMWYyYTFkODg4ZDAyZWMxNzlkZjEwZTJkZTQzZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAog
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNWR19NT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAg
ID0gMjsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGlu
MTsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhv
bG9neU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBv
cGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBy
YWRpdXNYOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJh
ZGl1c1k7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXgg
MDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uZGM2OTJkYWJiYWZjNGQ2
YjZhZjNlNDQyZWNjODVjMTU4Y2QwMTI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zm
c2V0RWxlbWVudC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkZFT2Zmc2V0Lmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtODEsMTYgKzgxLDEzIEBAIHZvaWQgU1ZH
RkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVm
ZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRl
KGZpbHRlciwgZHgoKSwgZHkoKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5w
dXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU9mZnNldDo6Y3JlYXRl
KGR4KCksIGR5KCkpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IDU3NDczZGNjNzJkYjY3YjEyNWVhMmVkNDY1ZTM1
YjU3MzcwNDliZWUuLjNlZTg4Y2VmZGQyNTJlNzIwYmNjNDA2Y2E2NTExNzQxZDA2ZWQxNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMz
OGExYjZhNTVmY2RiODIxYTA5ZjBhY2MzYzIwN2VhODEuLmRiOTM3Y2ExNTBiODQ0MWI5NDViNGIw
NWU3MjBhZmJkNzdhYTU5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBv
aW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExp
Z2h0RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKQEAgLTM5LDE5ICszOCwxOSBAQCBSZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVu
dD4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVQb2ludExpZ2h0RWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6
OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRT
b3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRl
ciYpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVy
LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRh
cmdldEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVy
ZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0
aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7
Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQ
b2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMu
aHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigp
ICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVy
ZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICBp
ZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9
IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94Lmhl
aWdodCgpKTsKKy8vCisvLyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0
ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RS
L1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9z
aXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllD
b3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQp
OworLy8gICAgfSBlbHNlCisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5
KCksIHooKSk7CiAgICAgCiAgICAgcmV0dXJuIFBvaW50TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3Np
dGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaApp
bmRleCAzM2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0NWU0OGRhNzllLi5jZGViZTQ3NjE4
NDczMTViMmI5Yjg2NmMyMDE0YzBkMzgyOWVjMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVBvaW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShj
b25zdCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihTVkdGRVBvaW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuY3BwCmluZGV4IDliN2NlNDBhYjk3MTZhZTRmMzM1ZjU0YjI0Y2RhNDU5YTg0MjlhNTkuLmMx
MTY0MWIwZTIwYjZiNjUwYzliZDY3YjlkZDQ2ODI4YjlkNmRkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTk2LDcgKzk2LDcgQEAgYm9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgICAg
IEFTU0VSVChyZW5kZXJlcik7CiAgICAgICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxl
KCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUo
KS5saWdodGluZ0NvbG9yKCkpOwotICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0
TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5z
ZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFN1cmZh
Y2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiBlZmZlY3QKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25l
bnRBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0U3BlY3VsYXJFeHBv
bmVudChzcGVjdWxhckV4cG9uZW50KCkpOwogCi0gICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25z
dF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7Cisg
ICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJM
aWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVs
ZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBB
U1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTYwLDI4ICsxNjAsMzEgQEAgdm9pZCBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0K
IAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRl
cikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkp
OwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0
ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlz
KTsKLSAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRl
ckJ1aWxkZXIpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgQ29sb3IgY29sb3Ig
PSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0KLSAgICBhdXRvIGVmZmVjdCA9
IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgp
LCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0
aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7Cisg
ICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVt
ZW50KHRoaXMpOworICAgIGlmICghbGlnaHRFbGVtZW50KQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIAorICAgIHJldHVybiB7CisgICAgICAgIEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKAor
ICAgICAgICAgICAgcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpLAorICAgICAgICAg
ICAgc3VyZmFjZVNjYWxlKCksCisgICAgICAgICAgICBzcGVjdWxhckNvbnN0YW50KCksCisgICAg
ICAgICAgICBzcGVjdWxhckV4cG9uZW50KCksCisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3Ro
WCgpLAorICAgICAgICAgICAga2VybmVsVW5pdExlbmd0aFkoKSwKKyAgICAgICAgICAgIGxpZ2h0
RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyKSksCisgICAgICAgIHsgeyAqaW5wdXQxIH0gfQor
ICAgIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUxNTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0
N2IxNDYuLjUyZDAxMzI1NzIxOGEyZDA1OWQzNTg5NTU0YjJhNzJmYTUzZTVlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAt
NTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGln
aHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQu
Y3BwCmluZGV4IGQ2ZGEzMTA2NGNiMWIzN2U4Y2M5Mzg3NGVhNGFhOWNmMmRmYmZmZWUuLjkwNGM4
YWJhMTQ0ZGQ0YWUzYTg2YzAwYTdkOTQ4ZGQxOTRiYTU5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVk
ZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CkBAIC0zOSwyNyArMzgsMjcgQEAgUmVmPFNWR0ZFU3BvdExpZ2h0RWxlbWVudD4gU1ZHRkVT
cG90TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGEKICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVNwb3RMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
KTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291
cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QK
IHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247CiAgICAgRmxvYXRQb2ludDNEIHBvaW50c0F0
OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVy
ZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAg
IHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0
aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVm
ZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NW
Ry9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMu
b3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAg
IHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhN
aW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zs
b2F0KTsKLQotICAgICAgICBwb2ludHNBdC5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNB
dFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZl
cmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAg
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGln
aHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1Vu
aXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFoo
KSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZl
cmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAg
ICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBvaW50c0F0WCgpLCBwb2ludHNBdFkoKSwgcG9p
bnRzQXRaKCkpOwotICAgIH0KKy8vCisvLyAgICBpZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkg
PT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAg
ICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgp
OworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiBy
ZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VC
b3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vICAgICAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRl
IGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0
X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3Rh
bmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlD
b3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7CisvLworLy8gICAgICAgIHBvaW50c0F0LnNldFgo
cmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwor
Ly8gICAgICAgIHBvaW50c0F0LnNldFkocmVmZXJlbmNlQm94LnkoKSArIHBvaW50c0F0WSgpICog
cmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8v
ICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVm
ZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigp
KSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgcG9zaXRpb24g
PSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICAgICAgcG9pbnRzQXQgPSBGbG9h
dFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7CisvLyAgICB9
CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291cmNlOjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0
LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0aW5nQ29uZUFuZ2xlKCkpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFm
NTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLmJlOThmYmVkODY2YzViY2UyZjk5NzU3M2Y3NTliYTQy
MzMyNWM3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgK
QEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRT
b3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkg
PT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3
MzcwLi43ZGYyNTJkYWE2NjNkMGIwYWVjMTViODE0YWUyMzBlMzYxNzQxYWRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNs
dWRlICJGRVRpbGUuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC03MCwxNiArNzAsMTMgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+Pj4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBGRVRpbGU6OmNyZWF0ZSgpLCB7ICppbnB1dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEy
MmRjNDJhMzNhOTFmLi43MWE5NzQ2ODM3NjBhZGMwMTZjYzZkZWJlZTM1YTE5MTM1MmVkYzdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgz
ZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRhNGQuLmNmZDRhZDIxNmZhNGE5ZDRkM2JiZDAyMDc3
OWRhYTY4ZTg1YzdmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAKQEAgLTExNywxMSArMTE3LDExIEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImKSBjb25zdAogewog
ICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZp
bHRlciwgdHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3Rh
dmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiB7IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5
cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBz
ZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKSwgeyB9IH07CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4
IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEuLmI5MTRkZjM4Y2JhMDBm
ZDc4YjM4ZjQyYzNiMGZiMDAyZTgyMmE1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAog
ICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lz
dHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCmluZGV4IDgxM2JjYmQwODIw
Y2FjNjc3YTc5N2YyN2JjY2U4Y2UxMDkxMmJjNDcuLmRmNjA0YmEyYTZjZDc2ODYyYzkzMzIyZDZj
N2RjODkzZGI3ZTllZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAK
QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcAppbmRleCBmZjUyMjMwOTQ2NmIwNDBiZWYwODlkMTU3YjM4NmRm
ZmJiMDVjNjE5Li43NzFhNDE2ZWYwZWYwNTU4MmQ3Mjk4MWEzMGNjOWQ2MmU2NTI5ZjQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcApAQCAtMjUsOSArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIK
LSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC05MywyMiArOTEsNiBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAg
IGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoZmlsdGVyRWZmZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVj
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0
dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1ko
dHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAg
ICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNXaWR0aCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWln
aHQodHJ1ZSk7Ci19Ci0KIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYm
IHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewogICAgIHJldHVybiBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUo
c3R5bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0Mjgx
MWE2ZmQ3NDY3NzJhY2E3Li5lYzI2OWYwM2M0MzYxNzI4NWMyY2UwNjc4NTIxNGFkN2FhZjA1Zjc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zMSwxNyArMzEsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBTVkdGaWx0
ZXJCdWlsZGVyOworY2xhc3MgU1ZHRmlsdGVyOwogCiBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMpOwogcHVibGlj
OgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCopIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2
YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KLSAgICB2aXJ0dWFsIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKLQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0
cnk8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTVkdFbGVtZW50PjsKIAog
ICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkgY29uc3QgeyByZXR1cm4gbV94LT5jdXJyZW50
VmFsdWUoKTsgfQpAQCAtNTYsNiArNTAsMTAgQEAgcHVibGljOgogICAgIFNWR0FuaW1hdGVkTGVu
Z3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAgICAgU1ZHQW5pbWF0
ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yZXN1bHQ7IH0KIAorICAgIHZp
cnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3QgPSAwOworICAgIC8vIFJldHVybnMgdHJ1
ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KKyAgICB2
aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKKwogcHJvdGVjdGVkOgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApp
bmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li5iZGM1YmU1YjBj
ZTc5ZDhiYzcxMGNhZmM0NTM3NTZlZWMwYTk3MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMyw2ICszLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjMsMTMwICsyNCw3MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNWR0ZFSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJU
cmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRl
cmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6
RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwg
bV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4g
RkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRUltYWdlKFdURk1vdmUoaW1hZ2UpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAK
LUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBj
b25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJl
c2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdl
KQotICAgICwgbV90cmVlU2NvcGUoJnRyZWVTY29wZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJ
bWFnZTo6RkVJbWFnZShSZWY8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBtX2ltYWdlKFdURk1vdmUoaW1h
Z2UpKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7
CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0
ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0Zsb2F0UmVjdCBGRUltYWdlOjpkcmF3aW5nUmVjdChj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdlLCBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIHsgfTsKKy8vICAgIEZsb2F0UmVjdCBwYWludFJl
Y3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkpOworLy8KKy8vICAgIEZsb2F0UmVjdCBzcmNSZWN0ID0geyB7IH0sIG1faW1h
Z2UtPnNpemUoKSB9OworLy8gICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3Qo
cGFpbnRSZWN0LCBzcmNSZWN0KTsKKy8vCisvLyAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQorLy8g
ICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UK
Ky8vICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKy8vCisvLyAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJ
bWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0
cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorYm9vbCBGRUltYWdlOjphcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0Jikg
Y29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgdHJlZVNj
b3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7Ci19Ci0KLXZvaWQgRkVJbWFnZTo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBm
aWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAg
ICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBtX3ByZXNlcnZl
QXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwotICAgIH0gZWxz
ZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAg
ICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5k
ZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNU
b0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7
Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworLy8g
ICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKy8vCisvLyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVz
dWx0LmltYWdlQnVmZmVyKCk7CisvLyAgICBpZiAoIXJlc3VsdEltYWdlKQorLy8gICAgICAgIHJl
dHVybiBmYWxzZTsKKy8vCisvLyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworLy8g
ICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5z
aXplKCkpOworLy8gICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJl
Y3QsIHNyY1JlY3QpOworLy8KKy8vICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisvLyAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0
aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS5jb250
ZXh0KCkuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigp
IGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFSW1hZ2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X3RyZWVTY29wZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byB0YXJnZXQgPSBT
VkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKG1faHJlZiwgKm1fdHJl
ZVNjb3BlKTsKLSAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigp
OwotfQotCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1f
aW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGRUltYWdlIHJl
c3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNl
dFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkpOwotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRl
cmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBS
ZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNp
emUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RS
ZWN0LCBzcmNSZWN0KTsKLSAgICB9Ci0KLSAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJz
b2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgIGRlc3RSZWN0Lm1vdmUoLXBhaW50TG9j
YXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwotCi0gICAgYXV0byYgY29udGV4dCA9IHJl
c3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSA9IGZpbHRlcigpLmFic29sdXRl
VHJhbnNmb3JtKCk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3Jt
KTsKLQotICAgICAgICBSZWZQdHIgY29udGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50Pihy
ZW5kZXJlci0+ZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2
ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0
KGNvbnRleHROb2RlLmdldCgpKTsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7
Ci0KLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJlZmVyZW5jaW5nIGFuIGVsZW1lbnQgd2l0aCBw
ZXJjZW50YWdlIHVuaXRzLCBlZy4gPHJlY3Qgd2l0aD0iMzAlIj4gdGhvc2UgdmFsdWVzIHdlcmUg
cmVzb2x2ZWQgYWdhaW5zdCB0aGUgdmlld3BvcnQuCi0gICAgICAgICAgICAvLyBCdWlsZCB1cCBh
IHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBmcm9tIHRoZSB2aWV3cG9ydCBzcGFjZSB0byB0aGUg
ZmlsdGVyIHByaW1pdGl2ZSBzdWJyZWdpb24uCi0gICAgICAgICAgICBpZiAobGVuZ3RoQ29udGV4
dC5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRl
eHQuY29uY2F0Q1RNKG1ha2VNYXBCZXR3ZWVuUmVjdHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
dmlld3BvcnRTaXplKSwgZGVzdFJlY3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFmZmluZVRy
YW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0gICAgICAgIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQoY29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJh
bnNmb3JtYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3Qp
OworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxscHRyKTsKIH0KIAot
VGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZTsKLSAgICBpZiAo
bV9pbWFnZSkKLSAgICAgICAgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSgpOwotICAgIGVsc2Ug
aWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAg
ICAgaW1hZ2VTaXplID0gZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSkuc2l6ZSgpOworICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBtX2lt
YWdlLT5zaXplKCk7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
dHMgPDwgIiBpbWFnZS1zaXplPVwiIiA8PCBpbWFnZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1h
Z2VTaXplLmhlaWdodCgpIDw8ICJcIl1cbiI7CiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1
bXAgYWxzbyBvYmplY3QgcmV0dXJuZWQgYnkgU1ZHRkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0
dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5oCmluZGV4IGFjMTYwZWRjZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmE4
MTQ0Zjc2N2NiZDg3NGNlZjQ1MDY5NWFjMGJhZjUwZDJjZDFjNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI3LDM2ICsyOCwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIERvY3VtZW50OwogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3Mg
VHJlZVNjb3BlOwogCiBjbGFzcyBGRUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVy
JiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0g
ICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRy
ZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlKFJlZjxJbWFnZT4sIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgfkZF
SW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYs
IFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSYpOworICAgIEZFSW1hZ2UoUmVmPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlJik7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFSW1hZ2UiOyB9CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVj
dFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KKyAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZW5kZXJFbGVt
ZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5
KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpIGZpbmFsOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5h
bDsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8
SW1hZ2U+IG1faW1hZ2U7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsK
IAotICAgIC8vIG1fdHJlZVNjb3BlIHdpbGwgbmV2ZXIgYmUgYSBkYW5nbGluZyByZWZlcmVuY2Uu
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyNDMKLSAgICBU
cmVlU2NvcGUqIG1fdHJlZVNjb3BlIHsgbnVsbHB0ciB9OwotICAgIFN0cmluZyBtX2hyZWY7Cisg
ICAgUmVmPEltYWdlPiBtX2ltYWdlOwogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBt
X3ByZXNlcnZlQXNwZWN0UmF0aW87CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCA5YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3
NDI3YjM3MTkzNTkyYjdiY2U3Li41NzMyMDlhZTg5ZTRlOWZkODgxNGI0ZDY4YTJjZTE2ZTQwOGFk
ZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwyOSArMjMsMTU4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmls
dGVyLmgiCiAKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBo
YS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zv
cm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURy
YXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94
KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwgbV9lZmZlY3RCQm94
TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRl
KFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOworICAgIGlmIChmaWx0ZXJFbGVtZW50
LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcihyZW5k
ZXJpbmdNb2RlKSk7CisgICAgCisgICAgZmlsdGVyLT5zZXR1cEJ1aWx0aW5FZmZlY3RzKHByZXZp
b3VzRWZmZWN0KTsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RzSW5wdXRzIGVmZmVjdHNJbnB1dHM7
CisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRWZmZWN0cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5w
dXRzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRF
eHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBmaWx0ZXI7Cit9CisKK1NWR0ZpbHRlcjo6U1ZHRmlsdGVyKFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihyZW5kZXJpbmdNb2RlLCBUeXBlOjpTVkcpCit7
Cit9CisKK3ZvaWQgU1ZHRmlsdGVyOjphZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBu
YW1lLCBSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKG5hbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3QucHRyKCk7CisgICAgbV9u
YW1lZEVmZmVjdHMuc2V0KG5hbWUsIFdURk1vdmUoZWZmZWN0KSk7Cit9CisKK1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkg
Y29uc3QKK3sKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fbGFzdEVm
ZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7CisKKyAgICAgICAgcmV0dXJu
IG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAg
fQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMobmFtZSkpCisgICAgICAgIHJl
dHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChuYW1lKTsKKworICAgIHJldHVybiBtX25hbWVkRWZm
ZWN0cy5nZXQobmFtZSk7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3Rz
KEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCiB7Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJl
Z2lvbiA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyUmVnaW9uKTsKKyAgICBpZiAo
cHJldmlvdXNFZmZlY3QpIHsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpLCBSZWY8RmlsdGVyRWZmZWN0PiB7ICpwcmV2aW91c0VmZmVjdCB9
KTsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUo
KSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8gc291cmNlR3JhcGhpYyA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1fYnVp
bHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhp
Yyk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwg
U291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKIH0KIAotRmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdAorYm9vbCBTVkdGaWx0ZXI6
OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZl
Y3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQogewotICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQot
ICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIGF1
dG8gc291cmNlR3JhcGhpYyA9IG5hbWVkRWZmZWN0KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUo
KSk7CisgICAgYXV0byBzb3VyY2VBbHBoYSA9IG5hbWVkRWZmZWN0KFNvdXJjZUFscGhhOjplZmZl
Y3ROYW1lKCkpOworICAgIGVmZmVjdHNJbnB1dHMuc2V0KHNvdXJjZUFscGhhLnJlbGVhc2VOb25O
dWxsKCksIEZpbHRlckVmZmVjdFZlY3RvciB7IHNvdXJjZUdyYXBoaWMucmVsZWFzZU5vbk51bGwo
KSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAg
ICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0gZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7
CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVjdCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAg
ICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRmls
dGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgY29u
c3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmlsdGVyRWZmZWN0VmVjdG9y
JiBzdGFjaykKK3sKKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QgfSk7
CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZvciAoYXV0byYgaW5wdXRFZmZl
Y3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3QpKSB7CisgICAgICAgIGlmICghYnVpbGRFeHBy
ZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5wdXRzLCBzdGFjaykpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gZWZmZWN0LnB0cigpKTsKKworICAgIHN0YWNr
LnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1
aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQor
eworICAgIGlmICghbV9sYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOworICAgIHJldHVybiBidWlsZEV4cHJlc3Npb24o
eyAqbV9sYXN0RWZmZWN0IH0sIGVmZmVjdHNJbnB1dHMsIHN0YWNrKTsKK30KKworRmlsdGVyUmVz
dWx0KiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFzdGFj
ay5pc0VtcHR5KCkpCisgICAgICAgIHNvdXJjZUltYWdlID0gc3RhY2sudGFrZUxhc3QoKS0+aW1h
Z2VCdWZmZXIoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0
KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGVmZmVjdC0+YXBw
bHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICpyZXN1
bHQgfSk7CisgICAgICAgIG91dHB1dC5yZXN1bHRzKCkuYWRkKGVmZmVjdCwgUmVmPEZpbHRlclJl
c3VsdD4oKnJlc3VsdCkpOworICAgIH0KIAotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9m
aWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gMSk7CisgICAg
YXV0byByZXN1bHQgPSBzdGFjay50YWtlTGFzdCgpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJl
c3VsdC5sZWFrUmVmKCk7CiB9CiAKLVJlZjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYg
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9k
ZSkKK1RleHRTdHJlYW0mIFNWR0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGFic29sdXRlVHJhbnNmb3JtLCBhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJSZWdpb24s
IGVmZmVjdEJCb3hNb2RlKSk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Npb24p
CisgICAgICAgIGVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOworICAgIHJldHVybiB0czsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA4MDkz
MTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVhMGZiMTcwMGNmLi5kMjliZWI1NzlkM2VmZWFiY2E4
NDNkOGFlNjIxMDNkNWJjODNjZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMCw0MSArMjEsNTYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVk
ZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0Zp
bHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxT
VkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sKTsKKyAgICBzdGF0aWMg
UmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBSZW5kZXJpbmdNb2Rl
ID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0Vm
ZmVjdCA9IG51bGxwdHIpOwogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bjsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUpIGNvbnN0OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KIAotICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oRmxvYXRTaXplKSBjb25zdCBmaW5hbDsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPFNWR0ZpbHRlcj4+IGRl
Y29kZShEZWNvZGVyJik7CiAKLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9h
dFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5n
Qm94OyB9Citwcml2YXRlOgorICAgIFNWR0ZpbHRlcihSZW5kZXJpbmdNb2RlKTsKIAotICAgIGJv
b2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBh
ZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7
CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5F
ZmZlY3RzKEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOworICAgIGJvb2wgYnVpbGRFZmZl
Y3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CisgICAgYm9vbCBi
dWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZl
Y3RzSW5wdXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjayk7CisgICAgYm9vbCBidWlsZEV4
cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi0gICAgRmxvYXRSZWN0IG1f
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5k
aW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0
UmVjdCBtX2ZpbHRlclJlZ2lvbjsKLSAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFsOworCisgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IGZpbmFsOworCisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZm
ZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0
ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKKyAgICBWZWN0b3I8UmVmPGNvbnN0IEZpbHRlckVm
ZmVjdD4+IG1fZXhwcmVzc2lvbjsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZl
Y3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIFNWR0ZpbHRlcjo6ZW5j
b2RlKEVuY29kZXImKSBjb25zdAoreworICAgIAorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNv
ZGVyPiBzdGQ6Om9wdGlvbmFsPFJlZjxTVkdGaWx0ZXI+PiBTVkdGaWx0ZXI6OmRlY29kZShEZWNv
ZGVyJikKK3sKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVy
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikg
eyByZXR1cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci50eXBlKCkgPT0g
V2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpTVkc7IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5E
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZjNhODA1
MDQyOTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdiOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKLQotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCi0jaW5jbHVk
ZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNWR0ZpbHRlckJ1aWxkZXI6OlNW
R0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKLXsKLSAg
ICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJj
ZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3RO
YW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNvdXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWls
dGluRWZmZWN0cygpOwotfQotCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9t
U3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KQotewotICAgIGlmIChpZC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0OwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3Q7Ci0gICAgbV9uYW1lZEVm
ZmVjdHMuc2V0KGlkLCBtX2xhc3RFZmZlY3QpOwotfQotCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25z
dAotewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkK
LSAgICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7Ci0KLSAgICAgICAgcmV0dXJuIG1fYnVp
bHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQoaWQpOwotCi0gICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChp
ZCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZl
cmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgZWZmZWN0LCBSZW5kZXJPYmplY3QqIG9iamVj
dCkKLXsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBl
ZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7
Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZmZWN0UmVuZGVyZXIuY29udGFpbnMob2JqZWN0
KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgp
KTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIHRoZSBz
YW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAgICAgICBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3QuZ2V0KCkpOwotCi0gICAgLy8gSWYgb2JqZWN0
IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgYXR0YWNoZWQgZm9yIHNvbWUK
LSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4gbWVhbiB0aGF0IGNlcnRhaW4gdHlwZXMgb2Yg
aW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8gd29yayAodGhlIExheW91dE9iamVjdCAtPiBG
aWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBiZSBkZWZpbmVkKS4KLSAgICBpZiAob2JqZWN0
KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChvYmplY3QsIGVmZmVjdC5nZXQoKSk7Ci19
Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKLXsKLSAgICBtX2xhc3RF
ZmZlY3QgPSBudWxscHRyOwotICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFyKCk7Ci0gICAgbV9lZmZl
Y3RSZWZlcmVuY2VzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZW5kZXJlci5jbGVhcigpOwotICAg
IGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJS
ZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQotewotICAgIGlmICghZWZmZWN0
LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWZmZWN0LT5jbGVhclJlc3Vs
dCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3Nl
ZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7Ci0K
LWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RT
ZXQ7Ci0KLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpOwotCi0gICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3Qm
IHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Ci0gICAgCi0g
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVW5pdHM7IH0KLSAgICB2b2lkIHNldFByaW1pdGl2ZVVuaXRzKFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgdW5pdHMpIHsgbV9wcmltaXRpdmVVbml0cyA9IHVuaXRzOyB9
Ci0KLSAgICB2b2lkIGFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVj
dD4pOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9t
U3RyaW5nJikgY29uc3Q7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0KLSAgICB2b2lkIGFwcGVuZEVmZmVjdFRvRWZm
ZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiYmLCBSZW5kZXJPYmplY3QqKTsKLQot
ICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGVmZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0
KiBlZmZlY3QpCi0gICAgewotICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVs
b25ncyB0byB0aGlzIGJ1aWxkZXIuCi0gICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMu
Y29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmlu
ZChlZmZlY3QpLT52YWx1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhl
IGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5nIGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCi0g
ICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9i
amVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQotCi0gICAgdm9p
ZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJF
ZmZlY3QqKTsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygp
Ci0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFs
dWVzKCkpCi0gICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVy
RWZmZWN0U2V0KCkpOwotICAgIH0KLQotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZp
bHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7Ci0gICAgLy8gVGhlIHZhbHVlIGlz
IGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVyIGVmZmVjdHMsCi0gICAgLy8gd2hp
Y2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBlZmZlY3QuCi0gICAgSGFzaE1hcDxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0PiBtX2VmZmVjdFJlZmVyZW5jZXM7Ci0gICAg
SGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJFZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOwot
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwotICAgIEZsb2F0UmVjdCBt
X3RhcmdldEJvdW5kaW5nQm94OwotICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmlt
aXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSB9
OwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVmN2ViZGMxYjFlMTkxZDIyMGQ2NTJiYzgwNzUxZGVmNTJjMTUxZGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9t
ZXRyeS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0ZpbHRlckdlb21ldHJ5IDogcHVi
bGljIEZpbHRlckdlb21ldHJ5IHsKK3B1YmxpYzoKKyAgICBTVkdGaWx0ZXJHZW9tZXRyeShjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiBy
ZXNvbHV0aW9uKQorICAgICAgICA6IEZpbHRlckdlb21ldHJ5KGZpbHRlclJlZ2lvbiwgc291cmNl
SW1hZ2VSZWN0KQorICAgICAgICAsIG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0pCisgICAgICAgICwgbV9yZXNvbHV0aW9uKHJlc29sdXRpb24pCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgdHJhbnNmb3JtVG9BYnNvbHV0ZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWN0SW5V
c2VyU3BhY2UgPSBtX2Fic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7CisgICAgICAgIHJl
Y3RJblVzZXJTcGFjZS5zY2FsZShtX3Jlc29sdXRpb24pOworICAgICAgICByZXR1cm4gcmVjdElu
VXNlclNwYWNlOworICAgIH0KKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gRmlsdGVyR2VvbWV0cnk6OnByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOwor
ICAgICAgICAKKy8vICAgICAgICByZXR1cm4gRmxvYXRSZWN0IHsKKy8vICAgICAgICAgICAgcHJp
bWl0aXZlQm91bmRyaWVzLngudmFsdWVfb3Ioc3VicmVnaW9uLngoKSksCisvLyAgICAgICAgICAg
IHByaW1pdGl2ZUJvdW5kcmllcy55LnZhbHVlX29yKHN1YnJlZ2lvbi55KCkpLAorLy8gICAgICAg
ICAgICBwcmltaXRpdmVCb3VuZHJpZXMud2lkdGgudmFsdWVfb3Ioc3VicmVnaW9uLndpZHRoKCkp
LAorLy8gICAgICAgICAgICBwcmltaXRpdmVCb3VuZHJpZXMuaGVpZ2h0LnZhbHVlX29yKHN1YnJl
Z2lvbi5oZWlnaHQoKSkKKy8vICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBGbG9hdFNpemUgbV9yZXNvbHV0aW9uOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoR3JhbW1hci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNw
cAppbmRleCAwODc1YTVlY2ZmYTljNjdlNjBjMWFmNjZjOTBjNzA5NWZlN2JkMTA0Li44ZmIwZjQw
MjZjYmUzOTkwNDAzMjFmM2UyYTgyOWM2ODUyZDQ4Yjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhH
cmFtbWFyLmNwcApAQCAtMTk4Niw3ICsxOTg2LDcgQEAgeXlyZWR1Y2U6CiAjbGluZSA0MTkgIldl
YkNvcmUveG1sL1hQYXRoR3JhbW1hci55IgogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVkaWNhdGVMaXN0KCh5eXZz
cFsoMikgLSAoMildLmV4cHJlc3Npb25WZWN0b3IpKTsKLSAgICAgICAgKHl5dmFsLmV4cHJlc3Np
b24pID0gbmV3IEZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4oKHl5dnNwWygxKSAt
ICgyKV0uZXhwcmVzc2lvbikpLCBXVEZNb3ZlKCpwcmVkaWNhdGVMaXN0KSk7CisgICAgICAgICh5
eXZhbC5leHByZXNzaW9uKSA9IG5ldyBYUGF0aDo6RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKICAgICA7fQogICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkK
aW5kZXggYjc1MWE2MWJhM2Y0MjIyNDBlN2MwYmUwZTRmNWQ2MTNlMmY3YTU1Yi4uMzUzMDk4MGFi
MmE5NGU3NjZiZGNjYjkyMGJkN2E5ZTRjZGEyYzUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIueQpAQCAtNDE4LDcgKzQxOCw3IEBAIEZpbHRlckV4cHI6CiAgICAgUHJpbWFyeUV4cHIgUHJl
ZGljYXRlTGlzdAogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVkaWNhdGVMaXN0KCQyKTsKLSAgICAgICAgJCQgPSBu
ZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRp
Y2F0ZUxpc3QpKTsKKyAgICAgICAgJCQgPSBuZXcgWFBhdGg6OkZpbHRlcihzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4oJDEpLCBXVEZNb3ZlKCpwcmVkaWNhdGVMaXN0KSk7CiAgICAgfQogICAg
IDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IGFhOTQ1NjQxNDlkMDhlNDg5NjM0N2Q5
NGYwMzk0NjE1NDcyOWJmNzMuLjExZWZhYzkxZDQ0YzQ2ZWM4NTNjNzhjNjhlYzU0MGNhZGE1ZWNj
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBA
IC00NzgsNiArNDgwLDM1IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVh
YmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nCiAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNl
LCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlJiYgZ2VvbWV0cnlSZWZlcmVuY2UsCisgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJlbmNlLnRha2VGaWx0ZXIoKTsKKyAgICBhdXRvIGdl
b21ldHJ5ID0gZ2VvbWV0cnlSZWZlcmVuY2UudGFrZUdlb21ldHJ5KCk7CisgICAgCisgICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBp
bWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihpZGVu
dGlmaWVyKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdlQnVmZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwg
V1RGTW92ZShnZW9tZXRyeSkpOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1
dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFn
ZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xvclNwYWNlKCkgfSk7CisgICAgICAgIGlmICghYml0
bWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9p
bnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VS
ZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaAppbmRleCA3ZDgwYjcyNTg2Mzk0ZTU1ZWNjY2M5YmY3M2Y5NWVmYjBj
Yzk0MDUwLi4xOTE2MjcyNDA3N2NhMjY3NWU5MDE0NGRjZGY2ZTM1NDZmNGY3Mzc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTU5LDYgKzU5LDExIEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9k
ZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7
CitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOwpAQCAtMTQyLDYgKzE0Nyw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VC
dWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0U2hhcmVhYmxlQml0
bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBX
ZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgZ2V0RmlsdGVyZWRJbWFnZUZvcklt
YWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgSVBDOjpGaWx0
ZXJSZWZlcmVuY2UmJiwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSYmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNh
Y2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJD
b3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFiMjJiNGVh
NGU3MWJjZmFjMGIwZGYuLjI0YmUzNmY2MTZiYTdmM2U4MjE4MTFiNjI0M2E4NTJjMTI2Zjg2YmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0zMiw2ICszMiw3
IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgewogICAgIEdldERhdGFVUkxG
b3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAg
R2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25v
dXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCisgICAgR2V0RmlsdGVyZWRJbWFn
ZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyLCBJUEM6OkZpbHRlckdlb21ldHJ5
UmVmZXJlbmNlIGdlb21ldHJ5KSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGUpIFN5bmNocm9ub3VzCiAgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICBDYWNoZUZvbnQoSVBDOjpGb250
UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxsRm9udHMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWY5YmVhZGUxYmEwNzkwY2NkZDY5ZmNiZjAzOGI4Y2M0Nzc3YTJiNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
RGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRl
ckdlb21ldHJ5Lmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJl
ZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2Uoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQorICAgICAgICA6IG1f
Z2VvbWV0cnkoV1RGTW92ZShnZW9tZXRyeSkpCisgICAgeworICAgIH0KKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4gdGFrZUdlb21ldHJ5KCkgeyByZXR1cm4g
V1RGTW92ZShtX2dlb21ldHJ5KTsgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5PiBtX2dlb21ldHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVu
Y2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ0NDdkMjY5NTQ2NDU1MzBiMzM0MjZkZDY5YzE2ZGVlNTMxNDk5ZTUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ1NTRmls
dGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXIuaD4KKworbmFtZXNwYWNlIElQQyB7
CisKK2NsYXNzIEZpbHRlclJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyUmVmZXJlbmNl
KFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmlsdGVyKQorICAgICAgICA6IG1fZmlsdGVyKFdURk1v
dmUoZmlsdGVyKSkKKyAgICB7CisgICAgfQorCisgICAgUmVmPFdlYkNvcmU6OkZpbHRlcj4gdGFr
ZUZpbHRlcigpIHsgcmV0dXJuIFdURk1vdmUobV9maWx0ZXIpOyB9CisKKyAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBtX2Zp
bHRlci0+dHlwZSgpOworCisgICAgICAgIGlmIChpczxXZWJDb3JlOjpDU1NGaWx0ZXI+KG1fZmls
dGVyLmdldCgpKSkKKyAgICAgICAgICAgIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxXZWJDb3JlOjpD
U1NGaWx0ZXI+KG1fZmlsdGVyKS0+ZW5jb2RlKGVuY29kZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVyPihtX2ZpbHRl
ciktPmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxG
aWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29k
ZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgICAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpD
U1MpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGZpbHRlciA9IFdlYkNvcmU6OkNTU0ZpbHRlcjo6
ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IEZpbHRlclJlZmVyZW5j
ZShXVEZNb3ZlKCpmaWx0ZXIpKSB9OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvIGZpbHRlciA9IFdlYkNvcmU6OlNWR0ZpbHRl
cjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHsgRmlsdGVyUmVmZXJlbmNl
KFdURk1vdmUoKmZpbHRlcikpIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IG1fZmlsdGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eQppbmRleCAzZmRlZGE4YmZjOTQ5YWJhMWQwOWFlMWVjMWU5NmY3OTU4ZDA1YjhmLi44N2M5ODRh
ZmZlNzYwOTY5NmE0OTJlYzE0MTQ2MzA0MTkyZjdjMjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI4MSw2ICsyODEsNyBAQCBkZWYgdHlwZXNfdGhhdF9j
YW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRP
cldvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxh
Z3MnLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNv
cmU6OkZpbHRlclJlZmVyZW5jZScsCiAgICAgICAgICdXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIn
LAogICAgICAgICAnV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJywKICAgICAg
ICAgJ1dlYkNvcmU6OkltYWdlRGVjb2RlcklkZW50aWZpZXInLApAQCAtMjg4LDcgKzI4OSw2IEBA
IGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdX
ZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRpYVNlc3Np
b25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUltYWdlUmVmZXJlbmNlJywK
ICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBs
YXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzN2QwZGQyNDcxZWQ0MzhmOWNkNmM3NTllNDMwOGY3
YjZkMjIyMmQ1Li45MTdmMDY3MjlmY2Q3MzZmMWQ1ZTg1ZGI4YzE4ZTU5MDIyMWI5MWZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMs
NyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNsYXNzZXMgPSB7CiAJfTsKLQlvYmpl
Y3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9IDU0OwogCW9iamVjdHMgPSB7CiAKIC8q
IEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCkBAIC00Njc4LDYgKzQ2NzgsOCBA
QAogCQk3MUJBQTczMTI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tNb2RlbFZpZXcuaDsgcGF0aCA9IGlvcy9XS01vZGVs
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUJBQTczMjI1RkZDQ0JBMDBE
N0NENUQgLyogV0tNb2RlbFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXS01vZGVsVmlldy5tbTsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNp
dGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY5MjcwQzUyRUEwMDUxNUMy
NCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAv
KiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJHZW9tZXRy
eVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjAzNDQ5QTI2QTZD
NDRDMDAwQTVGNTQgLyogTW9ub3RvbmljT2JqZWN0SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb25vdG9uaWNPYmplY3RJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMDM0NDlCMjZBNkM0NzYwMDBBNUY1NCAvKiBSZW5kZXJpbmdVcGRhdGVJRC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJpbmdVcGRhdGVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjI3ODAwQjI0MDhCRDdEMDA3RDM3NkIgLyogUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMxNCw2ICs3MzE2LDggQEAKIAkJCQlC
QzAzMkQ5RTEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oICovLAogCQkJCUJDMDMyRDlGMTBG
NDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmNwcCAqLywKIAkJCQlCQzAzMkRBMDEwRjQzN0QxMDA1
OEMxNUEgLyogRW5jb2Rlci5oICovLAorCQkJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAvKiBG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovLAorCQkJCTcyMDBDRjY5MjcwQzUyRUEwMDUxNUMy
NCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKIAkJCQk5QkQ4QUI0OTI1ODIwRTUyMDA1Mzg2Rjgg
LyogRm9udFJlZmVyZW5jZS5oICovLAogCQkJCTQxNTFFNUMzMUZCQjkwQTkwMEU0N0UyRCAvKiBG
b3JtRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCUMwQ0U3MkFDMTI0N0U3OEQwMEJDMEVDNCAvKiBI
YW5kbGVNZXNzYWdlLmggKi8sCkBAIC0xMzY0OCw3ICsxMzY1Miw2IEBACiAJCTA4NjdENjkwRkU4
NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2pl
Y3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JXb3Jr
c3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDEzMDA7CiAJCQkJ
TGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggMjdiY2QwMDU0NTA5NThlODAyMTIzMzBjMWU4OTZl
M2M4OTE3MzRmYi4uYzg2OTNhZTI5ZDhiYTdkZDJkNDFjY2I0MjFjMDY5YTdkZWEwNGFmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTIwMyw2ICsyMDMsMTQgQEAgcHJvdGVjdGVk
OgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAorICAgIFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBXZWJDb3JlOjpGaWx0ZXIm
IGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBmbHVz
aERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICB9CisKICAgICBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBX
ZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVzdGluYXRpb25Gb3JtYXQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBlYzc5MzQxMDZiMTFiMzY2Yzc4OGM1M2JkOWIy
NDA5Nzk2OWJkOWQ5Li43NjBjNTQzYjMxZjhmNDMxNzM1MWY5ZjY3NWYzZDRjNTNmOTA5NTc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RXcml0
ZXJIYW5kbGUuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjM3LDYgKzIzOCwyNCBAQCBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldFNo
YXJlYWJsZUJpdG1hcChSZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOwogfQogCitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpbWFnZUJ1ZmZlciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNz
YWdlSWZOZWVkZWQoKTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAg
ICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBJUEM6OkZp
bHRlclJlZmVyZW5jZSB7IFJlZjxGaWx0ZXI+IHsgY29uc3RfY2FzdDxGaWx0ZXImPihmaWx0ZXIp
IH0gfSwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShXVEZNb3ZlKGdlb21ldHJ5KSkpLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdl
QnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3Mp
OworICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3VsdCwgc2VuZFJlc3VsdCk7CisKKyAgICBpZiAo
aGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGF1dG8gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFn
ZSgpOworfQorCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRpdmVJ
bWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFuZGxl
LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5
bmNSZXBseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA4N2Fl
NTIyY2JiYjI4MWZjNGE4ODA3NjViOTlmNGM5MDI1NmE5ZDI1Li40ZDdkZTRmNjU1ZjExY2MxYTI5
MDJmMmVjZGQ3MzNlY2Q5OGQ2OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJHUFVQ
cm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIklQQ1NlbWFwaG9yZS5o
IgpAQCAtMTAyLDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0
YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFu
ZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShj
b25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwog
ICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440290</attachid>
            <date>2021-10-05 16:34:27 -0700</date>
            <delta_ts>2021-10-05 17:18:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211005163426.patch</filename>
            <type>text/plain</type>
            <size>669160</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc5OGU4MWE0MTUwYWZm
MzUzNjA2ZTc5M2M1NDA2N2VlMjJmODRlYS4uNDAzNWM0YTY0ZTdjMTc3NTc3ODEwMjQxMjk5ZjY4
OGJjZjEzYTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTA1
ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBjYW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9u
IHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OTk1ZWNlZTVjNmIyYWY1MDZhYmU5YWU3
MjI2OGQ1Y2ZkMzViZDNkLi43ZTFhYjA3NGZhNjcxZWRhMzMyYThlNDdmZjM4NTk3Njc3ZmM5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTEwLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6Rmls
dGVyUmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVy
KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2Rl
Y2xhcmVkKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTA1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0aG9yaXphdGlv
biBoZWFkZXIgbG9zdCBvbiAzMHggcmVkaXJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDFlZmY2YWVi
MzliYTAyYTczNWYyMTRjMzRmZDcwYzEwMzNlOTNmMTAuLjEzNmRiYTRiYTgyNTE5ODZkM2Q2MDM3
NmI4MTRkMDQ4NTUyNTY1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ3LDE0ICsyMDQ3LDM1IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxv
b2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0
Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94
LmNwcApAQCAtMjYzNiw3ICsyNjU3LDYgQEAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
CiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAot
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5p
bWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBmMzBmZGFiYTA0YzI2MDY3ZjE2
NDhmMjc0MjcyZDVlMmFlMWQzZDRkLi5mZTk1NzhiMmQ4MmQzZjEyOGQyNWU4MzBkMWIxOTk4MTg0
YTNlNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM5OCw3ICszOTgsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENv
cmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTRjM2Q3MGMyY2IxM2RmYzFjMjBjYjI2
MDg1MjY3MGY0ZWQ3ZTVhLi5mZGRhMGJiNDdlOTUxNTE2OWMzZjA1NjU4NWZlMDFkMWY1MTkyZGVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkJMDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNW
R1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4MTY2OEQyMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVy
LmggKi87IH07CiAJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2
NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovOyB9OwogCQkw
ODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFBQThEOTExMTEyMzdFMDAy
QUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi87IH07Ci0JCTA4MUVCRjNCMEZEMzRGNDEw
MERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oICovOyB9OwogCQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oICovOyB9OwogCQkwODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmggKi87IH07CiAJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0
NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3Niw4ICs3NzUsNiBAQAogCQkyQUVG
NkZERDI2RTdFQ0NGMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRUY2RkNFMjZFNzFGMkQwMDMyNkQwMiAv
KiBDU1NOdW1lcmljVHlwZS5oICovOyB9OwogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyog
UmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAq
LzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUy
QzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwotCQky
Qzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDODU2NTMzMjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovOyB9OwotCQkyQ0FBNEEzQTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovOyB9OwogCQkyRDA2MjE0
NDFEQTYzOUI2MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDIxREE2Mzk4
ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQw
NjIxNDUxREE2MzlCQTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MzFEQTYz
OTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJMkQw
NjIxNEQxREE2M0E4QjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0OTFEQTYzQTc5MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCAqLzsgfTsKQEAgLTIyODIsNiArMjI3OSwxNSBAQAog
CQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYg
LyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJC
Mzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMENGNTkyNzA5QUJGQjAwNTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZp
bHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAv
KiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIxQ0E4RjUyNzAzOTQ1NjAwQzBERDY1IC8qIEZpbHRlclJlcHJlc2Vu
dGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NzhENDMyNkZFOURFNzAwRkQy
QzU2IC8qIEZpbHRlck91dHB1dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNE
ODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0
IC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBD
RjZCMjcwQ0Q2MDkwMDUxNUMyNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NG
aWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNC
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VC
aXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI3MDIsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAv
KiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAq
LzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ3MTIwQzlB
RDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0NUU3MkY4MEZEMjYxRUUw
MEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLzsgfTsKLQkJ
ODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAq
LzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUEx
MjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwogCQk4NDczMEQ3
OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTYwNzIsOCArNjA3Niw2IEBACiAJCTA4MTY2
OEQ3MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZH
VGV4dExheW91dEVuZ2luZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdU
ZXh0TGF5b3V0RW5naW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUFBOEQ5
MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYzOTBGRDM0RjQxMDBE
QTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYwMUE3
RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02MjIwLDggKzYyMjIsNiBAQAogCQkwRjQ5NjZBODFEQjQwQzQzMDBBMjc0
QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDk2NkE5MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9ubHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Qb2ludFJlYWRPbmx5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNENERUFBMjNEOTFBOEEwMDI1MUIwMiAvKiBT
Y3JvbGxUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxUeXBlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NG
aWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NG
aWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODMyMTNCNzg2NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRl
ckxheWVyRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllckZpbHRlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksMTAgKzczMjksNiBAQAogCQkyQjQyMzVB
MDE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdFbGxpcHNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCRThFMkM4MTJBNThBMDEwMEZB
RDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDQUE0QTM3MjRCRTE4QTEwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDIxREE2Mzk4ODAw
QTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdl
YktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQ3MURBNjNBNzkwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU5lZWRlZEV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlh
S2V5TmVlZGVkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA0NzYs
MTAgKzEwNDcyLDIwIEBACiAJCTcxRjZFRTQxMjU1RURGOUMwMEZDNEM1QiAvKiBHcmlkVHJhY2tT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyaWRUcmFja1Np
emUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5
MjJDQzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNTcyNzA3OEM0MjAwNTE1QzI0IC8q
IFNWR0ZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckdlb21ldHJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjVFMjcwQUQxMzcwMDUxNUMyNCAv
KiBGaWx0ZXJPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNUYyNzBCQjAxOTAwNTE1QzI0IC8q
IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0Q29yZUlt
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyogRmlsdGVyUmVz
dWx0Q29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjAwQ0Y2NDI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29m
dHdhcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjYyNzBDMzIxRDAwNTE1QzI0IC8qIEZpbHRlckdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZWZlcmVuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1h
dGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVy
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEy
RkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlE
M0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQml0
bWFwQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMUI0OTcwMjUx
MkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCaXRtYXBCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUNBOEY1
MjcwMzk0NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjQyQUM5NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RGbHVzaElkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAw
RjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwNTA0LDkgKzEwNTEwLDM1IEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBF
WFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQy
RTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJF
OCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZp
bHRlck91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyog
UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2
NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAz
QzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcw
M0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZD
MjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZz
ZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8q
IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9n
eVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1
ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9v
ZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdF
RjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRp
bGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBG
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2
RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
ODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIz
RTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDUxOCw2ICsxMDU1MCw4IEBACiAJCTcyQkFDM0FDMjNFMUU1NDUwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2
ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWlu
dGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBMzkyNjM2
NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0
ZXJSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0
QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3Vs
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2
MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEy
RThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3
MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTExNDUxLDkgKzExNDg1LDYgQEAKIAkJODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNW
R1BhdGhTdHJpbmdTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UGF0aFN0cmluZ1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJE
NzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQYXRoU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0MzAwQkQ5MTIwQzlBRUQwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdE
NzkgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkg
LyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkZBMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdDMjM4
N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ2NTBFN0YyMzg3QUQ4QTAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeUxp
c3RFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTgwMjM4N0FE
OEIwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE5NDI2LDggKzE5NDU3LDkgQEAKIAkJMkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNv
cmVpbWFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmggKi8sCi0JCQkJMkNBQTRBMzcyNEJFMThBMTAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjYxMjcwQkJEQTgwMDUxNUMyNCAvKiBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyog
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjVGMjcwQkIwMTkwMDUxNUMy
NCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb3Jl
aW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMwMzAsNiArMjMwNjIsMzIg
QEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVudCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDgyMjcwNjUxMUIw
MDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc1MjcwNTg1Qjgw
MDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdBMjcw
NUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLywK
KwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
LmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVDN0VGMDAzQzVBQUUgLyogRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0UyNzA2MzM2QjAwM0M1QUFFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyog
RkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVBQUUgLyog
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODEyNzA2NDZFMjAwM0M1
QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzQyNzA1ODM3RDAw
M0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzMyNzA1N0NCRTAw
M0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MjI3MDU3
OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0YyNzA2
M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MDI3MDY0
MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovLAorCQkJCTcyMDBDRjYz
MjcwQkMyQzgwMDUxNUMyNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzIw
MENGNjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8sCisJCQkJ
NzJBODNENzEyNzA1Nzg1MjAwM0M1QUFFIC8qIFNvdXJjZUFscGhhU29mdHdhcmUuY3BwICovLAor
CQkJCTcyQTgzRDcwMjcwNTc1MDQwMDNDNUFBRSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3Bw
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzb2Z0d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTdDMDExRjNDMjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRl
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTA3OCw2
ICsyNTEzNiw3IEBACiAJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q2RjI3MDU3
NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8sCiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhD
IC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNB
OUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdG
MjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywKQEAgLTI1MTE0LDE1ICsyNTE3MywyMyBAQAogCQkJCTg0
NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLywKIAkJCQk4NDczMEQ2RjEyNDhG
MEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCi0JCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3
RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcyQTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0
ZXIuY3BwICovLAorCQkJCTcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLywK
IAkJCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJ
CQkwOEM5MjUxODBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCi0JCQkJMkM4
NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKLQkJ
CQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywK
KwkJCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKKwkJ
CQk3MjAwQ0Y2NjI3MEMzMjFEMDA1MTVDMjQgLyogRmlsdGVyR2VvbWV0cnkuY3BwICovLAorCQkJ
CTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJCTQ5
RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5
RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVD
RUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlF
Q0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MjAw
Q0Y1RTI3MEFEMTM3MDA1MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0
MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0LmggKi8sCisJCQkJNzIwMENGNjcyNzBD
NDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oICovLAorCQkJCTcyMUNBOEY1MjcwMzk0
NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovLAorCQkJCTcyQzkwQTM5MjYz
NjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovLAorCQkJCTcyQzkwQTNBMjYzNjRB
MUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBE
M0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMg
LyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5
IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2ODg0LDEwICsyNjk1MSw5IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMjU1OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5j
cHAgKi8sCiAJCQkJQjI1NTk4RUIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLywK
LQkJCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLywKLQkJCQk4
NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8sCi0JCQkJMDgxRUJGMzgw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovLAotCQkJCTA4MUVCRjM5
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBODNENkEy
NzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkIyNzAzREE5
QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICovLAorCQkJCTcyMDBDRjU3MjcwNzhDNDIwMDUxNUMy
NCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5OTgyLDggKzMwMDQ4LDggQEAKIAkJCQlD
QTdFOUI0NzI0MzYxREM1MDA0RTg5RjYgLyogQ29udGVudGZ1bFBhaW50Q2hlY2tlci5oICovLAog
CQkJCTkzOTJGMTRGMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgKi8sCiAJCQkJ
OTM5MkYxNEIwQUQxODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8sCi0JCQkJMEY1M0ZC
ODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8sCi0JCQkJMEY1M0ZCODMyMTNC
MUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovLAorCQkJCTcyQTgzRDZDMjcwM0RDM0EwMDND
NUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAv
KiBDU1NGaWx0ZXIuaCAqLywKIAkJCQlFM0JCQzI0NTIzODM1NTFBMDA2RUMzOUYgLyogQ1NTVmFs
dWVLZXkuaCAqLywKIAkJCQlFNEE4RDIxNTIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24u
Y3BwICovLAogCQkJCUU0QThEMjE0MjI1NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5oICov
LApAQCAtMzIwNjIsNiArMzIxMjgsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAv
KiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIx
NUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MjAwQ0Y2QjI3MENENjA5MDA1MTVDMjQgLyogQ1NTRmlsdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8q
IENTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNTYyLDEyICszMjYy
OSwxNiBAQAogCQkJCTkzNTQyNDMwMjcwM0NCODYwMDVDQTcyQyAvKiBGaWxlU3lzdGVtU3RvcmFn
ZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2
NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIw
MzFDQyAvKiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNTkyNzA5QUJGQjAw
NTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMw
RjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0
ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNjUyNzBDMDYxNzAwNTE1QzI0
IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNUMyNzA5QUQzQTAwNTE1QzI0IC8qIEZpbHRlclJlcHJl
c2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y1QjI3MDlBQ0I2MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRG
MDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3
RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM1NDQyLDggKzM1NTEzLDcgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQg
LyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjIwNiw3ICszNjI3Niw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlhZTll
NTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li4yMTExZmEyODY0MWE2ZjM1OWMwMWZlZWE2
ODQwMGMwM2IxNTg0OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0x
MTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpu
dWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7
CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNl
dFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVn
aW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2Zp
bHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0
byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0
cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0
dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8RmlsdGVyR2VvbWV0cnk+KGltYWdlUmVjdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0
byBmaWx0ZXJlZEltYWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3Zl
KGdlb21ldHJ5KSkpCisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJu
IG91dHB1dC0+Y29weUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9
CiAKIHZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IElu
dFJlY3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2
YWIyMjIxODEuLjg4YTMxMDI3Nzk4MmYzMjdkMjQzOTQ2ZWVlZjUyNmU1ZjcyMDk3NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAKQEAgLTEzOCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgc3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3Jl
KSA9IGZpbHRlci5hcHBseSh0aGlzLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAg
fQorCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDg1ZTNk
MjRiZWIwYzIwNGMzMjVhMjY1NmQ5Y2E1NDA0MDg2NmZiNzIuLmNlODlmNGJkM2FkZjc4ZTIyNTg5
MWVkNjczNzNjOTlmMGM5NjkyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5j
bHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCkBAIC02MDksNiArNjExLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zp
bHRlckltYWdlQnVmZmVyKEZpbHRlciYgZmlsdGVyLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBhdXRv
IFtmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdF0gPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIFdU
Rk1vdmUoZ2VvbWV0cnkpKTsKKyAgICBpZiAoZmlsdGVyZEltYWdlKQorICAgICAgICBkcmF3SW1h
Z2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogewog
ICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNmE0YWU1ZGFkNWE3YjJhOWRjNDIzOWZjYTlhNDZiNzE3
ODEwOWYzYS4uZDU3M2IyMTUyMjgyNTYyZWU0MjYxMmQyNjlmMTVmYWJkMmRhZjhhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVu
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKQEAgLTQ0Miw2ICs0NDQs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVySW1hZ2VC
dWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
RmlsdGVyR2VvbWV0cnk+JiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGIx
ZThkM2IwNGFiMjYwNTEzMjg4NmEwYTgwMzA1MDhhMTMxNjEyODAuLmFlZDU1MzIxNGYyMmFkY2Ux
MTdhZDdiMGNhMjdmOGVmYjBmMDhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDIsNiArNDIsOSBAQCBjbGFzcyBEcmF3aW5nQ29u
dGV4dDsKIHN0cnVjdCBJdGVtQnVmZmVySGFuZGxlOwogfQogCitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKKwogY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXIsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8SW1hZ2VCdWZmZXI+IHsKIHB1YmxpYzoKICAgICAvLyBXaWxs
IHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC0xMDYsNiAr
MTA5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFn
ZShjb25zdCBGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpID0gMDsK
IAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250
ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQppbmRleCBkNGZhM2M0YmZhZDM0YWFm
MzA5M2E5ZjAyNDg2YmI3MjdmOThkNGFhLi5kNDVhYjMzYzQ0MDhlZDYzNjA3NDYxNGQ0NmY0NTlk
YTZmNTFkNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM3
LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogU2hvdWxkIHNo
YXJlIHRoZXNlIHZhbHVlcyB3aXRoIENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUg
dGhlc2UgdmFsdWVzIHdpdGggRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgogc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxD
b25zdGFudHNbM11bM10gPSB7CiAgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAw
LjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0ZDU1
YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2lt
cG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1P
QkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpDX0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBDSUNv
bnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsKLWNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3Jl
YXRlKEZpbHRlckVmZmVjdCYpOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29u
dGV4dCgpOwotICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQot
ICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJl
c3VsdCgpIGZpbmFsOwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKFNvdXJjZUdyYXBoaWMmKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJ
SW1hZ2U+PiYpOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJh
bnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFn
ZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRyPElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1dElt
YWdlQnVmZmVyOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM4NmZjNGMyM2FmOTU0NTU1N2E1NThjOGM0NTFlMTlhOGEzOGZiNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgi
Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2lt
cG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJ
bWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAg
ICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVmZmVjdCkpCi0gICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPigpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdp
dGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKLSAgICByZXR1
cm4gY2lDb250ZXh0OwotfQotCi1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewotICAg
IGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBpc051
bGxPckxpbmVhcihlZmZlY3QucmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0
LmdyZWVuRnVuY3Rpb24oKSkKLSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJsdWVG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLX0K
LQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5nZSBy
ZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAgICAg
c3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAg
ICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2Fz
dDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRy
b3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxh
c3RFZmZlY3QpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dElt
YWdlczsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsK
LSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAgICAg
ICBpZiAoIWlucHV0SW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShl
ZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkg
ewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICBy
ZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVj
dCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAgICAg
cmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZl
Y3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRv
d25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0
IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNl
dDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCi17
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUlt
YWdlKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgaWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQotICAg
ICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFj
ZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAgIAot
ICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0
aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgo
Y29uc3QgRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMu
YXQoMCk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9h
dHMoZWZmZWN0LnZhbHVlcygpKTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAotICAg
IHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklY
TUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0
XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25l
bnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1
dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAg
ICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAg
ICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0g
IGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFs
dWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sx
MF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0
QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVl
c1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0g
IFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91
dHB1dEltYWdlOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRy
YW5zZmVyJiBlZmZlY3QsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNm
ZXIgZnVuY3Rpb25zCi0gICAgQVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbihlZmZlY3QpKTsKLQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0
KDApOwotICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xv
clBvbHlub21pYWwiXTsKLSAgICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0
KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZpY2ll
bnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBmdW5jdGlvbikgewotICAgICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSKQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjowIFc6
MF0gZm9yS2V5OmtleV07Ci0gICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJlZENv
ZWZmaWNpZW50cyIsIGVmZmVjdC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMo
QCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0gICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVGdW5j
dGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwg
ZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRwdXRJ
bWFnZTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGlm
ICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdDSUZp
bHRlcnMoKmluKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
b3V0cHV0KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJpbmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICByZXR1
cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0KQotewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291
dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0
KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkg
Ym91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRD
b2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVj
dC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9IG51
bGxwdHI7Ci19Ci0KLUZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19Ci0g
ICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYmU1NjFiNzAxYmNhMDViMjQ0ZTUyNWUxNzhl
YzI0ZjZkZGQxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lN
QUdFKQorCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHQuaCIKKworT0JKQ19DTEFTUyBDSUltYWdlOwor
T0JKQ19DTEFTUyBDSUNvbnRleHQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0Q29yZUltYWdlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisKKyAgICB2b2lkIHNldEltYWdlKFJl
dGFpblB0cjxDSUltYWdlPiYmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlOworICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IG1faW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdENvcmVJbWFnZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkg
PT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43Mjc5MmIxYWJlOTcwZDhjZGY4OWFmODVhNThkNTRkNWFiODAwYmI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDU1IEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0
Q29yZUltYWdlLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCA8Q29yZUltYWdl
L0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9ydCA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQor
eworICAgIEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQor
CitSZWZQdHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVy
SWZFeGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOworfQorCitJbWFnZUJ1ZmZl
ciogRmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhp
Y0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmOGE4MGNiZmQ2NzI4MzZk
Zjg5OTVjZjM5ZDQzZGE1YmQ4NTUwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpA
QCAtMCwwICsxLDU2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNp
bXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2U7CisgICAg
aWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQorICAgICAgICBpbWFn
ZSA9IFtDSUltYWdlIGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1
ZmZlcj4oKnNvdXJjZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5h
dGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVyUmVzdWx0Q29y
ZUltYWdlPihyZXN1bHQpLnNldEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2Yx
OC4uZGU2NjA2OGNkZDBhOWNiNTc0YzBhY2JiYzhjOGM2MGE2Nzc0ZmYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywxNSArMTA3LDE4IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQq
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHRzJiByZXN1bHRzLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIg
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsg
KnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1
bHQgPSBmaWx0ZXIoKS5jcmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzIsNyBA
QCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNl
UGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJj
ZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJ
ZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VS
VChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQzLDggQEAgdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBd
OwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNl
QkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwg
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJy
YXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZjliZjE5
MWVlNjM4OWYwMWQ5YjVhMjEwMjUzY2QwMGIwMzAxODU0MC4uODQyM2NiYWRhMjUxN2E5MTYxOThj
MjFmZjM1OTg0NzllMmMwMGViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtMjI3LDYgKzIyNywxNCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdAogICAg
IGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciosIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRy
eT4mJikKK3sKKy8vICAgIGlmIChtX2RlbGVnYXRlKQorLy8gICAgICAgIG1fZGVsZWdhdGUtPnJl
Y29yZEltYWdlQnVmZmVyVXNlKCpzb3VyY2VJbWFnZSk7CisvLyAgICByZWNvcmRGaWx0ZXJVc2Uo
ZmlsdGVyKTsKKy8vICAgIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGZpbHRlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewog
ICAgIGFwcGVuZDxTYXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggYTVhZDM2NmQ0ZGNkOTlkODQzZTBiYmEwNjk1ZWQ3ZDI0NTM3MmJiZS4uOGE4ODFhZmNj
Y2ZhYjU2MTVjOGQ5ODRkM2U1MTc4YzJlZmM4NzdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0xMjgsNiArMTI4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFm
MThmYmI2MmMyY2VkOS4uMzU2ZTM1OTMzZmNlYmQ1YzdmMjg3MDRiMDI2Y2QwNTYxMWZlN2RiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBmaWx0
ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Qmxl
bmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxl
bmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IG1fbW9k
ZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2Rl
KSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogewot
ICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9k
ZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9t
b2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAg
IGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9
XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwg
IlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVj
MjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJhMjMyMzNhYmE5
YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVC
bGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVC
bGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJlZjxGRUJsZW5k
PiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpOwogCiBw
cml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRN
b2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
QmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1
NC4uZGI0OGRjZGQ0MTM4ZGE2ZWYzNTkzNzRjMzE4NTkyNzdlMGFiY2M5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQsMTkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUg
dHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhX
VEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7
CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorRkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZs
b2F0PiYmIHZhbHVlcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmls
dGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4Ojpz
ZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQpAQCAtNjMsMjU4ICs1NSw0MyBAQCBib29sIEZF
Q29sb3JNYXRyaXg6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlcykKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBmbG9hdCByID0gcmVkOwotICAg
IGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxw
aGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZh
bHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdy
ZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIg
KyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVl
c1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10g
KiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2
YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNb
MTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykK
LXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBi
ID0gYmx1ZTsKLQotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25l
bnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRz
WzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKLSAgICBibHVlICAg
ID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRz
WzhdOwotfQotCi0vLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBm
dW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0
JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKLXsKLSAgICBh
bHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKLSAg
ICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVlID0gMDsKLX0KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVm
ZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZm
ZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUu
YXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0
YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhl
IEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBi
YWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZh
bHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29y
ID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAg
ICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
LSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
N10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzdd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAg
ICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2
aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewot
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29tcG9uZW50c1swXSA9
ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1
ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNv
bXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVd
ID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAt
IDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CiB9Ci0j
ZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsK
LSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICBlbHNlIGlmIChm
aWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpCi0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0
aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0
ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXpl
KSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQg
Kz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZs
b2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAg
ZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAg
ICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIp
OwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxv
YXQgLyAxODApOworICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0g
c2luSHVlICogMC4yMTM7CisgICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43
MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUg
KiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNv
c0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1
ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0g
MC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNb
Nl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9u
ZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBj
b21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29sb3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
cGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBl
ZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVl
cywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5n
ZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQpAQCAtMzM5LDEwICsxMTYsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVDb2xvck1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCBt
X3R5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0
cyA8PCAiIHZhbHVlcz1cIiI7CkBAIC0zNTcsOSArMTMzLDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xv
ck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAg
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1
Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLmY2MTIxM2ZlNjBmZTBiNGNjM2QyY2RlZjliNjQyZjQ2
ZGI0ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszNyw3IEBA
IGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKKyAgICBzdGF0
aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9h
dD4mJik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDYsNTQgKzQ1LDIy
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0
PiYmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb2xvck1hdHJpeCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbG9yTWF0cml4
VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGluZSB2
b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAu
Nzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVl
KTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0g
PSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0g
MC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBp
RmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAx
ODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVl
ICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBz
aW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3
MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAq
IDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29z
SHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0gMC4wNzIg
LSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNbNl0gPSAw
LjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9uZW50c1s3
XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25l
bnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwotfQotCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uZmVi
ODA4NmVhZjUyYzJjMjkwNDhiZjVlZmFkYmIyZjI3YjNjZGM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMTM4ICsyNSwzMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9u
ZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyKQotICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKLSAgICAsIG1fZ3Jl
ZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQotICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0
aW9uKQotICAgICwgbV9hbHBoYUZ1bmN0aW9uKGFscGhhRnVuY3Rpb24pCi17Ci19Ci0KLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24s
IGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1
ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAo
biAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRv
dWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAg
ICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2
MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsK
LSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6
bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2td
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGRUNvbXBvbmVu
dFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBt
X3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQorICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVu
Y3Rpb24pCisgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCisgICAgLCBtX2FscGhh
RnVuY3Rpb24oYWxwaGFGdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhy
ZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJl
Y3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhl
bEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwotICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKQorRmlsdGVyUmVzdWx0KiBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseShG
aWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZm
ZXIqKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxl
W2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBl
ID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lE
RU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxl
LCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRl
R2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJB
WV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVd
KHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlv
bi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9i
bHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVm
ZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb25lbnRU
cmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA0LDkgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNm
ZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAgICAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEsOSArMTE1LDYgQEAgVGV4dFN0
cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBt
X2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6
ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNzYxMDY5ZGI4OWU0Mzc3NGE4NzY4MzY5ZTk1NTZlNjcxNjE0
NGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzI0LDYgQEAKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQ29tcG9uZW50VHJhbnNm
ZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAg
IHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0
ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90
LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUs
IExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBU
YWJsZSYgYWxwaGFUYWJsZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBt
X2dyZWVuRnVuY3Rpb247CkBAIC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVy
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhi
NTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLmNmMDRlNDNjNTUyMjkwNzFk
M2YxZjMyNTQ0Zjg5ZjQ1OWJhNThhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDE5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29t
cG9zaXRlQXJpdGhtZXRpY05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkK
K1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVy
YXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZF
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVP
cGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykK
QEAgLTQyLDI2NCArNDUsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVm
PEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0
ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRl
T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAg
IGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBt
X2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAo
bV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsK
IH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMg
PT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAK
IGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lk
IEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZF
Q29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChtX3R5cGUg
IT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KKyAgICAvLyBGb3IgSW4gYW5k
IEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgorICAg
IC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOIHx8IG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUCkKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdp
bmdSZWN0KGlucHV0cywgaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpKTsKICAgICAKLXN0YXRpYyB1
bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwotICAgIHVuc2ln
bmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJldHVybiBidWZmWyEhKHVj
ICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5z
aWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVs
QXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewot
ICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAg
ICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxl
ZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDAp
IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEg
KyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVk
SzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2Nh
bGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAg
ICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0v
LyBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGlt
aXphdGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBp
bnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2Fy
ZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci17Ci0gICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwotICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKLSAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVw
cGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49
IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgewotICAgICAgICBpZiAoazQpIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChrNCkgewotICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoazEpCi0gICAg
ICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
aW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgaW50IGxl
bmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0
PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUg
ZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFy
aXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0
YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4g
YW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgot
ICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBj
bGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5m
bHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0g
ICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJv
dGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEFyaXRobWV0aWMg
bWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBj
YW4ndAorICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAg
CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSk7
CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0cik7CiB9CiAKLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3Np
dGVPcGVyYXRpb25UeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3Ip
IHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTggKzEyOSwxMyBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb21w
b3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvc2l0ZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwotICAgIGlmIChtX3R5
cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICB0cyA8PCAiIG9wZXJh
dGlvbj1cIiIgPDwgbV9jb21wb3NpdGVPcGVyYXRvciA8PCAiXCIiOworICAgIGlmIChtX2NvbXBv
c2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAg
IHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1c
IiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcx
MDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uOTlmMjkwNWRjZmJjMDRjOGZjMWVhNThm
MWMwYTVmMWI4OWViNDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDkgQEAKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKK2VudW0gRkVDb21wb3NpdGVPcGVyYXRvciB7CiAgICAgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTiAgICA9IDAsIAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVIgICAgICAgPSAxLAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOICAgICAgICAgPSAyLApA
QCAtNDEsMTAgKzM5LDEwIEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CiAKIGNsYXNz
IEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUNv
bXBvc2l0ZT4gY3JlYXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKIAotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSk7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBib29s
IHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgZmxvYXQg
azEoKSBjb25zdCB7IHJldHVybiBtX2sxOyB9CiAgICAgYm9vbCBzZXRLMShmbG9hdCk7CkBAIC01
OCwzMCArNTYsMjAgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQog
Ci0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCk7Ci0jZW5kaWYKLQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90
eXBlOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAgICBm
bG9hdCBtX2sxOwogICAgIGZsb2F0IG1fazI7CiAgICAgZmxvYXQgbV9rMzsKQEAgLTg5LDQgKzc3
LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKaW5kZXggNzViMmU3YzZlYTEzYzJjMWMyZjhmNjVkM2RiNGVkNWNjM2Fm
ZGE4Zi4uMTEyMzkzYWIwODZjZWRiOGJlZjZlNjFkZTQwNDg3YThhOTkxNjk4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQs
MTkgKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1h
dHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCi0gICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6
ZSkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50
UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1v
ZGUsIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQor
CitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCisgICAgOiBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihk
aXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCiAgICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRP
ZmZzZXQpCkBAIC00OSwxNCArNTAsNiBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VS
VChtX2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252
b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNl
dCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtl
cm5lbE1hdHJpeCkpOwotfQotCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSkKIHsKICAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0
aCgpID4gMCk7CkBAIC0xMjAsMzE4ICsxMTMsMjAgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252
b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93
aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAg
ICAgQSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAg
ICB8ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
LSAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZh
bHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0
aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEw
LCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDog
MywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2lu
ZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAg
ICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRo
ZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4
MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgot
ICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lv
bgotICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwg
eDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4Mjog
MTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0g
ICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24g
RDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5
MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBD
IChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAg
YSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxz
IGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxz
IG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2Vy
bmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1
bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5j
dGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1v
biBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFz
IHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgot
Ki8KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShm
bG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK0Zsb2F0UmVjdCBGRUNvbnZv
bHZlTWF0cml4OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChjaGFubmVs
IDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAgICAg
ICAgcmV0dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcykKK0ZpbHRlclJlc3VsdCogRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/
IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwr
KywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7
Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNl
dChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQot
Ci0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRl
IG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlm
Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMg
bm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQu
eSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAg
aW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0g
KG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0g
b2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhh
VmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7
Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAg
ICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQg
KyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkg
PSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlw
UmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwot
ICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0g
ICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAg
ICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtl
cm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5j
cmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0K
LQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9O
T05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAg
ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHgg
Pj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0
aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBl
bHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8
IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBw
YWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkg
Kz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAg
IH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAq
IDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsK
LSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3Jl
YXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMg
dGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNl
cnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAw
LCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9k
aXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAg
ICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBp
bnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsK
LSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwot
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0
YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhl
bEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJ
bmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAg
ICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsK
LSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8g
RGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAg
Ly8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdB
WVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291
cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVs
czxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVu
ZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRv
IHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldElu
dGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZl
QWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgx
LCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxz
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9w
cmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVs
QXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJh
eSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFs
aXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxs
eSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAt
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhl
aWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAg
fHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRp
bWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0
KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVj
dERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlv
bnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAv
IHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50
LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAq
IGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAo
aW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAg
ICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJp
Z2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3Rhcmdl
dE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdo
dCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20s
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3Rhcmdl
dE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAg
ICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCkBAIC00NTMsMTAgKzE0OCw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBF
ZGdlTW9kZVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNv
bnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbnZv
bHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZl
TWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwg
IlwiICIKICAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCkBAIC00
NjUsOSArMTU5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1v
ZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0
aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZl
QWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2
ZTFlNTAwNTRlMTNkYmEuLjFhNjk1YjRkOTIxZjI2ODY2ZjBkYTNkMTJiOWNmMmI2MGUzOTc0MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszOCw3IEBAIGVudW0gRWRnZU1vZGVU
eXBlIHsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYs
IGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBj
cmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlh
cywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3Qg
SW50U2l6ZSYpOwpAQCAtNjcsNDEgKzY1LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNl
cnZlQWxwaGEoYm9vbCk7CiAKIHByaXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3Rvcjxm
bG9hdD4ga2VybmVsTWF0cml4OwotICAgIH07Ci0KLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRl
ciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9v
bCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZv
bHZlTWF0cml4IjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHkpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJS
ZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLjU5NzlkMGZj
OWExMDlhMmU3NDY1OWNjOThhNGNjZWQ0MTBjNzU5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGln
aHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VD
b25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0
YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlm
ZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2Fs
ZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0
YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxV
bml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxV
bml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4u
OTYwMDYyMDQ5YTIyZmU1YTg1Y2JmZWJiMzQ5ZWNmMWFiZDQxNzk3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSwyMSArMjYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBM
aWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGlu
ZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZp
bHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdo
dFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9
Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAg
ICAKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkZFRGlmZnVzZUxpZ2h0aW5nIjsgfQorCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZjNTYz
ZmExLi5kODUyMDQxYzM4ODI5MDU4OWVmNzExM2Y5MmExYjU5YzJlNjcwZGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTMyICsyNSw1MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNl
bWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3Bs
YWNlbWVudE1hcCkKLSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQot
ICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxl
KHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9y
LCBzY2FsZSkpOwogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBt
X3NjYWxlKHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50
TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsK
IH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feENoYW5u
ZWxTZWxlY3RvciA9PSB4Q2hhbm5lbFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3hDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVs
U2VsZWN0b3IpICE9IG1feENoYW5uZWxTZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hhbm5lbFNl
bGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0g
eUNoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3lDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IpICE9IG1feUNoYW5uZWxT
ZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2Nh
bGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikKLXsKLSAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycg
cHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKLSAgICAvLyBh
bmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3Vy
Y2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCi0gICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4K
LSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0
IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6
c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsK
LX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5z
Zm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYg
KGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAh
PSBtX3NjYWxlOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorRmxvYXRSZWN0IEZF
RGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGNvbnN0
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhl
bCArIHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKGlucHV0cyk7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgp
ID49IDIpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAg
ICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVu
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+bGVuZ3Ro
KCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKLQotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQo
KSAqIDAuNTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGluMiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAgICAgCi0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0g
eENoYW5uZWxJbmRleCgpOwotICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVs
SW5kZXgoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgaW50IHJvd0J5dGVzID0gcGFp
bnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5
dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3Rp
bmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0
aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChz
cmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kg
Pj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUp
CkBAIC0xNzQsMTcgKzk2LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
Y2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxT
ZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVm
ZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3
M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLjM5Y2U1NDljZjE5ZWFjMGRhNTI4ZjYyYmYz
MDI0ODNkNjE1MTBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNz
IEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4g
Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2Vs
ZWN0b3I7IH0KICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSk7CkBAIC00OCwyMiArNDcsMjEgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50
TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1l
bnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKworICAgIGludCB4Q2hhbm5l
bEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGlu
dCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsg
fQogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RURpc3BsYWNlbWVudE1hcCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZp
bHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1f
eUNoYW5uZWxTZWxlY3RvcjsKQEAgLTcxLDQgKzY5LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDVjZTdiZTNhNDcxYjQ3
YjhkZDU0MjZkOTY1YmJmZTc4OWY2YmJkZDguLjgwODc1Yjg4YzQyNzNhNjJhOGMwOTBiZWQ1ZTE4
NzE3NzhlNDAxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOTggKzI0LDQ4IEBACiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBm
aWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwg
bV9zdGRZKHN0ZFkpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLSAgICAsIG1fc2hh
ZG93Q29sb3Ioc2hhZG93Q29sb3IpCi0gICAgLCBtX3NoYWRvd09wYWNpdHkoc2hhZG93T3BhY2l0
eSkKLXsKLX0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNo
YWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgs
IGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIGNvbG9yLCBvcGFjaXR5KSk7CiB9
CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGRURy
b3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKKyAgICA6IG1fc3Rk
WChzdGRYKQorICAgICwgbV9zdGRZKHN0ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShk
eSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAg
ICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3
aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNv
bHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAw
LjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hh
ZG93OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0
aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5
KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0g
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dD
b2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxB
cnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24p
OworICAgIHJldHVybiB7IH07CisvLyAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OworLy8KKy8vICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOworLy8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwor
Ly8gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwor
Ly8KKy8vICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLwor
Ly8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BT
aGFkb3c6Om91dHNldHMoKSBjb25zdApAQCAtMTI4LDE0ICs3OSwyMyBAQCBJbnRPdXRzZXRzIEZF
RHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVE
cm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNo
YWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNo
YWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAi
LCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5
IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFj
aXR5IDw8ICJdXG4iOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9w
U2hhZG93IjsKKyAgICB0cyAgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWQorICAgICAgICA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8
PCBtX2R5CisgICAgICAgIDw8ICJcIiBjb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQobV9jb2xvcikgPDwiXCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2Vl
ZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+
IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0
IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0
ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpAQCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBm
bG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9p
ZCBzZXRjQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0g
ICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsg
fQotICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hh
ZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhG
aWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7
CiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29s
b3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dPcGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAg
ZmxvYXQgbV9vcGFjaXR5OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKaW5kZXggYjQyMzU1MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOWJjYTJk
NWRjYTQ5NDUyZjdlNGM4YzhiZDc5OGMwOTJkZGM5MjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsyNSw1NSBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxv
b2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29k
PiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fb3BhY2l0eShvcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2Qo
ZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAotYm9vbCBGRUZsb29kOjpz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK2Jvb2wgRkVGbG9vZDo6c2V0Q29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCisg
ICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zs
b29kQ29sb3IgPSBjb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkK
K2Jvb2wgRkVGbG9vZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX2Zs
b29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkpCisgICAgaWYgKG1fb3BhY2l0eSA9PSBvcGFjaXR5
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNp
dHk7CisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7Cit9
CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIGNvbG9yKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0
cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAgICA8PCAi
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICB0cyAg
PDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CisgICAgdHMgIDw8ICIgY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKCkpIDw8ICJcIiAiCisgICAgICAgIDw8
ICJvcGFjaXR5PVwiIiA8PCBvcGFjaXR5KCkgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uNzk4
NmQ0NjY4NGJmNThhYmNiY2U4NGNmYjY2YTIxMjI4MDhhZTc5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDIgKzIzLDM1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAK
LSAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xv
cjsgfQotICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOworICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBib29sIHNldENvbG9y
KGNvbnN0IENvbG9yJik7CiAKLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2Zsb29kT3BhY2l0eTsgfQotICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKLQot
I2lmICFVU0UoQ0cpCi0gICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVy
cG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJy
ZW50Ci0gICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3It
aW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogcHJpdmF0
ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRmxv
b2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xvciBt
X2Zsb29kQ29sb3I7Ci0gICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CisgICAgQ29sb3IgbV9jb2xv
cjsKKyAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4
YWIzNjM5NDM2NS4uYzcwNTk0MDk3NGViYTljNjA3NWM1OWQyMGNlZmM1MDI5NDc0Njc4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsNDUwICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2Vy
bmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlv
biwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1Jl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMu
Ci0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAo
IShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7
Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAg
ICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1
c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNz
aWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQot
ICAgICwgbV9zdGRYKHgpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogbV9zdGRYKHgpCiAgICAgLCBt
X3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9
IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkK
LXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9k
ZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVk
IGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVM
aW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhL
ZXJuZWxTaXplKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5
LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0g
ICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBj
b25zdCBpbnQgY2hhbm5lbCA9IDM7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhl
aWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAg
IGludCBzdW0gPSAwOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJb
Y2hhbm5lbF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAg
ICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAg
ICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAg
ICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNl
dCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3Jj
UHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50
IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGlu
dCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQot
ewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0
V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhh
T25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBz
dHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxT
aXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEo
KTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAv
LyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSAr
IE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAg
PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZm
ZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAg
ICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAg
ICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxs
IHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICog
c3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEg
KyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBk
eExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0
clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUu
Ci0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUn
LgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBs
aW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0
YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAv
LyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7
IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZv
ciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBl
ZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQot
ICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBk
eCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
RyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAg
ICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
LT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFs
dWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07
Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
LT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICog
c3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0KQotewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVm
ZmVyLmRhdGEoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8
PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCBy
YWRpdXMuCi0gICAgaWYgKGtlcm5lbFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUg
Kz0gMTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5C
dWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVm
ZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVp
Z2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRl
OwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVm
ZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGgg
PSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0
OwotICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVy
bWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rp
b24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8g
dGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0g
ICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZm
ZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5l
bFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsK
LSAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lk
KiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENv
bnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVm
ZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7
Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVj
dEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2
SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1w
QnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBp
b0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlv
QnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3Ry
aWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwot
ICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRB
cnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVs
UG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAg
ICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgs
IGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1v
ZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwg
a2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24o
aSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAg
Ym94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwg
ZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vs
c2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6
ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAg
ICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAg
ICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVy
Lmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVm
ZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAg
fQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxB
cnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXpl
JiBwYWludFNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXpl
WSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1P
REVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0
YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5l
bFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFt
ZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRl
ci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFt
ZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNz
aWFuS2VybmVsRmFjdG9yKCkKIHsKLSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5s
aW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBr
ZXJuZWxTaXplWSAqIDAuNWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRT
aXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNp
b24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKLQotICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0
aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2Jz
IHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJs
b2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBi
eSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBi
bG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAg
ICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBq
b2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0g
IWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJl
bnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdo
dDsKLSAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZ
IDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1Np
emUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpv
YikgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVy
OwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFy
cmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVy
LmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRv
Z2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7
Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAg
ICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAg
IHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAg
ICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1Bp
eGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZv
cm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYg
KiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6
ZShmbG9hdCB2YWx1ZSkKIHsKICAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBB
IGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0
IGltYWdlIGJ1dAogICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBt
dWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0
aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAq
IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGlu
dD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkp
OwogfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRp
b24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3
MCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAot
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihzdGREZXZpYXRpb24pKi8pOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQog
ewogICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24pOwogCkBAIC00OTYsNTYgKzgzLDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
IHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigp
LCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMg
b3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3Qu
Ci0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkK
KyAgICAgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZ
KDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVz
dGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERy
YXdpbmdSZWN0KGlucHV0cywgZHJhd2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKQEAgLTU1NCwxNCArMTA1LDIxIEBAIEludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0g
c3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRz
KCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdh
dXNzaWFuQmx1ciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
WCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQz
ZS4uOTRhMGY1M2QxOTk5ZWE4YWM2NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw1OSArMjMsNDAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwog
CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHgpIHsgbV9zdGRYID0geDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7
CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAg
ICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQot
ICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBG
RUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAg
RkVHYXVzc2lhbkJsdXIoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7
IH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5C
bHVyKiBmaWx0ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFy
cmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQg
a2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxv
YXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjkwZThiOWZhNDIxMGRkNzYyYTRlNGQ5
MWRlMjUwMzQ4ODBmZDJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIs
IExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2Us
IFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IG1fY29sb3IoY29sb3IpCiAg
ICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFu
dChkaWZmdXNlQ29uc3RhbnQpCiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5p
dExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiB7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZh
Y2VTY2FsZSkKLXsKLSAgICBpZiAobV9zdXJmYWNlU2NhbGUgPT0gc3VyZmFjZVNjYWxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fbGlnaHRpbmdDb2xvciA9PSBsaWdodGlu
Z0NvbG9yKQorICAgIGlmIChtX2NvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVu
aXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17
Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0
TGVuZ3RoWTsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1
ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7Ci0KLS8vIFRoZXNlIGZhY3RvcnMg
YW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLXN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKLQotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgLTIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdo
dCwKLSAgICAgICAgLTIgKiBjZW50ZXIgLSByaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdo
dAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQsCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciAtIHJpZ2h0ICsgYm90dG9tTGVmdCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRv
bUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0
b20sCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciArIGJvdHRvbUxlZnQgKyAyICogYm90dG9t
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjps
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJp
Z2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAg
ICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAg
fTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
ck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0Ci17Ci0g
ICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldDsKLSAgICAKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSk7
Ci0KLSAgICBpbnQgbGVmdCA9IGFscGhhV2luZG93LmxlZnQoKTsKLSAgICBpbnQgdG9wTGVmdCA9
IGFscGhhV2luZG93LnRvcExlZnQoKTsKLSAgICBpbnQgdG9wID0gYWxwaGFXaW5kb3cudG9wKCk7
Ci0KLSAgICBpbnQgYm90dG9tTGVmdCA9IGFscGhhV2luZG93LmJvdHRvbUxlZnQoKTsKLSAgICBp
bnQgYm90dG9tID0gYWxwaGFXaW5kb3cuYm90dG9tKCk7Ci0KLSAgICAvLyBUaGUgYWxwaGFXaW5k
b3cgaGFzIGJlZW4gc2hpZnRlZCwgYW5kIGhlcmUgd2UgZmlsbCBpbiB0aGUgcmlnaHQgY29sdW1u
LgotICAgIGFscGhhV2luZG93LmFscGhhWzBdWzJdID0gdG9wUmlnaHQ7Ci0gICAgYWxwaGFXaW5k
b3cuYWxwaGFbMV1bMl0gPSByaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsyXVsyXSA9IGJv
dHRvbVJpZ2h0OwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFscGhhV2luZG93IGlzIHdv
cmtpbmcgd2l0aCBzb21lIHNwb3QtY2hlY2tzLgotICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3BM
ZWZ0KCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wTGVmdAotICAgIEFT
U0VSVChhbHBoYVdpbmRvdy50b3AoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcAotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJp
Z2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtdG9wTGVmdCAtIDIgKiB0
b3AgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAg
ICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAy
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtdG9w
TGVmdCAtIDIgKiB0b3AgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50
ZXIgKyAyICogcmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogY2VudGVy
ICsgcmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQogewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsK
LSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJpZ2h0LAotICAg
ICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgLSB0b3BSaWdodCArIGxlZnQgKyAyICogY2VudGVyICsg
cmlnaHQKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3VyZmFjZVNjYWxlLCBz
dXJmYWNlU2NhbGUpICE9IG1fc3VyZmFjZVNjYWxlOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
Citib29sIEZFTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyLAot
ICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgKyBsZWZ0ICsgMiAqIGNlbnRlcgotICAgIH07Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaWZmdXNlQ29uc3RhbnQsIGRpZmZ1c2VDb25zdGFu
dCkgIT0gbV9kaWZmdXNlQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwg
ZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK2Jvb2wgRkVMaWdodGluZzo6
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewotICAgIHNldFBp
eGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZh
Y3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckNvbnN0YW50KSAhPSBzcGVjdWxhckNvbnN0YW50OwogfQogCi12b2lkIEZF
TGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwy
RFZlY3RvciwgZmxvYXQgYWxwaGEpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKIHsKLSAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRh
LnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGln
aHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50
aW5nRGF0YSwgeCwgeSwgeik7Ci0KLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgIGlmIChu
b3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewotICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgw
LCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xp
Z2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3
YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Ziho
YWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVu
dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFs
VmVjdG9yID0gewotICAgICAgICAgICAgZmFjdG9yWCAqIG5vcm1hbDJEVmVjdG9yLndpZHRoKCkg
KiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIGZhY3RvclkgKiBub3JtYWwyRFZlY3Rv
ci5oZWlnaHQoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgMS4wZgotICAgICAg
ICB9OwotICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVu
Z3RoKCk7Ci0KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1
c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndh
eVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0g
MSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICog
KG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhh
bGZ3YXlWZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7Ci0gICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKLQotICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAotICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVj
dG9yLnkoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3Ry
ZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQotICAgIH07Ci0g
ICAgCi0gICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9u
ZW50KSAhPSBtX3NwZWN1bGFyRXhwb25lbnQ7CiB9CiAKLS8vIFRoaXMgYXBwZWFycyB0byByZWFk
IGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVh
ZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4K
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAg
QVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHBy
ZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cg
aXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3
byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVy
IGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxl
ZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhh
V2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJl
dmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5k
b3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0
Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShy
b3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9t
UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQg
KyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgYWxw
aGFXaW5kb3cuc2hpZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRh
LmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fa2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYKSAhPSBtX2tlcm5lbFVuaXRM
ZW5ndGhYOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQotewotICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lIC0gMTsKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcm93c1RvUHJv
Y2VzcyAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2Vzcykg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2Jz
Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAg
IGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2Ig
PiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInlTdGVwIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4
dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAg
ICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBqb2I7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3MgJSBqb2I7Ci0KLSAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAxOwotICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7
IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKLSAgICAgICAgICAgICAgICB5
U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsgMSA6IHlTdGVwOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVu
aXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGlu
Z0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0Rh
dGEpOwotI2VuZGlmCisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3Ro
WSwga2VybmVsVW5pdExlbmd0aFkpICE9IG1fa2VybmVsVW5pdExlbmd0aFk7CiB9CiAKLWJvb2wg
RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAogewotICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBp
ZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNw
ZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5z
LgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0g
MTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JDb21w
b25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7Ci0KLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGlu
Z0RhdGEpOwotCi0gICAgLy8gVG9wIGxlZnQuCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcExlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBUb3Agcmln
aHQuCi0gICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9w
UmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQg
PSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90
dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZz
ZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6
ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERl
Y3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNG
YWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIGlmICh3
aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cuCi0gICAgICAgIG9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYy
LCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBCb3R0b20gcm93Lgot
ICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRh
LmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoaGVpZ2h0ID49IDMp
IHsKLSAgICAgICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIFJpZ2h0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0
ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwg
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1h
bChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykg
ewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0gICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0
YSwgcGFpbnRpbmdEYXRhKTsKLSAgICB9Ci0KLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVs
T2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAg
ICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOwotICAgICAgICAgICAgdWludDhf
dCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTMg
PSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Ci0gICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8g
c2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsg
MywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW9t
ZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
LSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJv
d3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlv
dXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxl
LgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGlt
cGxlbWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1
dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRp
bmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDdmYjU2MDlkYmI1N2I3NjIwMWYzMzAzMzcwNTJlNDFhYzI1MDNjZjkuLmI4MjRjNDM2
N2QwMzkxMTllZWMyM2U2ZmVlYzI5ODdiYmIyNmIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDI3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRp
bmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0K
ICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZm
dXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25z
dGFudChmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQp
OwpAQCAtNTQsMTE1ICs1NiwyNSBAQCBwdWJsaWM6CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0
aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAgYm9vbCBzZXRL
ZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CisgICAgY29uc3Qg
TGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0K
LSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAg
ICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93
IHsKLSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRp
Y2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0
b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAg
ICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsx
XTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4
X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsx
XSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAg
ICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhf
dCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQot
ICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0g
PSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNo
aWZ0Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhp
cyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZTsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQg
d2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwot
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21S
b3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRv
bVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyog
ZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAg
IGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiop
OwotCi0gICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZl
Y3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9h
dCBhbHBoYSk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQ
YWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
Ci0KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVS
KEdDQ19DT01QQVRJQkxFKQotICAgIHN0YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxv
YXQgZXhwb25lbnQpOwotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLSNlbmRpZgot
Ci0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKKyAgICBGRUxpZ2h0
aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQg
bV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwog
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3Nv
dXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAw
MWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uM2EwOGNkMGRjMDNjODE1MTU0MGU1
MmFmOTRiOGE0NzBiNDc3NjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUo
dW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVN
ZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBu
dW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVy
T2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0
ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVN
ZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6
OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30K
KworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmls
dGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8UmVmPEZpbHRlclJlc3Vs
dD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJ
bnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1dHMuYXBwZW5kKHN0YWNrLnRha2VM
YXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAq
dGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1h
Z2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIGlucHV0
cywgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVz
PVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBp
bmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZl
Y3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVj
Yjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uZjNmNDVjMzY4YTNhYTMxZjM4NWQ2
MmMwODQyYzYzZTY3YjVlOTRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZF
TWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0
YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVN
ZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmYw
YmM5ODEzMmY4ZDFkMzQyZmEzYWUwM2YxYTI2NWE0MDIwNmViODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMjY1ICsyNSw2MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
KyAgICA6IG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcikKKyAgICAsIG1f
cmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVz
WSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5
T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBp
ZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0
eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbW9ycGhv
bG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBob2xvZ3lPcGVyYXRvcjsK
IH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKIHsKLSAg
ICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwogfQogCiBib29sIEZFTW9y
cGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAgIGlmIChtX3JhZGl1c1kg
PT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWSA9IHJhZGl1
c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1zdGF0
aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17
Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19Ci0KLWlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tl
ZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NS
R0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1
ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBj
b21wb25lbnRzKQotewotICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsKLX0KLQotdGVtcGxhdGU8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBh
LCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9u
ZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQot
dGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdp
ZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lk
dGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7
Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUo
UGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNy
Y1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0g
ICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgp
OwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxB
VEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBD
b2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+Owot
Ci10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRy
ZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0g
PSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRy
ZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2Vy
bmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0
YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29u
c3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAg
ICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0g
ICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBp
bnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9
IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRh
LmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVp
Z2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZ
IDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6
Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4o
aGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwot
Ci0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVt
ZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBy
YWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShz
cmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUp
KTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNv
bHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAg
ICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBw
ZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiBy
YWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAg
ICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBp
eGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAg
ICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5l
bEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWSwgcmFkaXVzWSkgIT0gbV9yYWRpdXNZOwog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpkcmF3aW5nUmVjdChj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0g
aW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOworICAgIGRyYXdpbmdSZWN0LmluZmxhdGUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3Qo
aW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmlsdGVyUmVzdWx0KiBGRU1v
cnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRp
bWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3
aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0
KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAg
ICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0
KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWdu
ZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVk
IG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53
aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEs
IG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAg
ICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxK
b2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxU
aHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUg
YSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAg
ICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFu
ZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBq
b2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAg
IGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsK
LSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2Ig
PSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQ
bGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpv
Yik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBq
b2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAg
ICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGlu
Z0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAgfQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBh
aW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBp
bWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3ImIG1vcnBo
b2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhl
bEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1
c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBp
ZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJhZGl1cyA9IGZs
b29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gs
IG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5n
UmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3Rk
OjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwot
Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53
aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0
LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGlu
Z0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
JiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9w
ZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAg
ICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTI5NywxNSArOTMsMTEgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3Jw
aG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3ki
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigp
IDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwg
cmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmlu
ZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVhMTEuLmExOTUwMTY5YTVk
NWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTEgKzIzLDEw
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAgICAgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEs
CiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIKQEAgLTM0LDEwICszNCwxMCBA
QCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9n
eT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAgYm9vbCBzZXRNb3JwaG9s
b2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAgIGZsb2F0IHJhZGl1c1goKSBj
b25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwpA
QCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwog
CiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNb3JwaG9sb2d5
IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGlu
dCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0g
ICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWlu
dGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZv
cm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdl
bmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1f
bW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3Jh
ZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1
YWE0MTQwZjY5Li43MWQ4NDA2NDM2MjYyZmU3OTU2ODkzMjA3YWUzMzIxOTFmNzgwN2Y4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDcxICsyNSw0NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0Lmgi
CiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmls
dGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpPZmZzZXQpCi0gICAgLCBtX2R4KGR4KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBm
bG9hdCBkeSkKKyAgICA6IG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVP
ZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBk
eSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9m
ZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0CiB7Ci0gICAgbV9keCA9IGR4OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdSZWN0KCk7CisgICAgZHJh
d2luZ1JlY3QubW92ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgcmV0dXJuIGRyYXdpbmdSZWN0Owog
fQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKK0ZpbHRlclJlc3VsdCogRkVPZmZz
ZXQ6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgbV9keSA9IGR5OwotfQotCi12b2lkIEZFT2Zm
c2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1RvQm91
bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVm
ZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
aW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2lu
Z1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5
IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBp
bmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgoKSA8
PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmE5OGU0YTk5
YzA1YjM3MWM1ZjRlNjBmYzNiZmJlNzU2MmJlOTU3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2MCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNy
ZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgZmxvYXQgZHgoKSBjb25zdCB7IHJldHVy
biBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9pZCBzZXREeChmbG9hdCBk
eCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsg
fQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOworICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9k
eSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBG
RU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0
IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5
OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgRkVPZmZzZXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgbV9keDsKKyAgICBlbmNvZGVyIDw8IG1fZHk7Cit9CiAKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IEZFT2Zmc2V0OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBk
ZWNvZGVyID4+IGR4OworICAgIGlmICghZHgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAg
IGlmICghZHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVP
ZmZzZXQ6OmNyZWF0ZSgqZHgsICpkeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0
MWY3NGY5YzQ4N2ExNDRjLi45OWFiOGRhNjRmY2Q1YTM2YjEyNjFmYTEyZjBkMWYwYThjMWRmMzAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUg
IkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxh
ckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3Rh
bnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVT
cGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5n
PiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNw
ZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3Vy
ZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxV
bml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVNwZWN1bGFyTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0Nv
bG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtl
cm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkp
KTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZh
dWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9h
dCBzcGVjdWxhckNvbnN0YW50KQotewotICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3Bl
Y3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJF
eHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxh
ckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1f
c3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNi
MjQ5NThhLi5jYWU1YjgyZmJlYmM1YWI2MzQzNTY5MDVlOWJlN2U2ZjNmMDMyZjc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0
U291cmNlPiYmKTsKIAotICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KLSAgICBib29sIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxv
YXQpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y3VsYXJFeHBvbmVudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Citw
cml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYpOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJG
RVNwZWN1bGFyTGlnaHRpbmciOyB9CiAKLXByaXZhdGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1
MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi4xMzc5MmRkOGQwM2ZjMTliMmM2
MzIxZTMxNjJmNzEzYTc3MTY3MzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwu
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDgwICsyMiwzNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFVGlsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRl
ICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVUaWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpUaWxlKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsKIH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJlY3QgRkVUaWxlOjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOworICAgIC8vIERv
bid0IHVzZSB0aGUgaW5wdXRzJyBzdWJyZWdpb25zIGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4g
Z2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVRpbGU6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciop
IGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29y
ayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3Ro
ZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBBU1NF
UlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdl
KCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMg
dGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBv
ZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lm
aWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGls
ZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4
RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkg
PT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lv
bigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndp
ZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAg
IGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
dGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVy
KCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5j
b250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9j
YXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9j
YXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJbWFnZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZSkpOwotICAgIGlmICghdGlsZUltYWdlQ29w
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAt
IG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRy
YW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZN
b3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5
UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRp
bGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotCisgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjYxM2E1
ODU2ZjVjOWIxOGRhZjc2MWNjZTc3OTQ4YWQ0NmVhZTg2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZp
bHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAg
ICBGRVRpbGUoRmlsdGVyJik7CisgICAgdXNpbmcgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3Q7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
VGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYs
IEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFh
OTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjgyYmY4N2M1YTQxZGI0MzI5YjE2NDAzNTZjMTRjMzdk
ODUyNDY5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0g
Ml0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFt
cGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIx
NDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAz
MSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBz
aG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGgg
Z2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBj
b25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRN
YXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFu
ZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNf
cmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpj
cmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZy
ZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykp
OworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkK
K0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFz
ZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBAIC01OSw0MDUgKzQ2
LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+
IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKLX0KLQogYm9vbCBGRVR1
cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKIHsKLSAgICBpZiAobV90eXBl
ID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVko
ZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFz
ZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZ
ID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV90eXBlLCB0eXBlKSAhPSBtX3R5cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNl
RnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkg
IT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxv
YXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNl
RnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9zZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VG
cmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVt
T2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1PY3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0
Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGlsZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNp
b24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENv
bXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVk
ZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBp
ZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0K
LWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0
IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVk
IDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBz
X3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhp
bXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0g
MDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGll
bnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICog
c19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAg
ICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRp
ZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7
Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0t
aSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0g
ICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAg
ICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSAr
IDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxv
Y2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBm
b3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJi
dWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0
aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRp
bGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkg
LyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNo
RGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRp
b24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0g
ICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAg
ICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAg
ICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0
OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQg
LSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVy
bGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24p
OwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rp
b24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lk
IHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXpl
KQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChi
eDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0
Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQot
ICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3Np
dGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRq
dXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFw
WCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEu
d3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0g
ICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0g
c19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Js
b2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9
IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUlu
ZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQot
ICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19j
dXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7
Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0
byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0g
dUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQotICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAv
LyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkw
ICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEg
PSByeDAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwotICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFj
dGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07
Ci0gICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwot
ICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBx
WzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVku
ZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3Rv
cltqICsgYnkxXTsKLSAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsx
XTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAg
ICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24g
LSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxv
YXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVy
biBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ks
IGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDIpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2Ny
aWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6
OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1
KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8
dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAy
NTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1D
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZl
Y3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAq
IHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAg
IGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsK
LSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZl
Y3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZ
KG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlm
IChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4g
U3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAot
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1
KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlw
ZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVkKSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhi
b29sIHN0aXRjaFRpbGVzKQogewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIElu
dFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgw
LCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5l
bCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52
ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBz
dGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBw
b2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRv
IHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdl
KHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAg
ICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3Rp
dGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigq
cGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1l
dGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRT
aXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNp
emUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZElu
dFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJh
c2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0
ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQot
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQot
ICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUu
aGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lv
blBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVn
aW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBw
YXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJl
ck9mSm9icygpOwotICAgICAgICBpZiAobnVtSm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0
cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnRZID0gMDsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpv
YnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0
ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0
aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBh
aW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERh
dGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSAr
IDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkg
KyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9v
bSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBm
aWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCAwLCBoZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxs
cHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00NzYsMTAgKzEwNSw5IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwi
IiA8PCB0eXBlKCkgPDwgIlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFz
ZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAg
ICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJcIiAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUz
NmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi44ZjcxMmZlZTUzYmMwYTY2MjIy
ZGNkZDVlMDQwYjcwYzMyZDU2ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzgsNyArMzYsNyBAQCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVU
dXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZs
b2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3Jl
YXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAog
ICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBi
b29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUpOwpAQCAtNTksNjggKzU3LDE3IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
TWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFs
UmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWlu
dGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAg
OiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1Np
emUpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAg
ICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIg
KiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9j
a1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAg
ICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRh
IHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGgg
eyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAg
ICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAg
IGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2Jz
OwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxl
bmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAg
ICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9Owot
Ci0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyop
OwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxv
YXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEg
Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWlu
dDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Up
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lk
Kik7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwpAQCAt
MTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMyMmM4NjA4NGQxNWYyNDA5NWU0OTg1NGZmZDkzZjcwNTk5YWYwMWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5cGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVu
ZGVyaW5nTW9kZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29u
c3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91
dHB1dChXVEZNb3ZlKGdlb21ldHJ5KSwgbV9yZW5kZXJpbmdNb2RlKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gYXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIHJldHVybiB7IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKSwgcmVzdWx0LT5hYnNv
bHV0ZURyYXdpbmdSZWN0KCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXgg
YTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uYjQ0MWY2ZTgxZDMwNjk2
MDc2YWZjMGNmNmIxY2EzZTMyZmE1OWViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDU5ICsyMSw0MiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmls
dGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3Mg
RmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVy
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNj
YWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3Jt
KQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmly
dHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
eyBDU1MsIFNWRyB9OwogCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZm
ZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2Up
OyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFn
ZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24o
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9
IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUp
IHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBs
ZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSBjb25zdDsKIAotICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Citwcm90ZWN0ZWQ6CisgICAgRmlsdGVyKFJlbmRlcmlu
Z01vZGUsIFR5cGUpOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdN
b2RlOyB9CisgICAgdmlydHVhbCBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIFR5cGUgbV90eXBl
OworfTsKIAotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihG
bG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsg
fQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVz
b2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsKLSAgICB9CituYW1lc3BhY2UgV1RGIHsK
IAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAg
RmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNv
bHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6
OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXI6OlR5cGU6OlNWRworICAgID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRm
YzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li5mY2E4NDZkZjE1OGUzZTZhOTNjMGQwNmQ1
YjNhMzliYzNkZjU5MDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDM3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25l
b24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYg
ZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRl
ckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZl
Y3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRlUGFp
bnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29s
dXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24s
IHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1f
YWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RS
ZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xv
c2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVu
aXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2lu
Z1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0
OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50
KSBjb25zdAorRmlsdGVyUmVzdWx0KiBGaWx0ZXJFZmZlY3Q6OmFwcGx5UGxhdGZvcm0oRmlsdGVy
T3V0cHV0JiBvdXRwdXQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50
ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBt
X2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uKTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgt
bV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2lu
dDsKLX0KLQotSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAotewotICAgIEludFBvaW50
IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9u
Lm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2Nh
dGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2Fs
ZTsKLSAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIHNjYWxlKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNm
b3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24o
KSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJl
Y3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewot
ICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZm
ZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVj
dCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5w
dXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDAp
LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAg
IGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUo
aW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAg
IHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAv
LyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUg
dGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0g
ICAgaWYgKGZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAg
ICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAg
IGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQot
ICAgICAgICBzdWJyZWdpb24uc2V0WChib3VuZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkK
LSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0
aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAg
ICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmll
cy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9u
KTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBt
X2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUo
ZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3
ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1
ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNv
bHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhl
IGZpbHRlciByZWdpb24uCi0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1f
ZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNj
YWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29s
dXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOwotfQotCi1GaWx0ZXJFZmZlY3Qq
IEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewotICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3Rz
LnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7Ci19
Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZm
ZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFs
bEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVy
T2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwot
ICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVy
biBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51
bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVm
ZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVm
ZmVjdHMpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQotewotICAgIGlmIChoYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZm
ZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0g
ICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhl
IGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZl
Y3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNs
aXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAg
YWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZm
ZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9IHRoaXMtPmRy
YXdpbmdSZWN0KGlucHV0cywgb3V0cHV0Lmdlb21ldHJ5KCkpOwogCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29y
cmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0
Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0g
ICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3Jj
ZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHBy
ZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBw
aXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0g
ICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8g
V2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0g
ICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1
aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNm
KTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkg
NjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBp
eGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNp
eHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0
ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAg
ICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAg
cGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwp
OwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhl
bEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
aW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBv
dmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9u
ZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAg
ICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEg
PSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBh
bHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAg
ICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhl
bERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQotewot
ICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1
cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhl
IGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBl
ZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwot
fQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5n
TW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAg
ICBhdXRvIHJlc3VsdCA9IG91dHB1dC5jcmVhdGVGaWx0ZXJSZXN1bHQoZHJhd2luZ1JlY3QsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJh
eSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgq
cGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
YXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJy
YXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0
aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgp
IDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1z
ZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAv
LyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNv
dXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFko
KSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
OwogCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAw
OwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAg
ICAgICB4T3JpZ2luID0gMDsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBp
ZiAoYXBwbHlDb3JlSW1hZ2UoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2Fs
ZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQot
ICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdp
biA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4g
PCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwot
ICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4g
c2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBp
bnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50
IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2Nh
bGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNl
UGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAg
ICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNl
UGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6
ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRl
cyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAg
IHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNp
emUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVz
dC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5
dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9u
LmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29t
cG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VD
b21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCog
ZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAo
c291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBv
bmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBh
bHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7
Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRT
aXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5
dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0
U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdl
X0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBk
ZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRp
b24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291
cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxl
IChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29t
cG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAg
ICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBz
b3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZm
ZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCi17Ci0g
ICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KLQot
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUo
KSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
ZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRv
IHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBi
dWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAg
IHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwg
KmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1h
dCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFy
Z2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJD
b252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3
aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0g
ICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRy
YXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZm
ZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAot
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVm
ZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVy
UmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBz
YXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29s
b3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0K
LQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQot
ewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1i
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0
aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgot
ICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Ig
c3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVy
IGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRp
b25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNw
YWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25D
b2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKICNlbmRpZgotfQogCi1UZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVu
dCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRh
cmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewotICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2Ui
LCBtX2FscGhhSW1hZ2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xv
cnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgIHRzIDw8
ICJcbiIgPDwgaW5kZW50OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19CisgICAgaWYgKGFwcGx5
U29mdHdhcmUoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQubGVha1JlZigpOwogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFt
IGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAg
IFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVn
Z2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IGJmYTg3N2NhYTNlNWY0MjExZjczOWMxYmUzNzY3MDdkZjZlY2QyYTYuLmZiNWJl
MWE5NDg1YmEwNWRiYzYwNzAwOGNiZmY4NTI0NDQ1NmQyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
MjIsMzggKzIyLDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07
Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVm
ZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVy
RWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewot
ICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5w
dXQKLX07CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJs
aWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgewogICAgICAgICBCbGVuZCwKQEAgLTY3LDcgKzQzLDYgQEAgcHVibGljOgogICAgICAgICBG
bG9vZCwKICAgICAgICAgR2F1c3NpYW5CbHVyLAogICAgICAgICBJbWFnZSwKLSAgICAgICAgTGln
aHRpbmcsCiAgICAgICAgIE1lcmdlLAogICAgICAgICBNb3JwaG9sb2d5LAogICAgICAgICBPZmZz
ZXQsCkBAIC03NywxODIgKzUyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgU291cmNlQWxwaGEsCiAg
ICAgICAgIFNvdXJjZUdyYXBoaWMKICAgICB9OwotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgp
OwotCi0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJz
aXZlKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0K
LSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3Rz
LnNpemUoKTsgfQotICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25z
dDsKLSAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRo
ZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Owot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5w
dXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LQotICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4K
LSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQot
ICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2Ug
PSBhbHBoYUltYWdlOyB9Ci0KLSAgICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50
UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZm
ZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0
ID0gbWF4RWZmZWN0UmVjdDsgfSAKLQotICAgIHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJl
Y3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBm
aWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZh
bGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0Lgot
ICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRv
IHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLQotICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBl
KCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1
YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0K
LSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2lu
ZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlw
ZTo6VGVzdE91dHB1dCkgY29uc3Q7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBh
cmUgU1ZHIHNwZWNpZmljIGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuCi0gICAgLy8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDU2MTQuCi0gICAgYm9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9
Ci0gICAgdm9pZCBzZXRIYXNYKGJvb2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAg
IGJvb2wgaGFzWSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShi
b29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNXaWR0aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1
ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVl
KSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsg
fQotICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0g
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRh
cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0
RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9l
ZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0
VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2lu
dEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBl
IGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xh
c3NUeXBlOyB9Ci0KLSAgICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0g
ICAgY29uc3QgRmlsdGVyJiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0g
ICAgYm9vbCBjbGlwc1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9
Ci0gICAgdm9pZCBzZXRDbGlwc1RvQm91bmRzKGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRz
ID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNl
OyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
KSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkg
eyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYpOwotICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9h
dHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZs
b2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRW
YWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZp
bHRlciYsIFR5cGUpOwotICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIg
d2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0g
ICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFs
cGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBj
aGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5Lgot
ICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLQotICAgIHZvaWQgY2xp
cEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZm
ZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZv
aWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhl
bEJ1ZmZlciYpOwogICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdp
bmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0OwogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VC
dWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAg
ICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZH
IHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmln
Z2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7
Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3Jk
aW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMu
Ci0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uOwotCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0
dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBv
ZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0ID0gMDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGlu
Zy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJv
b2wgbV9hbHBoYUltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVm
ZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBj
b21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7
IHRydWUgfTsKLQotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRp
b25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpIH07CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5
Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVy
UmVzdWx0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisK
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7
CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0
cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUz
NTY3ZmMzMWU1YjllOWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OnRyeUNyZWF0ZShib29sIGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwg
RmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlm
IChhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAg
ICBVTlVTRURfUEFSQU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotCi19IC8vIG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcx
MzIyYjc1YTc1NzNlOWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVm
ZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJl
c3VsdCgpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZl
Y3QmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmY2ZjFiMzNiYWVkN2RmMDhmMDQ1MmM2YzRhYjRhOTdjNWRjYzMwYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVy
UmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJG
dW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1
YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0gRmlsdGVyUmVwcmVzZW50YXRpb246OlRlc3RPdXRw
dXQpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9t
ZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMyN2NjMmY0YjNlZjgxNDE3NjU0MWQ5M2NiNjE2MGNkMzc0
ZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmls
dGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKKyAgICA6IG1fZmlsdGVyUmVnaW9u
KGZpbHRlclJlZ2lvbikKKyAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkK
K3sKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhEcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdAor
eworICAgIHJldHVybiBkcmF3aW5nUmVjdDsKKy8vICAgICAgICBhdXRvIG1heERyYXdpbmdSZWN0
ID0gZHJhd2luZ1JlY3Q7CisvLyAgICAgICAgbWF4RHJhd2luZ1JlY3QuaW50ZXJzZWN0KG1heFBy
aW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpKTsKKy8vICAgICAgICByZXR1cm4gbWF4RHJhd2luZ1Jl
Y3Q7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAoreworICAgIGlmIChpbnB1dHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmlsdGVyUmVnaW9uKCk7CisKKyAgICBGbG9hdFJl
Y3Qgc3VicmVnaW9uOworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIHN1
YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOworCisgICAgcmV0dXJu
IHN1YnJlZ2lvbjsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhQcmltaXRpdmVT
dWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAg
RmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgIHN1
YnJlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBzdWJyZWdpb247
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgRmlsdGVyR2VvbWV0cnk6OmVu
Y29kZShFbmNvZGVyJikgY29uc3QKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+PiBGaWx0ZXJHZW9t
ZXRyeTo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzMzMzM4OWE2ZmZm
ZDQzMTZiOGFmODUyNDc0YWJiNmMwNGE3OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2Vv
bWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJHZW9tZXRyeSgpID0gZGVmYXVsdDsK
KworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJl
Z2lvbjsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUltYWdlUmVjdDsgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0IHsgcmV0dXJuIHJlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtYXhEcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2Vv
bWV0cnk+PiBkZWNvZGUoRGVjb2RlciYpOworCitwcm90ZWN0ZWQ6CisgICAgRmxvYXRSZWN0IG1f
ZmlsdGVyUmVnaW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKK307CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNk
NzdlYTVmMDUxZTg0NWE5MzFlYmFjMmJhZmQ5MWY5YjM2YTZjMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNw
cApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIK
KworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5LCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCisgICAgOiBtX2dlb21ldHJ5KFdURk1vdmUoZ2VvbWV0cnkpKQorICAgICwg
bV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1
bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgZHJh
d2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVy
biBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZSgqbV9nZW9tZXRyeSwgZHJhd2luZ1JlY3QsIG1fcmVuZGVy
aW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3V0cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZThjZmYxNzNiMDRlOTkzOTJhYjI3ZTE0MjJhY2I0YmY1
MjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsK
K2NsYXNzIEZpbHRlckZ1bmN0aW9uOworCitjbGFzcyBGaWx0ZXJPdXRwdXQgeworcHVibGljOgor
ICAgIHVzaW5nIFJlc3VsdHMgPSBIYXNoTWFwPFJlZjxjb25zdCBGaWx0ZXJGdW5jdGlvbj4sIFJl
ZjxGaWx0ZXJSZXN1bHQ+PjsKKworICAgIEZpbHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+JiYsIFJlbmRlcmluZ01vZGUpOworCisgICAgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KCkgeyByZXR1cm4gKm1fZ2VvbWV0cnk7IH0KKyAgICBSZXN1bHRzJiByZXN1bHRzKCkg
eyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVz
dWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVz
dGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7CisgICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDNhNWFiNzRjMDk0MGVmOGFhZTJmOWNl
ZTliNzVlMmYxZDA2NWFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlcjsKKwordXNpbmcgRmlsdGVy
UmVmZXJlbmNlID0gUmVmPEZpbHRlcj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVwcmVzZW50YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGJmZjdkODA0N2NlZjllZjYzYTM2
ZWNjMzVlNWU5YjIwMTFjZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEZpbHRlclJlcHJl
c2VudGF0aW9uIDogdWludDhfdCB7CisgICAgVGVzdE91dHB1dCwKKyAgICBEZWJ1Z2dpbmcKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZWRlMjJlZGI5NzViMGFiMDBmZTlhZDYzMDQ4N2Q4ZjZkNGUyZTg5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQu
Y3BwCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQu
aCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0
U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFH
RSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmls
dGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
bG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7Cisg
ICAgaWYgKGRyYXdpbmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhnZW9tZXRyeS50cmFu
c2Zvcm1Ub0Fic29sdXRlUmVjdChkcmF3aW5nUmVjdCkuc2l6ZSgpKSk7CisjaWYgVVNFKENPUkVf
SU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShn
ZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVyUmVzdWx0
U29mdHdhcmUoZ2VvbWV0cnksIGRyYXdpbmdSZWN0LCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKworRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2dlb21ldHJ5KGdlb21ldHJ5
KQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0Zsb2F0UmVjdCBGaWx0
ZXJSZXN1bHQ6OmFic29sdXRlRHJhd2luZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2dl
b21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVSZWN0KG1fZHJhd2luZ1JlY3QpOworfQorCitzdGF0
aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
KyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVu
dCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9u
ZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBk
ZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChz
b3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9u
ZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsK
KyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKwor
c3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNp
emUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0
ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAg
ICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRl
c3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dC
eXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlv
bi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNl
Q29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3Vy
Y2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdo
aWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNl
Q29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICog
MjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAg
ICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAg
ICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0g
NDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRl
clJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6
OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAg
YXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAg
ICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsK
KworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworICAgIGF1dG8gbG9naWNhbFNpemUgPSBhYnNvbHV0
ZURyYXdpbmdSZWN0KCkuc2l6ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFn
ZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobG9naWNhbFNpemUp
IH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgSW50U2l6ZSBzY2FsZWRTaXplKGxvZ2ljYWxTaXplKTsKKyAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0
cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlQcmVtdWx0
aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXpl
KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkt
PmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1cm4g
JnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkp
OworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUp
KTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVy
OworfQorCitib29sIEZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMg
d2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNv
bG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZp
bHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYm
IG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VE
X1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lk
IEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXpl
KGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
KyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAg
IGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAg
aW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2Fu
bGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4
ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0
OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwg
Kz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nh
bmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QK
K3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3Jy
ZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVy
dGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29s
b3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20g
b25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJl
c3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWlu
ZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25T
Y2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4
aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFs
dWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVy
LgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpIH07CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAg
ICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVy
KGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0g
Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9y
U3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNy
Y1JlY3QpOworfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3Vs
dHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhD
bGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGlu
dCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11
c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFT
U0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhf
dCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0Lgor
ICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERh
dGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVu
UGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91
OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAg
ICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVs
RGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKwor
ICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJh
eUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBu
dW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBl
YWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMg
aWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8g
QWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihw
aXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEs
IGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAg
ICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRh
OworICAgIH0KK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8g
Q0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNF
RF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xv
clNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRo
aXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRp
bmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59
bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFn
ZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UsIGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsK
KyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1f
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1YjlkYTkxNTIz
YTY4OGM0MmY2M2QyNWRhN2MzOGM5Y2UwMzMzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1
bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwor
CisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworICAgIAorICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ1JlY3Q7IH0KKyAgICBG
bG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVjdCgpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9
CisgICAgCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJpbmdNb2RlOyB9CisgICAgCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFs
cGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1
YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51
bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigp
OworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBj
b25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKKyAgICBib29sIHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVy
dGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25z
dCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAg
ICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgYm9vbCBtX2FscGhhSW1hZ2Ug
eyBmYWxzZSB9OworICAgIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBtX2dlb21ldHJ5OworCisgICAg
RmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01v
ZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fY29sb3JTcGFjZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1
MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQg
UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmKQogewotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0
Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkp
OwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNl
UG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRa
ID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3Np
dGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9i
dWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJF
ZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54
eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2lu
dCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsg
bV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2Vy
U3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVk
Wi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRl
ZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkw
OTBhZDZjZjNhMy4uMWUwNjlmOTI2YTgwM2ZjYzJjMTQ2OTZjZmFlNmIyNTUzNTEwODlkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDE5ICsyMSwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZl
Y3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKIGNvbnN0IEF0
b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKQEAgLTQxLDM5ICszOSwyMSBAQCBj
b25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNf
ZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VBbHBoYTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBv
dXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci19Ci0KLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFn
ZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25J
bik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwog
fQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmls
dGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
c291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCku
YXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uY2Nk
MWRiZjRmZWVjNTBlNWRhN2Y5OTUxZThhN2IzZGM2NTNhNmIwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0j
ZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAg
ICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3Rh
dGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhh
KEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQor
ICAgIHVzaW5nIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0OwogCiAgICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0Jiwg
RmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhh
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMx
MTA3ZDc4MzkyZTkuLjRlMTdkZWZlODQyYjBiZjlhZDJjODExNTcyNTk1ZDYyZTE4MTVhOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsMTggKzIxLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNl
R3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1Jl
ZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwyNyArMzksMjAgQEAgY29uc3QgQXRvbVN0cmluZyYg
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0K
IAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9h
dFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRl
ci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
LSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwor
ICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJbWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VH
cmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFw
aGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhp
cy0+ZmlsdGVyKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIHNvdXJjZUltYWdlKTsKIH0KIAotVGV4
dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlR3JhcGhp
Yzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7
CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3
NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi4xMzVjN2MwNzQyNzdjMWM4YWY2MDU3YTljZjk1Mjk0OWIz
NTU1Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsxOSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNl
R3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdy
YXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRp
YyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291
cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZm
ZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIp
Ci0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAg
ICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgIH0KKyAgICB1c2luZyBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdDsK
IAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291
cmNlR3JhcGhpYyI7IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZm
ZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJ
bnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRl
ckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
R3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lN
QUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5
YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmEx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNz
aW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7
CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3Bv
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0g
ICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3Np
dGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBv
c2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9u
LnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZl
clBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9
IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdD
b25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7
Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xk
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1p
dGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAg
ICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAg
ICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29u
ZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBj
b3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50
aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24g
c3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBw
b2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBi
eSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLwor
Ly8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQg
LSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8v
ICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0g
ZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29u
ZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAg
ICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0Nv
bmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
PSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
LSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24g
Zm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFy
RXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwor
Ly8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFp
bnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0
aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVu
dCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRT
b3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2Ni
ZDkwOWJkYzAyOTM2MDZjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4y
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVm
ZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hOWI0OTkwMWU3YTMyZWM4ODVhMDQ2YjRkM2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1
ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxv
YXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7Cisg
ICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFs
dWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0
XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyAr
IHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAg
IGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAq
IGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZh
bHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sx
OF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRI
dWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxv
YXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3Jl
ZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNb
MF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAg
PSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNb
NV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10g
KyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUg
bHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lk
IGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYg
YWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAu
MDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0
ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNb
OV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVs
dGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxh
c3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMg
bm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1
ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAy
NTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdl
X0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNy
Yy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZl
clNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAg
IGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0g
YnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dp
dGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7
CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNv
cikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewor
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
Nl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBk
aXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2
SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29y
LCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAg
ICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxD
b2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1
ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJU
eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Cisg
ICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RB
cHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50
cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJy
YXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhl
bEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAg
IHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VU
T0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVs
Qnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Cisg
ICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsK
KyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEs
IGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIs
IGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywg
YWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNv
bG9yTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VS
VChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdl
ID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4u
YWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OworICAgIAorICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2Ut
PmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1
ZmZlci0+c2l6ZSgpOworCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKwor
ICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgor
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJy
YXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNB
bHBoYUltYWdlKHRydWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFn
ZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZTNmMmRkZGJkNWZlNDkxMDE0MGMwZWM4ODBjMTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9u
ZW50VHJhbnNmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VC
dWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1
MGRhNjY2ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsx
LDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFn
ZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0
ODg0OTA0NWZhZDc5YmFjZjBjY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFjYjM0MWYwZTU3NmRmM2JkMTM2ZjZhMWM3N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxh
Y2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZl
ciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE2ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNl
YWRjYThlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVE
cm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5n
ZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7CisvLworLy8gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5z
Y2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmls
dGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9m
ZnNldChkcmF3aW5nUmVnaW9uKTsKKy8vICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUo
b2Zmc2V0KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRv
d09wYWNpdHkpOworLy8gICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFs
cGhhKDEpOworLy8KKy8vICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBv
ZmZzZXQsIG1fc2hhZG93Q29sb3IpOworLy8KKy8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1
ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwor
Ly8gICAgaWYgKCFwaXhlbEJ1ZmZlcikKKy8vICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisv
LyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBp
eGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8K
Ky8vICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0Fy
ZWEpOworLy8KKy8vICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisvLyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFk
b3dDb2xvcik7CisvLyAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+
Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVG
bG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJm
YmFlY2M5ZjIyZGJmZjIzZTkwYmUzNDJhYWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUu
Y3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdl
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXpl
KCkgfTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVj
dCwgY29sb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44M2Q3MGE2ODBkOGVjMWM1YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1
bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWNjMTIwMTA5OWJkOTU5ZGZhY2IxMmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6
OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBG
aWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NWY4MjViZGE4ZWMyMzUwYmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDog
aW5wdXRzKSB7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIo
KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlu
cHV0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVN
b3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZh
Nzc4YWFjNzkwNWY2NmM4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNv
ZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZk
OGJkNzhmNjNmM2Q2MGRlOGIzZmIyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0u
Z2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3Vs
dEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0Fs
cGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVz
dWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMz
YTRjMWY4NjNlMTA2YTBmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNz
ZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxl
LmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNv
bnN0Cit7CisvLyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGlu
ID0gaW5wdXRzWzBdLmdldCgpOworLy8KKy8vICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQu
aW1hZ2VCdWZmZXIoKTsKKy8vICAgIGF1dG8gaW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOwor
Ly8gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZh
bHNlOworLy8KKy8vICAgIHJlc3VsdC5zZXRJc0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkp
OworLy8KKy8vICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFz
IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6
ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3Bl
Y2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0g
aW4ubWF4RWZmZWN0UmVjdCgpOworLy8gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9u
ID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKy8vICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRp
b24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZl
Y3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmls
dGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRl
ci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVy
UmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkp
OworLy8gICAgfQorLy8KKy8vICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGls
ZUltYWdlKQorLy8gICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGls
ZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhF
ZmZlY3RMb2NhdGlvbi55KCkpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBpbi5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8v
ICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KFdURk1vdmUodGlsZUltYWdlKSk7CisvLyAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisvLworLy8gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFu
c2Zvcm07CisvLyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0
aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworLy8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRl
cm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwg
cGF0dGVyblRyYW5zZm9ybSB9KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRG
aWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VHVyYnVsZW5jZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
NGFkN2MxMDg4ZjJhNTBkZDYwOWRmNjQ2ODA5MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVy
YnVsZW5jZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRl
clJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQx
NjAwM2M0NmZmODczYWRmNjc5ZTYxZTc3ZTk3MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJl
c3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6
OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVE
cmF3aW5nUmVjdCgpLnNpemUoKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0
aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1f
aW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0
IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
KQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAg
ZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4
ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
LCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3
YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjM4YzQ1NjhmNTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEy
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVz
dWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdh
cmUgOiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1
bHQ6OkZpbHRlclJlc3VsdDsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRT
b2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVz
dWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzlhY2E3MGVhNGY1MGNhM2I0NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJl
c3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
aW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgp
LnNpemUoKSB9OworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJl
Y3QsIENvbG9yOjpibGFjayk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGlu
YXRpb25Jbik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ3MTY0ZWI1ZDVlOGE0NDY0OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJl
c3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1
bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKaW5kZXggNjRlOTgzODRhZjAwNGVmNjk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uNzVm
Mzc3NTM1MTQxYzI5ZDIxM2Q1N2U0Y2YzZmQyYjJmNDBlYjczMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTEgKzI4LDMwMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJG
RUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmls
dGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
PGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+
IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0
ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxk
RnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQot
ICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhT
b3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6OkNTUykKIHsKKyAgICBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
biA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4oKTsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGlj
IFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8mIHJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3Vy
Y2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMu
cmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0
aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0VmZmVjdCk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCog
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
JiBjb2xvck1hdHJpeE9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZz
b3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIGRvdWJsZSBvbmVNaW51c0Ft
b3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEu
MCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3Rp
cC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAu
Mjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAs
CisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAg
ICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSBy
ZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVs
ZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZp
bHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQg
dG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmls
dGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90
IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUg
ZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJP
YmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhNRTog
VW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5m
cmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAg
ICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAor
ICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkz
ICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAor
ICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0
OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4
NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
MzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKwor
ICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAw
LAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBhdXRv
IGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7
Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6
OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJh
dGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAg
IHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
LCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0
czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRl
ckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRl
ci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAi
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBl
ZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Citz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3Vu
dDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgICAg
ICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAg
ICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVy
YXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHls
ZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246Okxp
bmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwg
ZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAg
fQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZl
Y3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKIH0K
IAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJl
c3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxk
QmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsK
LSAgICBtX291dHNldHMgPSB7IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
Q29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVh
dGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7
CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgLypjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1l
cjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDoqLyBFREdFTU9ERV9EVVBMSUNBVEUp
OworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVj
dChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQor
eworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7Cisg
ICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsK
KyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9y
IChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlv
biA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVy
ZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24p
OworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisKKyAgICAgICAgQVNTRVJUKGVm
ZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0
ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIsICplZmZlY3QsIGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAt
IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAg
IC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMv
aW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3Jt
YXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2
ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUy
ICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIy
ICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJh
bWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43
NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4x
NjggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAu
MjcyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9y
TWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhp
cywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90
YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNv
bG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3Bh
Y2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVu
Y3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFt
b3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFt
b3VudCArIDAuNTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9
PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1P
REVfRFVQTElDQVRFKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBh
dXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRv
dzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFk
b3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5jb2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9T
SEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25j
YXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5s
aWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24g
dGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBu
b3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVj
dC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVu
Y3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsK
LSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZp
b3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZm
ZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVy
LT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVy
IHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBp
ZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldE1heEVmZmVj
dFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAg
aWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFj
Y2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsK
LSNlbmRpZgorICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOworICAgIH0K
KyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQorSW50T3V0c2V0cyBDU1NG
aWx0ZXI6Om91dHNldHMoKSBjb25zdAogewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB8
fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAg
aWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0
c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOwogCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZp
bHRlclJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRl
eHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1
aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVk
IHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQg
ZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24u
c2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2lj
YWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNl
dFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01v
ZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0
ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgp
OwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0
KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdl
IHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9y
cy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVz
b2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQg
Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQorRmlsdGVyUmVzdWx0KiBDU1NG
aWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgbV9zb3VyY2VHcmFw
aGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3Nv
dXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZl
Y3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19CisgICAgZm9yIChhdXRvJiBm
dW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24t
PmFwcGx5KG91dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkK
LXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0
cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAg
ICAgICBzdGFjay5hcHBlbmQoeyAqcmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygp
LmFkZChmdW5jdGlvbiwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOwogICAgIH0KLSAgICBl
ZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci19Ci0KLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVz
dWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0
aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRp
cnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAo
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91
dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0g
ICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwotfQotCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpv
dXRwdXQoKSBjb25zdAotewotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVu
ZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0
cHV0KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCi17Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0g
c291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7
Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkID0gZmFsc2U7Ci19CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RS
ZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RS
ZWN0KTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0g
c3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigp
OwogfQogCi1JbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CitUZXh0U3RyZWFt
JiBDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIGF1dG8mIGxhc3RF
ZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0
Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhh
c1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1JbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIGlmICghbV9vdXRzZXRzLmlzWmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRz
ZXRzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0
c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5iZDNmOGE3
ZWM4M2ZlYTlmOWVlZTQzZmVmNTIxNjk4YTJjZjcwMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsODYgKzI2LDU0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFz
cyBGaWx0ZXJFZmZlY3RSZW5kZXJlcjsKLWNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBS
ZW5kZXJFbGVtZW50OwotY2xhc3MgU291cmNlQWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwot
Ci1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0
aW9uIH07CiAKIGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRl
cnM7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAg
dm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRG
aWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdp
b24gPSBmaWx0ZXJSZWdpb247IH0KIAotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsK
LQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
LCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB2b2lkIGFwcGx5KCk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+
IGNyZWF0ZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmlu
Z01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGJvb2wgaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJv
b2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3
aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5V
c2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NG
aWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgSW50
UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogCi0gICAgTGF5b3V0UmVjdCBjb21w
dXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisgICAgRmlsdGVyUmVzdWx0KiBh
cHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJh
d2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IGZpbmFsOwogCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVj
dHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhhOworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKKyAgICBWZWN0b3I8UmVmPEZpbHRl
ckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CiAgICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0
czsKK307CiAKLSAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2Ug
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgQ1NTRmlsdGVyOjplbmNvZGUoRW5j
b2RlciYpIGNvbnN0Cit7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJl
bmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwotfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVj
b2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gQ1NTRmlsdGVyOjpkZWNvZGUoRGVj
b2RlciYpCit7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRl
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIp
IHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09
IFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDFiZjIyZTQyYzM1
MTg2MTg3OWVmNWFmMGNmMWVjMGI0NzE0OWI1ZWEuLjAwZjY2ZThhYjIxOGJlNGYwMWZhNzJiY2Nj
YWU5MWU3ZTg2M2EzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgQ2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3RzQ2Fj
aGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4
MThiNjFhMDVmOTViOTY0YTQuLmEyZWU3ODkwYzRhN2VkZmRhYTNlYmRiYjdmNDQ1ZGIwNzk2MTcy
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyRmlsdGVycy5oIgogCi0jaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0xMTYsMzkgKzExNyw1MSBAQCB2
b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAg
ICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
ckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2Fs
ZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZp
bHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAg
bV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0Rmls
dGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgp
ICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB9CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVy
ZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4
dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBtX3Nv
dXJjZUltYWdlID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3sK
KyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7IG1fc291cmNlSW1hZ2VSZWN0LnNpemUoKSB9Owor
ICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtX2Zp
bHRlci0+cmVuZGVyaW5nTW9kZSgpLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVp
bGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0g
ICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBi
dXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhl
IGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hh
bmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2Zp
bHRlciA9IG51bGxwdHI7CisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKIH0K
IAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGF1dG8g
ZmlsdGVyU291cmNlUmVjdCA9IGZpbHRlci5jb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KGZpbHRlckJveFJlY3QsIGRpcnR5UmVjdCk7CisgICAgCisgICAgYXV0byBmaWx0ZXJTb3Vy
Y2VSZWN0ID0gZGlydHlSZWN0OworICAgIGlmIChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCkpCisgICAgICAgIGZpbHRlclNvdXJjZVJlY3QgKz0gZmlsdGVyLm91dHNldHMoKTsKKyAg
ICBmaWx0ZXJTb3VyY2VSZWN0LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKKwogICAgIGlmIChm
aWx0ZXJTb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICAKKyAgICBpZiAoZmlsdGVyU291cmNlUmVjdCAh
PSBtX3NvdXJjZUltYWdlUmVjdCkgeworICAgICAgICBtX3NvdXJjZUltYWdlUmVjdCA9IGZpbHRl
clNvdXJjZVJlY3Q7CisgICAgICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwor
ICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkK
ICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUpCisgICAgICAgIGlmICghbV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkKQogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsK
QEAgLTE1OSwxMSArMTcyLDkgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAgICBtX3BhaW50
T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigpOwogICAgIHJlc2V0RGlydHlTb3Vy
Y2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCk7Ci0KLSAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlv
bkNvbnRleHQpOwotICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1
dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXIuZmls
dGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhm
aWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKCk7CisgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0
KCk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRz
IG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBpbiB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIu
CkBAIC0xNzcsMjUgKzE4OCwyNiBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogCiB2b2lkIFJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKG1fZmlsdGVyLT5pbnB1dENvbnRleHQoKSk7
CisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgpKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5
RmlsdGVyRWZmZWN0Iik7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgZmls
dGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7Ci0KLSAgICBmaWx0ZXIuYXBwbHkoKTsKLQot
ICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAg
IExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0
Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKLQotICAgIGlmIChh
dXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9u
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBp
eGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSkpOwotCi0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJz
ICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOworICAgIGlucHV0Q29u
dGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBhdXRvIGdlb21ldHJ5ID0gc3RkOjptYWtlX3VuaXF1
ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJlY3QsIG1fc291cmNlSW1hZ2VSZWN0KTsK
KyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9z
b3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworCisvLworLy8gICAgLy8gR2V0
IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCisvLyAgICBMYXlvdXRS
ZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKKy8vICAgIGRlc3RSZWN0Lm1vdmUo
bV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKy8vCisvLyAgICBkZXN0aW5h
dGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5n
ZXQoKSk7CisvLworLy8gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworLy8K
Ky8vICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmls
dGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDVi
ZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEw
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xh
c3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Citj
bGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJp
dmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmlu
YWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3Qg
PSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwor
ICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5
ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9j
dW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAg
UmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNl
UmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAg
CiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZz
ZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQxNjJiODFmZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkx
ZWM3NTU3YTEuLmE1MjgwYTdiZjcwMzA0NzY5OGUyM2EyYTEyYmNhYjIxODVkMzVjMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC04MCw2MiAr
ODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlk
YXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlv
biA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291
bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5v
ZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94
KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRl
ciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZp
bHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5w
cmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5P
ZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50
KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgp
LCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+
Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNv
cHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3Vu
ZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2
ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRl
cmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5k
ZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09
IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpM
aW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChl
bGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1v
ZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VN
b2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSByZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7
Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkg
ewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRh
OjpBcHBseWluZykKLSAgICAgICAgICAgIGZpbHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6
Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBv
ciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxl
c3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUg
U1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigp
OwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5k
aW5nQm94KCk7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5h
Y2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAKLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50
PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0
Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkK
KyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50
KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0g
cmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVz
ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50Pigm
ZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91
bmRpbmdCb3gpOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKKyAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
KyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRy
aXggZm9yIGZpbHRlci4gCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQog
ICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJl
bmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMsNjUgKzExMSwyMiBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2Vz
IGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0g
PSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29s
dXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0
ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
LSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbHRlciByZXNvbHV0aW9uCiAgICAgRmxv
YXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7CisgICAgZmls
dGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyRGF0YS0+c2NhbGUpOwog
Ci0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZl
Qm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRh
dGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBm
aWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAg
Ly8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRh
LT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlm
ICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlh
dGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4K
LSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0g
ICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5z
Y2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNj
YWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFs
T2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmls
dGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBs
YXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0
SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxu
IiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKLQotICAgIGxhc3RFZmZl
Y3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qg
b25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxj
dWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7
Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7
Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwotICAgIH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZl
IHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFy
Z2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0
aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlm
IChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQo
IW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBm
aWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmls
dGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFu
c2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhl
IHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KKyAgICAvLyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJh
bnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZl
Y3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAg
IGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShmaWx0ZXJEYXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKKwogICAgIGF1dG8gc291cmNlR3Jh
cGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEt
PmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VS
VCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAs
MTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIC8vIFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUg
cGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4
dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJj
ZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4dCgpOwotICAKKyAgICAKICAg
ICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGlj
KTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotCisgICAgCiAgICAg
Y29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJl
ckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsxODgsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBo
aWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0
ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVj
dCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+Zmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
dGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2Fs
bGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0
IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRy
YXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0
KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUo
ZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRy
dWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5j
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
ICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNh
dENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1
ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgo
KSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RF
ZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2Uo
KS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuc2Nh
bGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRh
dGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgICAgICB9CisgICAgICAgIGF1dG8g
Z2VvbWV0cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJEYXRh
LmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQt
PmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEuc291
cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIAorICAgICAg
ICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0KLSAg
ICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8
PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVjdCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCkKQEAgLTMwNiwxMCArMjA3LDggQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2Jq
ZWMKICAgICByZXR1cm4gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0
ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMo
KSwgb2JqZWN0Lm9iamVjdEJvdW5kaW5nQm94KCkpOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCiAgICAgTE9HKEZpbHRlcnMsICJSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVy
ICVwIiwgdGhpcywgb2JqZWN0KTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgb2JqZWN0RmlsdGVy
RGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewpAQCAtMzE3LDE2ICsyMTYsNiBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUg
IT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBT
VkdGaWx0ZXJCdWlsZGVyKiBidWlsZGVyID0gZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAg
ICAgICAgRmlsdGVyRWZmZWN0KiBlZmZlY3QgPSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9i
amVjdCk7Ci0gICAgICAgIGlmICghZWZmZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIC8vIFNpbmNlIGFsbCBlZmZlY3RzIHNoYXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUs
IGFsbAotICAgICAgICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAg
ICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1
dGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNS
ZWN1cnNpdmUoZWZmZWN0KTsKLQogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUg
c2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJE
YXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRl
eCA1NjRhYWFkNDhhMjJlM2M0NTA3ZWVmNTBhZGM2NDQwMWQ4NzAzZjgzLi4xNDhhYzA4YjM5ZTgx
Y2YyOTZjNjRmY2JkZWQ4MzE5NmUxYTg5ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNp
bmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTQyLDggKzQxLDcgQEAgcHVibGljOgogCiAgICAg
RmlsdGVyRGF0YSgpID0gZGVmYXVsdDsKIAotICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQ
dHI8RmlsdGVyPiBmaWx0ZXI7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGlj
QnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9Owog
ICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKQEAgLTcxLDgg
KzY5LDYgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29u
c3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gYnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYpIGNvbnN0OwotCiAgICAgU1ZH
VW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0ZXJVbml0cygpIGNvbnN0IHsgcmV0dXJuIGZpbHRl
ckVsZW1lbnQoKS5maWx0ZXJVbml0cygpOyB9CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlw
ZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0dXJuIGZpbHRlckVsZW1lbnQoKS5wcmltaXRp
dmVVbml0cygpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGI0NzM5NDM4YzVmM2UyYzY5MWVmM2IwMmJiYmVj
OWQyOTIwNzAzYjcuLmQyZTU5ZDEzOWQ4YzlmNDJjNTdiMDRjYzlhYzczMWY3NGFlYThlMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQu
aCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtNDksNiArNTAsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNp
bmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgpAQCAtNDI4LDEzICs0MzAsOSBAQCB2b2lkIHdy
aXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyJgogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRp
dmVVbml0cyIsIGZpbHRlci5wcmltaXRpdmVVbml0cygpKTsKICAgICAgICAgdHMgPDwgIlxuIjsK
ICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2Vk
IHRvIHRoZSBidWlsZGVyLgotICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBh
dXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1
bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBi
dWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKFJlZlB0cjxGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUo
ZmlsdGVyLmZpbHRlckVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLQotICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCog
bGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKLSAgICAgICAgICAgICAgICBsYXN0
RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICAgICAgICAgIGR1bW15Rmls
dGVyLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewogICAg
ICAgICBjb25zdCBhdXRvJiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyJj4ocmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxl
bWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2NDMxZjY4Ni4u
MTYwZTAwZGNiZWQ2OTVmYjQwNzFlNjE3MWVjZjEyZjJlMTk2NGZjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRl
ICJGRUJsZW5kLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTAwLDIwICsxMDAs
MTUgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUJsZW5kRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
Lm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlci5uYW1lZEVmZmVj
dChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9k
ZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBp
bnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1
dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIHsgRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0
MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxl
bmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAppbmRl
eCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2Li4yN2E4MmY1Y2NiNDcw
ZTYzMDZjNTViNDllYWU4MjY0MzNkZThkMmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVu
ZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4
ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMuLjhhYjgwYTI2OGU5ZmMzZDAyMWVkNDIzMzg5YmM0
YjgwOTJjOGExMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMDAsMTIgKzEwMCwx
MSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQx
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZl
Y3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzOwogICAgIENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBl
ID0gdHlwZSgpOwpAQCAtMTM1LDE1ICsxMzQsMTMgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwK
ICAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYg
c2l6ZSAhPSAyMCkKICAgICAgICAgICAgIHx8IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAxKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIAogICAg
ICAgICBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMoKTsKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlu
a1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVy
VmFsdWVzKSksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCmluZGV4IDdhYjRhYTQxODFlN2FiMTk4YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLmNhN2E3
ZDVmNTdkNjVhOGNiN2ViOTFmM2JkZDU0NjIyOWQzOTRmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lz
dHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmlu
ZGV4IGU4OTI2N2NlN2QzNDE0NmQyYTY1ZDZmMDFkY2U1ZGVmNDljODJmNzguLjZiMTUxY2FiMjBh
NDg5ODIzNTA5MDdmMzY1YTczY2Y0OGM2M2Q5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNyBA
QAogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jR0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1bmNSRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTYyLDEyICs2Miwx
MSBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAg
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWQ7CiAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBncmVlbjsKQEAgLTg1LDkgKzg0LDcgQEAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqIGZpbHQKICAgICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+
KGNoaWxkKS50cmFuc2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0
ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJl
dHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSwgeyB7ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5k
ZXggYmI1ODkzNDdkODgyNmRmYjM2MDllZGFjNmU4Yjk5M2E0ZGQ1NDg2My4uZjIyZDUxYTJiZDhj
MjM3NjVkYTk4YmZjMjVlNmEyOThhOGVmMmVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJp
dmF0ZToKICAgICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUy
MDVhYzk4MjM1Li42MzA2OTY3YzgzY2E2NDVmMGQ4ZjY1YThhMzE5OThkMjc1ODNkMzAyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtMjMsNyAr
MjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIApAQCAtNDAsNyArNDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigp
OwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpv
cGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVy
UHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21wb3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJv
cGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjptX2sxPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdp
c3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1f
azI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFt
ZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2
LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7
Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3Bl
cnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAg
ICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFp
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAo
cHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFs
SW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAg
ICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVP
cGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk5
LDcgKzk5LDcgQEAgYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QKIHsKICAgICBGRUNvbXBvc2l0ZSog
Y29tcG9zaXRlID0gc3RhdGljX2Nhc3Q8RkVDb21wb3NpdGUqPihlZmZlY3QpOwogICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9z
aXRlLT5zZXRPcGVyYXRpb24oc3ZnT3BlcmF0b3IoKSk7CisgICAgICAgIHJldHVybiBjb21wb3Np
dGUtPnNldENvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9yKCkpOwogICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQogICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5z
ZXRLMShrMSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKQEAgLTEz
MSwyMCArMTMxLDE1IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewot
ICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0g
ICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAg
ICAKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0
byBpbnB1dDIgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4yKCkpOworCiAgICAgaWYgKCFpbnB1dDEg
fHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9
IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBr
MygpLCBrNCgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVu
ZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9Owor
CisgICAgcmV0dXJuIHsgRkVDb21wb3NpdGU6OmNyZWF0ZShjb21wb3NpdGVPcGVyYXRvcigpLCBr
MSgpLCBrMigpLCBrMygpLCBrNCgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKaW5kZXgg
ODFhNzhjODY1N2EwZmEzMDQ0ZGY1YjdjNWEwODBkNmU3Nzk3MjJmNi4uZGM5NTQ3OWI1NmFkOTU4
ZTM2Y2VjZWFhM2JmNGJhNTYxNGI2NmJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaApAQCAtMjcsMTUgKzI3LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHRlbXBsYXRlPD4KLWlubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0
ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KK2lubGluZSB1bnNpZ25lZCBTVkdJRExFbnVt
TGltaXRzPENvbXBvc2l0ZU9wZXJhdG9yPjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJl
dHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKIHRlbXBsYXRlPD4KLXN0
cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CitzdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNp
Z25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfTElH
SFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhDb21wb3NpdGVPcGVyYXRpb25U
eXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3IpIHsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKQEAgLTU4LDcgKzU4LDcgQEAg
c3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3ZlciIpCiAgICAgICAgICAgICByZXR1cm4gRkVDT01Q
T1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFN0
cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2luMi0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdP
cGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+KCk7IH0KKyAgICBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZhbHVlPEZFQ29tcG9zaXRlT3BlcmF0b3I+KCk7IH0K
ICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAg
ICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVybiBtX2syLT5jdXJyZW50VmFsdWUoKTsgfQogICAg
IGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMy0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTkz
LDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVk
KCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4yQW5pbWF0ZWQo
KSB7IHJldHVybiBtX2luMjsgfQotICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJh
dG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fY29tcG9z
aXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazFBbmltYXRlZCgpIHsgcmV0
dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazJBbmltYXRlZCgpIHsgcmV0dXJu
IG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazNBbmltYXRlZCgpIHsgcmV0dXJuIG1f
azM7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4yIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmlt
YXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07CisgICAgUmVmPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+IG1fY29tcG9zaXRlT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazEgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRo
aXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2syIHsgU1ZHQW5pbWF0ZWROdW1i
ZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMyB7IFNW
R0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKaW5kZXggNzhlNDAyMDdmNWIwMmY2NzBmMDQwYjI5Mzc1
ZWFkN2MyYjQ1MmRlMC4uZmM2NzBjOWVjNTZjNDFjMTA5Mjg1NDg0MjdjNWY2YThlMTg1YjFhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKQEAgLTM4
LDcgKzM4LDcgQEAKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAg
ICAgIGluMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBp
bjI7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
VkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAgIFtJbXBsZW1lbnRlZEFzPWNvbXBv
c2l0ZU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBv
cGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBr
MTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMjsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IGY3
NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1YTgwYzZhMjZkZjEuLjA4YTkxNDYwNDU3YWY1MWJi
NGQwY2U5NzE4ZjNiOTA5MTIwOGY3MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtMTkxLDEyICsxOTEsMTEgQEAg
dm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0
MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBp
bnQgb3JkZXJYVmFsdWUgPSBvcmRlclgoKTsKICAgICBpbnQgb3JkZXJZVmFsdWUgPSBvcmRlclko
KTsKQEAgLTIwNiwyMiArMjA1LDIyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgfQog
ICAgIC8vIFNwZWMgc2F5cyBvcmRlciBtdXN0IGJlID4gMC4gQmFpbCBpZiBpdCBpcyBub3QuCiAg
ICAgaWYgKG9yZGVyWFZhbHVlIDwgMSB8fCBvcmRlcllWYWx1ZSA8IDEpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIGF1dG8mIGtlcm5lbE1hdHJpeCA9
IHRoaXMtPmtlcm5lbE1hdHJpeCgpOwogICAgIGludCBrZXJuZWxNYXRyaXhTaXplID0ga2VybmVs
TWF0cml4Lml0ZW1zKCkuc2l6ZSgpOwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhpcyBpcyBhIHJl
cXVpcmVtZW50LCBhbmQgc2hvdWxkIGJhaWwgb3V0IGlmIGZhaWxzCiAgICAgaWYgKG9yZGVyWFZh
bHVlICogb3JkZXJZVmFsdWUgIT0ga2VybmVsTWF0cml4U2l6ZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpbnQgdGFyZ2V0WFZhbHVlID0gdGFy
Z2V0WCgpOwogICAgIGludCB0YXJnZXRZVmFsdWUgPSB0YXJnZXRZKCk7CiAgICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpICYmICh0YXJnZXRYVmFsdWUgPCAwIHx8IHRh
cmdldFhWYWx1ZSA+PSBvcmRlclhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUg
aXM6IHRhcmdldFggPSBmbG9vciAoIG9yZGVyWCAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpKQogICAgICAgICB0YXJnZXRYVmFsdWUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZsb29yZihvcmRlclhWYWx1ZSAvIDIpKTsKICAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp0YXJnZXRZQXR0cikgJiYgKHRhcmdldFlWYWx1ZSA8IDAgfHwgdGFyZ2V0WVZh
bHVlID49IG9yZGVyWVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFy
Z2V0WSA9IGZsb29yICggb3JkZXJZIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjp0YXJnZXRZQXR0cikpCiAgICAgICAgIHRhcmdldFlWYWx1ZSA9IHN0YXRpY19jYXN0PGlu
dD4oZmxvb3JmKG9yZGVyWVZhbHVlIC8gMikpOwpAQCAtMjM0LDExICsyMzMsMTEgQEAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA9IDE7CiAg
ICAgfQogICAgIGlmIChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlIDw9IDAgfHwga2VybmVsVW5pdExl
bmd0aFlWYWx1ZSA8PSAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIGZsb2F0IGRpdmlzb3JWYWx1ZSA9IGRpdmlzb3IoKTsKICAgICBpZiAoaGFz
QXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29yQXR0cikgJiYgIWRpdmlzb3JWYWx1ZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFoYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSkgewogICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGtlcm5lbE1hdHJpeFNpemU7ICsraSkKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSArPSBr
ZXJuZWxNYXRyaXguaXRlbXMoKVtpXS0+dmFsdWUoKTsKQEAgLTI0Niw5ICsyNDUsMTggQEAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAg
fQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJ
bnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJ
bnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9p
bnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNl
cnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7CisgICAgICAgIEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZSgKKyAgICAgICAgICAgIEludFNpemUob3JkZXJYVmFsdWUs
IG9yZGVyWVZhbHVlKSwKKyAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSwKKyAgICAgICAgICAgIGJp
YXMoKSwKKyAgICAgICAgICAgIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwK
KyAgICAgICAgICAgIGVkZ2VNb2RlKCksCisgICAgICAgICAgICBGbG9hdFBvaW50KGtlcm5lbFVu
aXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpLAorICAgICAgICAgICAgcHJl
c2VydmVBbHBoYSgpLAorICAgICAgICAgICAga2VybmVsTWF0cml4KSwKKyAgICAgICAgeyB7ICpp
bnB1dDEgfSB9CisgICAgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMwMDI2
OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkwNDliMzM5Li44NDI1OTAyMGE4Njk5Njg5MDkwZDIz
NWE2OTAyZTRhMzMxYzk3ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAog
ICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQo
U1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZk
OGU5NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0YmRkNS4uNzFkOGM3ZjM5MGRiYmY1MTkyM2VmMDQx
MzhjOTQ1Yjc2NjVmOTk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGln
aHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTg5LDE0ICs4
OSwxNCBAQCBib29sIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LAogICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAg
ICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0g
ICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOwor
ICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQog
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsK
ICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCiAgICAg
ICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29u
c3RhbnQoKSk7CiAKLSAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3Vy
Y2UmPihkaWZmdXNlTGlnaHRpbmctPmxpZ2h0U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291
cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+c291cmNlKCkp
OwogICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0
RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50
KTsKIApAQCAtMTUxLDI4ICsxNTEsMjUgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodEUKICAgICBw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0
byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZWZQ
dHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhp
cyk7CiAgICAgaWYgKCFsaWdodEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1l
bnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0g
bGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb2xvciBjb2xvciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5z
dHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0g
RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwg
ZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZ
KCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFRGlmZnVzZUxp
Z2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwg
a2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNv
dXJjZSkpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3
NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLjdkOTk0MzFlMTVlY2I2YjNiZjQwYmUyYWUyMjFmNjhk
NTYwNmY2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEy
NjllYTZkNzIyZGZkMDUxNzNkOGMyLi45MjdiMzRmMzdhZDU2MjQxZTkwNzc2MjcyOTgxMWE4NWFj
YjUxYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTE1LDIw
ICsxMTUsMTUgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAor
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAg
IGF1dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMigpKTsKICAgICAKICAgICBpZiAo
IWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8g
ZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0
b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZl
Y3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7
Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0
OworICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgRkVEaXNwbGFjZW1lbnRNYXA6
OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSks
IHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2
Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1ZDMuLjEyMzc4MDkwODVhZWQyMjc1YjViMDEwZjQ5
OGNmZjZjYjViZTZkZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBi
dWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAppbmRleCBhNjg2YmI4ZmEz
OGQ5ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZmMmY3Li40YzE1M2JlYTE4ZDc3ZWNiNmMwZjIyZDdh
MWIxZTAxMDQxYmI5NTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50LmNwcApAQCAtMzYsNyArMzYsNyBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRF
bGVtZW50PiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CitSZWY8TGlnaHRT
b3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmls
dGVyJikgY29uc3QKIHsKICAgICByZXR1cm4gRGlzdGFudExpZ2h0U291cmNlOjpjcmVhdGUoYXpp
bXV0aCgpLCBlbGV2YXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50LmgKaW5kZXggZmJkZjcxYzBlY2JkOWY5OTdkNjllYTY1NGI5ZjViYTAz
MTdkNzFjYy4uNDE2ZmU2MGJlN2IxNmQ5MTgxNWNiMzllZjUyM2E5ZjRlNGVhMWViMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyAr
MzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4g
bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBz
aXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2
YTg5YmZjNWI2ODEuLjc5NTRlYzI3MDFiM2E4NjhkOGQ2MGRlOWM1ZTQzNDM4Yzk1YmY0NjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTIy
LDcgKzIyLDcgQEAKICNpbmNsdWRlICJTVkdGRURyb3BTaGFkb3dFbGVtZW50LmgiCiAKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNs
dWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Bh
cnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCkBAIC05NywyNyAr
OTcsMjUgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVE
cm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAg
CiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdT
dHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVh
dGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwg
Y29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVEcm9wU2hhZG93OjpjcmVhdGUo
c3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFj
aXR5KSwgeyAqaW5wdXQxIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0
MmY3NDUxZC4uNTI3NWIxZmNhMDBlYmY1NTFlYTBkZGFiYjQwYjU1ZGJkMjAyMTBjOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1h
dGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBl
MTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIuLmU2YjhhMjMxOGVjZjU0MmRkYzQ4YWQwZjI5Y2Nk
MzQ3Zjc3MjZhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApA
QCAtNTAsMjYgKzUwLDI2IEBAIGJvb2wgU1ZHRkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhCiAgICAgRkVGbG9vZCog
Zmxvb2QgPSBzdGF0aWNfY2FzdDxGRUZsb29kKj4oZWZmZWN0KTsKIAogICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6Zmxvb2RfY29sb3JBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNl
dEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOworICAgICAgICByZXR1
cm4gZmxvb2QtPnNldENvbG9yKHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKQotICAgICAgICByZXR1
cm4gZmxvb2QtPnNldEZsb29kT3BhY2l0eShzdHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgp
KTsKKyAgICAgICAgcmV0dXJuIGZsb29kLT5zZXRPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxv
b2RPcGFjaXR5KCkpOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVGbG9vZEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAg
ICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHls
ZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBj
b2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJuIHsgRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFj
aXR5KSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgK
aW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFiNmY1Y2Y1MWZlZTkxMS4uNDgwNWUyM2Ex
YzczMGEyY2IxYWNmN2NjMzdlZDkzZmE4YTVjYjEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Rmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTVkdQ
cm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4uOWI2ZWUw
NTI5MjM5OGM1NTFkYjc2Njg5NDczYTRlYjJkOGQyZTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICNp
bmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0
ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGll
cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC05NSwxOCArOTUsMTYg
QEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAo
c3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVH
YXVzc2lhbkJsdXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpLCBlZGdlTW9kZSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEg
fTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpLCB7ICppbnB1
dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIyYzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4u
ZWZkYmYwMDk1MDViMzBmODE5ZWQwYTJiNDIyYjgzYzJhNWQ1MDU4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlMTQ2ODhhNWViMTc2ZjAyYTE2
YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi42MzgzNjEyMDFhNWM0Nzc0MjA2MDlkNGM1YTA3MjVkNGQw
Mjg0ZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTE3
NCwxNiArMTc0LDE3IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50
UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2FjaGVk
SW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoZmlsdGVyLCBt
X2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpOworICAgICAgICByZXR1cm4geyBGRUltYWdlOjpjcmVhdGUoeyAqbV9jYWNoZWRJ
bWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KCkpLCB7IH0gfTsKIAogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRF
bGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgpKTsKICAgICBpZiAoaXNEZXNj
ZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVm
ZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4geyB9OworLy8gICAgcmV0
dXJuIHsgRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgp
LCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsgfSB9OwogfQogCiB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJM
PiYgdXJscykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKaW5kZXgg
ZDkzZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEyNTZiYWRhMTU0YzVjNy4uZWUxMzk5YTYwN2MzNTFm
NWVhZTkxYWI1NzA4ZTk4NjRkYWRjZTA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRmluaXNo
SW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1
aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291cmNl
UmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKaW5kZXggY2QwYmZiOWVkY2ZkN2I0ZTFhZjM5YjU1
ZWRiYmJkNzg0YWFlYTg5ZC4uM2ZmZTQ4ZjQ0MDk3NGVlN2E5MWRmZGZlYTEyNDRmYTc0NmZkNTMy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKQEAgLTI3LDEyICsyNywx
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7Citj
bGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNzIFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0Vs
ZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRkVMaWdodEVsZW1lbnQpOwog
cHVibGljOgotICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdo
dFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdCA9IDA7CiAgICAgc3RhdGljIFNWR0ZFTGln
aHRFbGVtZW50KiBmaW5kTGlnaHRFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQqKTsKIAogICAgIGZs
b2F0IGF6aW11dGgoKSBjb25zdCB7IHJldHVybiBtX2F6aW11dGgtPmN1cnJlbnRWYWx1ZSgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAppbmRleCBhNTcyYWQ1M2Q5
ZjFkNjVkYTNkZWY0ZDUxMTNkNTBhNDI1MjE4ODhhLi5kNGEyOTY0NjhjMjA2MmY0ZmRkY2UyYjcw
YTdiYmIyMWM3OGI1YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5j
cHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDQsMjQgKzQzLDIyIEBAIFJlZjxTVkdGRU1l
cmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJn
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmls
dGVyKSBjb25zdAogewotICAgIGF1dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRlcik7
Ci0gICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbWVyZ2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8mIG1l
cmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7
Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlk
KG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXIubmFt
ZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RG
TW92ZShtZXJnZUVmZmVjdCkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbWVy
Z2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAog
ICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0KCk7Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVNZXJnZTo6Y3JlYXRlKG1lcmdlSW5w
dXRzLnNpemUoKSksIFdURk1vdmUobWVyZ2VJbnB1dHMpIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4
MDJkMjgzY2Y0ZTNjMi4uZjRkNTA4OGEzMjJhZmRjOTNlNDU2YzEwYzM1YTZiOTQ0Yjc0MDBmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAg
cHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJl
Z2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnko
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1
YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIxYi4uNmE5NGE1ZGUxNjRkNDdlZTYxMmU1
ZmI5ZTc3MjE3Mjg4ODFiMTRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zOSw3ICszOSw3IEBAIGlubGluZSBTVkdGRU1vcnBob2xv
Z3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1faW4xPigp
OwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpv
cGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsICZTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3Rl
clByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvciwgJlNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9ycGhvbG9neU9wZXJhdG9yPigpOwogICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpyYWRpdXNBdHRyLCAm
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNYLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwogfQpAQCAtNTksOSArNTksOSBAQCB2b2lkIFNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1cyhmbG9hdCB4LCBmbG9hdCB5KQogdm9pZCBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1l
czo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgcHJvcGVy
dHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9t
U3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yIHByb3BlcnR5VmFsdWUg
PSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKHZhbHVl
KTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAgbV9zdmdPcGVy
YXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+KHByb3BlcnR5
VmFsdWUpOworICAgICAgICAgICAgbV9tb3JwaG9sb2d5T3BlcmF0b3ItPnNldEJhc2VWYWxJbnRl
cm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zCiB7CiAg
ICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5ID0gc3RhdGljX2Nhc3Q8RkVNb3JwaG9sb2d5Kj4o
ZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAg
ICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvcihzdmdPcGVyYXRv
cigpKTsKKyAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvciht
b3JwaG9sb2d5T3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRp
dXNBdHRyKSB7CiAgICAgICAgIC8vIEJvdGggc2V0UmFkaXVzIGZ1bmN0aW9ucyBzaG91bGQgYmUg
ZXZhbHVhdGVkIHNlcGFyYXRlbHkuCiAgICAgICAgIGJvb2wgaXNSYWRpdXNYQ2hhbmdlZCA9IG1v
cnBob2xvZ3ktPnNldFJhZGl1c1gocmFkaXVzWCgpKTsKQEAgLTExNCwyMSArMTE0LDE4IEBAIHZv
aWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQx
ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgZmxvYXQgeFJhZGl1
cyA9IHJhZGl1c1goKTsKICAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOworICAgIGlmICh4
UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1
cyA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9y
KCksIHhSYWRpdXMsIHlSYWRpdXMpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlu
cHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVNb3JwaG9sb2d5Ojpj
cmVhdGUobW9ycGhvbG9neU9wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpLCB7IHsgKmlucHV0
MSB9IH0gfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNl
MTExOThhNjZmNjZhYTY2OS4uY2JmOTViOTNkYjNiYThlYTVjY2MxNWRlZmQzNTVhZDYyNDE0ODhh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0y
NiwxMiArMjYsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0
IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7
IH0KIAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0
eXBlKQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBz
d2l0Y2ggKG1vcnBob2xvZ3lPcGVyYXRvcikgewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9VTktOT1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAg
ICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBz
dHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1v
cnBob2xvZ3lPcGVyYXRvciBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAodmFsdWUgPT0gImVyb2RlIikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRVJPREU7CkBAIC02MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmFkaXVzKGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5n
IGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgc3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJh
dG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBo
b2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBo
b2xvZ3lPcGVyYXRvci0+Y3VycmVudFZhbHVlPE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAg
IGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgp
OyB9CiAgICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVu
dFZhbHVlKCk7IH0KIAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0
dXJuIG1faW4xOyB9Ci0gICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uJiBtb3JwaG9sb2d5T3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9w
ZXJhdG9yOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0
dXJuIG1fcmFkaXVzWDsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQo
KSB7IHJldHVybiBtX3JhZGl1c1k7IH0KIApAQCAtODEsMTEgKzgxLDExIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRp
b246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CisgICAgUmVm
PFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fbW9ycGhvbG9neU9wZXJhdG9yIHsgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1hdGVkTnVt
YmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVz
WSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKaW5kZXggYTJjMTgxZjJlNjM3Y2Qz
OTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4uMmQyMWYyYTFkODg4ZDAyZWMxNzlkZjEwZTJkZTQz
ZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNWR19N
T1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAgID0gMjsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVy
YXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7
CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhvbG9neU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1
dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICByYWRpdXNYOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJhZGl1c1k7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAz
NTQxMDBhNWVlNy4uZGM2OTJkYWJiYWZjNGQ2YjZhZjNlNDQyZWNjODVjMTU4Y2QwMTI2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKQEAgLTI0LDcgKzI0LDcg
QEAKIAogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApA
QCAtODEsMTYgKzgxLDEzIEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRlKGZpbHRlciwgZHgoKSwgZHkoKSk7Ci0gICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAg
ICByZXR1cm4geyBGRU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5KCkpLCB7IHsgKmlucHV0MSB9IH0g
fTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IDU3
NDczZGNjNzJkYjY3YjEyNWVhMmVkNDY1ZTM1YjU3MzcwNDliZWUuLjNlZTg4Y2VmZGQyNTJlNzIw
YmNjNDA2Y2E2NTExNzQxZDA2ZWQxNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
UG9pbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMzOGExYjZhNTVmY2RiODIxYTA5ZjBhY2MzYzIwN2Vh
ODEuLmRiOTM3Y2ExNTBiODQ0MWI5NDViNGIwNWU3MjBhZmJkNzdhYTU5MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDYg
QEAKIAogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdo
dFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTM5LDE5ICszOCwxOSBA
QCBSZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3Vy
Y2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6
OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNE
IHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIAot
ICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VC
b3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHko
KSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6
Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdl
Ci0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNl
Qm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNx
cnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50
M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICBpZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAg
ICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOwor
Ly8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZl
cmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gu
eSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vCisvLyAgICAgICAgLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0
ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9y
dF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0
YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZ
Q29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlCisvLyAgICAgICAgcG9z
aXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CiAgICAgCiAgICAgcmV0dXJuIFBv
aW50TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaAppbmRleCAzM2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIy
ZjcyYTc0NWU0OGRhNzllLi5jZGViZTQ3NjE4NDczMTViMmI5Yjg2NmMyMDE0YzBkMzgyOWVjMWZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKQEAgLTMw
LDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNl
PiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
PExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRVBvaW50TGlnaHRFbGVtZW50KSA9PSBz
aXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDliN2NlNDBhYjk3MTZhZTRm
MzM1ZjU0YjI0Y2RhNDU5YTg0MjlhNTkuLmMxMTY0MWIwZTIwYjZiNjUwYzliZDY3YjlkZDQ2ODI4
YjlkNmRkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRl
ci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTk2LDcgKzk2LDcgQEAg
Ym9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgICAgIENv
bG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwotICAgICAgICBy
ZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAg
IHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJu
IHNwZWN1bGFyTGlnaHRpbmctPnNldFN1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CkBAIC0x
MDUsNyArMTA1LDcgQEAgYm9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3Vs
YXJMaWdodGluZy0+c2V0U3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KCkpOwogCi0g
ICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJM
aWdodGluZy0+bGlnaHRTb3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9j
YXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJMaWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0
IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6Zmlu
ZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTYw
LDI4ICsxNjAsMzEgQEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodEVs
ZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxl
bWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0
RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgCi0gICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBw
bHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29s
b3IoKSk7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGZp
bHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFy
RXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RG
TW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZF
TGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOworICAgIGlmICghbGlnaHRFbGVt
ZW50KQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiB7CisgICAgICAgIEZF
U3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKAorICAgICAgICAgICAgcmVuZGVyZXItPnN0eWxlKCku
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5s
aWdodGluZ0NvbG9yKCkpLAorICAgICAgICAgICAgc3VyZmFjZVNjYWxlKCksCisgICAgICAgICAg
ICBzcGVjdWxhckNvbnN0YW50KCksCisgICAgICAgICAgICBzcGVjdWxhckV4cG9uZW50KCksCisg
ICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLAorICAgICAgICAgICAga2VybmVsVW5pdExl
bmd0aFkoKSwKKyAgICAgICAgICAgIGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyKSks
CisgICAgICAgIHsgeyAqaW5wdXQxIH0gfQorICAgIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUx
NTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0N2IxNDYuLjUyZDAxMzI1NzIxOGEyZDA1OWQzNTg5
NTU0YjJhNzJmYTUzZTVlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVw
bGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxk
KFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3By
b3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9p
bjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCmluZGV4IGQ2ZGEzMTA2NGNiMWIzN2U4Y2M5
Mzg3NGVhNGFhOWNmMmRmYmZmZWUuLjkwNGM4YWJhMTQ0ZGQ0YWUzYTg2YzAwYTdkOTQ4ZGQxOTRi
YTU5YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3Bw
CkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgiCiAK
ICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0zOSwyNyArMzgsMjcgQEAgUmVmPFNW
R0ZFU3BvdExpZ2h0RWxlbWVudD4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGEKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVNwb3RMaWdo
dEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdG
RVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIp
IGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3Vy
Y2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247
CiAgICAgRmxvYXRQb2ludDNEIHBvaW50c0F0OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZl
VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
IHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRp
bmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94Lngo
KSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShy
ZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0
dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192
aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFu
RGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhY
TWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLQotICAgICAgICBwb2ludHNBdC5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNBdFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsK
LSAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiBy
ZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53
My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAg
ICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5j
ZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBz
cXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBv
aW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAgICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBv
aW50c0F0WCgpLCBwb2ludHNBdFkoKSwgcG9pbnRzQXRaKCkpOwotICAgIH0KKy8vCisvLyAgICBp
ZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9
IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94Lmhl
aWdodCgpKTsKKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3NpdGlv
bi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5l
cigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Cisv
LworLy8gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgp
ICogcmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAgIHBvaW50c0F0LnNldFkocmVmZXJl
bmNlQm94LnkoKSArIHBvaW50c0F0WSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vICAg
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGln
aHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1Vu
aXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0
WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJl
ZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAgIH0g
ZWxzZSB7CisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7
CisvLyAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0
WSgpLCBwb2ludHNBdFooKSk7CisvLyAgICB9CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291cmNl
OjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0aW5n
Q29uZUFuZ2xlKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bv
dExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVu
dC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFmNTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLmJlOThm
YmVkODY2YzViY2UyZjk5NzU3M2Y3NTliYTQyMzMyNWM3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1
OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi43ZGYyNTJkYWE2NjNkMGIwYWVjMTViODE0
YWUyMzBlMzYxNzQxYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3Bw
CkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlICJGRVRpbGUuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC03MCwxNiArNzAsMTMg
QEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5h
bWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3Jl
YXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRVRpbGU6OmNyZWF0ZSgpLCB7ICppbnB1
dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0
NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEyMmRjNDJhMzNhOTFmLi43MWE5NzQ2ODM3NjBhZGMw
MTZjYzZkZWJlZTM1YTE5MTM1MmVkYzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVt
ZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgzZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRhNGQu
LmNmZDRhZDIxNmZhNGE5ZDRkM2JiZDAyMDc3OWRhYTY4ZTg1YzdmZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKQEAgLTExNywxMSArMTE3LDEx
IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwgMCB8
fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgp
LCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9
PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVy
biB7IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZy
ZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NU
SVRDSFRZUEVfU1RJVENIKSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0
MjY3NzY5ZTE5OGEuLmI5MTRkZjM4Y2JhMDBmZDc4YjM4ZjQyYzNiMGZiMDAyZTgyMmE1OWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcg
KzExOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlk
ZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZHQW5p
bWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVs
ZW1lbnQuY3BwCmluZGV4IDgxM2JjYmQwODIwY2FjNjc3YTc5N2YyN2JjY2U4Y2UxMDkxMmJjNDcu
LmRmNjA0YmEyYTZjZDc2ODYyYzkzMzIyZDZjN2RjODkzZGI3ZTllZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJT
VkdGaWx0ZXJFbGVtZW50LmgiCiAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
IgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAppbmRleCBmZjUy
MjMwOTQ2NmIwNDBiZWYwODlkMTU3YjM4NmRmZmJiMDVjNjE5Li43NzFhNDE2ZWYwZWYwNTU4MmQ3
Mjk4MWEzMGNjOWQ2MmU2NTI5ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcApAQCAtMjUsOSAr
MjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MywyMiArOTEsNiBAQCB2
b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2Vk
KGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyhG
aWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZmlsdGVyRWZm
ZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNl
dEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQotICAg
ICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1kodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNXaWR0aCh0
cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAg
ICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWlnaHQodHJ1ZSk7Ci19Ci0KIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNyZWF0ZUVs
ZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRp
b24mKQogewogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRl
eCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li5lYzI2OWYwM2M0MzYx
NzI4NWMyY2UwNjc4NTIxNGFkN2FhZjA1Zjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zMSwx
NyArMzEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBG
aWx0ZXJFZmZlY3Q7Ci1jbGFzcyBTVkdGaWx0ZXJCdWlsZGVyOworY2xhc3MgU1ZHRmlsdGVyOwog
CiBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZH
RWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMpOwogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKEZpbHRlckVmZmVjdCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8v
IFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xk
IG9uZS4KLSAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0
cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLCBTVkdFbGVtZW50PjsKIAogICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkg
Y29uc3QgeyByZXR1cm4gbV94LT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtNTYsNiArNTAsMTAgQEAg
cHVibGljOgogICAgIFNWR0FuaW1hdGVkTGVuZ3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJu
IG1faGVpZ2h0OyB9CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyBy
ZXR1cm4gbV9yZXN1bHQ7IH0KIAorICAgIHZpcnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29u
c3QgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJl
bnQgZnJvbSB0aGUgb2xkIG9uZS4KKyAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKwogcHJvdGVjdGVk
OgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2
MTllNmJmOTZjOWYyMzk2Li5iZGM1YmU1YjBjZTc5ZDhiYzcxMGNhZmM0NTM3NTZlZWMwYTk3MGUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTMwICsyNCw3MSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRy
PEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0g
ICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZl
QXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4gaW1h
Z2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRp
bykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKFdURk1vdmUoaW1hZ2UpLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0
ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV90cmVlU2NvcGUoJnRyZWVTY29w
ZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJbWFnZTo6RkVJbWFnZShSZWY8SW1hZ2U+IGltYWdl
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
CisgICAgOiBtX2ltYWdlKFdURk1vdmUoaW1hZ2UpKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJh
dGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpj
cmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0Zsb2F0
UmVjdCBGRUltYWdlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJ
bWFnZShmaWx0ZXIsIGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIHsg
fTsKKy8vICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworLy8KKy8vICAgIEZsb2F0
UmVjdCBzcmNSZWN0ID0geyB7IH0sIG1faW1hZ2UtPnNpemUoKSB9OworLy8gICAgbV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKKy8vCisvLyAg
ICBpZiAoY2xpcHNUb0JvdW5kcygpKQorLy8gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBwYWludFJlY3QudW5pdGUobWF4
RWZmZWN0UmVjdCgpKTsKKy8vCisvLyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChwYWludFJl
Y3QpOwogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShG
aWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQor
Ym9vbCBGRUltYWdlOjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIElt
YWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRUltYWdlKGZpbHRlciwgdHJlZVNjb3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KSk7Ci19Ci0KLXZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewot
ICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1h
cFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0
OwotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5z
aXplKCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWlu
dFJlY3QsIHNyY1JlY3QpOwotICAgIH0gZWxzZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIg
PSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3Qu
aW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3Qu
dW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KHBhaW50UmVjdCkpOworLy8gICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKy8vCisv
LyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisvLyAgICBpZiAo
IXJlc3VsdEltYWdlKQorLy8gICAgICAgIHJldHVybiBmYWxzZTsKKy8vCisvLyAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkpOworLy8gICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOworLy8gICAgbV9wcmVzZXJ2ZUFzcGVj
dFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOworLy8KKy8vICAgIEludFBv
aW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisvLyAg
ICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsK
Ky8vCisvLyAgICByZXN1bHRJbWFnZS5jb250ZXh0KCkuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0
UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlbmRlckVsZW1lbnQqIEZF
SW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFSW1hZ2U6
OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1
ZmZlciopIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3RyZWVTY29wZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRG
cm9tSVJJU3RyaW5nKG1faHJlZiwgKm1fdHJlZVNjb3BlKTsKLSAgICBpZiAoIWlzPFNWR0VsZW1l
bnQ+KHRhcmdldC5lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigpOwotfQotCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVu
Y2VkUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotCi0gICAgRmxvYXRS
ZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVy
KCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3Bl
Y3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICB9Ci0KLSAgICBJ
bnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwot
ICAgIGRlc3RSZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkp
OwotCi0gICAgYXV0byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBp
ZiAocmVuZGVyZXIpIHsKLSAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRy
YW5zZm9ybSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgIGNvbnRleHQu
Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgICAgICBSZWZQdHIgY29udGV4dE5v
ZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKLSAgICAgICAg
aWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgU1ZH
TGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KGNvbnRleHROb2RlLmdldCgpKTsKLSAgICAgICAg
ICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7Ci0KLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJl
ZmVyZW5jaW5nIGFuIGVsZW1lbnQgd2l0aCBwZXJjZW50YWdlIHVuaXRzLCBlZy4gPHJlY3Qgd2l0
aD0iMzAlIj4gdGhvc2UgdmFsdWVzIHdlcmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgdmlld3BvcnQu
Ci0gICAgICAgICAgICAvLyBCdWlsZCB1cCBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBmcm9t
IHRoZSB2aWV3cG9ydCBzcGFjZSB0byB0aGUgZmlsdGVyIHByaW1pdGl2ZSBzdWJyZWdpb24uCi0g
ICAgICAgICAgICBpZiAobGVuZ3RoQ29udGV4dC5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNp
emUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG1ha2VNYXBCZXR3ZWVuUmVj
dHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdmlld3BvcnRTaXplKSwgZGVzdFJlY3QpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247
Ci0gICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQoY29u
dGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRo
aXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgq
bV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91
dHB1dCwgeyB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgRmxv
YXRTaXplIGltYWdlU2l6ZTsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgaW1hZ2VTaXplID0g
bV9pbWFnZS0+c2l6ZSgpOwotICAgIGVsc2UgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBy
ZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgaW1hZ2VTaXplID0gZW5jbG9zaW5nSW50UmVj
dChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkuc2l6ZSgpOworICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBtX2ltYWdlLT5zaXplKCk7CiAgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBpbWFnZS1zaXplPVwiIiA8PCBpbWFn
ZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1hZ2VTaXplLmhlaWdodCgpIDw8ICJcIl1cbiI7CiAg
ICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1bXAgYWxzbyBvYmplY3QgcmV0dXJuZWQgYnkgU1ZH
RkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRjZTdjMGUwYTA2
N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmE4MTQ0Zjc2N2NiZDg3NGNlZjQ1MDY5NWFjMGJhZjUw
ZDJjZDFjNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDM2ICsyOCwyNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3MgSW1hZ2U7Ci1j
bGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgVHJlZVNjb3BlOwogCiBjbGFzcyBGRUltYWdlIGZp
bmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUlt
YWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVX
aXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4g
Y3JlYXRlKFJlZjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwog
CiBwcml2YXRlOgotICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFn
ZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIEZFSW1hZ2UoUmVmPEltYWdl
PiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKICAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2UiOyB9CiAKLSAgICBG
aWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBG
aWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBSZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25z
dDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFsOwotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIC8vIG1fdHJlZVNjb3BlIHdpbGwgbmV2
ZXIgYmUgYSBkYW5nbGluZyByZWZlcmVuY2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTkyNDMKLSAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlIHsgbnVsbHB0
ciB9OwotICAgIFN0cmluZyBtX2hyZWY7CisgICAgUmVmPEltYWdlPiBtX2ltYWdlOwogICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApp
bmRleCA5YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3NDI3YjM3MTkzNTkyYjdiY2U3Li41NzMyMDlhZTg5
ZTRlOWZkODgxNGI0ZDY4YTJjZTE2ZTQwOGFkZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyOSArMjMsMTU4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJGaWx0ZXJPdXRw
dXQuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMu
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29s
dXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0Jv
eCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0g
ICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJv
dW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVy
UmVnaW9uKQotICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxT
VkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1l
bnQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0Vm
ZmVjdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0g
MjAwOworICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRD
aGlsZE5vZGVzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZmlsdGVyID0g
YWRvcHRSZWYobmV3IFNWR0ZpbHRlcihyZW5kZXJpbmdNb2RlKSk7CisgICAgCisgICAgZmlsdGVy
LT5zZXR1cEJ1aWx0aW5FZmZlY3RzKHByZXZpb3VzRWZmZWN0KTsKKyAgICAKKyAgICBGaWx0ZXJF
ZmZlY3RzSW5wdXRzIGVmZmVjdHNJbnB1dHM7CisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRWZmZWN0
cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRFeHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBmaWx0ZXI7Cit9CisKK1NWR0ZpbHRl
cjo6U1ZHRmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihy
ZW5kZXJpbmdNb2RlLCBUeXBlOjpTVkcpCit7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyOjphZGROYW1l
ZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3Qp
Cit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbGFzdEVmZmVjdCA9IGVm
ZmVjdC5wdHIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2J1aWx0aW5F
ZmZlY3RzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RFZmZl
Y3QgPSBlZmZlY3QucHRyKCk7CisgICAgbV9uYW1lZEVmZmVjdHMuc2V0KG5hbWUsIFdURk1vdmUo
ZWZmZWN0KSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6bmFtZWRFZmZl
Y3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBpZiAobmFtZS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBtX2xh
c3RFZmZlY3Q7CisKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdy
YXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAgfQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMu
Y29udGFpbnMobmFtZSkpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChuYW1l
KTsKKworICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQobmFtZSk7Cit9CisKK3ZvaWQgU1ZH
RmlsdGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3Qp
CiB7Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbiA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJl
Y3QoZmlsdGVyUmVnaW9uKTsKKyAgICBpZiAocHJldmlvdXNFZmZlY3QpIHsKKyAgICAgICAgbV9i
dWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBSZWY8RmlsdGVy
RWZmZWN0PiB7ICpwcmV2aW91c0VmZmVjdCB9KTsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5h
ZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgpOworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKIH0KIAot
RmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBz
aXplKSBjb25zdAorYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50
JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQogewot
ICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0
Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IG5hbWVkRWZmZWN0
KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAgYXV0byBzb3VyY2VBbHBoYSA9IG5h
bWVkRWZmZWN0KFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkpOworICAgIGVmZmVjdHNJbnB1dHMu
c2V0KHNvdXJjZUFscGhhLnJlbGVhc2VOb25OdWxsKCksIEZpbHRlckVmZmVjdFZlY3RvciB7IHNv
dXJjZUdyYXBoaWMucmVsZWFzZU5vbk51bGwoKSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0
RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0g
ZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVj
dCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVt
ZW50LnJlc3VsdCgpLCBlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVm
PEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0
c0lucHV0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaykKK3sKKyAgICBpZiAoc3RhY2suY29u
dGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fZXhwcmVz
c2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QgfSk7CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsK
KworICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3Qp
KSB7CisgICAgICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5w
dXRzLCBzdGFjaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0g
ZWZmZWN0LnB0cigpKTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZl
Y3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQoreworICAgIGlmICghbV9sYXN0RWZmZWN0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOwor
ICAgIHJldHVybiBidWlsZEV4cHJlc3Npb24oeyAqbV9sYXN0RWZmZWN0IH0sIGVmZmVjdHNJbnB1
dHMsIHN0YWNrKTsKK30KKworRmlsdGVyUmVzdWx0KiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlck91
dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKCFzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHNvdXJjZUlt
YWdlID0gc3RhY2sudGFrZUxhc3QoKS0+aW1hZ2VCdWZmZXIoKTsKKworICAgIGlmIChhdXRvIHJl
c3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZXhwcmVzc2lvbikgeworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGVmZmVjdC0+YXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2Up
OworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIHN0YWNrLmFwcGVuZCh7ICpyZXN1bHQgfSk7CisgICAgICAgIG91dHB1dC5yZXN1bHRz
KCkuYWRkKGVmZmVjdCwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOworICAgIH0KIAotICAg
IHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1
dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9maWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPT0gMSk7CisgICAgYXV0byByZXN1bHQgPSBzdGFjay50YWtlTGFzdCgp
OworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKLVJlZjxTVkdG
aWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1RleHRTdHJlYW0mIFNWR0ZpbHRlcjo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24g
cmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmls
dGVyKGFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIHRhcmdl
dEJvdW5kaW5nQm94LCBmaWx0ZXJSZWdpb24sIGVmZmVjdEJCb3hNb2RlKSk7CisgICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Npb24pCisgICAgICAgIGVmZmVjdC0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHJldHVybiB0czsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuaAppbmRleCA4MDkzMTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVhMGZi
MTcwMGNmLi5kMjliZWI1NzlkM2VmZWFiY2E4NDNkOGFlNjIxMDNkNWJjODNjZDRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0MSArMjEsNTYgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRl
ciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTVkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBib29sKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0Zp
bHRlckVsZW1lbnQmLCBSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCA9IG51bGxwdHIpOwogCi0gICAgRmxvYXRS
ZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0
ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IG5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0K
IAotICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplKSBjb25z
dCBmaW5hbDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmVmPFNWR0ZpbHRlcj4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBGbG9hdFJl
Y3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJj
ZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Citwcml2YXRlOgorICAgIFNWR0ZpbHRl
cihSZW5kZXJpbmdNb2RlKTsKIAotICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBhZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5n
JiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYg
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9k
ZSk7CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKEZpbHRlckVmZmVjdCogcHJldmlvdXNF
ZmZlY3QpOworICAgIGJvb2wgYnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJF
ZmZlY3RzSW5wdXRzJik7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRl
ckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9y
JiBzdGFjayk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lu
cHV0cyYpOwogCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwot
ICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29s
dXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKLSAgICBib29s
IG1fZWZmZWN0QkJveE1vZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IGZpbmFsOworCisgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOworCisgICAgSGFzaE1h
cDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKKyAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKKyAg
ICBWZWN0b3I8UmVmPGNvbnN0IEZpbHRlckVmZmVjdD4+IG1fZXhwcmVzc2lvbjsKKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIFNWR0ZpbHRlcjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAoreworICAgIAor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFJlZjxTVkdGaWx0
ZXI+PiBTVkdGaWx0ZXI6OmRlY29kZShEZWNvZGVyJikKK3sKKyAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIp
IHsgcmV0dXJuIGZpbHRlci50eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpTVkc7IH0K
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk2ZjNhODA1MDQyOTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdi
OTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNWR0ZpbHRlckJ1aWxkZXIuaCIKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCi0jaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVm
ZmVjdD4gc291cmNlR3JhcGhpYykKLXsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNv
dXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOwotfQotCi12b2lkIFNWR0Zp
bHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0KQotewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZm
ZWN0ID0gZWZmZWN0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYnVpbHRp
bkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RFZmZl
Y3QgPSBlZmZlY3Q7Ci0gICAgbV9uYW1lZEVmZmVjdHMuc2V0KGlkLCBtX2xhc3RFZmZlY3QpOwot
fQotCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlk
KGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAotewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZl
Y3Q7Ci0KLSAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFp
bnMoaWQpKQotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoaWQpOwotCi0gICAg
cmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYg
ZWZmZWN0LCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3Qg
YmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBlZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJl
ZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZm
ZWN0UmVuZGVyZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFk
ZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5w
dXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBp
cyBub3QgcG9zc2libGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAg
ICAgICBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3Qu
Z2V0KCkpOwotCi0gICAgLy8gSWYgb2JqZWN0IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1l
bnQgaXNuJ3QgYXR0YWNoZWQgZm9yIHNvbWUKLSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4g
bWVhbiB0aGF0IGNlcnRhaW4gdHlwZXMgb2YgaW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8g
d29yayAodGhlIExheW91dE9iamVjdCAtPiBGaWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBi
ZSBkZWZpbmVkKS4KLSAgICBpZiAob2JqZWN0KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFk
ZChvYmplY3QsIGVmZmVjdC5nZXQoKSk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xl
YXJFZmZlY3RzKCkKLXsKLSAgICBtX2xhc3RFZmZlY3QgPSBudWxscHRyOwotICAgIG1fbmFtZWRF
ZmZlY3RzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmNsZWFyKCk7Ci0gICAgbV9l
ZmZlY3RSZW5kZXJlci5jbGVhcigpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZv
aWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCog
ZWZmZWN0KQotewotICAgIGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOwotCi0gICAgZm9yIChhdXRvJiByZWZlcmVu
Y2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZShyZWZlcmVuY2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEz
M2U3NjQ2MGNlOTdmYTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlck9iamVjdDsK
LWNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7Ci0KLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHR5cGVkZWYgSGFzaFNldDxG
aWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7Ci0KLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwotCi0gICAgdm9pZCBzZXRUYXJnZXRC
b3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7
IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldEJvdW5kaW5nQm94OyB9Ci0gICAgCi0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBw
cmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlVW5pdHM7IH0KLSAgICB2
b2lkIHNldFByaW1pdGl2ZVVuaXRzKFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgdW5pdHMpIHsg
bV9wcmltaXRpdmVVbml0cyA9IHVuaXRzOyB9Ci0KLSAgICB2b2lkIGFkZChjb25zdCBBdG9tU3Ry
aW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4pOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBsYXN0RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0K
LSAgICB2b2lkIGFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZm
ZWN0PiYmLCBSZW5kZXJPYmplY3QqKTsKLQotICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGVm
ZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCi0gICAgewotICAgICAgICAvLyBP
bmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCi0gICAgICAg
IEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJl
dHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5n
IGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0
QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJl
ci5nZXQob2JqZWN0KTsgfQotCi0gICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNs
ZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKLQotcHJpdmF0ZToKLSAgICBpbmxp
bmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkpCi0gICAgICAgICAgICBtX2VmZmVjdFJl
ZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotICAgIH0KLQotICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7
Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVm
ZmVjdHM7Ci0gICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2Ug
ZmlsdGVyIGVmZmVjdHMsCi0gICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBl
ZmZlY3QuCi0gICAgSGFzaE1hcDxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0
PiBtX2VmZmVjdFJlZmVyZW5jZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJF
ZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9s
YXN0RWZmZWN0OwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSB9OwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmN2ViZGMxYjFlMTkxZDIyMGQ2NTJiYzgw
NzUxZGVmNTJjMTUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNWR0ZpbHRlckdlb21ldHJ5IDogcHVibGljIEZpbHRlckdlb21ldHJ5IHsKK3B1YmxpYzoK
KyAgICBTVkdGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRy
YW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiByZXNvbHV0aW9uKQorICAgICAgICA6IEZpbHRlckdl
b21ldHJ5KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0KQorICAgICAgICAsIG1fYWJzb2x1
dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0pCisgICAgICAgICwgbV9yZXNvbHV0aW9uKHJl
c29sdXRpb24pCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgdHJhbnNm
b3JtVG9BYnNvbHV0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgYXV0byByZWN0SW5Vc2VyU3BhY2UgPSBtX2Fic29sdXRlVHJhbnNmb3Jt
Lm1hcFJlY3QocmVjdCk7CisgICAgICAgIHJlY3RJblVzZXJTcGFjZS5zY2FsZShtX3Jlc29sdXRp
b24pOworICAgICAgICByZXR1cm4gcmVjdEluVXNlclNwYWNlOworICAgIH0KKworICAgIEZsb2F0
UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gRmlsdGVyR2VvbWV0cnk6OnBy
aW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgICAgICAKKy8vICAgICAgICByZXR1cm4gRmxv
YXRSZWN0IHsKKy8vICAgICAgICAgICAgcHJpbWl0aXZlQm91bmRyaWVzLngudmFsdWVfb3Ioc3Vi
cmVnaW9uLngoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy55LnZhbHVlX29y
KHN1YnJlZ2lvbi55KCkpLAorLy8gICAgICAgICAgICBwcmltaXRpdmVCb3VuZHJpZXMud2lkdGgu
dmFsdWVfb3Ioc3VicmVnaW9uLndpZHRoKCkpLAorLy8gICAgICAgICAgICBwcmltaXRpdmVCb3Vu
ZHJpZXMuaGVpZ2h0LnZhbHVlX29yKHN1YnJlZ2lvbi5oZWlnaHQoKSkKKy8vICAgICAgICB9Owor
ICAgIH0KKyAgICAKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKKyAg
ICBGbG9hdFNpemUgbV9yZXNvbHV0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAppbmRleCAwODc1YTVlY2ZmYTljNjdlNjBjMWFm
NjZjOTBjNzA5NWZlN2JkMTA0Li44ZmIwZjQwMjZjYmUzOTkwNDAzMjFmM2UyYTgyOWM2ODUyZDQ4
Yjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcApAQCAtMTk4Niw3ICsxOTg2LDcg
QEAgeXlyZWR1Y2U6CiAjbGluZSA0MTkgIldlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55IgogICAg
IHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4+PiBwcmVkaWNhdGVMaXN0KCh5eXZzcFsoMikgLSAoMildLmV4cHJlc3Npb25WZWN0b3Ip
KTsKLSAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IEZpbHRlcihzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4oKHl5dnNwWygxKSAtICgyKV0uZXhwcmVzc2lvbikpLCBXVEZNb3ZlKCpw
cmVkaWNhdGVMaXN0KSk7CisgICAgICAgICh5eXZhbC5leHByZXNzaW9uKSA9IG5ldyBYUGF0aDo6
RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHBy
ZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICA7fQogICAgIGJyZWFrOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKaW5kZXggYjc1MWE2MWJhM2Y0MjIyNDBlN2MwYmUw
ZTRmNWQ2MTNlMmY3YTU1Yi4uMzUzMDk4MGFiMmE5NGU3NjZiZGNjYjkyMGJkN2E5ZTRjZGEyYzUy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQpAQCAtNDE4LDcgKzQxOCw3IEBAIEZpbHRl
ckV4cHI6CiAgICAgUHJpbWFyeUV4cHIgUHJlZGljYXRlTGlzdAogICAgIHsKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVkaWNh
dGVMaXN0KCQyKTsKLSAgICAgICAgJCQgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAgICAgJCQgPSBuZXcg
WFBhdGg6OkZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4oJDEpLCBXVEZNb3ZlKCpw
cmVkaWNhdGVMaXN0KSk7CiAgICAgfQogICAgIDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmlu
ZGV4IGFhOTQ1NjQxNDlkMDhlNDg5NjM0N2Q5NGYwMzk0NjE1NDcyOWJmNzMuLjExZWZhYzkxZDQ0
YzQ2ZWM4NTNjNzhjNjhlYzU0MGNhZGE1ZWNjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAK
QEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJE
aXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBAIC00NzgsNiArNDgwLDM1IEBAIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6UmVuZGVyaW5nCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKIH0K
IAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VC
dWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6RmlsdGVy
UmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNlLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNl
JiYgZ2VvbWV0cnlSZWZlcmVuY2UsCisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJlbmNl
LnRha2VGaWx0ZXIoKTsKKyAgICBhdXRvIGdlb21ldHJ5ID0gZ2VvbWV0cnlSZWZlcmVuY2UudGFr
ZUdlb21ldHJ5KCk7CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwor
ICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VD
YWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdlQnVm
ZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgICAgICBp
ZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9
IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xvclNw
YWNlKCkgfSk7CisgICAgICAgIGlmICghYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAg
ICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
aGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJ
bWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCA3ZDgwYjcy
NTg2Mzk0ZTU1ZWNjY2M5YmY3M2Y5NWVmYjBjYzk0MDUwLi4xOTE2MjcyNDA3N2NhMjY3NWU5MDE0
NGRjZGY2ZTM1NDZmNGY3Mzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTU5LDYgKzU5LDEx
IEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQ
QyB7CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7CitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5j
ZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFu
ZGxlOwpAQCAtMTQyLDYgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXREYXRhVVJMRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7
CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYp
OwogICAgIHZvaWQgZ2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOworICAg
IHZvaWQgZ2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UmJiwgSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZSYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
ICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0
ZUFsbEZvbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4
IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFiMjJiNGVhNGU3MWJjZmFjMGIwZGYuLjI0YmUzNmY2MTZiYTdm
M2U4MjE4MTFiNjI0M2E4NTJjMTI2Zjg2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Lm1lc3NhZ2VzLmluCkBAIC0zMiw2ICszMiw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQgewogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUs
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1
cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBt
aW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0
b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNo
cm9ub3VzCisgICAgR2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2Ug
ZmlsdGVyLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlIGdlb21ldHJ5KSAtPiAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCiAgICAgQ2FjaGVO
YXRpdmVJbWFnZShXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKICAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxs
Rm9udHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2Vv
bWV0cnlSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY5YmVhZGUxYmEwNzkwY2NkZDY5ZmNiZjAzOGI4
Y2M0Nzc3YTJiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlckdlb21ldHJ5Lmg+CisKK25hbWVzcGFjZSBJUEMg
eworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2Uoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5
PiYmIGdlb21ldHJ5KQorICAgICAgICA6IG1fZ2VvbWV0cnkoV1RGTW92ZShnZW9tZXRyeSkpCisg
ICAgeworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eT4gdGFrZUdlb21ldHJ5KCkgeyByZXR1cm4gV1RGTW92ZShtX2dlb21ldHJ5KTsgfQorCisgICAg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgfQorCisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2U+IGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiBtX2dlb21l
dHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NDdkMjY5NTQ2NDU1MzBiMzM0MjZk
ZDY5YzE2ZGVlNTMxNDk5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ1NTRmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdG
aWx0ZXIuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZpbHRlclJlZmVyZW5jZSB7Citw
dWJsaWM6CisgICAgRmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmlsdGVy
KQorICAgICAgICA6IG1fZmlsdGVyKFdURk1vdmUoZmlsdGVyKSkKKyAgICB7CisgICAgfQorCisg
ICAgUmVmPFdlYkNvcmU6OkZpbHRlcj4gdGFrZUZpbHRlcigpIHsgcmV0dXJuIFdURk1vdmUobV9m
aWx0ZXIpOyB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgZW5jb2RlciA8PCBtX2ZpbHRlci0+dHlwZSgpOworCisgICAgICAgIGlmIChp
czxXZWJDb3JlOjpDU1NGaWx0ZXI+KG1fZmlsdGVyLmdldCgpKSkKKyAgICAgICAgICAgIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxXZWJDb3JlOjpDU1NGaWx0ZXI+KG1fZmlsdGVyKS0+ZW5jb2RlKGVu
Y29kZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
V2ViQ29yZTo6U1ZHRmlsdGVyPihtX2ZpbHRlciktPmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXI6
OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBl
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBpZiAoKnR5cGUg
PT0gV2ViQ29yZTo6RmlsdGVyOjpUeXBlOjpDU1MpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGZp
bHRlciA9IFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IEZpbHRlclJlZmVyZW5jZShXVEZNb3ZlKCpmaWx0ZXIpKSB9OworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRv
IGZpbHRlciA9IFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgRmlsdGVyUmVmZXJlbmNlKFdURk1vdmUoKmZpbHRlcikpIH07CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZjxXZWJDb3Jl
OjpGaWx0ZXI+IG1fZmlsdGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBlZDk0YTNlZTU2NjhhMzQ4YmM3NmFk
YmQ0MmI2NTAwNzFkMWI5NTFhLi43OTlhYjQ4MmJhNjc4NzQxODU2NDRjZGZiNjRiZmY5OTA4Zjc1
MDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI4OSw3
ICsyODksNiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6TWVkaWFLZXlTeXN0ZW1SZXF1ZXN0SWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
TWVkaWFTZXNzaW9uSWRlbnRpZmllcicsCi0gICAgICAgICdXZWJDb3JlOjpOYXRpdmVJbWFnZVJl
ZmVyZW5jZScsCiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJDb3JlOjpQbGF5YmFja1RhcmdldENsaWVudENvbnRleHRJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3knLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmEyMzc5ZWM0ZTA5N2EyMzY0YWZk
YTRmYjI3MzRmNmZkMTdkMWY4ZC4uNWM4OTAwMGE1OTZiMWFjZGYyZDM2ZTMwNjhhMjU1YjE4N2Q4
NWZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zLDcgKzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFzc2VzID0gewog
CX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDUyOworCW9iamVjdFZlcnNpb24gPSA1NDsKIAlvYmplY3Rz
ID0gewogCiAvKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtNDY4Myw2
ICs0NjgzLDggQEAKIAkJNzFCQUE3MzEyNUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLTW9kZWxWaWV3Lmg7IHBhdGggPSBp
b3MvV0tNb2RlbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFCQUE3MzIy
NUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gV0tNb2RlbFZpZXcubW07IHBhdGggPSBpb3MvV0tNb2RlbFZpZXcu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3
NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNw
YXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2OTI3MEM1
MkVBMDA1MTVDMjQgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJl
ZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2QTI3MEM1N0E3
MDA1MTVDMjQgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmls
dGVyR2VvbWV0cnlSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIw
MzQ0OUEyNkE2QzQ0QzAwMEE1RjU0IC8qIE1vbm90b25pY09iamVjdElkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTW9ub3RvbmljT2JqZWN0SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjAzNDQ5QjI2QTZDNDc2MDAwQTVGNTQgLyogUmVuZGVyaW5nVXBkYXRl
SUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nVXBkYXRlSUQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIyNzgwMEIyNDA4QkQ3RDAwN0QzNzZCIC8qIFBsYXRmb3JtUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVJlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjAsNiArNzMyMiw4
IEBACiAJCQkJQkMwMzJEOUUxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCAqLywKIAkJCQlC
QzAzMkQ5RjEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5jcHAgKi8sCiAJCQkJQkMwMzJEQTAx
MEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuaCAqLywKKwkJCQk3MjAwQ0Y2QTI3MEM1N0E3MDA1
MTVDMjQgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLywKKwkJCQk3MjAwQ0Y2OTI3MEM1
MkVBMDA1MTVDMjQgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8sCiAJCQkJOUJEOEFCNDkyNTgyMEU1
MjAwNTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCAqLywKIAkJCQk0MTUxRTVDMzFGQkI5MEE5MDBF
NDdFMkQgLyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdFNzhEMDBC
QzBFQzQgLyogSGFuZGxlTWVzc2FnZS5oICovLApAQCAtMTM2NTksNyArMTM2NjMsNiBAQAogCQkw
ODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlEZWZhdWx0QnVpbGRTeXN0ZW1U
eXBlRm9yV29ya3NwYWNlID0gT3JpZ2luYWw7CiAJCQkJTGFzdFN3aWZ0VXBkYXRlQ2hlY2sgPSAx
MzAwOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAxMTQwOwogCQkJCVRhcmdldEF0dHJpYnV0ZXMg
PSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDI3YmNkMDA1NDUwOTU4ZTgwMjEy
MzMwYzFlODk2ZTNjODkxNzM0ZmIuLmM4NjkzYWUyOWQ4YmE3ZGQyZDQxY2NiNDIxYzA2OWE3ZGVh
MDRhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0yMDMsNiArMjAzLDE0IEBA
IHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9
CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eT4mJiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihtX3JlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAg
fQorCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0aW9uRm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggZWM3OTM0MTA2YjExYjM2NmM3
ODhjNTNiZDliMjQwOTc5NjliZDlkOS4uNzYwYzU0M2IzMWY4ZjQzMTczNTFmOWY2NzVmM2Q0YzUz
ZjkwOTU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0V3JpdGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKQEAgLTIzNyw2ICsy
MzgsMjQgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4KICAgICByZXR1cm4gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUoaGFuZGxlKTsKIH0KIAorUmVmUHRyPEltYWdlPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGNvbnN0IEZpbHRlciYgZmlsdGVyLCBzdGQ6OnVu
aXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCit7CisgICAgc2VuZERlZmVycmVk
V2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7CisgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgeyBSZWY8RmlsdGVyPiB7IGNvbnN0X2Nhc3Q8RmlsdGVy
Jj4oZmlsdGVyKSB9IH0sIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UoV1RGTW92ZShnZW9t
ZXRyeSkpKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1h
Z2VGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSwgMV9zKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRSZXN1bHQpOwor
CisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAg
ICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgaWYg
KCFiaXRtYXApCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIGJpdG1hcC0+
Y3JlYXRlSW1hZ2UoKTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNh
Y2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZU5hdGl2ZUlt
YWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldh
aXRpbmdGb3JTeW5jUmVwbHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgK
aW5kZXggODdhZTUyMmNiYmIyODFmYzRhODgwNzY1Yjk5ZjRjOTAyNTZhOWQyNS4uNGQ3ZGU0ZjY1
NWYxMWNjMWEyOTAyZjJlY2RkNzMzZWNkOThkNjkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCiAKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkZp
bHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5j
bHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNsdWRlICJJUENT
ZW1hcGhvcmUuaCIKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmx1c2hJZGVudGlmaWVyIGZsdXNoRGlz
cGxheUxpc3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVCaXRtYXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZT4gZ2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyJiwgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmKTsKICAgICB2b2lkIGNhY2hlTmF0
aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpG
b250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7Cg==
</data>
<flag name="commit-queue"
          id="464184"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440304</attachid>
            <date>2021-10-05 17:10:40 -0700</date>
            <delta_ts>2021-10-06 02:46:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211005171039.patch</filename>
            <type>text/plain</type>
            <size>669153</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc5OGU4MWE0MTUwYWZm
MzUzNjA2ZTc5M2M1NDA2N2VlMjJmODRlYS4uNDAzNWM0YTY0ZTdjMTc3NTc3ODEwMjQxMjk5ZjY4
OGJjZjEzYTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTA1
ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBjYW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9u
IHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OTk1ZWNlZTVjNmIyYWY1MDZhYmU5YWU3
MjI2OGQ1Y2ZkMzViZDNkLi43ZTFhYjA3NGZhNjcxZWRhMzMyYThlNDdmZjM4NTk3Njc3ZmM5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTEwLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6Rmls
dGVyUmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVy
KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2Rl
Y2xhcmVkKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTA1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0aG9yaXphdGlv
biBoZWFkZXIgbG9zdCBvbiAzMHggcmVkaXJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDFlZmY2YWVi
MzliYTAyYTczNWYyMTRjMzRmZDcwYzEwMzNlOTNmMTAuLjEzNmRiYTRiYTgyNTE5ODZkM2Q2MDM3
NmI4MTRkMDQ4NTUyNTY1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ3LDE0ICsyMDQ3LDM1IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxv
b2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0
Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94
LmNwcApAQCAtMjYzNiw3ICsyNjU3LDYgQEAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
CiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAot
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5p
bWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBmMzBmZGFiYTA0YzI2MDY3ZjE2
NDhmMjc0MjcyZDVlMmFlMWQzZDRkLi5mZTk1NzhiMmQ4MmQzZjEyOGQyNWU4MzBkMWIxOTk4MTg0
YTNlNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM5OCw3ICszOTgsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENv
cmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTRjM2Q3MGMyY2IxM2RmYzFjMjBjYjI2
MDg1MjY3MGY0ZWQ3ZTVhLi5mZGRhMGJiNDdlOTUxNTE2OWMzZjA1NjU4NWZlMDFkMWY1MTkyZGVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkJMDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNW
R1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4MTY2OEQyMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVy
LmggKi87IH07CiAJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2
NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovOyB9OwogCQkw
ODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFBQThEOTExMTEyMzdFMDAy
QUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi87IH07Ci0JCTA4MUVCRjNCMEZEMzRGNDEw
MERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oICovOyB9OwogCQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oICovOyB9OwogCQkwODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmggKi87IH07CiAJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0
NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3Niw4ICs3NzUsNiBAQAogCQkyQUVG
NkZERDI2RTdFQ0NGMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRUY2RkNFMjZFNzFGMkQwMDMyNkQwMiAv
KiBDU1NOdW1lcmljVHlwZS5oICovOyB9OwogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyog
UmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAq
LzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUy
QzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwotCQky
Qzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDODU2NTMzMjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovOyB9OwotCQkyQ0FBNEEzQTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovOyB9OwogCQkyRDA2MjE0
NDFEQTYzOUI2MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDIxREE2Mzk4
ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQw
NjIxNDUxREE2MzlCQTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MzFEQTYz
OTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJMkQw
NjIxNEQxREE2M0E4QjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0OTFEQTYzQTc5MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCAqLzsgfTsKQEAgLTIyODIsNiArMjI3OSwxNSBAQAog
CQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYg
LyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJC
Mzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMENGNTkyNzA5QUJGQjAwNTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZp
bHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAv
KiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIxQ0E4RjUyNzAzOTQ1NjAwQzBERDY1IC8qIEZpbHRlclJlcHJlc2Vu
dGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NzhENDMyNkZFOURFNzAwRkQy
QzU2IC8qIEZpbHRlck91dHB1dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNE
ODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0
IC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBD
RjZCMjcwQ0Q2MDkwMDUxNUMyNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NG
aWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNC
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VC
aXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI3MDIsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAv
KiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAq
LzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ3MTIwQzlB
RDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0NUU3MkY4MEZEMjYxRUUw
MEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLzsgfTsKLQkJ
ODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAq
LzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUEx
MjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwogCQk4NDczMEQ3
OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTYwNzIsOCArNjA3Niw2IEBACiAJCTA4MTY2
OEQ3MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZH
VGV4dExheW91dEVuZ2luZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdU
ZXh0TGF5b3V0RW5naW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUFBOEQ5
MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRWxlbWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYzOTBGRDM0RjQxMDBE
QTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYwMUE3
RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02MjIwLDggKzYyMjIsNiBAQAogCQkwRjQ5NjZBODFEQjQwQzQzMDBBMjc0
QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDk2NkE5MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9ubHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Qb2ludFJlYWRPbmx5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNENERUFBMjNEOTFBOEEwMDI1MUIwMiAvKiBT
Y3JvbGxUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxUeXBlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NG
aWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NG
aWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODMyMTNCNzg2NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRl
ckxheWVyRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllckZpbHRlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksMTAgKzczMjksNiBAQAogCQkyQjQyMzVB
MDE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdFbGxpcHNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCRThFMkM4MTJBNThBMDEwMEZB
RDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDQUE0QTM3MjRCRTE4QTEwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDIxREE2Mzk4ODAw
QTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdl
YktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQ3MURBNjNBNzkwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU5lZWRlZEV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlh
S2V5TmVlZGVkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA0NzYs
MTAgKzEwNDcyLDIwIEBACiAJCTcxRjZFRTQxMjU1RURGOUMwMEZDNEM1QiAvKiBHcmlkVHJhY2tT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyaWRUcmFja1Np
emUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5
MjJDQzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNTcyNzA3OEM0MjAwNTE1QzI0IC8q
IFNWR0ZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckdlb21ldHJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjVFMjcwQUQxMzcwMDUxNUMyNCAv
KiBGaWx0ZXJPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyT3V0cHV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNUYyNzBCQjAxOTAwNTE1QzI0IC8q
IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0Q29yZUlt
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyogRmlsdGVyUmVz
dWx0Q29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjAwQ0Y2NDI3MEJDMkM4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0U29m
dHdhcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0U29mdHdhcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjYyNzBDMzIxRDAwNTE1QzI0IC8qIEZpbHRlckdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZWZlcmVuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1h
dGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVy
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEy
RkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlE
M0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQml0
bWFwQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMUI0OTcwMjUx
MkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCaXRtYXBCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUNBOEY1
MjcwMzk0NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjQyQUM5NTI1NzU4RkUwMDA1QTlDRjEgLyogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RGbHVzaElkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAw
RjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwNTA0LDkgKzEwNTEwLDM1IEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBF
WFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQy
RTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJF
OCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZp
bHRlck91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyog
UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2
NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAz
QzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcw
M0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZD
MjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZz
ZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8q
IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9n
eVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1
ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3
NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9v
ZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdF
RjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRp
bGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBG
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2
RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
ODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIz
RTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDUxOCw2ICsxMDU1MCw4IEBACiAJCTcyQkFDM0FDMjNFMUU1NDUwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2
ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWlu
dGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBMzkyNjM2
NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0
ZXJSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0
QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3Vs
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2
MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEy
RThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3
MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTExNDUxLDkgKzExNDg1LDYgQEAKIAkJODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNW
R1BhdGhTdHJpbmdTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UGF0aFN0cmluZ1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJE
NzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQYXRoU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0MzAwQkQ5MTIwQzlBRUQwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdE
NzkgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkg
LyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkZBMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdDMjM4
N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ2NTBFN0YyMzg3QUQ4QTAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeUxp
c3RFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTgwMjM4N0FE
OEIwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE5NDI2LDggKzE5NDU3LDkgQEAKIAkJMkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNv
cmVpbWFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmggKi8sCi0JCQkJMkNBQTRBMzcyNEJFMThBMTAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjYxMjcwQkJEQTgwMDUxNUMyNCAvKiBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MjAwQ0Y2MjI3MEJCREZCMDA1MTVDMjQgLyog
RmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tICovLAorCQkJCTcyMDBDRjVGMjcwQkIwMTkwMDUxNUMy
NCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb3Jl
aW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMwMzAsNiArMjMwNjIsMzIg
QEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVudCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDgyMjcwNjUxMUIw
MDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc1MjcwNTg1Qjgw
MDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdBMjcw
NUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLywK
KwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
LmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVDN0VGMDAzQzVBQUUgLyogRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0UyNzA2MzM2QjAwM0M1QUFFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyog
RkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVBQUUgLyog
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODEyNzA2NDZFMjAwM0M1
QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzQyNzA1ODM3RDAw
M0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzMyNzA1N0NCRTAw
M0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MjI3MDU3
OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0YyNzA2
M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MDI3MDY0
MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovLAorCQkJCTcyMDBDRjYz
MjcwQkMyQzgwMDUxNUMyNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzIw
MENGNjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8sCisJCQkJ
NzJBODNENzEyNzA1Nzg1MjAwM0M1QUFFIC8qIFNvdXJjZUFscGhhU29mdHdhcmUuY3BwICovLAor
CQkJCTcyQTgzRDcwMjcwNTc1MDQwMDNDNUFBRSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3Bw
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzb2Z0d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTdDMDExRjNDMjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRl
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTA3OCw2
ICsyNTEzNiw3IEBACiAJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q2RjI3MDU3
NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8sCiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhD
IC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNB
OUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdG
MjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywKQEAgLTI1MTE0LDE1ICsyNTE3MywyMyBAQAogCQkJCTg0
NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLywKIAkJCQk4NDczMEQ2RjEyNDhG
MEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCi0JCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3
RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcyQTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0
ZXIuY3BwICovLAorCQkJCTcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLywK
IAkJCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJ
CQkwOEM5MjUxODBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCi0JCQkJMkM4
NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKLQkJ
CQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywK
KwkJCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKKwkJ
CQk3MjAwQ0Y2NjI3MEMzMjFEMDA1MTVDMjQgLyogRmlsdGVyR2VvbWV0cnkuY3BwICovLAorCQkJ
CTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJCTQ5
RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5
RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVD
RUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlF
Q0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MjAw
Q0Y1RTI3MEFEMTM3MDA1MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0
MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0LmggKi8sCisJCQkJNzIwMENGNjcyNzBD
NDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oICovLAorCQkJCTcyMUNBOEY1MjcwMzk0
NTYwMEMwREQ2NSAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovLAorCQkJCTcyQzkwQTM5MjYz
NjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovLAorCQkJCTcyQzkwQTNBMjYzNjRB
MUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBE
M0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMg
LyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5
IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2ODg0LDEwICsyNjk1MSw5IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMjU1OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5j
cHAgKi8sCiAJCQkJQjI1NTk4RUIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLywK
LQkJCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLywKLQkJCQk4
NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8sCi0JCQkJMDgxRUJGMzgw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovLAotCQkJCTA4MUVCRjM5
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBODNENkEy
NzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkIyNzAzREE5
QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICovLAorCQkJCTcyMDBDRjU3MjcwNzhDNDIwMDUxNUMy
NCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5OTgyLDggKzMwMDQ4LDggQEAKIAkJCQlD
QTdFOUI0NzI0MzYxREM1MDA0RTg5RjYgLyogQ29udGVudGZ1bFBhaW50Q2hlY2tlci5oICovLAog
CQkJCTkzOTJGMTRGMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAgKi8sCiAJCQkJ
OTM5MkYxNEIwQUQxODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8sCi0JCQkJMEY1M0ZC
ODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8sCi0JCQkJMEY1M0ZCODMyMTNC
MUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovLAorCQkJCTcyQTgzRDZDMjcwM0RDM0EwMDND
NUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAv
KiBDU1NGaWx0ZXIuaCAqLywKIAkJCQlFM0JCQzI0NTIzODM1NTFBMDA2RUMzOUYgLyogQ1NTVmFs
dWVLZXkuaCAqLywKIAkJCQlFNEE4RDIxNTIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24u
Y3BwICovLAogCQkJCUU0QThEMjE0MjI1NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5oICov
LApAQCAtMzIwNjIsNiArMzIxMjgsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAv
KiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIx
NUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MjAwQ0Y2QjI3MENENjA5MDA1MTVDMjQgLyogQ1NTRmlsdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8q
IENTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNTYyLDEyICszMjYy
OSwxNiBAQAogCQkJCTkzNTQyNDMwMjcwM0NCODYwMDVDQTcyQyAvKiBGaWxlU3lzdGVtU3RvcmFn
ZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2
NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIw
MzFDQyAvKiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNTkyNzA5QUJGQjAw
NTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMw
RjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0
ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNjUyNzBDMDYxNzAwNTE1QzI0
IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3
MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzIwMENGNUMyNzA5QUQzQTAwNTE1QzI0IC8qIEZpbHRlclJlcHJl
c2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y1QjI3MDlBQ0I2MDA1MTVDMjQg
LyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1
Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRG
MDkwMDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3
RDJERDI1MEZEODI4MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM1NDQyLDggKzM1NTEzLDcgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ew
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQg
LyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjIwNiw3ICszNjI3Niw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlhZTll
NTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li4yMTExZmEyODY0MWE2ZjM1OWMwMWZlZWE2
ODQwMGMwM2IxNTg0OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0x
MTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpu
dWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7
CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNl
dFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVn
aW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2Zp
bHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0
byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0
cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0
dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IHN0ZDo6bWFrZV91
bmlxdWU8RmlsdGVyR2VvbWV0cnk+KGltYWdlUmVjdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0
byBmaWx0ZXJlZEltYWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3Zl
KGdlb21ldHJ5KSkpCisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJu
IG91dHB1dC0+Y29weUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9
CiAKIHZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IElu
dFJlY3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
Y3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2
YWIyMjIxODEuLjg4YTMxMDI3Nzk4MmYzMjdkMjQzOTQ2ZWVlZjUyNmU1ZjcyMDk3NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAKQEAgLTEzOCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgc3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3Jl
KSA9IGZpbHRlci5hcHBseSh0aGlzLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAg
fQorCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDg1ZTNk
MjRiZWIwYzIwNGMzMjVhMjY1NmQ5Y2E1NDA0MDg2NmZiNzIuLmNlODlmNGJkM2FkZjc4ZTIyNTg5
MWVkNjczNzNjOTlmMGM5NjkyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5j
bHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCkBAIC02MDksNiArNjExLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zp
bHRlckltYWdlQnVmZmVyKEZpbHRlciYgZmlsdGVyLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBhdXRv
IFtmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdF0gPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIFdU
Rk1vdmUoZ2VvbWV0cnkpKTsKKyAgICBpZiAoZmlsdGVyZEltYWdlKQorICAgICAgICBkcmF3SW1h
Z2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogewog
ICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNmE0YWU1ZGFkNWE3YjJhOWRjNDIzOWZjYTlhNDZiNzE3
ODEwOWYzYS4uZDU3M2IyMTUyMjgyNTYyZWU0MjYxMmQyNjlmMTVmYWJkMmRhZjhhMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVu
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKQEAgLTQ0Miw2ICs0NDQs
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVySW1hZ2VC
dWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8
RmlsdGVyR2VvbWV0cnk+JiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGIx
ZThkM2IwNGFiMjYwNTEzMjg4NmEwYTgwMzA1MDhhMTMxNjEyODAuLmFlZDU1MzIxNGYyMmFkY2Ux
MTdhZDdiMGNhMjdmOGVmYjBmMDhkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDIsNiArNDIsOSBAQCBjbGFzcyBEcmF3aW5nQ29u
dGV4dDsKIHN0cnVjdCBJdGVtQnVmZmVySGFuZGxlOwogfQogCitjbGFzcyBGaWx0ZXI7CitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKKwogY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VCdWZmZXIsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8SW1hZ2VCdWZmZXI+IHsKIHB1YmxpYzoKICAgICAvLyBXaWxs
IHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC0xMDYsNiAr
MTA5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFn
ZShjb25zdCBGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpID0gMDsK
IAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250
ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQppbmRleCBkNGZhM2M0YmZhZDM0YWFm
MzA5M2E5ZjAyNDg2YmI3MjdmOThkNGFhLi5kNDVhYjMzYzQ0MDhlZDYzNjA3NDYxNGQ0NmY0NTlk
YTZmNTFkNjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM3
LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogU2hvdWxkIHNo
YXJlIHRoZXNlIHZhbHVlcyB3aXRoIENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUg
dGhlc2UgdmFsdWVzIHdpdGggRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgogc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxD
b25zdGFudHNbM11bM10gPSB7CiAgICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAw
LjM0OSwgMC42ODYsIDAuMTY4IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0ZDU1
YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2lt
cG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1P
QkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpDX0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBDSUNv
bnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsKLWNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3Jl
YXRlKEZpbHRlckVmZmVjdCYpOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29u
dGV4dCgpOwotICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQot
ICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVz
dFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJl
c3VsdCgpIGZpbmFsOwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKFNvdXJjZUdyYXBoaWMmKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJ
SW1hZ2U+PiYpOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJh
bnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFn
ZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRyPElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1dElt
YWdlQnVmZmVyOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM4NmZjNGMyM2FmOTU0NTU1N2E1NThjOGM0NTFlMTlhOGEzOGZiNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysr
IC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgi
Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2lt
cG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdy
YXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJ
bWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAg
ICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVmZmVjdCkpCi0gICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPigpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdp
dGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBpZClD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKLSAgICByZXR1
cm4gY2lDb250ZXh0OwotfQotCi1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewotICAg
IGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBpc051
bGxPckxpbmVhcihlZmZlY3QucmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0
LmdyZWVuRnVuY3Rpb24oKSkKLSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJsdWVG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLX0K
LQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5nZSBy
ZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAgICAg
c3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAg
ICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2Fz
dDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRy
b3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxh
c3RFZmZlY3QpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dElt
YWdlczsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsK
LSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAgICAg
ICBpZiAoIWlucHV0SW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShl
ZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkg
ewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICBy
ZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVj
dCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAgICAg
cmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZl
Y3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRv
d25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0
IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNl
dDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCi17
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUlt
YWdlKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgaWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQotICAg
ICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFj
ZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAgIAot
ICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0
aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJSW1h
Z2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgo
Y29uc3QgRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMu
YXQoMCk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9h
dHMoZWZmZWN0LnZhbHVlcygpKTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAotICAg
IHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklY
TUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0
XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25l
bnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1
dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAg
ICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAg
ICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0g
IGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFs
dWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sx
MF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0
QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVl
c1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0g
IFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91
dHB1dEltYWdlOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRy
YW5zZmVyJiBlZmZlY3QsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNm
ZXIgZnVuY3Rpb25zCi0gICAgQVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbihlZmZlY3QpKTsKLQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0
KDApOwotICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xv
clBvbHlub21pYWwiXTsKLSAgICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0
KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZpY2ll
bnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBmdW5jdGlvbikgewotICAgICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSKQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjowIFc6
MF0gZm9yS2V5OmtleV07Ci0gICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJlZENv
ZWZmaWNpZW50cyIsIGVmZmVjdC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMo
QCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0gICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVGdW5j
dGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwg
ZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRwdXRJ
bWFnZTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVy
VXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGlm
ICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdDSUZp
bHRlcnMoKmluKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
b3V0cHV0KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJpbmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICByZXR1
cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0
RWZmZWN0KQotewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291
dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENv
bG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0
KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkg
Ym91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRD
b2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVj
dC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9IG51
bGxwdHI7Ci19Ci0KLUZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19Ci0g
ICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhYmU1NjFiNzAxYmNhMDViMjQ0ZTUyNWUxNzhl
YzI0ZjZkZGQxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lN
QUdFKQorCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHQuaCIKKworT0JKQ19DTEFTUyBDSUltYWdlOwor
T0JKQ19DTEFTUyBDSUNvbnRleHQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0Q29yZUltYWdlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisKKyAgICB2b2lkIHNldEltYWdlKFJl
dGFpblB0cjxDSUltYWdlPiYmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlOworICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IG1faW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdENvcmVJbWFnZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkg
PT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43Mjc5MmIxYWJlOTcwZDhjZGY4OWFmODVhNThkNTRkNWFiODAwYmI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDU1IEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0
Q29yZUltYWdlLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCA8Q29yZUltYWdl
L0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9ydCA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQor
eworICAgIEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQor
CitSZWZQdHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVy
SWZFeGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOworfQorCitJbWFnZUJ1ZmZl
ciogRmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhp
Y0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmOGE4MGNiZmQ2NzI4MzZk
Zjg5OTVjZjM5ZDQzZGE1YmQ4NTUwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpA
QCAtMCwwICsxLDU2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNp
bXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2U7CisgICAg
aWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQorICAgICAgICBpbWFn
ZSA9IFtDSUltYWdlIGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1
ZmZlcj4oKnNvdXJjZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNlCisgICAg
ICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5h
dGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVyUmVzdWx0Q29y
ZUltYWdlPihyZXN1bHQpLnNldEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2Yx
OC4uZGU2NjA2OGNkZDBhOWNiNTc0YzBhY2JiYzhjOGM2MGE2Nzc0ZmYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTEwNywxNSArMTA3LDE4IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQq
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHRzJiByZXN1bHRzLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIg
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsg
KnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1
bHQgPSBmaWx0ZXIoKS5jcmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzIsNyBA
QCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNl
UGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJj
ZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJ
ZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VS
VChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQzLDggQEAgdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBd
OwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNl
QkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwg
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJy
YXksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZjliZjE5
MWVlNjM4OWYwMWQ5YjVhMjEwMjUzY2QwMGIwMzAxODU0MC4uODQyM2NiYWRhMjUxN2E5MTYxOThj
MjFmZjM1OTg0NzllMmMwMGViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtMjI3LDYgKzIyNywxNCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdAogICAg
IGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciosIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRy
eT4mJikKK3sKKy8vICAgIGlmIChtX2RlbGVnYXRlKQorLy8gICAgICAgIG1fZGVsZWdhdGUtPnJl
Y29yZEltYWdlQnVmZmVyVXNlKCpzb3VyY2VJbWFnZSk7CisvLyAgICByZWNvcmRGaWx0ZXJVc2Uo
ZmlsdGVyKTsKKy8vICAgIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGZpbHRlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewog
ICAgIGFwcGVuZDxTYXZlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggYTVhZDM2NmQ0ZGNkOTlkODQzZTBiYmEwNjk1ZWQ3ZDI0NTM3MmJiZS4uOGE4ODFhZmNj
Y2ZhYjU2MTVjOGQ5ODRkM2U1MTc4YzJlZmM4NzdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0xMjgsNiArMTI4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFm
MThmYmI2MmMyY2VkOS4uMzU2ZTM1OTMzZmNlYmQ1YzdmMjg3MDRiMDI2Y2QwNTYxMWZlN2RiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0
IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Cisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBmaWx0
ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Qmxl
bmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxl
bmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IG1fbW9k
ZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2Rl
KSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogewot
ICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9k
ZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9t
b2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAg
IGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9
XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0
ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwg
IlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVj
MjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJhMjMyMzNhYmE5
YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVC
bGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVC
bGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJlZjxGRUJsZW5k
PiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpOwogCiBw
cml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRN
b2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
QmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1
NC4uZGI0OGRjZGQ0MTM4ZGE2ZWYzNTkzNzRjMzE4NTkyNzdlMGFiY2M5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQsMTkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUg
dHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhX
VEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7
CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorRkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZs
b2F0PiYmIHZhbHVlcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmls
dGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4Ojpz
ZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQpAQCAtNjMsMjU4ICs1NSw0MyBAQCBib29sIEZF
Q29sb3JNYXRyaXg6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlcykKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBmbG9hdCByID0gcmVkOwotICAg
IGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxw
aGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZh
bHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdy
ZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIg
KyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVl
c1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10g
KiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2
YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNb
MTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykK
LXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBi
ID0gYmx1ZTsKLQotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25l
bnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRz
WzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKLSAgICBibHVlICAg
ID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRz
WzhdOwotfQotCi0vLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBm
dW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0
JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKLXsKLSAgICBh
bHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKLSAg
ICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVlID0gMDsKLX0KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVm
ZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZm
ZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUu
YXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0
YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhl
IEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBi
YWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZh
bHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29y
ID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAg
ICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
LSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
N10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzdd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAg
ICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2
aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewot
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29tcG9uZW50c1swXSA9
ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1
ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNv
bXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVd
ID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAt
IDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CiB9Ci0j
ZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsK
LSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICBlbHNlIGlmIChm
aWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpCi0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0
aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0
ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXpl
KSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7
Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQg
Kz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwg
cGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZs
b2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAg
ZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAg
ICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIp
OwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxv
YXQgLyAxODApOworICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0g
c2luSHVlICogMC4yMTM7CisgICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43
MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUg
KiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNv
c0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1
ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0g
MC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNb
Nl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9u
ZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBj
b21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29sb3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
cGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVl
cyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBl
ZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVl
cywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5n
ZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQpAQCAtMzM5LDEwICsxMTYsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVDb2xvck1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCBt
X3R5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0
cyA8PCAiIHZhbHVlcz1cIiI7CkBAIC0zNTcsOSArMTMzLDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xv
ck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAg
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1
Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLmY2MTIxM2ZlNjBmZTBiNGNjM2QyY2RlZjliNjQyZjQ2
ZGI0ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszNyw3IEBA
IGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3Jl
YXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKKyAgICBzdGF0
aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9h
dD4mJik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDYsNTQgKzQ1LDIy
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0
PiYmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb2xvck1hdHJpeCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbG9yTWF0cml4
VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGluZSB2
b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAu
Nzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVl
KTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0g
PSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0g
MC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBp
RmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAx
ODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVl
ICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBz
aW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3
MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAq
IDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29z
SHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0gMC4wNzIg
LSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNbNl0gPSAw
LjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9uZW50c1s3
XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25l
bnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwotfQotCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uZmVi
ODA4NmVhZjUyYzJjMjkwNDhiZjVlZmFkYmIyZjI3YjNjZGM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMTM4ICsyNSwzMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9u
ZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyKQotICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKLSAgICAsIG1fZ3Jl
ZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQotICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0
aW9uKQotICAgICwgbV9hbHBoYUZ1bmN0aW9uKGFscGhhRnVuY3Rpb24pCi17Ci19Ci0KLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24s
IGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1
ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAo
biAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRv
dWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAg
ICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2
MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsK
LSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6
bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2td
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGRUNvbXBvbmVu
dFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBt
X3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQorICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVu
Y3Rpb24pCisgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCisgICAgLCBtX2FscGhh
RnVuY3Rpb24oYWxwaGFGdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhy
ZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJl
Y3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhl
bEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwotICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKQorRmlsdGVyUmVzdWx0KiBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseShG
aWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZm
ZXIqKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxl
W2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBl
ID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lE
RU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxl
LCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRl
R2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJB
WV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVd
KHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlv
bi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9i
bHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVm
ZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb25lbnRU
cmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA0LDkgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNm
ZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAgICAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEsOSArMTE1LDYgQEAgVGV4dFN0
cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBt
X2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6
ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNzYxMDY5ZGI4OWU0Mzc3NGE4NzY4MzY5ZTk1NTZlNjcxNjE0
NGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzI0LDYgQEAKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQ29tcG9uZW50VHJhbnNm
ZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAg
IHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0
ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90
LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUs
IExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBU
YWJsZSYgYWxwaGFUYWJsZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBt
X2dyZWVuRnVuY3Rpb247CkBAIC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVy
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhi
NTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLmNmMDRlNDNjNTUyMjkwNzFk
M2YxZjMyNTQ0Zjg5ZjQ1OWJhNThhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDE5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29t
cG9zaXRlQXJpdGhtZXRpY05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkK
K1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVy
YXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZF
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVP
cGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykK
QEAgLTQyLDI2NCArNDUsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVm
PEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0
ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRl
T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAg
IGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBt
X2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAo
bV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsK
IH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMg
PT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAK
IGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lk
IEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZF
Q29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChtX3R5cGUg
IT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KKyAgICAvLyBGb3IgSW4gYW5k
IEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgorICAg
IC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOIHx8IG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUCkKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdp
bmdSZWN0KGlucHV0cywgaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpKTsKICAgICAKLXN0YXRpYyB1
bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwotICAgIHVuc2ln
bmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJldHVybiBidWZmWyEhKHVj
ICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5z
aWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVs
QXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewot
ICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAg
ICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxl
ZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDAp
IHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEg
KyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVk
SzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2Nh
bGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAg
ICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0v
LyBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGlt
aXphdGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBp
bnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2Fy
ZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci17Ci0gICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwotICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKLSAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVw
cGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49
IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgewotICAgICAgICBpZiAoazQpIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChrNCkgewotICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoazEpCi0gICAg
ICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
aW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgaW50IGxl
bmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0
PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUg
ZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFy
aXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0
YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4g
YW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgot
ICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBj
bGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5m
bHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0g
ICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJv
dGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEFyaXRobWV0aWMg
bWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBj
YW4ndAorICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAg
CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSk7
CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFQ29tcG9zaXRlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBpZiAobV90eXBl
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0cik7CiB9CiAKLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3Np
dGVPcGVyYXRpb25UeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9y
KQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3Ip
IHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTggKzEyOSwxMyBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb21w
b3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvc2l0ZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwotICAgIGlmIChtX3R5
cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICB0cyA8PCAiIG9wZXJh
dGlvbj1cIiIgPDwgbV9jb21wb3NpdGVPcGVyYXRvciA8PCAiXCIiOworICAgIGlmIChtX2NvbXBv
c2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCiAgICAgICAg
IHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8ICJcIiBrMz1c
IiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggN2QwOGUxZjcx
MDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uOTlmMjkwNWRjZmJjMDRjOGZjMWVhNThm
MWMwYTVmMWI4OWViNDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDkgQEAKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKK2VudW0gRkVDb21wb3NpdGVPcGVyYXRvciB7CiAgICAgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTiAgICA9IDAsIAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVIgICAgICAgPSAxLAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOICAgICAgICAgPSAyLApA
QCAtNDEsMTAgKzM5LDEwIEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CiAKIGNsYXNz
IEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUNv
bXBvc2l0ZT4gY3JlYXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKIAotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSk7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBib29s
IHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgZmxvYXQg
azEoKSBjb25zdCB7IHJldHVybiBtX2sxOyB9CiAgICAgYm9vbCBzZXRLMShmbG9hdCk7CkBAIC01
OCwzMCArNTYsMjAgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQog
Ci0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCk7Ci0jZW5kaWYKLQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90
eXBlOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAgICBm
bG9hdCBtX2sxOwogICAgIGZsb2F0IG1fazI7CiAgICAgZmxvYXQgbV9rMzsKQEAgLTg5LDQgKzc3
LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKaW5kZXggNzViMmU3YzZlYTEzYzJjMWMyZjhmNjVkM2RiNGVkNWNjM2Fm
ZGE4Zi4uMTEyMzkzYWIwODZjZWRiOGJlZjZlNjFkZTQwNDg3YThhOTkxNjk4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQs
MTkgKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1h
dHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCi0gICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6
ZSkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50
UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1v
ZGUsIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQor
CitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCisgICAgOiBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihk
aXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCiAgICAgLCBtX3RhcmdldE9mZnNldCh0YXJnZXRP
ZmZzZXQpCkBAIC00OSwxNCArNTAsNiBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VS
VChtX2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252
b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNl
dCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtl
cm5lbE1hdHJpeCkpOwotfQotCiB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSkKIHsKICAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0
aCgpID4gMCk7CkBAIC0xMjAsMzE4ICsxMTMsMjAgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252
b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93
aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAg
ICAgQSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAg
IHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAg
ICB8ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK
LSAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZh
bHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0
aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEw
LCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDog
MywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2lu
ZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAg
ICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRo
ZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4
MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgot
ICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lv
bgotICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwg
eDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4Mjog
MTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0g
ICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24g
RDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5
MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBD
IChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAg
YSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxz
IGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxz
IG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2Vy
bmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1
bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5j
dGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1v
biBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFz
IHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgot
Ki8KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShm
bG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKK0Zsb2F0UmVjdCBGRUNvbnZv
bHZlTWF0cml4OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChjaGFubmVs
IDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAgICAg
ICAgcmV0dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcykKK0ZpbHRlclJlc3VsdCogRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/
IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwr
KywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7
Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNl
dChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQot
Ci0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRl
IG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJh
Z21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlm
Ci0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMg
bm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQu
eSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAg
aW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0g
KG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0g
b2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhh
VmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7
Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAg
ICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQg
KyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkg
PSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlw
UmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwot
ICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0g
ICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAg
ICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtl
cm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5j
cmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0K
LQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9O
T05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAg
ICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHgg
Pj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0
aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBl
bHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8
IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBw
YWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkg
Kz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAg
IH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAq
IDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsK
LSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3Jl
YXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMg
dGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNl
cnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAw
LCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9k
aXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2Vy
bmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAg
ICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBp
bnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsK
LSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwot
ICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0
YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhl
bEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJ
bmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAg
ICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsK
LSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8g
RGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAg
Ly8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdB
WVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291
cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVs
czxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVu
ZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRv
IHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldElu
dGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZl
QWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgx
LCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxz
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9w
cmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVs
QXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJh
eSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFs
aXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxs
eSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAt
IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhl
aWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAg
fHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRp
bWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0
KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVj
dERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlv
bnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAv
IHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50
LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAq
IGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAo
aW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAg
ICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJp
Z2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3Rhcmdl
dE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdo
dCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20s
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3Rhcmdl
dE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAg
ICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCkBAIC00NTMsMTAgKzE0OCw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBF
ZGdlTW9kZVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNv
bnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbnZv
bHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZl
TWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwg
IlwiICIKICAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCkBAIC00
NjUsOSArMTU5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1v
ZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0
aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZl
QWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2
ZTFlNTAwNTRlMTNkYmEuLjFhNjk1YjRkOTIxZjI2ODY2ZjBkYTNkMTJiOWNmMmI2MGUzOTc0MjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszOCw3IEBAIGVudW0gRWRnZU1vZGVU
eXBlIHsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYs
IGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBj
cmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlh
cywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3Qg
SW50U2l6ZSYpOwpAQCAtNjcsNDEgKzY1LDE3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNl
cnZlQWxwaGEoYm9vbCk7CiAKIHByaXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3Rvcjxm
bG9hdD4ga2VybmVsTWF0cml4OwotICAgIH07Ci0KLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRl
ciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9v
bCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZv
bHZlTWF0cml4IjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2Vy
dmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHkpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJS
ZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLjU5NzlkMGZj
OWExMDlhMmU3NDY1OWNjOThhNGNjZWQ0MTBjNzU5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGln
aHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VD
b25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0
YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlm
ZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2Fs
ZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0
YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxV
bml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxV
bml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4u
OTYwMDYyMDQ5YTIyZmU1YTg1Y2JmZWJiMzQ5ZWNmMWFiZDQxNzk3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSwyMSArMjYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBM
aWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGlu
ZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZp
bHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdo
dFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9
Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAg
ICAKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkZFRGlmZnVzZUxpZ2h0aW5nIjsgfQorCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZjNTYz
ZmExLi5kODUyMDQxYzM4ODI5MDU4OWVmNzExM2Y5MmExYjU5YzJlNjcwZGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTMyICsyNSw1MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNl
bWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3Bs
YWNlbWVudE1hcCkKLSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQot
ICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxl
KHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9y
LCBzY2FsZSkpOwogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBt
X3NjYWxlKHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50
TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsK
IH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feENoYW5u
ZWxTZWxlY3RvciA9PSB4Q2hhbm5lbFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3hDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVs
U2VsZWN0b3IpICE9IG1feENoYW5uZWxTZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IpCiB7Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hhbm5lbFNl
bGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0g
eUNoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3lDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IpICE9IG1feUNoYW5uZWxT
ZWxlY3RvcjsKIH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2Nh
bGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikKLXsKLSAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycg
cHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKLSAgICAvLyBh
bmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3Vy
Y2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCi0gICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4K
LSAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0
IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6
c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsK
LX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShG
aWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5z
Zm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYg
KGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAh
PSBtX3NjYWxlOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorRmxvYXRSZWN0IEZF
RGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGNvbnN0
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhl
bCArIHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVn
aW9uKGlucHV0cyk7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgp
ID49IDIpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFE
cmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAg
ICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVu
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+bGVuZ3Ro
KCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKLQotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQo
KSAqIDAuNTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGluMiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAgICAgCi0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0g
eENoYW5uZWxJbmRleCgpOwotICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVs
SW5kZXgoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgaW50IHJvd0J5dGVzID0gcGFp
bnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUu
aGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5
dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3Rp
bmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAg
ICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0
aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChz
cmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kg
Pj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUp
CkBAIC0xNzQsMTcgKzk2LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
Y2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxT
ZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVm
ZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3
M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLjM5Y2U1NDljZjE5ZWFjMGRhNTI4ZjYyYmYz
MDI0ODNkNjE1MTBkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNz
IEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4g
Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2Vs
ZWN0b3I7IH0KICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSk7CkBAIC00OCwyMiArNDcsMjEgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50
TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1l
bnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKworICAgIGludCB4Q2hhbm5l
bEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGlu
dCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsg
fQogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RURpc3BsYWNlbWVudE1hcCI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZp
bHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1f
eUNoYW5uZWxTZWxlY3RvcjsKQEAgLTcxLDQgKzY5LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDVjZTdiZTNhNDcxYjQ3
YjhkZDU0MjZkOTY1YmJmZTc4OWY2YmJkZDguLjgwODc1Yjg4YzQyNzNhNjJhOGMwOTBiZWQ1ZTE4
NzE3NzhlNDAxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOTggKzI0LDQ4IEBACiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBm
aWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwg
bV9zdGRZKHN0ZFkpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkKLSAgICAsIG1fc2hh
ZG93Q29sb3Ioc2hhZG93Q29sb3IpCi0gICAgLCBtX3NoYWRvd09wYWNpdHkoc2hhZG93T3BhY2l0
eSkKLXsKLX0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNo
YWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgs
IGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIGNvbG9yLCBvcGFjaXR5KSk7CiB9
CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGRURy
b3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKKyAgICA6IG1fc3Rk
WChzdGRYKQorICAgICwgbV9zdGRZKHN0ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShk
eSkKKyAgICAsIG1fY29sb3IoY29sb3IpCisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAg
ICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3
aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNv
bHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAw
LjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hh
ZG93OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0
aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5
KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0g
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dD
b2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxB
cnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24p
OworICAgIHJldHVybiB7IH07CisvLyAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OworLy8KKy8vICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOworLy8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwor
Ly8gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwor
Ly8KKy8vICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLwor
Ly8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BT
aGFkb3c6Om91dHNldHMoKSBjb25zdApAQCAtMTI4LDE0ICs3OSwyMyBAQCBJbnRPdXRzZXRzIEZF
RHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVE
cm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNo
YWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNo
YWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAi
LCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5
IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFj
aXR5IDw8ICJdXG4iOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9w
U2hhZG93IjsKKyAgICB0cyAgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWQorICAgICAgICA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8
PCBtX2R5CisgICAgICAgIDw8ICJcIiBjb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQobV9jb2xvcikgPDwiXCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2Vl
ZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+
IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0
IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0
ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpAQCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBm
bG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9p
ZCBzZXRjQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0g
ICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsg
fQotICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hh
ZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhG
aWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZp
bHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7
CiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29s
b3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dPcGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAg
ZmxvYXQgbV9vcGFjaXR5OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKaW5kZXggYjQyMzU1MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOWJjYTJk
NWRjYTQ5NDUyZjdlNGM4YzhiZDc5OGMwOTJkZGM5MjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsyNSw1NSBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxv
b2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29k
PiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fb3BhY2l0eShvcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2Qo
ZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAotYm9vbCBGRUZsb29kOjpz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK2Jvb2wgRkVGbG9vZDo6c2V0Q29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCisg
ICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zs
b29kQ29sb3IgPSBjb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkK
K2Jvb2wgRkVGbG9vZDo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX2Zs
b29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkpCisgICAgaWYgKG1fb3BhY2l0eSA9PSBvcGFjaXR5
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNp
dHk7CisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7Cit9
CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIGNvbG9yKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0
cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRp
b25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAgICA8PCAi
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICB0cyAg
PDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CisgICAgdHMgIDw8ICIgY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGNvbG9yKCkpIDw8ICJcIiAiCisgICAgICAgIDw8
ICJvcGFjaXR5PVwiIiA8PCBvcGFjaXR5KCkgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uNzk4
NmQ0NjY4NGJmNThhYmNiY2U4NGNmYjY2YTIxMjI4MDhhZTc5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDIgKzIzLDM1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAK
LSAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xv
cjsgfQotICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOworICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBib29sIHNldENvbG9y
KGNvbnN0IENvbG9yJik7CiAKLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2Zsb29kT3BhY2l0eTsgfQotICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKLQot
I2lmICFVU0UoQ0cpCi0gICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVy
cG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJy
ZW50Ci0gICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3It
aW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9Ci0jZW5kaWYKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGFjaXR5OyB9CisgICAgYm9vbCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogcHJpdmF0
ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRmxv
b2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xvciBt
X2Zsb29kQ29sb3I7Ci0gICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CisgICAgQ29sb3IgbV9jb2xv
cjsKKyAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4
YWIzNjM5NDM2NS4uYzcwNTk0MDk3NGViYTljNjA3NWM1OWQyMGNlZmM1MDI5NDc0Njc4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsNDUwICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2Vy
bmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsK
LX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlv
biwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1Jl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMu
Ci0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAo
IShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7
Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAg
ICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1
c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNz
aWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQot
ICAgICwgbV9zdGRYKHgpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogbV9zdGRYKHgpCiAgICAgLCBt
X3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9
IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkK
LXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9k
ZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVk
IGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVM
aW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhL
ZXJuZWxTaXplKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5
LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0g
ICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBj
b25zdCBpbnQgY2hhbm5lbCA9IDM7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhl
aWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAg
IGludCBzdW0gPSAwOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJb
Y2hhbm5lbF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAg
ICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAg
ICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAg
ICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNl
dCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3Jj
UHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBi
b3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50
IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGlu
dCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQot
ewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0
V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhh
T25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBz
dHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxT
aXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEo
KTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAv
LyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSAr
IE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAg
PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZm
ZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAg
ICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAg
ICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxs
IHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICog
c3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEg
KyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBk
eExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0
clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUu
Ci0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUn
LgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBs
aW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0
YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAv
LyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7
IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZv
ciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBl
ZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RX
aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQot
ICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBk
eCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
RyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAg
ICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
LT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFs
dWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07
Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
LT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICog
c3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0KQotewotICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVm
ZmVyLmRhdGEoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8
PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCBy
YWRpdXMuCi0gICAgaWYgKGtlcm5lbFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUg
Kz0gMTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5C
dWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVm
ZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVp
Z2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRl
OwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVm
ZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGgg
PSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0
OwotICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVy
bWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rp
b24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8g
dGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0g
ICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZm
ZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5l
bFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsK
LSAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lk
KiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENv
bnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVm
ZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7
Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVj
dEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2
SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1w
QnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBp
b0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlv
QnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1
ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3Ry
aWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwot
ICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRB
cnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVs
UG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAg
ICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgs
IGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1v
ZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwg
a2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24o
aSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAg
Ym94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwg
ZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vs
c2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6
ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAg
ICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAg
ICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVy
Lmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVm
ZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAg
fQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxB
cnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXpl
JiBwYWludFNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXpl
WSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1P
REVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0
YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5l
bFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFt
ZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRl
ci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFt
ZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNz
aWFuS2VybmVsRmFjdG9yKCkKIHsKLSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5s
aW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBr
ZXJuZWxTaXplWSAqIDAuNWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRT
aXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNp
b24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKLQotICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0
aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2Jz
IHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJs
b2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBi
eSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBi
bG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAg
ICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBq
b2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0g
IWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJl
bnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdo
dDsKLSAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZ
IDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1Np
emUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpv
YikgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVy
OwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFy
cmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVy
LmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRv
Z2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7
Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAg
ICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAg
IHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAg
ICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1Bp
eGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZv
cm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYg
KiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6
ZShmbG9hdCB2YWx1ZSkKIHsKICAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBB
IGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0
IGltYWdlIGJ1dAogICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBt
dWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0
aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAq
IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGlu
dD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkp
OwogfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRp
b24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3
MCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAot
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihzdGREZXZpYXRpb24pKi8pOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQog
ewogICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24pOwogCkBAIC00OTYsNTYgKzgzLDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
IHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigp
LCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMg
b3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3Qu
Ci0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkK
KyAgICAgICAgcmV0dXJuIGRyYXdpbmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZ
KDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYg
IW1fc3RkWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJu
ZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVz
dGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtl
cm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERy
YXdpbmdSZWN0KGlucHV0cywgZHJhd2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKQEAgLTU1NCwxNCArMTA1LDIxIEBAIEludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0g
c3RhY2sudGFrZUxhc3QoKTsKKworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRz
KCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
YXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdh
dXNzaWFuQmx1ciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
WCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQz
ZS4uOTRhMGY1M2QxOTk5ZWE4YWM2NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiw1OSArMjMsNDAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMg
UmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwog
CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHgpIHsgbV9zdGRYID0geDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7
CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAg
ICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQot
ICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2Rl
KEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBG
RUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAg
RkVHYXVzc2lhbkJsdXIoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7
IH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5C
bHVyKiBmaWx0ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFy
cmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0g
ICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQg
a2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxv
YXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjkwZThiOWZhNDIxMGRkNzYyYTRlNGQ5
MWRlMjUwMzQ4ODBmZDJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIs
IExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2Us
IFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IG1fY29sb3IoY29sb3IpCiAg
ICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFu
dChkaWZmdXNlQ29uc3RhbnQpCiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwg
bV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5p
dExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJj
ZSkpCiB7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZh
Y2VTY2FsZSkKLXsKLSAgICBpZiAobV9zdXJmYWNlU2NhbGUgPT0gc3VyZmFjZVNjYWxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3N1cmZhY2VTY2FsZSA9IHN1cmZhY2VTY2FsZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fbGlnaHRpbmdDb2xvciA9PSBsaWdodGlu
Z0NvbG9yKQorICAgIGlmIChtX2NvbG9yID09IGNvbG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVu
aXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17
Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0
TGVuZ3RoWTsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0
YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1
ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7Ci0KLS8vIFRoZXNlIGZhY3RvcnMg
YW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLXN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKLQotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgLTIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdo
dCwKLSAgICAgICAgLTIgKiBjZW50ZXIgLSByaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdo
dAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQsCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciAtIHJpZ2h0ICsgYm90dG9tTGVmdCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRv
bUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0
b20sCi0gICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciArIGJvdHRvbUxlZnQgKyAyICogYm90dG9t
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjps
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJp
Z2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAg
ICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAg
fTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
ck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0Ci17Ci0g
ICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldDsKLSAgICAKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSk7
Ci0KLSAgICBpbnQgbGVmdCA9IGFscGhhV2luZG93LmxlZnQoKTsKLSAgICBpbnQgdG9wTGVmdCA9
IGFscGhhV2luZG93LnRvcExlZnQoKTsKLSAgICBpbnQgdG9wID0gYWxwaGFXaW5kb3cudG9wKCk7
Ci0KLSAgICBpbnQgYm90dG9tTGVmdCA9IGFscGhhV2luZG93LmJvdHRvbUxlZnQoKTsKLSAgICBp
bnQgYm90dG9tID0gYWxwaGFXaW5kb3cuYm90dG9tKCk7Ci0KLSAgICAvLyBUaGUgYWxwaGFXaW5k
b3cgaGFzIGJlZW4gc2hpZnRlZCwgYW5kIGhlcmUgd2UgZmlsbCBpbiB0aGUgcmlnaHQgY29sdW1u
LgotICAgIGFscGhhV2luZG93LmFscGhhWzBdWzJdID0gdG9wUmlnaHQ7Ci0gICAgYWxwaGFXaW5k
b3cuYWxwaGFbMV1bMl0gPSByaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsyXVsyXSA9IGJv
dHRvbVJpZ2h0OwotICAgIAotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFscGhhV2luZG93IGlzIHdv
cmtpbmcgd2l0aCBzb21lIHNwb3QtY2hlY2tzLgotICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3BM
ZWZ0KCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wTGVmdAotICAgIEFT
U0VSVChhbHBoYVdpbmRvdy50b3AoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcAotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJp
Z2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtdG9wTGVmdCAtIDIgKiB0
b3AgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAg
ICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAy
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtdG9w
TGVmdCAtIDIgKiB0b3AgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50
ZXIgKyAyICogcmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogY2VudGVy
ICsgcmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQogewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsK
LSAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJpZ2h0LAotICAg
ICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgLSB0b3BSaWdodCArIGxlZnQgKyAyICogY2VudGVyICsg
cmlnaHQKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3VyZmFjZVNjYWxlLCBz
dXJmYWNlU2NhbGUpICE9IG1fc3VyZmFjZVNjYWxlOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
Citib29sIEZFTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyLAot
ICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgKyBsZWZ0ICsgMiAqIGNlbnRlcgotICAgIH07Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaWZmdXNlQ29uc3RhbnQsIGRpZmZ1c2VDb25zdGFu
dCkgIT0gbV9kaWZmdXNlQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwg
ZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK2Jvb2wgRkVMaWdodGluZzo6
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQogewotICAgIHNldFBp
eGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZh
Y3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckNvbnN0YW50KSAhPSBzcGVjdWxhckNvbnN0YW50OwogfQogCi12b2lkIEZF
TGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwy
RFZlY3RvciwgZmxvYXQgYWxwaGEpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKIHsKLSAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRh
LnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGln
aHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50
aW5nRGF0YSwgeCwgeSwgeik7Ci0KLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgIGlmIChu
b3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewotICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgw
LCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xp
Z2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAg
ICB9OwotICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3
YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Ziho
YWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVu
dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFs
VmVjdG9yID0gewotICAgICAgICAgICAgZmFjdG9yWCAqIG5vcm1hbDJEVmVjdG9yLndpZHRoKCkg
KiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIGZhY3RvclkgKiBub3JtYWwyRFZlY3Rv
ci5oZWlnaHQoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgMS4wZgotICAgICAg
ICB9OwotICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVu
Z3RoKCk7Ci0KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1
c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndh
eVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0g
MSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICog
KG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhh
bGZ3YXlWZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7Ci0gICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKLQotICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAotICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVj
dG9yLnkoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3Ry
ZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQotICAgIH07Ci0g
ICAgCi0gICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9u
ZW50KSAhPSBtX3NwZWN1bGFyRXhwb25lbnQ7CiB9CiAKLS8vIFRoaXMgYXBwZWFycyB0byByZWFk
IGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVh
ZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4K
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAg
QVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHBy
ZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cg
aXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3
byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVy
IGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxl
ZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhh
V2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJl
dmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5k
b3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0
Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShy
b3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9t
UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQg
KyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgYWxw
aGFXaW5kb3cuc2hpZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRh
LmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCkKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fa2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYKSAhPSBtX2tlcm5lbFVuaXRM
ZW5ndGhYOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQotewotICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lIC0gMTsKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcm93c1RvUHJv
Y2VzcyAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2Vzcykg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2Jz
Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAg
IGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2Ig
PiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInlTdGVwIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4
dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAg
ICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBqb2I7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3MgJSBqb2I7Ci0KLSAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAxOwotICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7
IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKLSAgICAgICAgICAgICAgICB5
U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsgMSA6IHlTdGVwOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVu
aXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKQogewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGlu
Z0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0Rh
dGEpOwotI2VuZGlmCisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3Ro
WSwga2VybmVsVW5pdExlbmd0aFkpICE9IG1fa2VybmVsVW5pdExlbmd0aFk7CiB9CiAKLWJvb2wg
RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAogewotICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBp
ZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNw
ZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5z
LgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0g
MTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JDb21w
b25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7Ci0KLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGlu
Z0RhdGEpOwotCi0gICAgLy8gVG9wIGxlZnQuCi0gICAgaW50IG9mZnNldCA9IDA7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcExlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBUb3Agcmln
aHQuCi0gICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9w
UmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQg
PSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90
dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZz
ZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6
ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERl
Y3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNG
YWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIGlmICh3
aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cuCi0gICAgICAgIG9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYy
LCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBCb3R0b20gcm93Lgot
ICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRh
LmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoaGVpZ2h0ID49IDMp
IHsKLSAgICAgICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIFJpZ2h0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0
ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwg
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1h
bChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykg
ewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0gICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0
YSwgcGFpbnRpbmdEYXRhKTsKLSAgICB9Ci0KLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVs
T2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAg
ICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOwotICAgICAgICAgICAgdWludDhf
dCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTMg
PSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Ci0gICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8g
c2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsg
MywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW9t
ZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
LSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJv
d3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlv
dXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxl
LgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGlt
cGxlbWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1
dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRp
bmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0
LCB7IGluIH0sIG51bGxwdHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDdmYjU2MDlkYmI1N2I3NjIwMWYzMzAzMzcwNTJlNDFhYzI1MDNjZjkuLmI4MjRjNDM2
N2QwMzkxMTllZWMyM2U2ZmVlYzI5ODdiYmIyNmIzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDI3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRp
bmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0K
ICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wg
c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZm
dXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25z
dGFudChmbG9hdCk7CisKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQp
OwpAQCAtNTQsMTE1ICs1NiwyNSBAQCBwdWJsaWM6CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0
aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAgYm9vbCBzZXRL
ZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CisgICAgY29uc3Qg
TGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0K
LSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAg
ICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93
IHsKLSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRp
Y2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0
b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAg
ICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsx
XTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4
X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsx
XSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAg
ICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhf
dCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQot
ICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0g
PSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNo
aWZ0Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhp
cyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZTsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQg
d2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwot
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21S
b3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRv
bVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyog
ZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAg
IGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiop
OwotCi0gICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZl
Y3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9h
dCBhbHBoYSk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQ
YWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
Ci0KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVS
KEdDQ19DT01QQVRJQkxFKQotICAgIHN0YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxv
YXQgZXhwb25lbnQpOwotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLSNlbmRpZgot
Ci0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9saWdodFNvdXJjZTsKLQotICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKKyAgICBGRUxpZ2h0
aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQg
bV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwog
ICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3Nv
dXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAw
MWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uM2EwOGNkMGRjMDNjODE1MTU0MGU1
MmFmOTRiOGE0NzBiNDc3NjgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUo
dW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVN
ZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBu
dW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVy
T2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0
ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVN
ZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6
OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30K
KworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmls
dGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8UmVmPEZpbHRlclJlc3Vs
dD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJ
bnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1dHMuYXBwZW5kKHN0YWNrLnRha2VM
YXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAq
dGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1h
Z2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIGlucHV0
cywgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVz
PVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBp
bmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZl
Y3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVj
Yjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uZjNmNDVjMzY4YTNhYTMxZjM4NWQ2
MmMwODQyYzYzZTY3YjVlOTRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZF
TWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0
YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVN
ZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmYw
YmM5ODEzMmY4ZDFkMzQyZmEzYWUwM2YxYTI2NWE0MDIwNmViODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMjY1ICsyNSw2MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
KyAgICA6IG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcikKKyAgICAsIG1f
cmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVz
WSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5
T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBp
ZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0
eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fbW9ycGhv
bG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBob2xvZ3lPcGVyYXRvcjsK
IH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKIHsKLSAg
ICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwogfQogCiBib29sIEZFTW9y
cGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAgIGlmIChtX3JhZGl1c1kg
PT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWSA9IHJhZGl1
c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1zdGF0
aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17
Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19Ci0KLWlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tl
ZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NS
R0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1
ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBj
b21wb25lbnRzKQotewotICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsKLX0KLQotdGVtcGxhdGU8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBh
LCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9u
ZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQot
dGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdp
ZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lk
dGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7
Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUo
UGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNy
Y1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0g
ICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgp
OwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxB
VEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBD
b2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+Owot
Ci10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRy
ZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0g
PSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRy
ZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2Vy
bmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0
YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29u
c3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAg
ICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0g
ICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBp
bnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9
IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRh
LmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVp
Z2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZ
IDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6
Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4o
aGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwot
Ci0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVt
ZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBy
YWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShz
cmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUp
KTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNv
bHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAg
ICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBw
ZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiBy
YWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAg
ICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBp
eGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAg
ICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5l
bEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWSwgcmFkaXVzWSkgIT0gbV9yYWRpdXNZOwog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpkcmF3aW5nUmVjdChj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0g
aW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOworICAgIGRyYXdpbmdSZWN0LmluZmxhdGUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2luZ1JlY3Qo
aW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmlsdGVyUmVzdWx0KiBGRU1v
cnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRp
bWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3
aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0
KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAg
ICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0
KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWdu
ZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVk
IG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53
aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEs
IG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAg
ICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxK
b2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxU
aHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUg
YSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAg
ICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFu
ZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBq
b2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAg
IGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsK
LSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2Ig
PSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQ
bGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpv
Yik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBq
b2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAg
ICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGlu
Z0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAgfQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBh
aW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBp
bWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3ImIG1vcnBo
b2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhl
bEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1
c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGll
ZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBp
ZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJhZGl1cyA9IGZs
b29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gs
IG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5n
UmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3Rk
OjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwot
Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53
aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0
LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGlu
Z0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0K
LSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
JiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9w
ZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAg
ICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTI5NywxNSArOTMsMTEgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3Jw
aG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3ki
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigp
IDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwg
cmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmlu
ZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVhMTEuLmExOTUwMTY5YTVk
NWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTEgKzIzLDEw
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAgICAgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEs
CiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIKQEAgLTM0LDEwICszNCwxMCBA
QCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9n
eT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAgYm9vbCBzZXRNb3JwaG9s
b2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAgIGZsb2F0IHJhZGl1c1goKSBj
b25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwpA
QCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwog
CiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNb3JwaG9sb2d5
IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGlu
dCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0g
ICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWlu
dGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZv
cm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdl
bmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1f
bW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3Jh
ZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1
YWE0MTQwZjY5Li43MWQ4NDA2NDM2MjYyZmU3OTU2ODkzMjA3YWUzMzIxOTFmNzgwN2Y4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDcxICsyNSw0NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0Lmgi
CiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmls
dGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpPZmZzZXQpCi0gICAgLCBtX2R4KGR4KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBm
bG9hdCBkeSkKKyAgICA6IG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVP
ZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBk
eSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9m
ZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0CiB7Ci0gICAgbV9keCA9IGR4OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdSZWN0KCk7CisgICAgZHJh
d2luZ1JlY3QubW92ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgcmV0dXJuIGRyYXdpbmdSZWN0Owog
fQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKK0ZpbHRlclJlc3VsdCogRkVPZmZz
ZXQ6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgbV9keSA9IGR5OwotfQotCi12b2lkIEZFT2Zm
c2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1RvQm91
bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgp
OwogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVm
ZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
aW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2lu
Z1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5
IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBp
biB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBp
bmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgoKSA8
PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmE5OGU0YTk5
YzA1YjM3MWM1ZjRlNjBmYzNiZmJlNzU2MmJlOTU3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2MCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNy
ZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgZmxvYXQgZHgoKSBjb25zdCB7IHJldHVy
biBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9pZCBzZXREeChmbG9hdCBk
eCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsg
fQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOworICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9k
eSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBG
RU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0
IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5
OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgRkVPZmZzZXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgbV9keDsKKyAgICBlbmNvZGVyIDw8IG1fZHk7Cit9CiAKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IEZFT2Zmc2V0OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBk
ZWNvZGVyID4+IGR4OworICAgIGlmICghZHgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAg
IGlmICghZHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVP
ZmZzZXQ6OmNyZWF0ZSgqZHgsICpkeSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0
MWY3NGY5YzQ4N2ExNDRjLi45OWFiOGRhNjRmY2Q1YTM2YjEyNjFmYTEyZjBkMWYwYThjMWRmMzAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUg
IkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxh
ckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3Rh
bnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVT
cGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5n
PiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNw
ZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3Vy
ZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxV
bml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVNwZWN1bGFyTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0Nv
bG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtl
cm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkp
KTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZh
dWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9h
dCBzcGVjdWxhckNvbnN0YW50KQotewotICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3Bl
Y3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJF
eHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxh
ckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1f
c3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNi
MjQ5NThhLi5jYWU1YjgyZmJlYmM1YWI2MzQzNTY5MDVlOWJlN2U2ZjNmMDMyZjc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0
U291cmNlPiYmKTsKIAotICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KLSAgICBib29sIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxv
YXQpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y3VsYXJFeHBvbmVudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Citw
cml2YXRlOgorICAgIEZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYpOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJG
RVNwZWN1bGFyTGlnaHRpbmciOyB9CiAKLXByaXZhdGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5n
KEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1
MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi4xMzc5MmRkOGQwM2ZjMTliMmM2
MzIxZTMxNjJmNzEzYTc3MTY3MzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwu
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDgwICsyMiwzNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFVGlsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRl
ICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVUaWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpUaWxlKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsKIH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJlY3QgRkVUaWxlOjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOworICAgIC8vIERv
bid0IHVzZSB0aGUgaW5wdXRzJyBzdWJyZWdpb25zIGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4g
Z2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVRpbGU6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciop
IGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29y
ayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3Ro
ZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBBU1NF
UlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdl
KCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMg
dGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBv
ZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lm
aWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGls
ZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4
RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkg
PT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lv
bigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndp
ZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAg
IGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
dGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVy
KCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5j
b250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9j
YXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9j
YXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJbWFnZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZSkpOwotICAgIGlmICghdGlsZUltYWdlQ29w
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAt
IG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0
ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRy
YW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZN
b3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5
UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRp
bGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotCisgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjYxM2E1
ODU2ZjVjOWIxOGRhZjc2MWNjZTc3OTQ4YWQ0NmVhZTg2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZp
bHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAg
ICBGRVRpbGUoRmlsdGVyJik7CisgICAgdXNpbmcgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3Q7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
VGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYs
IEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFh
OTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjgyYmY4N2M1YTQxZGI0MzI5YjE2NDAzNTZjMTRjMzdk
ODUyNDY5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxl
IEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0g
Ml0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFt
cGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIx
NDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAz
MSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBz
aG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGgg
Z2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBj
b25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRN
YXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFu
ZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNf
cmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpj
cmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZy
ZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykp
OworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkK
K0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFz
ZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBAIC01OSw0MDUgKzQ2
LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+
IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKLX0KLQogYm9vbCBGRVR1
cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKIHsKLSAgICBpZiAobV90eXBl
ID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVko
ZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFz
ZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZ
ID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV90eXBlLCB0eXBlKSAhPSBtX3R5cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNl
RnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkg
IT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxv
YXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNl
RnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9zZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VG
cmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVt
T2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1PY3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0
Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGlsZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNp
b24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENv
bXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVk
ZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBp
ZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0K
LWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0
IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVk
IDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBz
X3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhp
bXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0g
MDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGll
bnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICog
c19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAg
ICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRp
ZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7
Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0t
aSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0g
ICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAg
ICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSAr
IDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxv
Y2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBm
b3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJi
dWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0
aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRp
bGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkg
LyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNo
RGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRp
b24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0g
ICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAg
ICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAg
ICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0
OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQg
LSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVy
bGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24p
OwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rp
b24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lk
IHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXpl
KQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChi
eDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0
Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQot
ICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3Np
dGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRq
dXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFw
WCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEu
d3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0g
ICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0g
c19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Js
b2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9
IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUlu
ZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQot
ICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19j
dXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7
Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0
byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0g
dUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQotICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAv
LyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkw
ICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEg
PSByeDAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwotICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFj
dGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07
Ci0gICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwot
ICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBx
WzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVku
ZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3Rv
cltqICsgYnkxXTsKLSAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsx
XTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAg
ICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24g
LSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxv
YXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVy
biBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ks
IGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDIpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2Ny
aWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6
OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1
KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8
dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAy
NTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1D
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZl
Y3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAq
IHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAg
IGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsK
LSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZl
Y3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZ
KG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlm
IChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4g
U3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAot
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1
KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlw
ZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVkKSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhi
b29sIHN0aXRjaFRpbGVzKQogewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIElu
dFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgw
LCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5l
bCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52
ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBz
dGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBw
b2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRv
IHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdl
KHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAg
ICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3Rp
dGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigq
cGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1l
dGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHsgfSk7CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRT
aXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNp
emUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZElu
dFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJh
c2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0
ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQot
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQot
ICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUu
aGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lv
blBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVn
aW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBw
YXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJl
ck9mSm9icygpOwotICAgICAgICBpZiAobnVtSm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0
cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnRZID0gMDsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpv
YnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0
ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0
aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBh
aW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERh
dGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSAr
IDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkg
KyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9v
bSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBm
aWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCAwLCBoZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxs
cHRyKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00NzYsMTAgKzEwNSw5IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiB0eXBlPVwi
IiA8PCB0eXBlKCkgPDwgIlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFz
ZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAg
ICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJcIiAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUz
NmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi44ZjcxMmZlZTUzYmMwYTY2MjIy
ZGNkZDVlMDQwYjcwYzMyZDU2ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEg
QXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzgsNyArMzYsNyBAQCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVU
dXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZs
b2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3Jl
YXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAog
ICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBi
b29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUpOwpAQCAtNTksNjggKzU3LDE3IEBAIHB1YmxpYzoK
ICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
TWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFs
UmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWlu
dGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAg
OiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1Np
emUpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAg
ICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIg
KiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9j
a1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAg
ICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRh
IHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGgg
eyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAg
ICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAg
IGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2Jz
OwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxl
bmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAg
ICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9Owot
Ci0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyop
OwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxv
YXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEg
Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWlu
dDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Up
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lk
Kik7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwpAQCAt
MTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMyMmM4NjA4NGQxNWYyNDA5NWU0OTg1NGZmZDkzZjcwNTk5YWYwMWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5cGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVu
ZGVyaW5nTW9kZSkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29u
c3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91
dHB1dChXVEZNb3ZlKGdlb21ldHJ5KSwgbV9yZW5kZXJpbmdNb2RlKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gYXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIHJldHVybiB7IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKSwgcmVzdWx0LT5hYnNv
bHV0ZURyYXdpbmdSZWN0KCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXgg
YTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uYjQ0MWY2ZTgxZDMwNjk2
MDc2YWZjMGNmNmIxY2EzZTMyZmE1OWViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDU5ICsyMSw0MiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmls
dGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3Mg
RmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVy
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNj
YWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3Jt
KQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmly
dHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
eyBDU1MsIFNWRyB9OwogCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZm
ZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2Up
OyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFn
ZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24o
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9
IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUp
IHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBs
ZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSBjb25zdDsKIAotICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Citwcm90ZWN0ZWQ6CisgICAgRmlsdGVyKFJlbmRlcmlu
Z01vZGUsIFR5cGUpOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdN
b2RlOyB9CisgICAgdmlydHVhbCBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIFR5cGUgbV90eXBl
OworfTsKIAotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihG
bG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsg
fQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVz
b2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsKLSAgICB9CituYW1lc3BhY2UgV1RGIHsK
IAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAg
RmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNv
bHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXI6OlR5cGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXI6
OlR5cGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXI6OlR5cGU6OlNWRworICAgID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRm
YzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li5mY2E4NDZkZjE1OGUzZTZhOTNjMGQwNmQ1
YjNhMzliYzNkZjU5MDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDM3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25l
b24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYg
ZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRl
ckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZl
Y3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRlUGFp
bnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29s
dXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24s
IHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1f
YWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RS
ZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xv
c2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVu
aXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4RHJhd2lu
Z1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0
OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50
KSBjb25zdAorRmlsdGVyUmVzdWx0KiBGaWx0ZXJFZmZlY3Q6OmFwcGx5UGxhdGZvcm0oRmlsdGVy
T3V0cHV0JiBvdXRwdXQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50
ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBt
X2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uKTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgt
bV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2lu
dDsKLX0KLQotSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAotewotICAgIEludFBvaW50
IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9u
Lm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2Nh
dGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2Fs
ZTsKLSAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIHNjYWxlKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNm
b3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24o
KSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJl
Y3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewot
ICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZm
ZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVj
dCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5w
dXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDAp
LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAg
IGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUo
aW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAg
IHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAv
LyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUg
dGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0g
ICAgaWYgKGZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAg
ICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAg
IGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQot
ICAgICAgICBzdWJyZWdpb24uc2V0WChib3VuZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkK
LSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0
aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAg
ICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmll
cy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9u
KTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBt
X2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUo
ZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3
ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1
ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNv
bHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhl
IGZpbHRlciByZWdpb24uCi0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1f
ZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNj
YWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29s
dXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOwotfQotCi1GaWx0ZXJFZmZlY3Qq
IEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewotICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3Rz
LnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7Ci19
Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZm
ZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFs
bEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVy
T2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwot
ICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVy
biBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51
bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVm
ZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVm
ZmVjdHMpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQotewotICAgIGlmIChoYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZm
ZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0g
ICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhl
IGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZl
Y3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNs
aXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAg
YWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZm
ZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9IHRoaXMtPmRy
YXdpbmdSZWN0KGlucHV0cywgb3V0cHV0Lmdlb21ldHJ5KCkpOwogCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29y
cmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0
Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0g
ICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3Jj
ZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHBy
ZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBw
aXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0g
ICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8g
V2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0g
ICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1
aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNm
KTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkg
NjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBp
eGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNp
eHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0
ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAg
ICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAg
cGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwp
OwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhl
bEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
aW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBv
dmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9u
ZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAg
ICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEg
PSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBh
bHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAg
ICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhl
bERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQotewot
ICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1
cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhl
IGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBl
ZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwot
fQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5n
TW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAg
ICBhdXRvIHJlc3VsdCA9IG91dHB1dC5jcmVhdGVGaWx0ZXJSZXN1bHQoZHJhd2luZ1JlY3QsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJh
eSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgq
cGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6
ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
YXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJy
YXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lk
IEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0
aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgp
IDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1z
ZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAv
LyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNv
dXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFko
KSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
OwogCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAw
OwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAg
ICAgICB4T3JpZ2luID0gMDsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBp
ZiAoYXBwbHlDb3JlSW1hZ2UoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2Fs
ZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQot
ICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdp
biA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4g
PCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwot
ICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4g
c2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXpl
LmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBp
bnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50
IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2Nh
bGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNl
UGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpICsgeE9yaWdpbikgKiA0OwotCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAg
ICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNl
UGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6
ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRl
cyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAg
IHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNp
emUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVz
dC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5
dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9u
LmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29t
cG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VD
b21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCog
ZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAo
c291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBv
bmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBh
bHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7
Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRT
aXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5
dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0
U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdl
X0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBk
ZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRp
b24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291
cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxl
IChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29t
cG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAg
ICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBz
b3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZm
ZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpCi17Ci0g
ICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KLQot
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUo
KSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
ZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRv
IHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBi
dWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAg
IHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwg
KmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBoYUZvcm1h
dCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFy
Z2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQotewotICAgIC8v
IEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJD
b252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3
aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0g
ICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRy
YXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZm
ZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAot
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVm
ZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVy
UmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBz
YXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29s
b3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0K
LQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQot
ewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1i
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0
aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgot
ICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Ig
c3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVy
IGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRp
b25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNw
YWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25D
b2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKICNlbmRpZgotfQogCi1UZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVu
dCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRh
cmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewotICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2Ui
LCBtX2FscGhhSW1hZ2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xv
cnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgIHRzIDw8
ICJcbiIgPDwgaW5kZW50OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19CisgICAgaWYgKGFwcGx5
U29mdHdhcmUoaW5wdXRzLCBzb3VyY2VJbWFnZSwgKnJlc3VsdCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQubGVha1JlZigpOwogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFt
IGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAg
IFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVn
Z2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IGJmYTg3N2NhYTNlNWY0MjExZjczOWMxYmUzNzY3MDdkZjZlY2QyYTYuLmZiNWJl
MWE5NDg1YmEwNWRiYzYwNzAwOGNiZmY4NTI0NDQ1NmQyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
MjIsMzggKzIyLDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07
Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVm
ZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVy
RWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewot
ICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5w
dXQKLX07CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJs
aWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgewogICAgICAgICBCbGVuZCwKQEAgLTY3LDcgKzQzLDYgQEAgcHVibGljOgogICAgICAgICBG
bG9vZCwKICAgICAgICAgR2F1c3NpYW5CbHVyLAogICAgICAgICBJbWFnZSwKLSAgICAgICAgTGln
aHRpbmcsCiAgICAgICAgIE1lcmdlLAogICAgICAgICBNb3JwaG9sb2d5LAogICAgICAgICBPZmZz
ZXQsCkBAIC03NywxODIgKzUyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgU291cmNlQWxwaGEsCiAg
ICAgICAgIFNvdXJjZUdyYXBoaWMKICAgICB9OwotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgp
OwotCi0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJz
aXZlKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0K
LSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3Rz
LnNpemUoKTsgfQotICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25z
dDsKLSAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRo
ZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Owot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5w
dXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LQotICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4K
LSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQot
ICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2Ug
PSBhbHBoYUltYWdlOyB9Ci0KLSAgICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50
UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZm
ZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0
ID0gbWF4RWZmZWN0UmVjdDsgfSAKLQotICAgIHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJl
Y3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBm
aWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZh
bGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0Lgot
ICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRv
IHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLQotICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBl
KCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1
YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0K
LSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2lu
ZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlw
ZTo6VGVzdE91dHB1dCkgY29uc3Q7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBh
cmUgU1ZHIHNwZWNpZmljIGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuCi0gICAgLy8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDU2MTQuCi0gICAgYm9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9
Ci0gICAgdm9pZCBzZXRIYXNYKGJvb2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAg
IGJvb2wgaGFzWSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShi
b29sIHZhbHVlKSB7IG1faGFzWSA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNXaWR0aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1
ZSkgeyBtX2hhc1dpZHRoID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVl
KSB7IG1faGFzSGVpZ2h0ID0gdmFsdWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsg
fQotICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0g
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRh
cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0
RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9l
ZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0
VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2lu
dEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBl
IGZpbHRlckVmZmVjdENsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xh
c3NUeXBlOyB9Ci0KLSAgICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0g
ICAgY29uc3QgRmlsdGVyJiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0g
ICAgYm9vbCBjbGlwc1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9
Ci0gICAgdm9pZCBzZXRDbGlwc1RvQm91bmRzKGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRz
ID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNl
OyB9Ci0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
KSB7IG1fcmVzdWx0Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkg
eyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYpOwotICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9h
dHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZs
b2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRW
YWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZp
bHRlciYsIFR5cGUpOwotICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIg
d2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0g
ICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFs
cGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBj
aGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5Lgot
ICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLQotICAgIHZvaWQgY2xp
cEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZm
ZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZv
aWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQ
aXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQaXhl
bEJ1ZmZlciYpOwogICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdp
bmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0OwogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VC
dWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAg
ICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZH
IHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmln
Z2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7
Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3Jk
aW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMu
Ci0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uOwotCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0
dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBv
ZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0ID0gMDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGlu
Zy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJv
b2wgbV9hbHBoYUltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVm
ZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBj
b21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7
IHRydWUgfTsKLQotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRp
b25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpIH07CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5
Q29yZUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVy
UmVzdWx0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisK
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7
CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0
cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUz
NTY3ZmMzMWU1YjllOWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OnRyeUNyZWF0ZShib29sIGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwg
RmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlm
IChhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAg
ICBVTlVTRURfUEFSQU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotCi19IC8vIG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcx
MzIyYjc1YTc1NzNlOWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVm
ZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJl
c3VsdCgpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0g
ZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZl
Y3QmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmY2ZjFiMzNiYWVkN2RmMDhmMDQ1MmM2YzRhYjRhOTdjNWRjYzMwYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVy
UmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJG
dW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1
YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0gRmlsdGVyUmVwcmVzZW50YXRpb246OlRlc3RPdXRw
dXQpIGNvbnN0ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9t
ZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMyN2NjMmY0YjNlZjgxNDE3NjU0MWQ5M2NiNjE2MGNkMzc0
ZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmls
dGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKKyAgICA6IG1fZmlsdGVyUmVnaW9u
KGZpbHRlclJlZ2lvbikKKyAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkK
K3sKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhEcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0KSBjb25zdAor
eworICAgIHJldHVybiBkcmF3aW5nUmVjdDsKKy8vICAgICAgICBhdXRvIG1heERyYXdpbmdSZWN0
ID0gZHJhd2luZ1JlY3Q7CisvLyAgICAgICAgbWF4RHJhd2luZ1JlY3QuaW50ZXJzZWN0KG1heFBy
aW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpKTsKKy8vICAgICAgICByZXR1cm4gbWF4RHJhd2luZ1Jl
Y3Q7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAoreworICAgIGlmIChpbnB1dHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmlsdGVyUmVnaW9uKCk7CisKKyAgICBGbG9hdFJl
Y3Qgc3VicmVnaW9uOworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIHN1
YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOworCisgICAgcmV0dXJu
IHN1YnJlZ2lvbjsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXhQcmltaXRpdmVT
dWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAg
RmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOworICAgIHN1
YnJlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBzdWJyZWdpb247
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgRmlsdGVyR2VvbWV0cnk6OmVu
Y29kZShFbmNvZGVyJikgY29uc3QKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+PiBGaWx0ZXJHZW9t
ZXRyeTo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzMzMzM4OWE2ZmZm
ZDQzMTZiOGFmODUyNDc0YWJiNmMwNGE3OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2Vv
bWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0KTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJHZW9tZXRyeSgpID0gZGVmYXVsdDsK
KworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJl
Z2lvbjsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUltYWdlUmVjdDsgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0IHsgcmV0dXJuIHJlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtYXhEcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2Vv
bWV0cnk+PiBkZWNvZGUoRGVjb2RlciYpOworCitwcm90ZWN0ZWQ6CisgICAgRmxvYXRSZWN0IG1f
ZmlsdGVyUmVnaW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKK307CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNk
NzdlYTVmMDUxZTg0NWE5MzFlYmFjMmJhZmQ5MWY5YjM2YTZjMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNw
cApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIK
KworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5LCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCisgICAgOiBtX2dlb21ldHJ5KFdURk1vdmUoZ2VvbWV0cnkpKQorICAgICwg
bV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1
bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgZHJh
d2luZ1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVy
biBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZSgqbV9nZW9tZXRyeSwgZHJhd2luZ1JlY3QsIG1fcmVuZGVy
aW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3V0cHV0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxZThjZmYxNzNiMDRlOTkzOTJhYjI3ZTE0MjJhY2I0YmY1
MjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsK
K2NsYXNzIEZpbHRlckZ1bmN0aW9uOworCitjbGFzcyBGaWx0ZXJPdXRwdXQgeworcHVibGljOgor
ICAgIHVzaW5nIFJlc3VsdHMgPSBIYXNoTWFwPFJlZjxjb25zdCBGaWx0ZXJGdW5jdGlvbj4sIFJl
ZjxGaWx0ZXJSZXN1bHQ+PjsKKworICAgIEZpbHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+JiYsIFJlbmRlcmluZ01vZGUpOworCisgICAgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KCkgeyByZXR1cm4gKm1fZ2VvbWV0cnk7IH0KKyAgICBSZXN1bHRzJiByZXN1bHRzKCkg
eyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVz
dWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVz
dGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7CisgICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDNhNWFiNzRjMDk0MGVmOGFhZTJmOWNl
ZTliNzVlMmYxZDA2NWFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlcjsKKwordXNpbmcgRmlsdGVy
UmVmZXJlbmNlID0gUmVmPEZpbHRlcj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVwcmVzZW50YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGJmZjdkODA0N2NlZjllZjYzYTM2
ZWNjMzVlNWU5YjIwMTFjZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEZpbHRlclJlcHJl
c2VudGF0aW9uIDogdWludDhfdCB7CisgICAgVGVzdE91dHB1dCwKKyAgICBEZWJ1Z2dpbmcKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZWRlMjJlZGI5NzViMGFiMDBmZTlhZDYzMDQ4N2Q4ZjZkNGUyZTg5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQu
Y3BwCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQu
aCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0
U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFH
RSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmls
dGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
bG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7Cisg
ICAgaWYgKGRyYXdpbmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhnZW9tZXRyeS50cmFu
c2Zvcm1Ub0Fic29sdXRlUmVjdChkcmF3aW5nUmVjdCkuc2l6ZSgpKSk7CisjaWYgVVNFKENPUkVf
SU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShn
ZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVyUmVzdWx0
U29mdHdhcmUoZ2VvbWV0cnksIGRyYXdpbmdSZWN0LCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKworRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2dlb21ldHJ5KGdlb21ldHJ5
KQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1fcmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0Zsb2F0UmVjdCBGaWx0
ZXJSZXN1bHQ6OmFic29sdXRlRHJhd2luZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2dl
b21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVSZWN0KG1fZHJhd2luZ1JlY3QpOworfQorCitzdGF0
aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
KyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVu
dCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9u
ZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBk
ZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChz
b3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9u
ZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsK
KyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKwor
c3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNp
emUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0
ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAg
ICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRl
c3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dC
eXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlv
bi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNl
Q29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3Vy
Y2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdo
aWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNl
Q29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICog
MjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAg
ICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAg
ICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0g
NDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRl
clJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhh
Rm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6
OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAg
YXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAg
ICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsK
KworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworICAgIGF1dG8gbG9naWNhbFNpemUgPSBhYnNvbHV0
ZURyYXdpbmdSZWN0KCkuc2l6ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFn
ZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobG9naWNhbFNpemUp
IH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisg
ICAgSW50U2l6ZSBzY2FsZWRTaXplKGxvZ2ljYWxTaXplKTsKKyAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0
cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlQcmVtdWx0
aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXpl
KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkt
PmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisKKyAgICByZXR1cm4g
JnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkp
OworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUp
KTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVy
OworfQorCitib29sIEZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNl
KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMg
d2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNv
bG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZp
bHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYm
IG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VE
X1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lk
IEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXpl
KGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
KyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAg
IGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAg
aW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2Fu
bGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4
ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0
OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwg
Kz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nh
bmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QK
K3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3Jy
ZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVy
dGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29s
b3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20g
b25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJl
c3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWlu
ZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25T
Y2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4
aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFs
dWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVy
LgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkpIH07CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAg
ICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVy
KGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0g
Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9y
U3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNy
Y1JlY3QpOworfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3Vs
dHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhD
bGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGlu
dCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11
c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFT
U0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhf
dCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0Lgor
ICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERh
dGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVu
UGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91
OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAg
ICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVs
RGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKwor
ICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJh
eUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBu
dW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBl
YWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMg
aWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8g
QWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihw
aXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEs
IGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAg
ICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRh
OworICAgIH0KK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8g
Q0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNF
RF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xv
clNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRo
aXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRp
bmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59
bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFn
ZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UsIGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsK
KyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1f
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1YjlkYTkxNTIz
YTY4OGM0MmY2M2QyNWRhN2MzOGM5Y2UwMzMzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVm
ZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1
bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwor
CisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworICAgIAorICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ1JlY3Q7IH0KKyAgICBG
bG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVjdCgpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9
CisgICAgCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJpbmdNb2RlOyB9CisgICAgCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFs
cGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1
YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51
bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigp
OworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBj
b25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKKyAgICBib29sIHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVy
dGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25z
dCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAg
ICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgYm9vbCBtX2FscGhhSW1hZ2Ug
eyBmYWxzZSB9OworICAgIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBtX2dlb21ldHJ5OworCisgICAg
RmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01v
ZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fY29sb3JTcGFjZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0
b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1
MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQg
UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmKQogewotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0
Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkp
OwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNl
UG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRa
ID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3Np
dGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9i
dWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJF
ZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54
eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2lu
dCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsg
bV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2Vy
U3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVk
Wi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRl
ZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkw
OTBhZDZjZjNhMy4uMWUwNjlmOTI2YTgwM2ZjYzJjMTQ2OTZjZmFlNmIyNTUzNTEwODlkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDE5ICsyMSwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZl
Y3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKIGNvbnN0IEF0
b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKQEAgLTQxLDM5ICszOSwyMSBAQCBj
b25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNf
ZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VBbHBoYTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBv
dXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsK
LSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci19Ci0KLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFn
ZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25J
bik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwog
fQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmls
dGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
c291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCku
YXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uY2Nk
MWRiZjRmZWVjNTBlNWRhN2Y5OTUxZThhN2IzZGM2NTNhNmIwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0j
ZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAg
ICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3Rh
dGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhh
KEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQor
ICAgIHVzaW5nIEZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0OwogCiAgICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0Jiwg
RmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhh
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMx
MTA3ZDc4MzkyZTkuLjRlMTdkZWZlODQyYjBiZjlhZDJjODExNTcyNTk1ZDYyZTE4MTVhOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsMTggKzIxLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNl
R3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1Jl
ZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwyNyArMzksMjAgQEAgY29uc3QgQXRvbVN0cmluZyYg
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0K
IAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9h
dFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRl
ci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsK
LSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwor
ICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJbWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VH
cmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFw
aGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhp
cy0+ZmlsdGVyKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIHNvdXJjZUltYWdlKTsKIH0KIAotVGV4
dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlR3JhcGhp
Yzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7
CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3
NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi4xMzVjN2MwNzQyNzdjMWM4YWY2MDU3YTljZjk1Mjk0OWIz
NTU1Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsxOSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNl
R3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdy
YXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRp
YyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291
cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZm
ZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIp
Ci0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAg
ICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgIH0KKyAgICB1c2luZyBGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdDsK
IAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291
cmNlR3JhcGhpYyI7IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZm
ZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJ
bnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRl
ckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
R3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lN
QUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5
YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmEx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNz
aW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7
CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3Bv
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0g
ICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3Np
dGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBv
c2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9u
LnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZl
clBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9
IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdD
b25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7
Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xk
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1p
dGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAg
ICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAg
ICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29u
ZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBj
b3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50
aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24g
c3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBw
b2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBi
eSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLwor
Ly8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQg
LSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8v
ICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0g
ZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29u
ZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAg
ICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0Nv
bmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
PSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBw
YWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
LSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24g
Zm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFy
RXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwor
Ly8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFp
bnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0
aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVu
dCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRT
b3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2Ni
ZDkwOWJkYzAyOTM2MDZjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4y
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVm
ZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hOWI0OTkwMWU3YTMyZWM4ODVhMDQ2YjRkM2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1
ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxv
YXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7Cisg
ICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFs
dWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0
XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyAr
IHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAg
IGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAq
IGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZh
bHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sx
OF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRI
dWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxv
YXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3Jl
ZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNb
MF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAg
PSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNb
NV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10g
KyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUg
bHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lk
IGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYg
YWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAu
MDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0
ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNb
OV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVs
dGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxh
c3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMg
bm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1
ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAy
NTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdl
X0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNy
Yy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZl
clNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAg
IGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0g
YnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dp
dGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7
CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNv
cikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewor
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
Nl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBk
aXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2
SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29y
LCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAg
ICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxD
b2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1
ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJU
eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Cisg
ICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RB
cHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50
cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAg
ICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJy
YXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhl
bEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBh
bHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAg
IHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VU
T0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVs
Qnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Cisg
ICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsK
KyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEs
IGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIs
IGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywg
YWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNv
bG9yTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VS
VChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdl
ID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4u
YWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OworICAgIAorICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2Ut
PmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1
ZmZlci0+c2l6ZSgpOworCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKwor
ICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgor
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJy
YXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNB
bHBoYUltYWdlKHRydWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFn
ZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZTNmMmRkZGJkNWZlNDkxMDE0MGMwZWM4ODBjMTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9u
ZW50VHJhbnNmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VC
dWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1
MGRhNjY2ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsx
LDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFn
ZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0
ODg0OTA0NWZhZDc5YmFjZjBjY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFjYjM0MWYwZTU3NmRmM2JkMTM2ZjZhMWM3N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxh
Y2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVu
dE1hcDo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZl
ciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE2ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNl
YWRjYThlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVE
cm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5n
ZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7CisvLworLy8gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5z
Y2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmls
dGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9m
ZnNldChkcmF3aW5nUmVnaW9uKTsKKy8vICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUo
b2Zmc2V0KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRv
d09wYWNpdHkpOworLy8gICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFs
cGhhKDEpOworLy8KKy8vICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBv
ZmZzZXQsIG1fc2hhZG93Q29sb3IpOworLy8KKy8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1
ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwor
Ly8gICAgaWYgKCFwaXhlbEJ1ZmZlcikKKy8vICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisv
LyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBp
eGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8K
Ky8vICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0Fy
ZWEpOworLy8KKy8vICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisvLyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFk
b3dDb2xvcik7CisvLyAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+
Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVG
bG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJm
YmFlY2M5ZjIyZGJmZjIzZTkwYmUzNDJhYWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUu
Y3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdl
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXpl
KCkgfTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVj
dCwgY29sb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44M2Q3MGE2ODBkOGVjMWM1YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1
bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWNjMTIwMTA5OWJkOTU5ZGZhY2IxMmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6
OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBG
aWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NWY4MjViZGE4ZWMyMzUwYmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDog
aW5wdXRzKSB7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIo
KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlu
cHV0LT5hYnNvbHV0ZURyYXdpbmdSZWN0KCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVN
b3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZh
Nzc4YWFjNzkwNWY2NmM4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNv
ZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZk
OGJkNzhmNjNmM2Q2MGRlOGIzZmIyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0u
Z2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3Vs
dEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0Fs
cGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVz
dWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMz
YTRjMWY4NjNlMTA2YTBmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNz
ZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxl
LmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNv
bnN0Cit7CisvLyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGlu
ID0gaW5wdXRzWzBdLmdldCgpOworLy8KKy8vICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQu
aW1hZ2VCdWZmZXIoKTsKKy8vICAgIGF1dG8gaW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOwor
Ly8gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZh
bHNlOworLy8KKy8vICAgIHJlc3VsdC5zZXRJc0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkp
OworLy8KKy8vICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFz
IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6
ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3Bl
Y2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0g
aW4ubWF4RWZmZWN0UmVjdCgpOworLy8gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9u
ID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKy8vICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRp
b24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZl
Y3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmls
dGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRl
ci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVy
UmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkp
OworLy8gICAgfQorLy8KKy8vICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGls
ZUltYWdlKQorLy8gICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGls
ZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhF
ZmZlY3RMb2NhdGlvbi55KCkpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBpbi5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8v
ICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KFdURk1vdmUodGlsZUltYWdlKSk7CisvLyAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisvLworLy8gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFu
c2Zvcm07CisvLyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0
aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworLy8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRl
cm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwg
cGF0dGVyblRyYW5zZm9ybSB9KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRG
aWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VHVyYnVsZW5jZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJi
NGFkN2MxMDg4ZjJhNTBkZDYwOWRmNjQ2ODA5MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVy
YnVsZW5jZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRl
clJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQx
NjAwM2M0NmZmODczYWRmNjc5ZTYxZTc3ZTk3MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJl
c3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6
OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVE
cmF3aW5nUmVjdCgpLnNpemUoKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0
aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1f
aW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0
IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
KQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4
aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAg
ZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4
ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
LCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3
YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjM4YzQ1NjhmNTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEy
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVz
dWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdh
cmUgOiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1
bHQ6OkZpbHRlclJlc3VsdDsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRT
b2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVz
dWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzlhY2E3MGVhNGY1MGNhM2I0NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJl
c3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
aW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgp
LnNpemUoKSB9OworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJl
Y3QsIENvbG9yOjpibGFjayk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGlu
YXRpb25Jbik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ3MTY0ZWI1ZDVlOGE0NDY0OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJl
c3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1
bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKaW5kZXggNjRlOTgzODRhZjAwNGVmNjk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uNzVm
Mzc3NTM1MTQxYzI5ZDIxM2Q1N2U0Y2YzZmQyYjJmNDBlYjczMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTEgKzI4LDMwMSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJG
RUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmls
dGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
PGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+
IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0
ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxk
RnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQot
ICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhT
b3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6OkNTUykKIHsKKyAgICBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
biA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4oKTsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGlj
IFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQoreworICAgIGF1dG8mIHJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3Vy
Y2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMu
cmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0
aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0VmZmVjdCk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCog
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
JiBjb2xvck1hdHJpeE9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZz
b3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIGRvdWJsZSBvbmVNaW51c0Ft
b3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEu
MCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3Rp
cC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAu
Mjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAs
CisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAg
ICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSBy
ZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVs
ZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZp
bHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQg
dG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmls
dGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90
IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUg
ZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJP
YmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhNRTog
VW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5m
cmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAg
ICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAor
ICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkz
ICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAor
ICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0
OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4
NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
MzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKwor
ICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAw
LAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBhdXRv
IGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7
Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6
OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJh
dGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAg
IHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
LCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0
czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRl
ckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRl
ci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAi
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBl
ZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Citz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3Vu
dDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgICAg
ICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAg
ICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVy
YXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHls
ZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246Okxp
bmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwg
ZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAg
fQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZl
Y3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKIH0K
IAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJl
c3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxk
QmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsK
LSAgICBtX291dHNldHMgPSB7IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
Q29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVh
dGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7
CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgLypjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1l
cjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDoqLyBFREdFTU9ERV9EVVBMSUNBVEUp
OworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVj
dChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQor
eworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7Cisg
ICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsK
KyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9y
IChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlv
biA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVy
ZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24p
OworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisKKyAgICAgICAgQVNTRVJUKGVm
ZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0
ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIsICplZmZlY3QsIGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAt
IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAg
IC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMv
aW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3Jt
YXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2
ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUy
ICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIy
ICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJh
bWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43
NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4x
NjggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAu
MjcyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9y
TWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhp
cywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90
YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNv
bG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3Bh
Y2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVu
Y3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFt
b3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFt
b3VudCArIDAuNTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0
aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9
PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1P
REVfRFVQTElDQVRFKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBh
dXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRv
dzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFk
b3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5jb2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9T
SEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25j
YXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5s
aWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24g
dGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBu
b3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVj
dC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVu
Y3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsK
LSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZp
b3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZm
ZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVy
LT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVy
IHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBp
ZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldE1heEVmZmVj
dFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAg
aWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFj
Y2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsK
LSNlbmRpZgorICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOworICAgIH0K
KyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQorSW50T3V0c2V0cyBDU1NG
aWx0ZXI6Om91dHNldHMoKSBjb25zdAogewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB8
fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAg
aWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0
c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOwogCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZp
bHRlclJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRl
eHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1
aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVk
IHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQg
ZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24u
c2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2lj
YWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNl
dFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01v
ZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0
ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgp
OwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0
KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdl
IHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9y
cy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVz
b2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQg
Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQorRmlsdGVyUmVzdWx0KiBDU1NG
aWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgbV9zb3VyY2VHcmFw
aGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3Nv
dXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZl
Y3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19CisgICAgZm9yIChhdXRvJiBm
dW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24t
PmFwcGx5KG91dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkK
LXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0
cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAg
ICAgICBzdGFjay5hcHBlbmQoeyAqcmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygp
LmFkZChmdW5jdGlvbiwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOwogICAgIH0KLSAgICBl
ZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci19Ci0KLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVz
dWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0
aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRp
cnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAo
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91
dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0g
ICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwotfQotCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpv
dXRwdXQoKSBjb25zdAotewotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVu
ZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0
cHV0KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCi17Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0g
c291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7
Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkID0gZmFsc2U7Ci19CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RS
ZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RS
ZWN0KTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0g
c3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigp
OwogfQogCi1JbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CitUZXh0U3RyZWFt
JiBDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIGF1dG8mIGxhc3RF
ZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0
Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhh
c1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1JbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIGlmICghbV9vdXRzZXRzLmlzWmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRz
ZXRzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0
c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5iZDNmOGE3
ZWM4M2ZlYTlmOWVlZTQzZmVmNTIxNjk4YTJjZjcwMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsODYgKzI2LDU0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlv
dXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFz
cyBGaWx0ZXJFZmZlY3RSZW5kZXJlcjsKLWNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBS
ZW5kZXJFbGVtZW50OwotY2xhc3MgU291cmNlQWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwot
Ci1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0
aW9uIH07CiAKIGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRl
cnM7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAg
dm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRG
aWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdp
b24gPSBmaWx0ZXJSZWdpb247IH0KIAotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsK
LQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
LCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB2b2lkIGFwcGx5KCk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+
IGNyZWF0ZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmlu
Z01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGJvb2wgaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJv
b2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3
aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5V
c2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQqIGlucHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NG
aWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgSW50
UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogCi0gICAgTGF5b3V0UmVjdCBjb21w
dXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisgICAgRmlsdGVyUmVzdWx0KiBh
cHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UpIGNvbnN0IGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJh
d2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgVGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IGZpbmFsOwogCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVj
dHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhhOworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07CiAKKyAgICBWZWN0b3I8UmVmPEZpbHRl
ckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CiAgICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0
czsKK307CiAKLSAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2Ug
fTsKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgQ1NTRmlsdGVyOjplbmNvZGUoRW5j
b2RlciYpIGNvbnN0Cit7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJl
bmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwotfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVj
b2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8Q1NTRmlsdGVyPj4gQ1NTRmlsdGVyOjpkZWNvZGUoRGVj
b2RlciYpCit7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRl
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIp
IHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09
IFdlYkNvcmU6OkZpbHRlcjo6VHlwZTo6Q1NTOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDFiZjIyZTQyYzM1
MTg2MTg3OWVmNWFmMGNmMWVjMGI0NzE0OWI1ZWEuLjAwZjY2ZThhYjIxOGJlNGYwMWZhNzJiY2Nj
YWU5MWU3ZTg2M2EzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgQ2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3RzQ2Fj
aGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4
MThiNjFhMDVmOTViOTY0YTQuLmEyZWU3ODkwYzRhN2VkZmRhYTNlYmRiYjdmNDQ1ZGIwNzk2MTcy
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCkBAIC0zMSw5ICszMSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyRmlsdGVycy5oIgogCi0jaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0xMTYsMzkgKzExNyw1MSBAQCB2
b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAg
ICAgbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
ckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2Fs
ZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZp
bHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAg
bV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0Rmls
dGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgp
ICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2Fs
ZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
LSAgICB9CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVy
ZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4
dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBtX3Nv
dXJjZUltYWdlID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3sK
KyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSB7IG1fc291cmNlSW1hZ2VSZWN0LnNpemUoKSB9Owor
ICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtX2Zp
bHRlci0+cmVuZGVyaW5nTW9kZSgpLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVp
bGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0g
ICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBi
dXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhl
IGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hh
bmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2Zp
bHRlciA9IG51bGxwdHI7CisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKIH0K
IAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGF1dG8g
ZmlsdGVyU291cmNlUmVjdCA9IGZpbHRlci5jb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KGZpbHRlckJveFJlY3QsIGRpcnR5UmVjdCk7CisgICAgCisgICAgYXV0byBmaWx0ZXJTb3Vy
Y2VSZWN0ID0gZGlydHlSZWN0OworICAgIGlmIChmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCkpCisgICAgICAgIGZpbHRlclNvdXJjZVJlY3QgKz0gZmlsdGVyLm91dHNldHMoKTsKKyAg
ICBmaWx0ZXJTb3VyY2VSZWN0LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKKwogICAgIGlmIChm
aWx0ZXJTb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICAKKyAgICBpZiAoZmlsdGVyU291cmNlUmVjdCAh
PSBtX3NvdXJjZUltYWdlUmVjdCkgeworICAgICAgICBtX3NvdXJjZUltYWdlUmVjdCA9IGZpbHRl
clNvdXJjZVJlY3Q7CisgICAgICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwor
ICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkK
ICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUpCisgICAgICAgIGlmICghbV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkKQogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsK
QEAgLTE1OSwxMSArMTcyLDkgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAgICBtX3BhaW50
T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigpOwogICAgIHJlc2V0RGlydHlTb3Vy
Y2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCk7Ci0KLSAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlv
bkNvbnRleHQpOwotICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1
dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXIuZmls
dGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhm
aWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKKyAgICBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKCk7CisgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gaW5wdXRDb250ZXh0
KCk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIGNvbnRlbnRz
IG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBpbiB0aGUgb2Zmc2NyZWVuIG1lbW9yeSBidWZmZXIu
CkBAIC0xNzcsMjUgKzE4OCwyNiBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogCiB2b2lkIFJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKG1fZmlsdGVyLT5pbnB1dENvbnRleHQoKSk7
CisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgpKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5
RmlsdGVyRWZmZWN0Iik7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgZmls
dGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7Ci0KLSAgICBmaWx0ZXIuYXBwbHkoKTsKLQot
ICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAg
IExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0
Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKLQotICAgIGlmIChh
dXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9u
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBp
eGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSkpOwotCi0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJz
ICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOworICAgIGlucHV0Q29u
dGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBhdXRvIGdlb21ldHJ5ID0gc3RkOjptYWtlX3VuaXF1
ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJlY3QsIG1fc291cmNlSW1hZ2VSZWN0KTsK
KyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9z
b3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworCisvLworLy8gICAgLy8gR2V0
IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCisvLyAgICBMYXlvdXRS
ZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKKy8vICAgIGRlc3RSZWN0Lm1vdmUo
bV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKy8vCisvLyAgICBkZXN0aW5h
dGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5n
ZXQoKSk7CisvLworLy8gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworLy8K
Ky8vICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmls
dGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDVi
ZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEw
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xh
c3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Citj
bGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJp
dmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlm
eUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmlu
YWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3Qg
PSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOwor
ICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5
ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9j
dW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAg
UmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNl
UmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAg
CiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZz
ZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQxNjJiODFmZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkx
ZWM3NTU3YTEuLjRkNmJhYmNmMTdhYzJlYjhiNGE2YzczN2Y2ZGRmZmM2OGE5MmYxMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC04MCw2MiAr
ODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlk
YXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlv
biA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmls
dGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291
bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5v
ZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94
KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRl
ciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZp
bHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5w
cmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5P
ZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50
KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgp
LCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+
Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNv
cHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3Vu
ZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2
ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRl
cmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5k
ZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09
IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpM
aW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChl
bGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1v
ZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VN
b2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSByZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7
Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkg
ewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRh
OjpBcHBseWluZykKLSAgICAgICAgICAgIGZpbHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6
Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBv
ciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxl
c3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUg
U1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigp
OwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5k
aW5nQm94KCk7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5h
Y2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAKLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50
PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0
Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkK
KyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50
KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0g
cmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVz
ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50Pigm
ZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91
bmRpbmdCb3gpOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKKyAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
KyAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRy
aXggZm9yIGZpbHRlci4gCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQog
ICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJl
bmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMsNjUgKzExMSwyMiBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2Vz
IGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0g
PSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29s
dXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0
ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsK
LSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbHRlciByZXNvbHV0aW9uCiAgICAgRmxv
YXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7CisgICAgZmls
dGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyRGF0YS0+c2NhbGUpOwog
Ci0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZl
Qm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRh
dGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBm
aWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAg
Ly8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRh
LT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlm
ICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlh
dGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4K
LSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0g
ICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5z
Y2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNj
YWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFs
T2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmls
dGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBs
YXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0
SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxu
IiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKLQotICAgIGxhc3RFZmZl
Y3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qg
b25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCi0gICAgLy8gcmVjYWxj
dWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7
Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7
Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwotICAgIH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZl
IHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFy
Z2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0
aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlm
IChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQo
IW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBm
aWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmls
dGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFu
c2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhl
IHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KKyAgICAvLyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJh
bnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZl
Y3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAg
IGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShmaWx0ZXJEYXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKKwogICAgIGF1dG8gc291cmNlR3Jh
cGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEt
PmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VS
VCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAs
MTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIC8vIFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUg
cGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4
dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJj
ZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4dCgpOwotICAKKyAgICAKICAg
ICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGlj
KTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotCisgICAgCiAgICAg
Y29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJl
ckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsxODgsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBo
aWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0
ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVj
dCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+Zmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
dGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2Fs
bGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0
IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRy
YXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0
KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUo
ZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRy
dWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0
ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5j
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
ICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNh
dENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1
ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgo
KSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RF
ZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2Uo
KS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuc2Nh
bGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRh
dGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgICAgICB9CisgICAgICAgIGF1dG8g
Z2VvbWV0cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJEYXRh
LmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQt
PmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEuc291
cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIAorICAgICAg
ICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0KLSAg
ICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8
PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVjdCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCkKQEAgLTMwNiwxMCArMjA3LDggQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2Jq
ZWMKICAgICByZXR1cm4gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0
ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMo
KSwgb2JqZWN0Lm9iamVjdEJvdW5kaW5nQm94KCkpOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyogcHJpbWl0dmUgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMqPihvYmplY3QtPm5vZGUoKSk7Ci0KICAgICBMT0coRmlsdGVycywgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyICVwIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQgcmVuZGVyZXIgJXAiLCB0
aGlzLCBvYmplY3QpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBvYmplY3RGaWx0ZXJEYXRhUGFp
ciA6IG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwKSB7CkBAIC0zMTcsMTYgKzIxNiw2IEBAIHZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvCiAgICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0
ZXJEYXRhOjpCdWlsdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRl
ckJ1aWxkZXIqIGJ1aWxkZXIgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBG
aWx0ZXJFZmZlY3QqIGVmZmVjdCA9IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsK
LSAgICAgICAgaWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8g
U2luY2UgYWxsIGVmZmVjdHMgc2hhcmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0g
ICAgICAgIC8vIG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICgh
cHJpbWl0dmUtPnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZShlZmZlY3QpOwotCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4u
CiAgICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWly
LmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDU2NGFh
YWQ0OGEyMmUzYzQ1MDdlZWY1MGFkYzY0NDAxZDg3MDNmODMuLjE0OGFjMDhiMzllODFjZjI5NmM2
NGZjYmRlZDgzMTk2ZTFhODlkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUg
IlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgpAQCAtNDIsOCArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBGaWx0ZXJE
YXRhKCkgPSBkZWZhdWx0OwogCi0gICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyOworICAgIFJlZlB0cjxGaWx0
ZXI+IGZpbHRlcjsKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQgeyBudWxscHRyIH07CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOwpAQCAtNzEsOCArNjksNiBA
QCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJPYmplY3QmKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJikgY29uc3Q7Ci0KICAgICBTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyRWxlbWVu
dCgpLmZpbHRlclVuaXRzKCk7IH0KICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1p
dGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRz
KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggYjQ3Mzk0MzhjNWYzZTJjNjkxZWYzYjAyYmJiZWM5ZDI5MjA3
MDNiNy4uZDJlNTlkMTM5ZDhjOWY0MmM1N2IwNGNjOWFjNzMxZjc0YWVhOGUwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAj
aW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5o
IgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdFbGxpcHNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUg
IlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR1BhdGhFbGVtZW50LmgiCkBAIC00MjgsMTMgKzQzMCw5IEBAIHZvaWQgd3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXImCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInByaW1pdGl2ZVVuaXRz
IiwgZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkpOwogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAg
ICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhl
IGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVt
bXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0
LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIg
PSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBp
ZiAoUmVmUHRyPEZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIu
ZmlsdGVyRWxlbWVudCgpKSkgewogICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotCi0gICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZm
ZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQotICAgICAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICAgICAgZHVtbXlGaWx0ZXItPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXNv
dXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVzb3VyY2VUeXBlKSB7CiAgICAgICAgIGNv
bnN0IGF1dG8mIGNsaXBwZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXImPihyZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNw
cAppbmRleCA3YmNmMDQxODAwZjc5OWYxMTc0Y2ZlMDRiODIyZDZkMDY0MzFmNjg2Li4xNjBlMDBk
Y2JlZDY5NWZiNDA3MWU2MTcxZWNmMTJmMmUxOTY0ZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZFQmxl
bmQuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMDAsMjAgKzEwMCwxNSBAQCB2
b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRl
ci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMigp
KTsKIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwot
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZm
ZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAg
IAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4g
eyBGRUJsZW5kOjpjcmVhdGUobW9kZSgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCmluZGV4IDkwMzdj
YjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLjI3YTgyZjVjY2I0NzBlNjMwNmM1
NWI0OWVhZTgyNjQzM2RlOGQyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2Ux
ZjI0NGU0MzY3ODY4ZjQyYmE5Yy4uOGFiODBhMjY4ZTlmYzNkMDIxZWQ0MjMzODliYzRiODA5MmM4
YTEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
Y3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aCIKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTEwMCwxMiArMTAwLDExIEBAIHZv
aWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPGZs
b2F0PiBmaWx0ZXJWYWx1ZXM7CiAgICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBl
KCk7CkBAIC0xMzUsMTUgKzEzNCwxMyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAgICAg
ICBpZiAoKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiBzaXplICE9
IDIwKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURSAmJiBzaXplICE9IDEpCiAgICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUgJiYgc2l6ZSAhPSAxKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIGZp
bHRlclZhbHVlcyA9IHZhbHVlcygpOwogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQo
KTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0
ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4g
eyBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMp
KSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5k
ZXggN2FiNGFhNDE4MWU3YWIxOThiMTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uY2E3YTdkNWY1N2Q2
NWE4Y2I3ZWI5MWYzYmRkNTQ2MjI5ZDM5NGY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWls
ZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggZTg5
MjY3Y2U3ZDM0MTQ2ZDJhNjVkNmYwMWRjZTVkZWY0OWM4MmY3OC4uNmIxNTFjYWIyMGE0ODk4MjM1
MDkwN2YzNjVhNzNjZjQ4YzYzZDkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiU1ZHRkVGdW5jQkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1bmNHRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR0ZFRnVuY1JFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVp
bGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNjIsMTIgKzYyLDExIEBAIHZv
aWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAg
IAorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIGdyZWVuOwpAQCAtODUsOSArODQsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dAogICAgICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQp
LnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0gICAgYXV0byBlZmZlY3QgPSBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICByZXR1cm4geyBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4
OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThiOTkzYTRkZDU0ODYzLi5mMjJkNTFhMmJkOGMyMzc2NWRh
OThiZmMyNWU2YTI5OGE4ZWYyZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgog
ICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJz
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgy
MzUuLjYzMDY5NjdjODNjYTY0NWYwZDhmNjVhOGEzMTk5OGQyNzU4M2QzMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0yMyw3ICsyMyw3IEBA
CiAjaW5jbHVkZSAiU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmls
dGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCkBAIC00MCw3ICs0MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OlNWR0ZFQ29tcG9zaXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lCiAgICAg
c3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6
cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjptX2luMT4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxT
VkdOYW1lczo6aW4yQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjI+KCk7Ci0gICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9z
dmdPcGVyYXRvcj4oKTsKKyAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0
eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBGRUNvbXBvc2l0ZU9wZXJhdG9yLCAmU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjptX2NvbXBvc2l0ZU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMUF0dHIsICZTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6Om1fazE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OmsyQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMj4oKTsK
ICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azNB
dHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2szPigpOwpAQCAtNTYsOSArNTYsOSBAQCBS
ZWY8U1ZHRkVDb21wb3NpdGVFbGVtZW50PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZh
bHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAg
ICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFp
dHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBG
RUNvbXBvc2l0ZU9wZXJhdG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxGRUNv
bXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0
eVZhbHVlID4gMCkKLSAgICAgICAgICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5h
bDxDb21wb3NpdGVPcGVyYXRpb25UeXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgICAgIG1f
Y29tcG9zaXRlT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxGRUNvbXBvc2l0ZU9wZXJhdG9y
Pihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTksNyArOTks
NyBAQCBib29sIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdAogewogICAgIEZFQ29tcG9zaXRlKiBjb21wb3Np
dGUgPSBzdGF0aWNfY2FzdDxGRUNvbXBvc2l0ZSo+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNl
dE9wZXJhdGlvbihzdmdPcGVyYXRvcigpKTsKKyAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0
Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjprMUF0dHIpCiAgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsxKGsx
KCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azJBdHRyKQpAQCAtMTMxLDIwICsx
MzEsMTUgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29t
cG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0
byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRv
IGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwotICAgIAorICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0
MiA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjIoKSk7CisKICAgICBpZiAoIWlucHV0MSB8fCAhaW5w
dXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21w
b3NpdGU6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0
KCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlu
cHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0
Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBy
ZXR1cm4geyBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbXBvc2l0ZU9wZXJhdG9yKCksIGsxKCksIGsy
KCksIGszKCksIGs0KCkpLCB7IHsgKmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4
NjU3YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3OTcyMmY2Li5kYzk1NDc5YjU2YWQ5NThlMzZjZWNl
YWEzYmY0YmE1NjE0YjY2YmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5oCkBAIC0yNywxNSArMjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVt
cGxhdGU8PgotaW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVJJVEhNRVRJQzsgfQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8
Q29tcG9zaXRlT3BlcmF0b3I+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KIAogdGVtcGxhdGU8Pgotc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKK3N0cnVjdCBTVkdQcm9w
ZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhp
Z2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOyB9
CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlw
ZSkKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dp
dGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4gewogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIEZFQ29tcG9z
aXRlT3BlcmF0b3IgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHZhbHVlID09ICJvdmVyIikKICAgICAgICAgICAgIHJldHVybiBGRUNPTVBPU0lURV9P
UEVSQVRPUl9PVkVSOwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaW4x
KCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgU3RyaW5nIGlu
MigpIGNvbnN0IHsgcmV0dXJuIG1faW4yLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUgc3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9y
LT5jdXJyZW50VmFsdWU8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4oKTsgfQorICAgIEZFQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0
ZU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8RkVDb21wb3NpdGVPcGVyYXRvcj4oKTsgfQogICAgIGZs
b2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9h
dCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazItPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQg
azMoKSBjb25zdCB7IHJldHVybiBtX2szLT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtOTMsNyArOTMs
NyBAQCBwdWJsaWM6CiAKICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJl
dHVybiBtX2luMTsgfQogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjJBbmltYXRlZCgpIHsgcmV0
dXJuIG1faW4yOyB9Ci0gICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uJiBjb21wb3NpdGVPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVy
YXRvcjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9r
MTsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMjsg
fQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrM0FuaW1hdGVkKCkgeyByZXR1cm4gbV9rMzsgfQpA
QCAtMTA5LDEyICsxMDksMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBT
VkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUo
dGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbj4gbV9jb21wb3NpdGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246
OmNyZWF0ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdB
bmltYXRlZE51bWJlcj4gbV9rMSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3Jl
YXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0
ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmlkbAppbmRleCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJi
NDUyZGUwLi5mYzY3MGM5ZWM1NmM0MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgs
NyBAQAogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4x
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAg
ICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1h
dGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3Bl
cmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9y
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVk
ZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMDhhOTE0NjA0NTdhZjUxYmI0ZDBjZTk3
MThmM2I5MDkxMjA4ZjcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2lu
Y2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0xOTEsMTIgKzE5MSwxMSBAQCB2b2lkIFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBp
bnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCBvcmRl
clhWYWx1ZSA9IG9yZGVyWCgpOwogICAgIGludCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwpAQCAt
MjA2LDIyICsyMDUsMjIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICB9CiAgICAgLy8g
U3BlYyBzYXlzIG9yZGVyIG11c3QgYmUgPiAwLiBCYWlsIGlmIGl0IGlzIG5vdC4KICAgICBpZiAo
b3JkZXJYVmFsdWUgPCAxIHx8IG9yZGVyWVZhbHVlIDwgMSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYga2VybmVsTWF0cml4ID0gdGhpcy0+
a2VybmVsTWF0cml4KCk7CiAgICAgaW50IGtlcm5lbE1hdHJpeFNpemUgPSBrZXJuZWxNYXRyaXgu
aXRlbXMoKS5zaXplKCk7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGlzIGlzIGEgcmVxdWlyZW1l
bnQsIGFuZCBzaG91bGQgYmFpbCBvdXQgaWYgZmFpbHMKICAgICBpZiAob3JkZXJYVmFsdWUgKiBv
cmRlcllWYWx1ZSAhPSBrZXJuZWxNYXRyaXhTaXplKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCB0YXJnZXRYVmFsdWUgPSB0YXJnZXRYKCk7
CiAgICAgaW50IHRhcmdldFlWYWx1ZSA9IHRhcmdldFkoKTsKICAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp0YXJnZXRYQXR0cikgJiYgKHRhcmdldFhWYWx1ZSA8IDAgfHwgdGFyZ2V0WFZh
bHVlID49IG9yZGVyWFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFy
Z2V0WCA9IGZsb29yICggb3JkZXJYIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjp0YXJnZXRYQXR0cikpCiAgICAgICAgIHRhcmdldFhWYWx1ZSA9IHN0YXRpY19jYXN0PGlu
dD4oZmxvb3JmKG9yZGVyWFZhbHVlIC8gMikpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnRhcmdldFlBdHRyKSAmJiAodGFyZ2V0WVZhbHVlIDwgMCB8fCB0YXJnZXRZVmFsdWUgPj0g
b3JkZXJZVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRZID0g
Zmxvb3IgKCBvcmRlclkgLyAyICkpCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRh
cmdldFlBdHRyKSkKICAgICAgICAgdGFyZ2V0WVZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9v
cmYob3JkZXJZVmFsdWUgLyAyKSk7CkBAIC0yMzQsMTEgKzIzMywxMSBAQCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQgogICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlID0gMTsKICAgICB9CiAg
ICAgaWYgKGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUgPD0gMCB8fCBrZXJuZWxVbml0TGVuZ3RoWVZh
bHVlIDw9IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgZmxvYXQgZGl2aXNvclZhbHVlID0gZGl2aXNvcigpOwogICAgIGlmIChoYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSAmJiAhZGl2aXNvclZhbHVlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6ZGl2aXNvckF0dHIpKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2Vy
bmVsTWF0cml4U2l6ZTsgKytpKQogICAgICAgICAgICAgZGl2aXNvclZhbHVlICs9IGtlcm5lbE1h
dHJpeC5pdGVtcygpW2ldLT52YWx1ZSgpOwpAQCAtMjQ2LDkgKzI0NSwxOCBAQCBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQgogICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAg
ICBhdXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUo
b3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50
KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJu
ZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBo
YSgpLCBrZXJuZWxNYXRyaXgpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVDb252b2x2
ZU1hdHJpeDo6Y3JlYXRlKAorICAgICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZ
VmFsdWUpLAorICAgICAgICAgICAgZGl2aXNvclZhbHVlLAorICAgICAgICAgICAgYmlhcygpLAor
ICAgICAgICAgICAgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLAorICAgICAg
ICAgICAgZWRnZU1vZGUoKSwKKyAgICAgICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0
aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksCisgICAgICAgICAgICBwcmVzZXJ2ZUFs
cGhhKCksCisgICAgICAgICAgICBrZXJuZWxNYXRyaXgpLAorICAgICAgICB7IHsgKmlucHV0MSB9
IH0KKyAgICB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3
ZTA0MzcwZDM1OTgyYTk1YjhkOTA0OWIzMzkuLjg0MjU5MDIwYTg2OTk2ODkwOTBkMjM1YTY5MDJl
NGEzMzFjOTdmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5
OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li43MWQ4YzdmMzkwZGJiZjUxOTIzZWYwNDEzOGM5NDVi
NzY2NWY5OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtODksMTQgKzg5LDE0IEBA
IGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAgICBD
b2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAg
IHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4g
ZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwogICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKICAgICAgICAgcmV0
dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCgp
KTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRp
ZmZ1c2VMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBj
b25zdF9jYXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAg
Y29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50
OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBA
IC0xNTEsMjggKzE1MSwyNSBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGln
aHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0
MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlZlB0ciBsaWdo
dEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAg
ICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGln
aHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVs
ZW1lbnQtPmxpZ2h0U291cmNlKGZpbHRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVy
ZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCku
c3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNl
Q29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RG
TW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxV
bml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSks
IHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1
Njk1ZjFlMGU5ZTIwNTU4MC4uN2Q5OTQzMWUxNWVjYjZiM2JmNDBiZTJhZTIyMWY2OGQ1NjA2ZjY4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3
MjJkZmQwNTE3M2Q4YzIuLjkyN2IzNGYzN2FkNTYyNDFlOTA3NzYyNzI5ODExYTg1YWNiNTFhNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMTUsMjAgKzExNSwx
NSBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsK
KyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBp
bnB1dDIgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQx
IHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3Qg
PSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvcigpLCB5
Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVz
ZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBp
bnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKSwgeyB7ICpp
bnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIx
YTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uMTIzNzgwOTA4NWFlZDIyNzViNWIwMTBmNDk4Y2ZmNmNi
NWJlNmRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNW
R0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCmluZGV4IGE2ODZiYjhmYTM4ZDlkZGZh
MjhlMDJhZWQ5NWU0MWIwOGEzNmYyZjcuLjRjMTUzYmVhMThkNzdlY2I2YzBmMjJkN2ExYjFlMDEw
NDFiYjk1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwCkBAIC0zNiw3ICszNiw3IEBAIFJlZjxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+
IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
OjpsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4g
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBj
b25zdAogewogICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCks
IGVsZXZhdGlvbigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuaAppbmRleCBmYmRmNzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNj
Li40MTZmZTYwYmU3YjE2ZDkxODE1Y2IzOWVmNTIzYTlmNGU0ZWExZWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNv
dXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291
cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBz
dGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihT
VkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAKaW5kZXggMjJiY2UxZDMzMzE3Yzk1NzFmZTVkNzlmNGIzMjZhODliZmM1
YjY4MS4uNzk1NGVjMjcwMWIzYTg2OGQ4ZDYwZGU5YzVlNDM0MzhjOTViZjQ2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAtMjIsNyArMjIs
NyBAQAogI2luY2x1ZGUgIlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTk3LDI3ICs5NywyNSBA
QCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChz
dGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUmIHN2Z1N0eWxlID0gcmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAKICAgICBD
b2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZs
b29kT3BhY2l0eSgpOwogCi0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEo
KSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0
ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwg
b3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAg
cmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGREZXZp
YXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpLCB7
ICppbnB1dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuaAppbmRleCA5YjYyZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFk
Li41Mjc1YjFmY2EwMGViZjU1MWVhMGRkYWJiNDBiNTVkYmQyMDIxMGM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3
ZDBiNGJjYWJkMjI0NDc1OGZjMi4uZTZiOGEyMzE4ZWNmNTQyZGRjNDhhZDBmMjljY2QzNDdmNzcy
NmE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01MCwy
NiArNTAsMjYgQEAgYm9vbCBTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWEKICAgICBGRUZsb29kKiBmbG9vZCA9
IHN0YXRpY19jYXN0PEZFRmxvb2QqPihlZmZlY3QpOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpmbG9vZF9jb2xvckF0dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0Rmxvb2RD
b2xvcihzdHlsZS5zdmdTdHlsZSgpLmZsb29kQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBmbG9v
ZC0+c2V0Q29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOwogICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCi0gICAgICAgIHJldHVybiBmbG9v
ZC0+c2V0Rmxvb2RPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOworICAg
ICAgICByZXR1cm4gZmxvb2QtPnNldE9wYWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNp
dHkoKSk7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUZsb29kRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlJiBzdmdTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAKICAgICBDb2xv
ciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2
Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29k
T3BhY2l0eSgpOwogCi0gICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBv
cGFjaXR5KTsKKyAgICByZXR1cm4geyBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpLCB7
IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAppbmRleCBi
OTZhNDNhYTMxM2U3NWU0YTMxNjcyNDhhMWI2ZjVjZjUxZmVlOTExLi40ODA1ZTIzYTFjNzMwYTJj
YjFhY2Y3Y2MzN2VkOTNmYThhNWNiMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuaApAQCAtMzYsNyArMzYsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNWR1Byb3BlcnR5
UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3Bl
cnR5UmVnaXN0cnk7IH0KIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRl
eCA3YTk5ODIyNGM5MjE5NTU1MjQ0YTg2OWNhNzhhODMwZDU2M2M1OTlkLi45YjZlZTA1MjkyMzk4
YzU1MWRiNzY2ODk0NzNhNGViMmQ4ZDJlMzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUg
IlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
Ci0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTk1LDE4ICs5NSwxNiBAQCB2b2lk
IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZp
YXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFu
Qmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVk
Z2VNb2RlKCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAg
IHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGRE
ZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSksIHsgKmlucHV0MSB9IH07
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
aAppbmRleCBkODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi5lZmRiZjAw
OTUwNWIzMGY4MTllZDBhMmI0MjJiODNjMmE1ZDUwNTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVp
bGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYw
ODExOTVkM2MyN2VjNGYuLjYzODM2MTIwMWE1YzQ3NzQyMDYwOWQ0YzVhMDcyNWQ0ZDAyODRmNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsx
NzQsMTcgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6
bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJl
cik7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkK
LSAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIsIG1fY2FjaGVk
SW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNwZWN0UmF0aW8o
KSk7CisgICAgICAgIHJldHVybiB7IEZFSW1hZ2U6OmNyZWF0ZSh7ICptX2NhY2hlZEltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpIH0sIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsg
fSB9OwogCiAgICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRG
cm9tSVJJU3RyaW5nKGhyZWYoKSwgdHJlZVNjb3BlKCkpOwogICAgIGlmIChpc0Rlc2NlbmRhbnRP
clNoYWRvd0Rlc2NlbmRhbnRPZih0YXJnZXQuZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2Uo
ZmlsdGVyLCB0cmVlU2NvcGUoKSwgaHJlZigpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiB7IH07CisvLyAgICByZXR1cm4geyBG
RUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYo
KSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKSwgeyB9IH07CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxz
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRleCBkOTNlMGQw
ZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li5lZTEzOTlhNjA3YzM1MWY1ZWFlOTFh
YjU3MDhlOTg2NGRhZGNlMDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
aApAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZH
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVu
Y2VzKCk7CiAgICAgdm9pZCByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVMaWdodEVsZW1lbnQuaAppbmRleCBjZDBiZmI5ZWRjZmQ3YjRlMWFmMzliNTVlZGJiYmQ3
ODRhYWVhODlkLi4zZmZlNDhmNDQwOTc0ZWU3YTkxZGZkZmVhMTI0NGZhNzQ2ZmQ1MzJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNW
R0ZpbHRlcjsKIAogY2xhc3MgU1ZHRkVMaWdodEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGRUxpZ2h0RWxlbWVudCk7CiBwdWJsaWM6
Ci0gICAgdmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0ID0gMDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1l
bnQqIGZpbmRMaWdodEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXpp
bXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXppbXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCmluZGV4IGE1NzJhZDUzZDlmMWQ2NWRh
M2RlZjRkNTExM2Q1MGE0MjUyMTg4OGEuLmQ0YTI5NjQ2OGMyMDYyZjRmZGRjZTJiNzBhN2JiYjIx
Yzc4YjViYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAt
MjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkZFTWVyZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCkBAIC00NCwyNCArNDMsMjIgQEAgUmVmPFNWR0ZFTWVyZ2VFbGVt
ZW50PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBh
dXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlucHV0czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2Rl
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAg
ICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VO
b2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlci5uYW1lZEVmZmVj
dChtZXJnZU5vZGUuaW4xKCkpOwogICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZNb3ZlKG1l
cmdlRWZmZWN0KSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBtZXJnZUlucHV0
cy5hcHBlbmQobWVyZ2VFZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgbWVy
Z2VJbnB1dHMuc2hyaW5rVG9GaXQoKTsKLQogICAgIGlmIChtZXJnZUlucHV0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0
dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU1lcmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMuc2l6
ZSgpKSwgV1RGTW92ZShtZXJnZUlucHV0cykgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgwMmQyODNj
ZjRlM2MyLi5mNGQ1MDg4YTMyMmFmZGM5M2U0NTZjMTBjMzVhNmI5NDRiNzQwMGZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBwcml2YXRl
OgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8
U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47
CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVy
dHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2
ZTZkMjA5M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi42YTk0YTVkZTE2NGQ0N2VlNjEyZTVmYjllNzcy
MTcyODg4MWIxNGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5lIFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmEKICAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uob25j
ZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxT
VkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9pbjE+KCk7Ci0gICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1f
c3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVy
dHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yLCAmU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6bV9tb3JwaG9sb2d5T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5
UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OnJhZGl1c0F0dHIsICZTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1gsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3Jh
ZGl1c1k+KCk7CiAgICAgfSk7CiB9CkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudDo6c2V0UmFkaXVzKGZsb2F0IHgsIGZsb2F0IHkpCiB2b2lkIFNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVy
YXRvckF0dHIpIHsKLSAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVl
ID0gU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmco
dmFsdWUpOworICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3IgcHJvcGVydHlWYWx1ZSA9IFNWR1By
b3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAg
ICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlWYWx1ZSk7
CisgICAgICAgICAgICBtX21vcnBob2xvZ3lPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1v
cnBob2xvZ3lPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnMKIHsKICAgICBGRU1v
cnBob2xvZ3kqIG1vcnBob2xvZ3kgPSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3Qp
OwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICBy
ZXR1cm4gbW9ycGhvbG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOwor
ICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xv
Z3lPcGVyYXRvcigpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIp
IHsKICAgICAgICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0
ZWQgc2VwYXJhdGVseS4KICAgICAgICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9n
eS0+c2V0UmFkaXVzWChyYWRpdXNYKCkpOwpAQCAtMTE0LDIxICsxMTQsMTggQEAgdm9pZCBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBmbG9hdCB4UmFkaXVzID0gcmFk
aXVzWCgpOwogICAgIGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7CisgICAgaWYgKHhSYWRpdXMg
PCAwIHx8IHlSYWRpdXMgPCAwKQorICAgICAgICByZXR1cm4geyB9OwogCisgICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IGVmZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJh
ZGl1cywgeVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07
Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU1vcnBob2xvZ3k6OmNyZWF0ZSht
b3JwaG9sb2d5T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyksIHsgeyAqaW5wdXQxIH0gfSB9
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2
NmY2NmFhNjY5Li5jYmY5NWI5M2RiM2JhOGVhNWNjYzE1ZGVmZDM1NWFkNjI0MTQ4OGE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI2LDEyICsy
NiwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0
RW51bVZhbHVlKCkgeyByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQogCi0g
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCisg
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9w
ZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAo
bW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9S
X1VOS05PV046CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2Fz
ZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU6CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7CiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgTW9ycGhvbG9n
eU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICh2YWx1ZSA9PSAiZXJvZGUiKQogICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERTsKQEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRS
YWRpdXMoZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKICAgICBTdHJpbmcgaW4xKCkg
Y29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1
cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPigpOyB9CisgICAgTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9w
ZXJhdG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQg
cmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWC0+Y3VycmVudFZhbHVlKCk7IH0KICAg
ICBmbG9hdCByYWRpdXNZKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNZLT5jdXJyZW50VmFsdWUo
KTsgfQogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9p
bjE7IH0KLSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkg
eyByZXR1cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIG1v
cnBob2xvZ3lPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7
IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgcmFkaXVzWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9y
YWRpdXNYOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1lBbmltYXRlZCgpIHsgcmV0
dXJuIG1fcmFkaXVzWTsgfQogCkBAIC04MSwxMSArODEsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChT
VkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAgICBSZWY8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbj4gbV9tb3JwaG9sb2d5T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOjpjcmVhdGUodGhpcywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OwogICAg
IFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNy
ZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNZIHsgU1ZH
QW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbAppbmRleCBhMmMxODFmMmU2MzdjZDM5MDk4ZWJl
NjllNjA5OGFiZTNjMzg1Y2QxLi4yZDIxZjJhMWQ4ODhkMDJlYzE3OWRmMTBlMmRlNDNmYzY1Mjk3
ZDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
CkBAIC0zMyw3ICszMyw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1ZHX01PUlBIT0xP
R1lfT1BFUkFUT1JfRElMQVRFICAgPSAyOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0Fu
aW1hdGVkU3RyaW5nICAgICAgaW4xOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBb
SW1wbGVtZW50ZWRBcz1tb3JwaG9sb2d5T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdB
bmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdB
bmltYXRlZE51bWJlciAgICAgIHJhZGl1c1g7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0Fu
aW1hdGVkTnVtYmVyICAgICAgcmFkaXVzWTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcAppbmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1
ZWU3Li5kYzY5MmRhYmJhZmM0ZDZiNmFmM2U0NDJlY2M4NWMxNThjZDAxMjYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApAQCAtMjQsNyArMjQsNyBAQAogCiAj
aW5jbHVkZSAiRkVPZmZzZXQuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC04MSwx
NiArODEsMTMgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVy
biB7IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3
MmRiNjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJlZS4uM2VlODhjZWZkZDI1MmU3MjBiY2M0MDZj
YTY1MTE3NDFkMDZlZDE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zm
c2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
aApAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExp
Z2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dC5jcHAKaW5kZXggOWZmODQ3MzM4YTFiNmE1NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uZGI5
MzdjYTE1MGI4NDQxYjk0NWI0YjA1ZTcyMGFmYmQ3N2FhNTkzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNiBAQAogCiAj
aW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJQb2ludExpZ2h0U291cmNl
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtMzksMTkgKzM4LDE5IEBAIFJlZjxT
VkdGRVBvaW50TGlnaHRFbGVtZW50PiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVBvaW50TGln
aHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZH
RkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRl
cikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRT
b3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRp
b247Ci0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVy
ZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAg
IHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0
aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVm
ZXJlbmNlQm94LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53
My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAg
ICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWlu
WE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdv
RmxvYXQpOwotICAgIH0gZWxzZQotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCks
IHkoKSwgeigpKTsKKy8vICAgIGlmIChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0
VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9h
dFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8g
ICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJv
eC53aWR0aCgpKTsKKy8vICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5
KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8KKy8vICAgICAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBo
dHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNl
bnRhZ2UKKy8vICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJl
ZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIo
KSkgLyBzcXJ0T2ZUd29GbG9hdCk7CisvLyAgICB9IGVsc2UKKy8vICAgICAgICBwb3NpdGlvbiA9
IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKICAgICAKICAgICByZXR1cm4gUG9pbnRMaWdo
dFNvdXJjZTo6Y3JlYXRlKHBvc2l0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oCmluZGV4IDMzYTViZDc0OTIwODI4Yzk5ODY0NWI3MjJmNzJhNzQ1
ZTQ4ZGE3OWUuLmNkZWJlNDc2MTg0NzMxNWIyYjliODY2YzIwMTRjMGQzODI5ZWMxZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0
U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRT
b3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsK
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihT
VkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRi
MjRjZGE0NTlhODQyOWE1OS4uYzExNjQxYjBlMjBiNmI2NTBjOWJkNjdiOWRkNDY4MjhiOWQ2ZGQ1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtOTYsNyArOTYsNyBAQCBib29sIFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqIGVmZmVjdAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29s
b3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJl
ci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBz
cGVjdWxhckxpZ2h0aW5nLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJu
IHNwZWN1bGFyTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3Vs
YXJMaWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKQEAgLTEwNSw3ICsx
MDUsNyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCiAgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0
aW5nLT5zZXRTcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CiAKLSAgICBhdXRv
JiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5n
LT5saWdodFNvdXJjZSgpKTsKKyAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGln
aHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVM
aWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRF
bGVtZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNjAsMjggKzE2
MCwzMSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50Ojpm
aW5kTGlnaHRFbGVtZW50KHRoaXMpOwotICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50
LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAKLSAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsK
LQotICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBj
b2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVu
dCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVs
ZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CisgICAgaWYgKCFsaWdodEVsZW1lbnQpCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpjcmVhdGUoCisgICAgICAgICAgICByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5n
Q29sb3IoKSksCisgICAgICAgICAgICBzdXJmYWNlU2NhbGUoKSwKKyAgICAgICAgICAgIHNwZWN1
bGFyQ29uc3RhbnQoKSwKKyAgICAgICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKSwKKyAgICAgICAg
ICAgIGtlcm5lbFVuaXRMZW5ndGhYKCksCisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgp
LAorICAgICAgICAgICAgbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXIpKSwKKyAgICAg
ICAgeyB7ICppbnB1dDEgfSB9CisgICAgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggODk3YjhkZTE1NmQxYzc5
YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3YjE0Ni4uNTJkMDEzMjU3MjE4YTJkMDU5ZDM1ODk1NTRiMmE3
MmZhNTNlNWU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNW
R0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0ZWE0
YWE5Y2YyZGZiZmZlZS4uOTA0YzhhYmExNDRkZDRhZTNhODZjMDBhN2Q5NDhkZDE5NGJhNTlhNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAgLTIx
LDcgKzIxLDYgQEAKICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTM5LDI3ICszOCwyNyBAQCBSZWY8U1ZHRkVTcG90
TGlnaHRFbGVtZW50PiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExp
Z2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QK
K1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25z
dCBTVkdGaWx0ZXImKSBjb25zdAogewogICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAg
ICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgp
OwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgp
ICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5j
ZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRl
IGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0
X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5j
ZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29y
bmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotCi0gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJl
bmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAg
ICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5j
ZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmls
dGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb2lu
dHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1p
blhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3
b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4
KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRY
KCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7Ci0gICAgfQorLy8KKy8vICAgIGlmIChmaWx0
ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVy
LnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJl
bmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkp
OworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
UG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRz
Lmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFoo
eigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJl
ZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vCisvLyAg
ICAgICAgcG9pbnRzQXQuc2V0WChyZWZlcmVuY2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZl
cmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gu
eSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBl
dWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNl
Qm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlIHsK
Ky8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAg
ICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQzRChwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBv
aW50c0F0WigpKTsKKy8vICAgIH0KIAogICAgIHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0
ZShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5n
bGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKaW5k
ZXggM2Y3NzE3YzEyNjVjNGYzMWY1MzA4ODY4ZDQ3Yzk3ODc5N2E3MzIxMS4uYmU5OGZiZWQ4NjZj
NWJjZTJmOTk3NTczZjc1OWJhNDIzMzI1Yzc3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwb3RMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNWR0ZFU3BvdExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3Qg
U1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZH
RkVTcG90TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCmluZGV4IDM5YmRjYzc3MzU5NjY1MDM2
ZTFhZTc0NzYxMmVhZDZmOWFjMzczNzAuLjdkZjI1MmRhYTY2M2QwYjBhZWMxNWI4MTRhZTIzMGUz
NjE3NDFhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKQEAgLTI0
LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkZFVGlsZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTcwLDE2ICs3MCwxMyBAQCB2b2lk
IFNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmls
dGVyKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1
cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFVGlsZTo6Y3JlYXRlKCksIHsgKmlucHV0MSB9IH07
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4IDQ1YjMyNzE4
NTFkN2ZjMGRjMmQzYmNjODc5YTIyZGM0MmEzM2E5MWYuLjcxYTk3NDY4Mzc2MGFkYzAxNmNjNmRl
YmVlMzVhMTkxMzUyZWRjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaApA
QCAtNDIsNyArNDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAg
IFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRl
KHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHAKaW5kZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uY2ZkNGFk
MjE2ZmE0YTlkNGQzYmJkMDIwNzc5ZGFhNjhlODVjN2ZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9p
ZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlciYpIGNvbnN0CiB7CiAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VG
cmVxdWVuY3lZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVU
dXJidWxlbmNlOjpjcmVhdGUoZmlsdGVyLCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VG
cmVxdWVuY3lZKCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19T
VElUQ0hUWVBFX1NUSVRDSCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgRkVU
dXJidWxlbmNlOjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5
WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQ
RV9TVElUQ0gpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3Njll
MTk4YS4uYjkxNGRmMzhjYmEwMGZkNzhiMzhmNDJjM2IwZmIwMDJlODIyYTU5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVggeyBTVkdBbmltYXRlZE51
bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5j
cHAKaW5kZXggODEzYmNiZDA4MjBjYWM2NzdhNzk3ZjI3YmNjZThjZTEwOTEyYmM0Ny4uZGY2MDRi
YTJhNmNkNzY4NjJjOTMzMjJkNmM3ZGM4OTNkYjdlOWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJFbGVtZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlNWR0ZpbHRl
ckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
UGFyc2VyVXRpbGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCmluZGV4IGZmNTIyMzA5NDY2
YjA0MGJlZjA4OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjc3MWE0MTZlZjBlZjA1NTgyZDcyOTgxYTMw
Y2M5ZDYyZTY1MjlmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBAIC0yNSw5ICsyNSw3IEBA
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDIyICs5MSw2IEBAIHZvaWQgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3Qg
Q2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVm
ZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFTU0VSVChmaWx0ZXJFZmZlY3QpOwot
ICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0
cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0
cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCi0gICAgICAgIGZp
bHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwot
ICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0
ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQogUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y3JlYXRlRWxlbWVudFJl
bmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IGM5OGIx
M2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcuLmVjMjY5ZjAzYzQzNjE3Mjg1YzJj
ZTA2Nzg1MjE0YWQ3YWFmMDVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTMxLDE3ICszMSwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVm
ZmVjdDsKLWNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNz
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50
IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmls
dGVyRWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7Ci0gICAgLy8gUmV0dXJu
cyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgot
ICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0Kiwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNW
R1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMsIFNWR0VsZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHgoKSBjb25zdCB7
IHJldHVybiBtX3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2ICs1MCwxMCBAQCBwdWJsaWM6
CiAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVkKCkgeyByZXR1cm4gbV9oZWln
aHQ7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5pbWF0ZWQoKSB7IHJldHVybiBt
X3Jlc3VsdDsgfQogCisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCA9IDA7
CisgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBvbGQgb25lLgorICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCiBwcm90ZWN0ZWQ6CiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5
NmM5ZjIzOTYuLmJkYzViZTViMGNlNzlkOGJjNzEwY2FmYzQ1Mzc1NmVlYzBhOTcwZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMzAgKzI0LDcxIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5o
IgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+
IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0
UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1f
aW1hZ2UoaW1hZ2UpCi0gICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RS
YXRpbykKK1JlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoUmVmPEltYWdlPiBpbWFnZSwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoV1RGTW92ZShpbWFnZSksIHByZXNlcnZl
QXNwZWN0UmF0aW8pKTsKIH0KIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJl
ZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAgLCBtX3RyZWVTY29wZSgmdHJlZVNjb3BlKQotICAg
ICwgbV9ocmVmKGhyZWYpCitGRUltYWdlOjpGRUltYWdlKFJlZjxJbWFnZT4gaW1hZ2UsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6
IG1faW1hZ2UoV1RGTW92ZShpbWFnZSkpCiAgICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJl
c2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdp
dGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorRmxvYXRSZWN0IEZF
SW1hZ2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZp
bHRlciwgaW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4geyB9OworLy8g
ICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFw
UmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CisvLworLy8gICAgRmxvYXRSZWN0IHNy
Y1JlY3QgPSB7IHsgfSwgbV9pbWFnZS0+c2l6ZSgpIH07CisvLyAgICBtX3ByZXNlcnZlQXNwZWN0
UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOworLy8KKy8vICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCisvLyAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOworLy8gICAgZWxzZQorLy8gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RS
ZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCk7CiB9
CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYg
ZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCitib29sIEZF
SW1hZ2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
SW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKLX0K
LQotdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAg
aWYgKG1faW1hZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7
Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwg
c3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVy
ZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFu
c2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNl
Y3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZSht
YXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QocGFpbnRSZWN0KSk7CisvLyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworLy8KKy8vICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKy8vICAgIGlmICghcmVzdWx0
SW1hZ2UpCisvLyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8KKy8vICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKSk7CisvLyAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7CisvLyAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8u
dHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CisvLworLy8gICAgSW50UG9pbnQgcGFp
bnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKKy8vICAgIGRlc3RS
ZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOworLy8KKy8v
ICAgIHJlc3VsdEltYWdlLmNvbnRleHQoKS5kcmF3SW1hZ2UoKm1faW1hZ2UsIGRlc3RSZWN0LCBz
cmNSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6
cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKK0ZpbHRlclJlc3VsdCogRkVJbWFnZTo6YXBwbHko
RmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKikg
Y29uc3QKIHsKLSAgICBpZiAoIW1fdHJlZVNjb3BlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklT
dHJpbmcobV9ocmVmLCAqbV90cmVlU2NvcGUpOwotICAgIGlmICghaXM8U1ZHRWxlbWVudD4odGFy
Z2V0LmVsZW1lbnQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gdGFyZ2V0
LmVsZW1lbnQtPnJlbmRlcmVyKCk7Ci19Ci0KLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5k
ZXJlcigpOwotICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0KLSAgICBGbG9hdFJlY3Qgc3Jj
UmVjdDsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpOwotICAgIGVsc2UgewotICAgICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
LnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIH0KLQotICAgIEludFBvaW50
IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgZGVz
dFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7Ci0KLSAg
ICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGlmIChyZW5k
ZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRD
VE0oYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgICAgIFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRv
d25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwotICAgICAgICBpZiAoY29u
dGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICBTVkdMZW5ndGhD
b250ZXh0IGxlbmd0aENvbnRleHQoY29udGV4dE5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgRmxv
YXRTaXplIHZpZXdwb3J0U2l6ZTsKLQotICAgICAgICAgICAgLy8gSWYgd2UncmUgcmVmZXJlbmNp
bmcgYW4gZWxlbWVudCB3aXRoIHBlcmNlbnRhZ2UgdW5pdHMsIGVnLiA8cmVjdCB3aXRoPSIzMCUi
PiB0aG9zZSB2YWx1ZXMgd2VyZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSB2aWV3cG9ydC4KLSAgICAg
ICAgICAgIC8vIEJ1aWxkIHVwIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGZyb20gdGhlIHZp
ZXdwb3J0IHNwYWNlIHRvIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHN1YnJlZ2lvbi4KLSAgICAgICAg
ICAgIGlmIChsZW5ndGhDb250ZXh0LmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC5jb25jYXRDVE0obWFrZU1hcEJldHdlZW5SZWN0cyhGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCB2aWV3cG9ydFNpemUpLCBkZXN0UmVjdCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICAg
ICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAq
cmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGNvbnRleHQuZHJhd0ltYWdlKCptX2ltYWdl
LCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CitUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBGbG9hdFNpemUg
aW1hZ2VTaXplOwotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBpbWFnZVNpemUgPSBtX2ltYWdl
LT5zaXplKCk7Ci0gICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJlZmVyZW5j
ZWRSZW5kZXJlcigpKQotICAgICAgICBpbWFnZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KHJlbmRl
cmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKS5zaXplKCk7CisgICAgRmxvYXRT
aXplIGltYWdlU2l6ZSA9IG1faW1hZ2UtPnNpemUoKTsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltm
ZUltYWdlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIGltYWdlLXNpemU9XCIiIDw8IGltYWdlU2l6ZS53
aWR0aCgpIDw8ICJ4IiA8PCBpbWFnZVNpemUuaGVpZ2h0KCkgPDwgIlwiXVxuIjsKICAgICAvLyBG
SVhNRTogc2hvdWxkIHRoaXMgZHVtcCBhbHNvIG9iamVjdCByZXR1cm5lZCBieSBTVkdGRUltYWdl
OjppbWFnZSgpID8KICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggYWMxNjBlZGNlN2MwZTBhMDY3YmRlZmJk
NzA3ZjJhYmU1NTkwODFiNi4uYTgxNDRmNzY3Y2JkODc0Y2VmNDUwNjk1YWMwYmFmNTBkMmNkMWM2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMzYgKzI4LDI2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIFJl
bmRlckVsZW1lbnQ7Ci1jbGFzcyBUcmVlU2NvcGU7CiAKIGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNy
ZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklS
ZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGUo
UmVmPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKIHByaXZh
dGU6Ci0gICAgdmlydHVhbCB+RkVJbWFnZSgpID0gZGVmYXVsdDsKLSAgICBGRUltYWdlKEZpbHRl
ciYsIFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwot
ICAgIEZFSW1hZ2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgRkVJbWFnZShSZWY8SW1hZ2U+LCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVJbWFnZSI7IH0KIAotICAgIEZpbHRlckVm
ZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVJbWFnZTsgfQorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIFJlbmRlckVsZW1lbnQqIHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIGZpbmFsOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgLy8gbV90cmVlU2NvcGUgd2lsbCBuZXZlciBiZSBh
IGRhbmdsaW5nIHJlZmVyZW5jZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05OTI0MwotICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGUgeyBudWxscHRyIH07Ci0g
ICAgU3RyaW5nIG1faHJlZjsKKyAgICBSZWY8SW1hZ2U+IG1faW1hZ2U7CiAgICAgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlh
OTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjU3MzIwOWFlODllNGU5ZmQ4
ODE0YjRkNjhhMmNlMTZlNDA4YWRmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxNTggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgor
I2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZp
bHRlcihhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVn
aW9uKGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbikKLSAgICAsIG1fdGFyZ2V0Qm91bmRpbmdC
b3godGFyZ2V0Qm91bmRpbmdCb3gpCi0gICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24p
Ci0gICAgLCBtX2VmZmVjdEJCb3hNb2RlKGVmZmVjdEJCb3hNb2RlKQorUmVmUHRyPFNWR0ZpbHRl
cj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQor
eworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7Cisg
ICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9k
ZXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJl
ZihuZXcgU1ZHRmlsdGVyKHJlbmRlcmluZ01vZGUpKTsKKyAgICAKKyAgICBmaWx0ZXItPnNldHVw
QnVpbHRpbkVmZmVjdHMocHJldmlvdXNFZmZlY3QpOworICAgIAorICAgIEZpbHRlckVmZmVjdHNJ
bnB1dHMgZWZmZWN0c0lucHV0czsKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRFZmZlY3RzKGZpbHRl
ckVsZW1lbnQsIGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGlmICghZmlsdGVyLT5idWlsZEV4cHJlc3Npb24oZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmlsdGVyOjpTVkdG
aWx0ZXIoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmlu
Z01vZGUsIFR5cGU6OlNWRykKK3sKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFkZE5hbWVkRWZmZWN0
KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3sKKyAg
ICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0LnB0
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMu
Y29udGFpbnMobmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEVmZmVjdCA9IGVm
ZmVjdC5wdHIoKTsKKyAgICBtX25hbWVkRWZmZWN0cy5zZXQobmFtZSwgV1RGTW92ZShlZmZlY3Qp
KTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjpuYW1lZEVmZmVjdChjb25z
dCBBdG9tU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAobV9sYXN0RWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVj
dDsKKworICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6
ZWZmZWN0TmFtZSgpKTsKKyAgICB9CisKKyAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlu
cyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KG5hbWUpOworCisg
ICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChuYW1lKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6
OnNldHVwQnVpbHRpbkVmZmVjdHMoRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKIHsKLSAg
ICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0
ZXJSZWdpb24pOworICAgIGlmIChwcmV2aW91c0VmZmVjdCkgeworICAgICAgICBtX2J1aWx0aW5F
ZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIFJlZjxGaWx0ZXJFZmZlY3Q+
IHsgKnByZXZpb3VzRWZmZWN0IH0pOworICAgICAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3Vy
Y2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU291cmNlR3JhcGhpYzo6
Y3JlYXRlKCk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkpOwogfQogCi1GbG9hdFNp
emUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNv
bnN0Citib29sIFNWR0ZpbHRlcjo6YnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRl
ckVsZW1lbnQsIEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1dHMpCiB7Ci0gICAgaWYg
KG1fZWZmZWN0QkJveE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXplICogbV90YXJnZXRCb3VuZGlu
Z0JveC5zaXplKCk7CisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gbmFtZWRFZmZlY3QoU291cmNl
R3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsKKyAgICBhdXRvIHNvdXJjZUFscGhhID0gbmFtZWRFZmZl
Y3QoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CisgICAgZWZmZWN0c0lucHV0cy5zZXQoc291
cmNlQWxwaGEucmVsZWFzZU5vbk51bGwoKSwgRmlsdGVyRWZmZWN0VmVjdG9yIHsgc291cmNlR3Jh
cGhpYy5yZWxlYXNlTm9uTnVsbCgpIH0pOworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihm
aWx0ZXJFbGVtZW50KSkgeworICAgICAgICBhdXRvIFtlZmZlY3QsIGlucHV0c10gPSBlZmZlY3RF
bGVtZW50LmJ1aWxkKCp0aGlzKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZWZmZWN0c0lucHV0cy5zZXQoeyAqZWZmZWN0IH0sIFdU
Rk1vdmUoaW5wdXRzKSk7CisgICAgICAgIGFkZE5hbWVkRWZmZWN0KGVmZmVjdEVsZW1lbnQucmVz
dWx0KCksIGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVy
RWZmZWN0PiYgZWZmZWN0LCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRz
LCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrKQoreworICAgIGlmIChzdGFjay5jb250YWlucyhl
ZmZlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9leHByZXNzaW9uLmlu
c2VydCgwLCB7IGVmZmVjdCB9KTsKKworICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOworCisgICAg
Zm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdHNJbnB1dHMuZ2V0KGVmZmVjdCkpIHsKKyAg
ICAgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oaW5wdXRFZmZlY3QsIGVmZmVjdHNJbnB1dHMsIHN0
YWNrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHN0YWNrLmxhc3QoKS5wdHIoKSA9PSBlZmZlY3Qu
cHRyKCkpOworCisgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFNWR0ZpbHRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1
dHMmIGVmZmVjdHNJbnB1dHMpCit7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7CisgICAgcmV0
dXJuIGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0c0lucHV0cywgc3Rh
Y2spOworfQorCitGaWx0ZXJSZXN1bHQqIFNWR0ZpbHRlcjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBv
dXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fbGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlSW1hZ2UgPSBz
dGFjay50YWtlTGFzdCgpLT5pbWFnZUJ1ZmZlcigpOworCisgICAgaWYgKGF1dG8gcmVzdWx0ID0g
b3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gZWZmZWN0LT5hcHBseShvdXRwdXQsIHN0YWNrLCBzb3VyY2VJbWFnZSk7CisgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
c3RhY2suYXBwZW5kKHsgKnJlc3VsdCB9KTsKKyAgICAgICAgb3V0cHV0LnJlc3VsdHMoKS5hZGQo
ZWZmZWN0LCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0KSk7CisgICAgfQogCi0gICAgcmV0dXJu
IEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRl
clJlZ2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgQVNTRVJUKHN0YWNr
LnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAg
cmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpOworICAgIHJldHVybiAmcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4g
U1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBib29sIGVmZmVjdEJCb3hNb2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJz
b2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRp
bmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZXhwcmVzc2lvbikKKyAgICAgICAgZWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2Yu
LmQyOWJlYjU3OWQzZWZlYWJjYTg0M2Q4YWU2MjEwM2Q1YmM4M2NkNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDQxICsyMSw1NiBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKKwogY2xhc3MgU1ZHRmlsdGVyIGZpbmFs
IDogcHVibGljIEZpbHRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGJvb2wpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxl
bWVudCYsIFJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBGaWx0
ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0ID0gbnVsbHB0cik7CiAKLSAgICBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRF
ZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQogCi0gICAg
RmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFs
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZWY8U1ZHRmlsdGVyPj4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIEZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KK3ByaXZhdGU6CisgICAgU1ZHRmlsdGVyKFJlbmRl
cmluZ01vZGUpOwogCi0gICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUs
IFJlZjxGaWx0ZXJFZmZlY3Q+KTsKIAotcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAg
ICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCk7
CisgICAgYm9vbCBidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdHNJ
bnB1dHMmKTsKKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVyRWZmZWN0
PiYsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNr
KTsKKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7
CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxv
YXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0
ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotICAgIGJvb2wgbV9lZmZl
Y3RCQm94TW9kZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QgZmlu
YWw7CisKKyAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CisKKyAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOworICAgIEhhc2hNYXA8
QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOworICAgIFZlY3Rv
cjxSZWY8Y29uc3QgRmlsdGVyRWZmZWN0Pj4gbV9leHByZXNzaW9uOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+
IHZvaWQgU1ZHRmlsdGVyOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Cit7CisgICAgCit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UmVmPFNWR0ZpbHRlcj4+IFNW
R0ZpbHRlcjo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpTVkdGaWx0ZXIpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIuaXNTVkdGaWx0ZXIoKTsgfQorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1
cm4gZmlsdGVyLnR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXI6OlR5cGU6OlNWRzsgfQogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU291
cmNlQWxwaGEuaCIKLSNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
U1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBz
b3VyY2VHcmFwaGljKQotewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgqc291cmNlR3Jh
cGhpYykpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZvaWQgU1ZHRmlsdGVyQnVp
bGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QpCi17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBtX2xhc3RFZmZlY3QgPSBl
ZmZlY3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9idWlsdGluRWZmZWN0
cy5jb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFzdEVmZmVjdCA9IGVm
ZmVjdDsKLSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVjdCk7Ci19Ci0KLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVjdEJ5SWQoY29uc3Qg
QXRvbVN0cmluZyYgaWQpIGNvbnN0Ci17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAg
ICBpZiAobV9sYXN0RWZmZWN0KQotICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVjdDsKLQot
ICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkp
Ci0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChpZCk7Ci0KLSAgICByZXR1cm4g
bV9uYW1lZEVmZmVjdHMuZ2V0KGlkKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphcHBl
bmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBlZmZlY3Qs
IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIFRoZSBlZmZlY3QgbXVzdCBiZSBhIG5l
d2x5IGNyZWF0ZWQgZmlsdGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1fZWZmZWN0UmVmZXJlbmNl
cy5jb250YWlucyhlZmZlY3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAhbV9lZmZlY3RSZW5k
ZXJlci5jb250YWlucyhvYmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVj
dCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVj
dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAgIC8vIEl0IGlzIG5vdCBw
b3NzaWJsZSB0byBhZGQgdGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdpY2UuCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpCi0gICAgICAgIGVm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRkKGVmZmVjdC5nZXQoKSk7
Ci0KLSAgICAvLyBJZiBvYmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0aGUgZWxlbWVudCBpc24n
dCBhdHRhY2hlZCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2ggaW4gdHVybiBtZWFuIHRo
YXQgY2VydGFpbiB0eXBlcyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QKLSAgICAvLyB3b3JrICh0
aGUgTGF5b3V0T2JqZWN0IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdpbGwgbm90IGJlIGRlZmlu
ZWQpLgotICAgIGlmIChvYmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVuZGVyZXIuYWRkKG9iamVj
dCwgZWZmZWN0LmdldCgpKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVj
dHMoKQotewotICAgIG1fbGFzdEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9uYW1lZEVmZmVjdHMu
Y2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJl
bmRlcmVyLmNsZWFyKCk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKLX0KLQotdm9pZCBTVkdG
aWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3Qp
Ci17Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKHJl
ZmVyZW5jZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYw
Y2U5N2ZhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
ZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3Mg
U1ZHRmlsdGVyRWxlbWVudDsKLQotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVm
ZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKLQotICAgIFNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZp
bHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7Ci0KLSAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5n
Qm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQotICAg
IEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91
bmRpbmdCb3g7IH0KLSAgICAKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2
ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0czsgfQotICAgIHZvaWQgc2V0
UHJpbWl0aXZlVW5pdHMoU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB1bml0cykgeyBtX3ByaW1p
dGl2ZVVuaXRzID0gdW5pdHM7IH0KLQotICAgIHZvaWQgYWRkKGNvbnN0IEF0b21TdHJpbmcmIGlk
LCBSZWZQdHI8RmlsdGVyRWZmZWN0Pik7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBnZXRF
ZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxh
c3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0KLQotICAgIHZv
aWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYs
IFJlbmRlck9iamVjdCopOwotCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdFNldCYgZWZmZWN0UmVm
ZXJlbmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgYWxs
b3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KLSAgICAgICAgQVNTRVJU
KG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1f
ZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwotICAgIH0KLQotICAgIC8vIFJl
cXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3Zn
QXR0cmlidXRlQ2hhbmdlZC4KLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRl
cmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChv
YmplY3QpOyB9Ci0KLSAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwotICAgIHZvaWQgY2xlYXJSZXN1
bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOwotCi1wcml2YXRlOgotICAgIGlubGluZSB2b2lk
IGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDog
bV9idWlsdGluRWZmZWN0cy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNl
cy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0gICAgfQotCi0gICAgSGFzaE1hcDxB
dG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKLSAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsK
LSAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIg
ZWZmZWN0cywKLSAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4K
LSAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZm
ZWN0UmVmZXJlbmNlczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckVmZmVjdCo+
IG1fZWZmZWN0UmVuZGVyZXI7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZl
Y3Q7Ci0gICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgU1ZHVW5pdFR5cGVz
OjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX1VTRVJTUEFDRU9OVVNFIH07Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
R2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY3ZWJkYzFiMWUxOTFkMjIwZDY1MmJjODA3NTFkZWY1
MmMxNTFkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZH
RmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworcHVibGljOgorICAgIFNW
R0ZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFNpemUmIHJlc29sdXRpb24pCisgICAgICAgIDogRmlsdGVyR2VvbWV0cnko
ZmlsdGVyUmVnaW9uLCBzb3VyY2VJbWFnZVJlY3QpCisgICAgICAgICwgbV9hYnNvbHV0ZVRyYW5z
Zm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb24ocmVzb2x1dGlv
bikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fi
c29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBhdXRvIHJlY3RJblVzZXJTcGFjZSA9IG1fYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVj
dChyZWN0KTsKKyAgICAgICAgcmVjdEluVXNlclNwYWNlLnNjYWxlKG1fcmVzb2x1dGlvbik7Cisg
ICAgICAgIHJldHVybiByZWN0SW5Vc2VyU3BhY2U7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZl
U3VicmVnaW9uKGlucHV0cyk7CisgICAgICAgIAorLy8gICAgICAgIHJldHVybiBGbG9hdFJlY3Qg
eworLy8gICAgICAgICAgICBwcmltaXRpdmVCb3VuZHJpZXMueC52YWx1ZV9vcihzdWJyZWdpb24u
eCgpKSwKKy8vICAgICAgICAgICAgcHJpbWl0aXZlQm91bmRyaWVzLnkudmFsdWVfb3Ioc3VicmVn
aW9uLnkoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy53aWR0aC52YWx1ZV9v
cihzdWJyZWdpb24ud2lkdGgoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy5o
ZWlnaHQudmFsdWVfb3Ioc3VicmVnaW9uLmhlaWdodCgpKQorLy8gICAgICAgIH07CisgICAgfQor
ICAgIAorICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0
U2l6ZSBtX3Jlc29sdXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIuY3BwCmluZGV4IDA4NzVhNWVjZmZhOWM2N2U2MGMxYWY2NmM5MGM3
MDk1ZmU3YmQxMDQuLjhmYjBmNDAyNmNiZTM5OTA0MDMyMWYzZTJhODI5YzY4NTJkNDhiODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCkBAIC0xOTg2LDcgKzE5ODYsNyBAQCB5eXJl
ZHVjZToKICNsaW5lIDQxOSAiV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkiCiAgICAgewogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+
IHByZWRpY2F0ZUxpc3QoKHl5dnNwWygyKSAtICgyKV0uZXhwcmVzc2lvblZlY3RvcikpOwotICAg
ICAgICAoeXl2YWwuZXhwcmVzc2lvbikgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKKyAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IFhQYXRoOjpGaWx0ZXIo
c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCh5eXZzcFsoMSkgLSAoMildLmV4cHJlc3Npb24p
KSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOwogICAgIDt9CiAgICAgYnJlYWs7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIueQppbmRleCBiNzUxYTYxYmEzZjQyMjI0MGU3YzBiZTBlNGY1ZDYx
M2UyZjdhNTViLi4zNTMwOTgwYWIyYTk0ZTc2NmJkY2NiOTIwYmQ3YTllNGNkYTJjNTIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoR3JhbW1hci55CkBAIC00MTgsNyArNDE4LDcgQEAgRmlsdGVyRXhwcjoK
ICAgICBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3Qo
JDIpOwotICAgICAgICAkJCA9IG5ldyBGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
KCQxKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOworICAgICAgICAkJCA9IG5ldyBYUGF0aDo6
RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKICAgICB9CiAgICAgOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYWE5
NDU2NDE0OWQwOGU0ODk2MzQ3ZDk0ZjAzOTQ2MTU0NzI5YmY3My4uMTFlZmFjOTFkNDRjNDZlYzg1
M2M3OGM2OGVjNTQwY2FkYTVlY2MyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjks
NiArMjksOCBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVhZGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVt
b3RlSW1hZ2VCdWZmZXIuaCIKQEAgLTQ3OCw2ICs0ODAsMzUgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5k
ZXJpbmcKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOwogfQogCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVu
Y2UmJiBmaWx0ZXJSZWZlcmVuY2UsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UmJiBnZW9t
ZXRyeVJlZmVyZW5jZSwKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byBmaWx0ZXIgPSBmaWx0ZXJSZWZlcmVuY2UudGFrZUZp
bHRlcigpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBnZW9tZXRyeVJlZmVyZW5jZS50YWtlR2VvbWV0
cnkoKTsKKyAgICAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZd
KCkgeworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNh
Y2hlZEltYWdlQnVmZmVyKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZp
bHRlcmVkSW1hZ2UoZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIGlmICghaW1h
Z2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2Ut
PnNpemUoKTsKKyAgICAgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShJbnRTaXplKGltYWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9
KTsKKyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1
dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKCppbWFnZSwgRmxvYXRQb2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUo
aGFuZGxlKTsKKyAgICB9KCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUp
KTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBuYXRpdmVJbWFnZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDdkODBiNzI1ODYzOTRl
NTVlY2NjYzliZjczZjk1ZWZiMGNjOTQwNTAuLjE5MTYyNzI0MDc3Y2EyNjc1ZTkwMTQ0ZGNkZjZl
MzU0NmY0ZjczNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtNTksNiArNTksMTEgQEAgZW51
bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogfQogCituYW1lc3BhY2UgSVBDIHsKK2Ns
YXNzIEZpbHRlclJlZmVyZW5jZTsKK2NsYXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOworfQor
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU7CkBA
IC0xNDIsNiArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1
ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2
b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAg
dm9pZCBnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBn
ZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSYmLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUm
Jik+JiYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9u
dHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZk
Y2M5NzYyNzRlMzU2YWIyMmI0ZWE0ZTcxYmNmYWMwYjBkZi4uMjRiZTM2ZjYxNmJhN2YzZTgyMTgx
MWI2MjQzYTg1MmMxMjZmODZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2Fn
ZXMuaW4KQEAgLTMyLDYgKzMyLDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB7CiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpv
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmlu
ZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50
OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVm
ZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51
bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMK
KyAgICBHZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIs
IElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UgZ2VvbWV0cnkpIC0+IChXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUlt
YWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAg
IENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKICAgICBEZWxldGVBbGxGb250cygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJHZW9tZXRyeVJl
ZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZl
cmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hZjliZWFkZTFiYTA3OTBjY2RkNjlmY2JmMDM4YjhjYzQ3Nzdh
MmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2UuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsdGVyR2VvbWV0cnkuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2Ns
YXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRy
eVJlZmVyZW5jZShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2Vv
bWV0cnkpCisgICAgICAgIDogbV9nZW9tZXRyeShXVEZNb3ZlKGdlb21ldHJ5KSkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiB0YWtl
R2VvbWV0cnkoKSB7IHJldHVybiBXVEZNb3ZlKG1fZ2VvbWV0cnkpOyB9CisKKyAgICB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCisgICAgeworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmls
dGVyUmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ0N2QyNjk1NDY0NTUzMGIzMzQyNmRkNjljMTZk
ZWU1MzE0OTllNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0ZpbHRlclJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZpbHRlci5o
PgorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgRmlsdGVyUmVmZXJlbmNlIHsKK3B1YmxpYzoK
KyAgICBGaWx0ZXJSZWZlcmVuY2UoUmVmPFdlYkNvcmU6OkZpbHRlcj4mJiBmaWx0ZXIpCisgICAg
ICAgIDogbV9maWx0ZXIoV1RGTW92ZShmaWx0ZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBSZWY8
V2ViQ29yZTo6RmlsdGVyPiB0YWtlRmlsdGVyKCkgeyByZXR1cm4gV1RGTW92ZShtX2ZpbHRlcik7
IH0KKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBlbmNvZGVyIDw8IG1fZmlsdGVyLT50eXBlKCk7CisKKyAgICAgICAgaWYgKGlzPFdlYkNv
cmU6OkNTU0ZpbHRlcj4obV9maWx0ZXIuZ2V0KCkpKQorICAgICAgICAgICAgc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PFdlYkNvcmU6OkNTU0ZpbHRlcj4obV9maWx0ZXIpLT5lbmNvZGUoZW5jb2Rlcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxXZWJDb3Jl
OjpTVkdGaWx0ZXI+KG1fZmlsdGVyKS0+ZW5jb2RlKGVuY29kZXIpOworICAgIH0KKworICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCisgICAgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlcjo6VHlwZT4g
dHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGlmICgqdHlwZSA9PSBXZWJD
b3JlOjpGaWx0ZXI6OlR5cGU6OkNTUykgeworICAgICAgICAgICAgaWYgKGF1dG8gZmlsdGVyID0g
V2ViQ29yZTo6Q1NTRmlsdGVyOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgRmlsdGVyUmVmZXJlbmNlKFdURk1vdmUoKmZpbHRlcikpIH07CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gZmlsdGVy
ID0gV2ViQ29yZTo6U1ZHRmlsdGVyOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1
cm4geyBGaWx0ZXJSZWZlcmVuY2UoV1RGTW92ZSgqZmlsdGVyKSkgfTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmPFdlYkNvcmU6OkZpbHRl
cj4gbV9maWx0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGVkOTRhM2VlNTY2OGEzNDhiYzc2YWRiZDQyYjY1
MDA3MWQxYjk1MWEuLjc5OWFiNDgyYmE2Nzg3NDE4NTY0NGNkZmI2NGJmZjk5MDhmNzUwMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjg5LDcgKzI4OSw2
IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAg
ICdXZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRpYVNl
c3Npb25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUltYWdlUmVmZXJlbmNl
JywKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6
OlBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiYTIzNzllYzRlMDk3YTIzNjRhZmRhNGZiMjcz
NGY2ZmQxN2QxZjhkLi41Yzg5MDAwYTU5NmIxYWNkZjJkMzZlMzA2OGEyNTViMTg3ZDg1ZmU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNsYXNzZXMgPSB7CiAJfTsKLQlv
YmplY3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9IDU0OwogCW9iamVjdHMgPSB7CiAK
IC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCkBAIC00NjgzLDYgKzQ2ODMs
OCBAQAogCQk3MUJBQTczMTI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tNb2RlbFZpZXcuaDsgcGF0aCA9IGlvcy9XS01v
ZGVsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUJBQTczMjI1RkZDQ0JB
MDBEN0NENUQgLyogV0tNb2RlbFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS01vZGVsVmlldy5tbTsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdl
YnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9s
aWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY5MjcwQzUyRUEwMDUx
NUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMy
NCAvKiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjAzNDQ5QTI2
QTZDNDRDMDAwQTVGNTQgLyogTW9ub3RvbmljT2JqZWN0SWRlbnRpZmllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNb25vdG9uaWNPYmplY3RJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyMDM0NDlCMjZBNkM0NzYwMDBBNUY1NCAvKiBSZW5kZXJpbmdVcGRhdGVJRC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdVcGRhdGVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjI3ODAwQjI0MDhCRDdEMDA3RDM3NkIgLyogUGxhdGZvcm1SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMyMCw2ICs3MzIyLDggQEAKIAkJ
CQlCQzAzMkQ5RTEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oICovLAogCQkJCUJDMDMyRDlG
MTBGNDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmNwcCAqLywKIAkJCQlCQzAzMkRBMDEwRjQzN0Qx
MDA1OEMxNUEgLyogRW5jb2Rlci5oICovLAorCQkJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAv
KiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovLAorCQkJCTcyMDBDRjY5MjcwQzUyRUEwMDUx
NUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKIAkJCQk5QkQ4QUI0OTI1ODIwRTUyMDA1Mzg2
RjggLyogRm9udFJlZmVyZW5jZS5oICovLAogCQkJCTQxNTFFNUMzMUZCQjkwQTkwMEU0N0UyRCAv
KiBGb3JtRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCUMwQ0U3MkFDMTI0N0U3OEQwMEJDMEVDNCAv
KiBIYW5kbGVNZXNzYWdlLmggKi8sCkBAIC0xMzY1OSw3ICsxMzY2Myw2IEBACiAJCTA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFBy
b2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JX
b3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDEzMDA7CiAJ
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggMjdiY2QwMDU0NTA5NThlODAyMTIzMzBjMWU4
OTZlM2M4OTE3MzRmYi4uYzg2OTNhZTI5ZDhiYTdkZDJkNDFjY2I0MjFjMDY5YTdkZWEwNGFmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTIwMyw2ICsyMDMsMTQgQEAgcHJvdGVj
dGVkOgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAorICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBXZWJDb3JlOjpGaWx0
ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdl
b21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS0+Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICB9CisKICAg
ICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVzdGluYXRpb25Gb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAo
VU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBlYzc5MzQxMDZiMTFiMzY2Yzc4OGM1M2Jk
OWIyNDA5Nzk2OWJkOWQ5Li43NjBjNTQzYjMxZjhmNDMxNzM1MWY5ZjY3NWYzZDRjNTNmOTA5NTc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RX
cml0ZXJIYW5kbGUuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjM3LDYgKzIzOCwyNCBA
QCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Omdl
dFNoYXJlYWJsZUJpdG1hcChSZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZShoYW5kbGUpOwogfQogCitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUJ1ZmZlciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBzZW5kRGVmZXJyZWRXYWtldXBN
ZXNzYWdlSWZOZWVkZWQoKTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsK
KyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBJUEM6
OkZpbHRlclJlZmVyZW5jZSB7IFJlZjxGaWx0ZXI+IHsgY29uc3RfY2FzdDxGaWx0ZXImPihmaWx0
ZXIpIH0gfSwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShXVEZNb3ZlKGdlb21ldHJ5KSkp
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvcklt
YWdlQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCAx
X3MpOworICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3VsdCwgc2VuZFJlc3VsdCk7CisKKyAgICBp
ZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGF1dG8g
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1h
cCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJ
bWFnZSgpOworfQorCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRp
dmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFu
ZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0Zv
clN5bmNSZXBseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA4
N2FlNTIyY2JiYjI4MWZjNGE4ODA3NjViOTlmNGM5MDI1NmE5ZDI1Li40ZDdkZTRmNjU1ZjExY2Mx
YTI5MDJmMmVjZGQ3MzNlY2Q5OGQ2OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJH
UFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIklQQ1NlbWFwaG9y
ZS5oIgpAQCAtMTAyLDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0
RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlz
dEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkltYWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXImLCBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFn
ZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYp
OwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>
<flag name="commit-queue"
          id="464237"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440349</attachid>
            <date>2021-10-06 02:44:15 -0700</date>
            <delta_ts>2021-10-11 02:46:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211006024414.patch</filename>
            <type>text/plain</type>
            <size>685367</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc5OGU4MWE0MTUwYWZm
MzUzNjA2ZTc5M2M1NDA2N2VlMjJmODRlYS4uNDAzNWM0YTY0ZTdjMTc3NTc3ODEwMjQxMjk5ZjY4
OGJjZjEzYTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxOSBAQAorMjAyMS0xMC0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJbWFnZS5tbTog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2U6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVC
bGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldENvbXBvc2l0ZU9wZXJhdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZTo6c2V0SzIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLNCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBSR0JBVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmdldFBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdo
dGluZzo6ZGlmZnVzZUNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp4
Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
Ojp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0Y0NvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnNldFNoYWRvd0NvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6c2hhZG93T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnNldFNoYWRvd09wYWNpdHkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUZsb29kOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6
Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5LZXJuZWxG
YWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldEVk
Z2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3BlY3VsYXJD
b25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhY
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJp
b3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGlu
Z0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6Omxp
Z2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0b3AgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1l
cmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0b3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFy
Q29uc3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6RkVUaWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6c2V0U2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZHJhd2luZ1JlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRp
cGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVz
dWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNB
bHBoYUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRI
YXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNX
aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdo
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhh
c0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29s
b3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1
bmN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpvdXRzZXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1heFByaW1p
dGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRs
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojp0cmFuc2Zvcm1Ub0Fic29sdXRl
UmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
dXRwdXQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OkZpbHRlck91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpnZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6YWJzb2x1dGVE
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cHJpbWl0aXZlU3Vi
cmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlT
b2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29mdHdh
cmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNv
ZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmguCisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpD
U1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9z
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5w
dXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRS
ZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpi
dWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0
UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFw
cGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29t
cG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9w
U2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9s
b2d5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9s
b2d5T3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsOgorICAg
ICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmli
dXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
ZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6Om5hbWVkRWZmZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmRlY29k
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgICogeG1sL1hQYXRo
R3JhbW1hci5jcHA6CisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTA1
ICBQYXRyaWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTaG93IGNvbG9yIHNwYWNlIGZvciBjYW52YXNlcyBpbiB0aGUgR3JhcGhpY3MgdGFiIG9u
IHRoZSBvdmVydmlldyBjYXJkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OTk1ZWNlZTVjNmIyYWY1MDZhYmU5YWU3
MjI2OGQ1Y2ZkMzViZDNkLi43ZTFhYjA3NGZhNjcxZWRhMzMyYThlNDdmZjM4NTk3Njc3ZmM5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTEwLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6Rmls
dGVyUmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVy
KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2Rl
Y2xhcmVkKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTA1
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0aG9yaXphdGlv
biBoZWFkZXIgbG9zdCBvbiAzMHggcmVkaXJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDFlZmY2YWVi
MzliYTAyYTczNWYyMTRjMzRmZDcwYzEwMzNlOTNmMTAuLjEzNmRiYTRiYTgyNTE5ODZkM2Q2MDM3
NmI4MTRkMDQ4NTUyNTY1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ3LDE0ICsyMDQ3LDM1IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXN1bHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxv
b2RTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVMaWdodGluZ1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRU1lcmdlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0
Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94
LmNwcApAQCAtMjYzNiw3ICsyNjU3LDYgQEAgc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2FjaGUuY3Bw
CiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAot
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5p
bWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBmMzBmZGFiYTA0YzI2MDY3ZjE2
NDhmMjc0MjcyZDVlMmFlMWQzZDRkLi5mZTk1NzhiMmQ4MmQzZjEyOGQyNWU4MzBkMWIxOTk4MTg0
YTNlNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM5OCw3ICszOTgsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENv
cmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3BsYXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MTRjM2Q3MGMyY2IxM2RmYzFjMjBjYjI2
MDg1MjY3MGY0ZWQ3ZTVhLi5kODUyYjRkMzM2MmYzOWNiNDBiM2E4ZWQ4ZDU0NWQxOTQwNGJjMjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkJMDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNW
R1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4MTY2OEQyMTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVy
LmggKi87IH07CiAJCTA4MTY2OERBMTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2
NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovOyB9OwogCQkw
ODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFBQThEOTExMTEyMzdFMDAy
QUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi87IH07Ci0JCTA4MUVCRjNCMEZEMzRGNDEw
MERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oICovOyB9OwogCQkwODNEQUVBNzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oICovOyB9OwogCQkwODNEQUVBOTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmggKi87IH07CiAJCTA4NDU2ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0
NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc3Niw4ICs3NzUsNiBAQAogCQkyQUVG
NkZERDI2RTdFQ0NGMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRUY2RkNFMjZFNzFGMkQwMDMyNkQwMiAv
KiBDU1NOdW1lcmljVHlwZS5oICovOyB9OwogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyog
UmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAq
LzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUy
QzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwotCQky
Qzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDODU2NTMzMjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovOyB9OwotCQkyQ0FBNEEzQTI0QkUx
OEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovOyB9OwogCQkyRDA2MjE0
NDFEQTYzOUI2MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDIxREE2Mzk4
ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQw
NjIxNDUxREE2MzlCQTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MzFEQTYz
OTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJMkQw
NjIxNEQxREE2M0E4QjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0OTFEQTYzQTc5MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCAqLzsgfTsKQEAgLTIyODIsNiArMjI3OSwxNSBAQAog
CQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYg
LyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJC
Mzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMENGNTkyNzA5QUJGQjAwNTE1QzI0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZp
bHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMDBDRjVBMjcwOUFDMTEwMDUxNUMyNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3Vs
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDOTBB
M0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAv
KiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIxQ0E4RjUyNzAzOTQ1NjAwQzBERDY1IC8qIEZpbHRlclJlcHJlc2Vu
dGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzIwMENGNUQyNzA5QURDRTAwNTE1QzI0IC8qIEZpbHRlck91dHB1dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NzhENDMyNkZFOURFNzAwRkQy
QzU2IC8qIEZpbHRlck91dHB1dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNE
ODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMENGNjgyNzBDNDc4NzAwNTE1QzI0
IC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIwMENGNjcyNzBDNDcxNDAwNTE1QzI0IC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDBD
RjZCMjcwQ0Q2MDkwMDUxNUMyNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NG
aWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjAwQ0Y2QzI3MENENjE5MDA1MTVDMjQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNC
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VC
aXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI3MDIsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4NyAv
KiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAq
LzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ3MTIwQzlB
RDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0NUU3MkY4MEZEMjYxRUUw
MEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLzsgfTsKLQkJ
ODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAq
LzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUEx
MjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwogCQk4NDczMEQ3
OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTI3MTMsNyArMjcxNyw3IEBACiAJCTg0NzMw
RDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVM
aWdodGluZy5oICovOyB9OwogCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjYx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgfTsKIAkJODQ3MzBEODUxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5o
ICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMwRDg5MTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFy
TGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkUx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwogCQk4NDczMEQ4RDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmgg
Ki87IH07CkBAIC02MDcyLDggKzYwNzYsNiBAQAogCQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUg
LyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyog
U1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYz
ODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3
NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjIyMCw4
ICs2MjIyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFk
T25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50
UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQw
QzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3
ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzI5LDEwICs3MzI5LDYgQEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8q
IFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEy
QTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2
NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRB
MzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1l
c3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYz
QTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNDc2LDEwICsxMDQ3MiwyMCBAQAogCQk3
MUY2RUU0MTI1NUVERjlDMDBGQzRDNUIgLyogR3JpZFRyYWNrU2l6ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmlkVHJhY2tTaXplLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBw
b3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1z
dXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgx
RjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMDBDRjU3MjcwNzhDNDIwMDUxNUMyNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJHZW9tZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAwQ0Y1RTI3MEFEMTM3MDA1MTVDMjQgLyogRmlsdGVyT3V0cHV0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlck91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMDBDRjVGMjcwQkIwMTkwMDUxNUMyNCAvKiBTb3VyY2VHcmFwaGljQ29yZUlt
YWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU291cmNlR3Jh
cGhpY0NvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjEy
NzBCQkRBODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIwMENGNjIyNzBCQkRGQjAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENGNjMyNzBCQzJDODAwNTE1
QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRl
clJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMENG
NjQyNzBCQzJDODAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMDBDRjY2MjcwQzMyMUQwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3Bl
cnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFj
a2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1h
Z2VCaXRtYXBCYWNraW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFDQThGNTI3MDM5NDU2MDBDMERENjUgLyog
RmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVwcmVzZW50YXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAw
NTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFt
ZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0MkFDOTUyNTc1OEZFMDAw
NUE5Q0YxIC8qIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1p
bk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDUwNCw5ICsxMDUxMCwz
NSBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1NiAvKiBGaWx0ZXJPdXRwdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
OTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVy
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNENkEyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZH
RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyog
Q1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Zp
bHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZEMjcwM0RDM0Ew
MDNDNUFBRSAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZFMjcwM0RG
RDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzAyNzA1NzUwNDAwM0M1QUFFIC8q
IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VHcmFw
aGljU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MTI3
MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2Fy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1l
cmdlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJnZVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzUyNzA1ODVCODAwM0M1QUFFIC8q
IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbG9yTWF0
cml4U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NjI3
MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdCMjcwNUIyQzkwMDND
NUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
R2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3RTI3
MDYzMzZCMDAzQzVBQUUgLyogRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkE4M0Q3RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVUaWxlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MTI3MDY0NkUyMDAzQzVBQUUgLyogRkVMaWdo
dGluZ1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgyMjcwNjUxMUIwMDNDNUFB
RSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3
YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODMyNzA2Njc0QzAw
M0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQx
QyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1MTgs
NiArMTA1NTAsOCBAQAogCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNB
RDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRp
bmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0
ZXJSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRl
clJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNF
WFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQ1MSw5ICsxMTQ4NSw2
IEBACiAJCTg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8q
IFNWR1BhdGhTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0
aFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVE
MDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmls
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVk
aWFRdWVyeUxpc3RFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YVF1ZXJ5TGlzdEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdG
MjM4N0FEOEEwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFR
dWVyeUxpc3RFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RF
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTQyNiw4ICsxOTQ1Nyw5
IEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3
MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywK
KwkJCQk3MjAwQ0Y2MTI3MEJCREE4MDA1MTVDMjQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgg
Ki8sCisJCQkJNzIwMENGNjIyNzBCQkRGQjAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFn
ZS5tbSAqLywKKwkJCQk3MjAwQ0Y1RjI3MEJCMDE5MDA1MTVDMjQgLyogU291cmNlR3JhcGhpY0Nv
cmVJbWFnZS5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gY29yZWltYWdlOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTIzMDMwLDYgKzIzMDYyLDMyIEBACiAJCQlwYXRoID0gIm1vZGVs
LWVsZW1lbnQiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYy
NzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q4MjI3MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAz
QzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4
NjAwM0M1QUFFIC8qIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
N0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovLAor
CQkJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkJNzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdh
cmUuY3BwICovLAorCQkJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xv
Z3lTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zm
c2V0U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRp
bGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVy
YnVsZW5jZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MjAwQ0Y2MzI3MEJDMkM4MDA1MTVDMjQgLyog
RmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwICovLAorCQkJCTcyMDBDRjY0MjcwQkMyQzgwMDUxNUMy
NCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oICovLAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDND
NUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0
MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRo
ID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzAxMUYz
QzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NUZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjUwNzgsNiArMjUxMzYsNyBAQAogCQlBNzVF
OEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3
YXJlICovLAogCQkJCUExRTExNTQzMTMwMTVDM0QwMDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwICovLAogCQkJCTg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRT
b3VyY2UuaCAqLywKIAkJCQlBNzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAg
Ki8sCkBAIC0yNTExNCwxNSArMjUxNzMsMjMgQEAKIAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5
QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVy
YnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVs
ZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywK
KwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUgLyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4
M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0
QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAw
NDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAotCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3
MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAw
QTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJBODNENjYyNzAzRDY2
RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzIwMENGNjYyNzBDMzIxRDAw
NTE1QzI0IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLywKKwkJCQk3MkE4M0Q4MzI3MDY2NzRDMDAz
QzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTQ5RUNFQjY2MTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8sCisJCQkJNzIwMENGNUUyNzBBRDEzNzAwNTE1QzI0
IC8qIEZpbHRlck91dHB1dC5jcHAgKi8sCisJCQkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8q
IEZpbHRlck91dHB1dC5oICovLAorCQkJCTcyMDBDRjY3MjcwQzQ3MTQwMDUxNUMyNCAvKiBGaWx0
ZXJSZWZlcmVuY2UuaCAqLywKKwkJCQk3MjFDQThGNTI3MDM5NDU2MDBDMERENjUgLyogRmlsdGVy
UmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmls
dGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVy
UmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNl
LmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRBQzhDIC8qIFBvaW50TGlnaHRTb3VyY2Uu
Y3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNl
LmggKi8sCkBAIC0yNjg4NCwxMCArMjY5NTEsOSBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1
NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVC
MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIz
OTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8sCi0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3
RDc5IC8qIFNWR0ZpbHRlci5oICovLAotCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBT
VkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKLQkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyog
U1ZHRmlsdGVyQnVpbGRlci5oICovLAorCQkJCTcyQTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBT
VkdGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0
ZXIuaCAqLywKKwkJCQk3MjAwQ0Y1NzI3MDc4QzQyMDA1MTVDMjQgLyogU1ZHRmlsdGVyR2VvbWV0
cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0yOTk4Miw4ICszMDA0OCw4IEBACiAJCQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4
OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAqLywKIAkJCQk5MzkyRjE0RjBBRDE4NjIz
MDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLAogCQkJCTkzOTJGMTRCMEFEMTg2MUIwMDY5
MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAv
KiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NG
aWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNw
cCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmggKi8sCiAJ
CQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8sCiAJCQkJRTRB
OEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJCQlFNEE4RDIx
NDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMyMDYyLDYgKzMyMTI4
LDcgQEAKIAkJCQlBQTIxRUNDRDBBQkYwRkM2MDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzlFMTQxQkIyMTVCQjAwQ0FBOEJGIC8qIENTU0N1
c3RvbVByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDc2QkRCMURGQ0FDMDMw
MDY5MEUyMyAvKiBDU1NEZWZlcnJlZFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMENG
NkIyNzBDRDYwOTAwNTE1QzI0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJC
MEM1QjgxN0JCRDYyOTAwM0QzNjc3IC8qIENTU0ZpbHRlckltYWdlVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNjRCNEQ2MENCNDI5OEEwMDVGMkI2MiAvKiBDU1NGb250RmFjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVs
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjU2MiwxMiArMzI2MjksMTYgQEAKIAkJCQk5MzU0MjQz
MDI3MDNDQjg2MDA1Q0E3MkMgLyogRmlsZVN5c3RlbVN0b3JhZ2VDb25uZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyMDBDRjU5MjcwOUFCRkIwMDUxNUMyNCAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZl
Y3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkNBQTRBM0EyNEJFMThCNzAw
OURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjAwQ0Y1QTI3MDlBQzExMDA1MTVDMjQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyMDBDRjY1MjcwQzA2MTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9w
ZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjVEMjcwOUFEQ0Uw
MDUxNUMyNCAvKiBGaWx0ZXJPdXRwdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDBDRjY4Mjcw
QzQ3ODcwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
MDBDRjVDMjcwOUFEM0EwMDUxNUMyNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzIwMENGNUIyNzA5QUNCNjAwNTE1QzI0IC8qIEZpbHRlclJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRU
YWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0QyREQyNTBGRDgyODAwMDIwN0FB
IC8qIEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTQ0Miw4ICsz
NTUxMyw3IEBACiAJCQkJQjIyMjdBMDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExpZ2h0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDYwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0ZFVGlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA5MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk4
NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzIwMENGNkMyNzBDRDYxOTAwNTE1QzI0IC8qIFNWR0ZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3QTEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3guaCBpbiBIZWFkZXJzICov
LApAQCAtMzYyMDYsNyArMzYyNzYsNiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyog
UHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRl
cyA9IHsKLQkJCQlEZWZhdWx0QnVpbGRTeXN0ZW1UeXBlRm9yV29ya3NwYWNlID0gT3JpZ2luYWw7
CiAJCQkJTGFzdFN3aWZ0VXBkYXRlQ2hlY2sgPSAwNzAwOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sg
PSAxMTQwOwogCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggOGNmOTA5YWU5ZTUzNzI0YjkxZGI0YWNlMTRhZTI4
NTcxZGQ5NTUyNi4uMzczNmI0ZjkyODIxMjRlOTExOGUyYmE0MzdmMTJkY2VhMjM5OTE2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRy
eS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpAQCAtMTE2LDI2ICsxMTcsMjMgQEAgUmVm
UHRyPEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBpbnRvIEltYWdl
QnVmZmVyLgogICAgIC8vIEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVyZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgYXV0
byByZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRv
IHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIGlm
ICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiAKICAgICBh
dXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OwogICAgIHRleHR1cmUtPmNv
bnRleHQoKS5kcmF3SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOwogCi0gICAgYXV0byBjc3NGaWx0
ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2Uo
V1RGTW92ZSh0ZXh0dXJlKSk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3QoaW1h
Z2VSZWN0KTsKLSAgICBjc3NGaWx0ZXItPnNldEZpbHRlclJlZ2lvbihpbWFnZVJlY3QpOwotICAg
IGlmICghY3NzRmlsdGVyLT5idWlsZChyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0
ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pKQorICAgIGF1dG8gZmlsdGVyID0gQ1NTRmlsdGVy
OjpjcmVhdGUocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7Cisg
ICAgaWYgKCFmaWx0ZXIpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwotICAg
IGNzc0ZpbHRlci0+YXBwbHkoKTsKIAotICAgIGF1dG8qIG91dHB1dCA9IGNzc0ZpbHRlci0+b3V0
cHV0KCk7Ci0gICAgaWYgKCFvdXRwdXQpCi0gICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFn
ZSgpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBtYWtlVW5pcXVlPEZpbHRlckdlb21ldHJ5PihpbWFn
ZVJlY3QsIGltYWdlUmVjdCk7CisgICAgaWYgKGF1dG8gZmlsdGVyZWRJbWFnZSA9IHRleHR1cmUt
PmZpbHRlcmVkSW1hZ2UoKmZpbHRlciwgV1RGTW92ZShnZW9tZXRyeSkpKQorICAgICAgICByZXR1
cm4gZmlsdGVyZWRJbWFnZTsKIAotICAgIHJldHVybiBvdXRwdXQtPmNvcHlJbWFnZSgpOworICAg
IHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogfQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFs
dWU6OmZpbHRlckltYWdlQ2hhbmdlZChjb25zdCBJbnRSZWN0JikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRleCBh
NWRkMjhiNzM3YmM4MzVlODZlYTNlZjIwMmE3NGU0NmFiMjIyMTgxLi44OGEzMTAyNzc5ODJmMzI3
ZDI0Mzk0NmVlZWY1MjZlNWY3MjA5NzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCkBAIC0xMzgsNiArMTM5LDE5IEBA
IHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAgUmVmUHRy
PEltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBzdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpIG92ZXJyaWRlCisgICAgeworICAgICAgICBh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKTsKKyAgICAgICAgaWYgKCFiYWNr
ZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBjb25z
dF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworCisgICAgICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgICAgIHN0
ZDo6dGllKGltYWdlQnVmZmVyLCBzdGQ6Omlnbm9yZSkgPSBmaWx0ZXIuYXBwbHkodGhpcywgV1RG
TW92ZShnZW9tZXRyeSkpOworICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXIgPyBpbWFnZUJ1ZmZl
ci0+Y29weUltYWdlKCkgOiBudWxscHRyOworICAgIH0KKwogICAgIHZvaWQgZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
Q3JlYXRlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA4NWUzZDI0YmViMGMyMDRjMzI1YTI2NTZkOWNhNTQw
NDA4NjZmYjcyLi5jZTg5ZjRiZDNhZGY3OGUyMjU4OTFlZDY3MzczYzk5ZjBjOTY5MmYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtNjA5LDYgKzYxMSwxMyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmco
V1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImIGZp
bHRlciwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2Vv
bWV0cnk+JiYgZ2VvbWV0cnkpCit7CisgICAgYXV0byBbZmlsdGVyZEltYWdlLCBpbWFnZVJlY3Rd
ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgaWYg
KGZpbHRlcmRJbWFnZSkKKyAgICAgICAgZHJhd0ltYWdlQnVmZmVyKCpmaWx0ZXJkSW1hZ2UsIGlt
YWdlUmVjdCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIHsKICAgICBQYXRoIHBhdGg7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDZh
NGFlNWRhZDVhN2IyYTlkYzQyMzlmY2E5YTQ2YjcxNzgxMDlmM2EuLmQ1NzNiMjE1MjI4MjU2MmVl
NDI2MTJkMjY5ZjE1ZmFiZDJkYWY4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC04NSw2ICs4NSw4IEBAIHR5cGVkZWYg
dW5zaWduZWQgY2hhciBVSW50ODsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOworY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CiBjbGFzcyBG
bG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU7CkBAIC00NDIsNiArNDQ0LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0ZpbHRlckltYWdlQnVmZmVyKEZpbHRlciYsIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBiMWU4ZDNiMDRhYjI2MDUxMzI4ODZhMGE4MDMw
NTA4YTEzMTYxMjgwLi5hZWQ1NTMyMTRmMjJhZGNlMTE3YWQ3YjBjYTI3ZjhlZmIwZjA4ZDgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAg
LTQyLDYgKzQyLDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQ7CiBzdHJ1Y3QgSXRlbUJ1ZmZlckhh
bmRsZTsKIH0KIAorY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CisKIGNsYXNz
IEltYWdlQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdlQnVmZmVyLCBX
VEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEltYWdl
QnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24g
YWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtMTA2LDYgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZlB0cjxJbWFn
ZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVyJiwgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSA9IDA7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2Ug
YnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhp
cyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBjb3B5
UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJz
Q29jb2EubW0KaW5kZXggZDRmYTNjNGJmYWQzNGFhZjMwOTNhOWYwMjQ4NmJiNzI3Zjk4ZDRhYS4u
ZDQ1YWIzM2M0NDA4ZWQ2MzYwNzQ2MTRkNDZmNDU5ZGE2ZjUxZDYzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnND
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9Q
bGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBDU1NG
aWx0ZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjAwOCkuCisvLyBGSVhNRTogU2hvdWxkIHNoYXJlIHRoZXNlIHZhbHVlcyB3aXRoIEZpbHRlcjo6
YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4K
IHN0YXRpYyBjb25zdCBkb3VibGUgc2VwaWFGdWxsQ29uc3RhbnRzWzNdWzNdID0gewogICAgIHsg
MC4zOTMsIDAuNzY5LCAwLjE4OSB9LAogICAgIHsgMC4zNDksIDAuNjg2LCAwLjE2OCB9LApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0
NGFmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0qIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9y
dCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KLQotT0JKQ19DTEFTUyBDSUltYWdlOwotT0JKQ19D
TEFTUyBDSUZpbHRlcjsKLU9CSkNfQ0xBU1MgQ0lDb250ZXh0OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZFQ29sb3JNYXRyaXg7Ci1jbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOwot
Y2xhc3MgU291cmNlR3JhcGhpYzsKLQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLSAgICBS
ZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKLSAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkg
Y29uc3QgZmluYWw7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKLSAgICBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpOwotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKLSAgICB2b2lkIHJlbmRl
clRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wg
Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgCi0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7Ci0gICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0
cml4JiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJh
bnNmZXImLCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwotICAgIAotICAgIFJlZlB0cjxJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1ZmZlcjsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9vdXRwdXRJbWFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2Uu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjODZmYzRjMjNhZjk1NDU1NTdhNTU4
YzhjNDUxZTE5YThhMzhmYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICswLDAg
QEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0q
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0K
LSNpbXBvcnQgIkZFQ29sb3JNYXRyaXguaCIKLSNpbXBvcnQgIkZFQ29tcG9uZW50VHJhbnNmZXIu
aCIKLSNpbXBvcnQgIkZpbHRlci5oIgotI2ltcG9ydCAiRmlsdGVyRWZmZWN0LmgiCi0jaW1wb3J0
ICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCi0jaW1wb3J0IDxDb3JlSW1h
Z2UvQ0lDb250ZXh0Lmg+Ci0jaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KLSNpbXBvcnQg
PENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgaWYgKGNhblJlbmRlclVzaW5nQ0lGaWx0
ZXJzKGxhc3RFZmZlY3QpKQotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZT4oKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmV0YWluUHRy
PENJQ29udGV4dD4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnNoYXJlZENJQ29udGV4
dCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDSUNvbnRleHQ+PiBj
aUNvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRXaXRoT3B0aW9uczogQHsga0NJQ29udGV4dFdv
cmtpbmdDb2xvclNwYWNlOiAoX19icmlkZ2UgaWQpQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUo
a0NHQ29sb3JTcGFjZVNSR0IpfV07Ci0gICAgcmV0dXJuIGNpQ29udGV4dDsKLX0KLQotc3RhdGlj
IGJvb2wgaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGNvbnN0IEZFQ29t
cG9uZW50VHJhbnNmZXImIGVmZmVjdCkKLXsKLSAgICBhdXRvIGlzTnVsbE9yTGluZWFyID0gW10g
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAgIHJl
dHVybiBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0g
ICAgICAgICAgICB8fCBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7Ci0gICAgfTsKLSAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXIoZWZmZWN0LnJlZEZ1bmN0
aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpCi0gICAgICAg
ICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5ibHVlRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5l
YXIoZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZm
ZWN0KQotewotICAgIC8vIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUgb25jZSB0
aGV5IGFyZSBpbXBsZW1lbnRlZAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNz
VHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbG9yTWF0cml4OiB7Ci0gICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xvck1h
dHJpeD4oZWZmZWN0KS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
VU5LTk9XTjoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QToKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToK
LSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpc051bGxPckxpbmVhckNv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZm
ZWN0KSk7Ci0KLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1c2VM
aWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFwOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1c3Np
YW5CbHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZTo6YXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAgICBtX291
dHB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycyhsYXN0RWZmZWN0KTsKLSAgICBpZiAoIW1fb3V0
cHV0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxhc3RF
ZmZlY3QpOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgVmVj
dG9yPFJldGFpblB0cjxDSUltYWdlPj4gaW5wdXRJbWFnZXM7Ci0gICAgCi0gICAgZm9yIChhdXRv
IGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGF1dG8gaW5wdXRJbWFnZSA9
IGNvbm5lY3RDSUZpbHRlcnMoKmluKTsKLSAgICAgICAgaWYgKCFpbnB1dEltYWdlKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dElt
YWdlKTsKLSAgICB9Ci0gICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0g
ICAgZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgCi0gICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgc3dpdGNoIChl
ZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhp
Yyhkb3duY2FzdDxTb3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29sb3JNYXRyaXg6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29sb3JNYXRy
aXgoZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAgICAgcmV0dXJu
IGltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihkb3duY2FzdDxGRUNvbXBvbmVudFRyYW5zZmVy
PihlZmZlY3QpLCBpbnB1dEltYWdlcyk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRob3Nl
IGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28gdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZh
bGlkIENJSW1hZ2UKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1
c2VMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFw
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1
c3NpYW5CbHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRp
bGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmV0YWluUHRy
PENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJjZUdy
YXBoaWMoU291cmNlR3JhcGhpYyYgZWZmZWN0KQotewotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghc291cmNlSW1h
Z2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChpczxJT1N1cmZhY2VJ
bWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdlKSkKLSAgICAgICAgcmV0dXJuIFtDSUltYWdlIGltYWdl
V2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdl
KS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKLSAgICAKLSAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VX
aXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5hdGl2ZUltYWdlKCktPnBsYXRmb3JtSW1hZ2Uo
KS5nZXQoKV07Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6aW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmIGVmZmVj
dCwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQotewotICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0KDApOwotCi0gICAgYXV0byB2YWx1ZXMg
PSBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGVmZmVjdC52YWx1ZXMoKSk7Ci0gICAg
ZmxvYXQgY29tcG9uZW50c1s5XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsK
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICAgICAgRkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURToKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6IC8vIEZJWE1FOiBBZGQgTHVtaW5hbmNlIHRvIEFscGhh
IEltcGxlbWVudGF0aW9uCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAKLSAg
ICBhdXRvICpjb2xvck1hdHJpeEZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJ
Q29sb3JNYXRyaXgiXTsKLSAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFn
ZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZl
Y3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1swXSBZOmNv
bXBvbmVudHNbMV0gWjpjb21wb25lbnRzWzJdIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07
Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6Y29tcG9uZW50c1szXSBZOmNvbXBvbmVudHNbNF0gWjpjb21wb25lbnRzWzVdIFc6MF0gZm9y
S2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1s2XSBZOmNvbXBvbmVudHNbN10gWjpj
b21wb25lbnRzWzhdIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAg
ICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MV0gZm9yS2V5OkAiaW5wdXRBVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6
MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4
RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6dmFsdWVz
WzFdICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNbM11dICBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsK
LSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
WDp2YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBaOnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1dICBmb3JL
ZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZhbHVlc1sx
Ml0gVzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9y
TWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTVdIFk6
dmFsdWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1dEFWZWN0
b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVzWzldICBaOnZhbHVlc1sxNF0gVzp2YWx1ZXNbMTld
XSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
ICAgIHJldHVybiBjb2xvck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZTsKLX0KLQotUmV0YWluUHRy
PENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29tcG9u
ZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0LCBWZWN0b3I8UmV0
YWluUHRyPENJSW1hZ2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGUgcmVzdCBvZiBGRUNvbXBvbmVudFRyYW5zZmVyIGZ1bmN0aW9ucwotICAgIEFTU0VSVChp
c051bGxPckxpbmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oZWZmZWN0KSk7Ci0KLSAgICBh
dXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLSAgICBhdXRvIGZpbHRlciA9IFtD
SUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JQb2x5bm9taWFsIl07Ci0gICAgCi0gICAg
W2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKLSAgICAKLSAgICBhdXRvIHNldENvZWZmaWNpZW50cyA9IFsmXSAoTlNTdHJpbmcgKmtleSwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsKLSAgICAgICAgaWYg
KGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUikKLSAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmZ1bmN0aW9uLmlu
dGVyY2VwdCBZOmZ1bmN0aW9uLnNsb3BlIFo6MCBXOjBdIGZvcktleTprZXldOwotICAgIH07Ci0g
ICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRSZWRDb2VmZmljaWVudHMiLCBlZmZlY3QucmVkRnVu
Y3Rpb24oKSk7Ci0gICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRHcmVlbkNvZWZmaWNpZW50cyIs
IGVmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0Qmx1
ZUNvZWZmaWNpZW50cyIsIGVmZmVjdC5ibHVlRnVuY3Rpb24oKSk7Ci0gICAgc2V0Q29lZmZpY2ll
bnRzKEAiaW5wdXRBbHBoYUNvZWZmaWNpZW50cyIsIGVmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwot
ICAgIAotICAgIHJldHVybiBmaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLWJvb2wgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVj
dCYgZWZmZWN0KQotewotICAgIGlmICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoZWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6IGVmZmVj
dC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nKCppbikgfHwgIWNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKCppbikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlciog
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyaW5nICIgPDwgdGhpcyA8PCAi
IHVzaW5nIENvcmVJbWFnZVxuIik7Ci0gICAgcmV0dXJuIG1fb3V0cHV0SW1hZ2VCdWZmZXIuZ2V0
KCk7Ci19Ci0gICAgCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJU
b0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAgICBGbG9hdFNpemUg
Y2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5hYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFj
ZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVyKCkuZmls
dGVyU2NhbGUoKSwgbGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpC
R1JBOCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlQnVmZmVyKSB7Ci0gICAgICAgIGNsZWFyUmVz
dWx0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbc2hhcmVkQ0lDb250ZXh0KCku
Z2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBtX291dHB1dElt
YWdlQnVmZmVyLT5zdXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdChsYXN0RWZmZWN0
KSBjb2xvclNwYWNlOmxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLnBsYXRmb3JtQ29sb3JT
cGFjZSgpXTsKLX0KLSAgICAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6ZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAotewotICAg
IEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIGRlc3RTaXplLnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdFNp
emUpOwotICAgIHJldHVybiBkZXN0UmVjdDsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6Y2xlYXJSZXN1bHQoKQotewotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBu
dWxscHRyOwotICAgIG1fb3V0cHV0SW1hZ2UgPSBudWxscHRyOwotfQotCi1GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKQotICAgIDog
RmlsdGVyRWZmZWN0UmVuZGVyZXIoKQotewotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYWJlNTYxYjcwMWJjYTA1YjI0NGU1MjVlMTc4ZWMyNGY2ZGRkMWY4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJl
c3VsdENvcmVJbWFnZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAiRmlsdGVyUmVz
dWx0LmgiCisKK09CSkNfQ0xBU1MgQ0lJbWFnZTsKK09CSkNfQ0xBU1MgQ0lDb250ZXh0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlclJlc3VsdENvcmVJbWFnZSA6IHB1Ymxp
YyBGaWx0ZXJSZXN1bHQgeworcHVibGljOgorICAgIHVzaW5nIEZpbHRlclJlc3VsdDo6RmlsdGVy
UmVzdWx0OworCisgICAgdm9pZCBzZXRJbWFnZShSZXRhaW5QdHI8Q0lJbWFnZT4mJik7CisgICAg
Citwcml2YXRlOgorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMo
KSBvdmVycmlkZTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKwor
ICAgIFJldGFpblB0cjxDSUltYWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
bV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UpCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlclJlc3VsdCYgcmVzdWx0KSB7
IHJldHVybiByZXN1bHQucmVuZGVyaW5nTW9kZSgpID09IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0Zp
bHRlclJlc3VsdENvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI3OTJiMWFi
ZTk3MGQ4Y2RmODlhZjg1YTU4ZDU0ZDVhYjgwMGJiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1h
Z2UubW0KQEAgLTAsMCArMSw1NSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBh
cmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIkZpbHRlclJlc3VsdENvcmVJbWFnZS5oIgorCisjaWYgVVNFKENP
UkVfSU1BR0UpCisKKyNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KKyNpbXBvcnQgPENv
cmVJbWFnZS9Db3JlSW1hZ2UuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRmlsdGVyUmVzdWx0Q29yZUltYWdlOjpzZXRJbWFn
ZShSZXRhaW5QdHI8Q0lJbWFnZT4mJiBpbWFnZSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UpOworICAg
IG1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKK30KKworUmVmUHRyPEltYWdlQnVmZmVyPiYgRmls
dGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKCkKK3sKKyAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlcjsKK30KKworSW1hZ2VCdWZmZXIqIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6
aW1hZ2VCdWZmZXIoKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lZjhhODBjYmZkNjcyODM2ZGY4OTk1Y2YzOWQ0M2RhNWJkODU1MGI2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWlt
YWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSw1NiBAQAorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdXJjZUdyYXBoaWMu
aCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3VyY2VHcmFwaGljOjphcHBseUNv
cmVJbWFnZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChzb3VyY2VJbWFn
ZSk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlOworICAgIGlmIChpczxJT1N1cmZhY2VJbWFnZUJ1ZmZl
cj4oKnNvdXJjZUltYWdlKSkKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1
cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFj
ZSgpLnN1cmZhY2UoKV07CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IFtDSUltYWdlIGltYWdl
V2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdl
KCkuZ2V0KCldOworCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGRvd25jYXN0PEZpbHRlclJlc3VsdENvcmVJbWFnZT4ocmVzdWx0KS5zZXRJbWFnZShX
VEZNb3ZlKGltYWdlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDI2MTEwY2Rm
YjBiYjZjZjQ5MDQ1ODM4Nzc4N2FjMTBmYTE3MWNmMTguLmRlNjYwNjhjZGQwYTljYjU3NGMwYWNi
YmM4YzhjNjBhNjc3NGZmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0xMDcs
MTUgKzEwNywxOCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoRmlsdGVyUmVzdWx0cyYgcmVzdWx0cywgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywg
SW1hZ2VCdWZmZXIqKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyKCkuY3JlYXRlRmlsdGVy
UmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMyLDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPj0gOCkgewog
ICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpLCBzb3Vy
Y2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBzb3Vy
Y2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gcmVz
dWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwg
d2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+
IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
Pihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKICAgICBwbGF0Zm9ybUFwcGx5TkVPTihy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VC
QW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlv
blBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworCisgICAgcmV0dXJu
IHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04o
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGY5YmYxOTFlZTYzODlmMDFkOWI1YTIxMDI1M2NkMDBi
MDMwMTg1NDAuLjg0MjNjYmFkYTI1MTdhOTE2MTk4YzIxZmYzNTk4NDc5ZTJjMDBlYmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTIyNyw2ICsyMjcsMTQg
QEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QKICAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdl
LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCit2
b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIq
LCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpCit7CisvLyAgICBpZiAobV9kZWxl
Z2F0ZSkKKy8vICAgICAgICBtX2RlbGVnYXRlLT5yZWNvcmRJbWFnZUJ1ZmZlclVzZSgqc291cmNl
SW1hZ2UpOworLy8gICAgcmVjb3JkRmlsdGVyVXNlKGZpbHRlcik7CisvLyAgICBhcHBlbmQ8RHJh
d0ZpbHRlckltYWdlQnVmZmVyPihmaWx0ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZ2VvbWV0cnkpOwor
fQorCiB2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsKICAgICBhcHBlbmQ8U2F2ZT4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGE1YWQzNjZkNGRjZDk5ZDg0M2Uw
YmJhMDY5NWVkN2QyNDUzNzJiYmUuLjhhODgxYWZjY2NmYWI1NjE1YzhkOTg0ZDNlNTE3OGMyZWZj
ODc3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMTI4LDYg
KzEyOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogCisgICAgdm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpIGZpbmFs
OworCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpIGZpbmFsOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UG9pbnQmKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmlu
ZGV4IGNkZWFhNjVlNjcwNGNkNjdmYjBhN2FmZTlhZjE4ZmJiNjJjMmNlZDkuLjc3YmM2M2IyMzY1
Y2VkM2RkZTAyYmU4YTZmYTIyZWNjYjkyMWNlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtNSw2ICs1LDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSw2NCArMjYs
NDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUJsZW5kLmgiCiAKLSNpbmNs
dWRlICJGRUJsZW5kTkVPTi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQotICAgICwgbV9tb2RlKG1vZGUpCitS
ZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBtb2RlKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCi1SZWY8RkVCbGVuZD4gRkVCbGVu
ZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKK0ZFQmxlbmQ6OkZFQmxl
bmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVCbGVuZCkKKyAg
ICAsIG1fbW9kZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmls
dGVyLCBtb2RlKSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBt
b2RlKQogewotICAgIGlmIChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fbW9kZSA9IG1vZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV9tb2RlLCBtb2RlKSAhPSBtX21vZGU7CiB9CiAKLSNpZiAhSEFWRShBUk1fTkVPTl9J
TlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVy
UmVzdWx0KiBGRUJsZW5kOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0
VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0
KDEpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0
SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRl
eHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFz
dCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0
byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1
cm4gcmVzdWx0OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4sIGluMiB9LCBudWxscHRyKTsKIH0KLSNlbmRpZgogCi1UZXh0U3RyZWFtJiBG
RUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8
PCAiIG1vZGU9XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6
IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9t
b2RlKSkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNj
b3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcw
ZTg0MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjEwMDAzMmY4ZTQ5OTIyMDJh
MjMyMzNhYmE5YzU1MzE3MjZhY2M1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwzMiArMjUsMjcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgc3RhdGljIFJl
ZjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1v
ZGUpOwogCiBwcml2YXRlOgorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKKwogICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5R2VuZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hh
ciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVy
JiwgQmxlbmRNb2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFj
NGI2Yzk2OGE1NC4uYWE1N2E2ZWY5YWM2YWRhMzQwNTIwOTNjMjEzMDhiN2E3NjhhMTg4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyOCArMjQs
MjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1h
dHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBt
X3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJp
eDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQog
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2
YWx1ZXMpKSk7CiB9CiAKLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFs
dWVzKQorRkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwg
VmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbG9y
TWF0cml4KQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVl
cykpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeChmaWx0ZXIsIHR5
cGUsIFdURk1vdmUodmFsdWVzKSkpOwogfQogCiBib29sIEZFQ29sb3JNYXRyaXg6OnNldFR5cGUo
Q29sb3JNYXRyaXhUeXBlIHR5cGUpCkBAIC02MywyNTggKzU2LDQzIEBAIGJvb2wgRkVDb2xvck1h
dHJpeDo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwg
ZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQot
ewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIg
PSBibHVlOwotICAgIGZsb2F0IGEgPSBhbHBoYTsKLQotICAgIHJlZCAgICAgPSB2YWx1ZXNbIDBd
ICogciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSAr
IHZhbHVlc1sgNF0gKiAyNTU7Ci0gICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVz
WyA2XSAqIGcgKyB2YWx1ZXMgWzddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAq
IDI1NTsKLSAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZh
bHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OwotICAgIGFs
cGhhICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIg
KyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Ci19Ci0KLWlubGluZSB2b2lkIHNh
dHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGNvbnN0IGZsb2F0KiBjb21wb25lbnRzKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAg
IGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVl
OwotCi0gICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0g
KyBiICogY29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBn
ICogY29tcG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICog
Y29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07Ci19
Ci0KLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9u
IGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwg
ZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQotewotICAgIGFscGhhID0g
MC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9
IDA7Ci0gICAgZ3JlZW4gPSAwOwotICAgIGJsdWUgPSAwOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBw
bHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUp
Ci17Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkg
KiA0KTsKLSAgICAKLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYKSB7Ci0gICAgICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEg
NHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xv
ck1hdHJpeCA1eDQgbWF0cml4Ci0gICAgICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8g
bm9uLXZJbWFnZSBjb2RlLgotICAgICAgICBpZiAodmFsdWVzWzRdICE9IDAgfHwgdmFsdWVzWzld
ICE9IDAgfHwgdmFsdWVzWzE0XSAhPSAwIHx8IHZhbHVlc1sxOV0gIT0gMCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7
Ci0gICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIHNyYy5o
ZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNp
emUud2lkdGgoKSAqIDQ7Ci0gICAgc3JjLmRhdGEgPSBkYXRhOwotICAgIAotICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIGRl
c3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gYnVm
ZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBkZXN0LmRhdGEgPSBkYXRhOwotCi0gICAgc3dpdGNo
IChmaWx0ZXJUeXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0g
ICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlz
b3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVd
ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKLQotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sxN10gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikp
LAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3Jj
LCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAg
ICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICBkaXZpc29yLAotICAgICAgICB9OwotICAgICAgICB2SW1h
Z2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBu
dWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Ci0gICAgICAg
IGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZigwLjcxNTQgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAw
LAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
ZigwLjA3MjEgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFn
ZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51
bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBjb21wb25lbnRzWzBdID0gKDAuMjEz
ICsgMC43ODcgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICog
dmFsdWUpOworICAgIGNvbXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAg
ICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50
c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNV0gPSAoMC4w
NzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMg
KiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwor
ICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKIH0KLSNlbmRpZgog
Ci10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLXZvaWQgZWZmZWN0VHlwZShV
aW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVz
LCBJbnRTaXplIGJ1ZmZlclNpemUpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIGZs
b2F0IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklY
X1RZUEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgIGVsc2UgaWYgKGZpbHRlclR5
cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwot
Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoZWZmZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0
ZXJUeXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUpKQotICAg
ICAgICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShidWZmZXJTaXplKTsKLSNlbmRp
ZgotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBp
eGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7
Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhLCB2YWx1ZXMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4
ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsK
LSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQp
OwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0
ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBn
cmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAg
IGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAg
ICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAz
KTsKLSAgICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9CisgICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlG
bG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4
MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUg
KiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNp
bkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcy
ICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICog
MC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NI
dWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAt
IGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29tcG9uZW50c1s2XSA9IDAu
MjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25lbnRzWzdd
ID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVu
dHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7CiB9CiAKLXZv
aWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCog
RkVDb2xvck1hdHJpeDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIGlmIChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5k
cmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAg
ICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFy
cmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25z
ID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9y
bWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5z
aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBp
eGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5
cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhl
bEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURp
bWVuc2lvbnMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBp
eGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0
Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCkBA
IC0zMzksMTAgKzExNyw5IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1UZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0
U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZUNvbG9yTWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHlwZSA8
PCAiXCIiOwogICAgIGlmICghbV92YWx1ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHRzIDw8ICIg
dmFsdWVzPVwiIjsKQEAgLTM1Nyw5ICsxMzQsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvbgog
ICAgICAgICB0cyA8PCAiXCIiOwogICAgIH0KICAgICB0cyA8PCAiXVxuIjsKLSAgICAKLSAgICBU
ZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3Qo
MCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcwM2Fj
NGRiNTUyNGVmYTRjMTIzZi4uZjYxMjEzZmU2MGZlMGI0Y2MzZDJjZGVmOWI2NDJmNDZkYjRkMTI4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIzLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBD
b2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmls
dGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0YXRpYyBSZWY8
RkVDb2xvck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsK
IAogICAgIENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAg
ICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC00Niw1NCArNDUsMjIgQEAgcHVi
bGljOgogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzOyB9CiAgICAgYm9vbCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCi0g
ICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Cisg
ICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25l
bnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29t
cG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwogCiBwcml2YXRlOgotICAg
IEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYp
OworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwog
CiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNv
bG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMs
IEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1f
dHlwZTsKICAgICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRz
LCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2
YWx1ZSk7Ci0gICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAg
IGNvbXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzNdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcx
NSArIDAuMjg1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVu
dHNbOF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xv
ck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywg
ZmxvYXQgdmFsdWUpCi17Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAv
IDE4MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0g
ICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIx
MzsKLSAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAq
IDAuNzE1OwotICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2lu
SHVlICogMC45Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMg
KyBzaW5IdWUgKiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAw
LjI4NSArIHNpbkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1
ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0g
Y29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43
MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0g
PSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZp
bHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBl
KCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApp
bmRleCA4NDdlYTU4ZjVmOWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi5iZTkzMjk2M2Fj
MDRjMTc5MmIyMzY1MWFkNGJiNDM4NjZmOWVmMTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NCwxOCArMjUsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVu
dFRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbXBvbmVudFRyYW5z
ZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAgICBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Y3Rpb24pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb25lbnRUcmFuc2Zl
cikKK1JlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgYWxwaGFGdW5jdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVu
dFRyYW5zZmVyKHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhh
RnVuY3Rpb24pKTsKK30KKworRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zl
cihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBhbHBoYUZ1bmN0aW9uKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9uZW50
VHJhbnNmZXIpCiAgICAgLCBtX3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQogICAgICwgbV9ncmVl
bkZ1bmN0aW9uKGdyZWVuRnVuY3Rpb24pCiAgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rp
b24pCkBAIC00MywxMTkgKzQzLDE1IEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50
VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAK
LVJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9u
LAotICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVu
Y3Rpb24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCi17Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQorRmlsdGVyUmVzdWx0KiBGRUNv
bXBvbmVudFRyYW5zZmVyOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0
VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1
bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAg
cmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAt
IDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJs
ZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAg
ZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkp
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Cisg
ICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFz
dCgpOwogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExv
b2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5z
ZmVyRnVuY3Rpb24pCi17Ci0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0
cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVl
cy5zaXplKCk7Ci0gICAgaWYgKG4gPCAxKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBr
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBz
dGQ6Om1pbihrLCBuIC0gMSk7Ci0gICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVl
c1trXTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7
Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQot
fQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNm
ZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsK
LSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAg
ICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12
b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24p
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBS
Q1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28g
cHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJh
bnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRy
YW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6
Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBM
b29rdXBUYWJsZSBncmVlblRhYmxlOwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBM
b29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUs
IGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBp
eGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2ln
bmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5s
ZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0
aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0
YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsK
LSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZz
ZXQgKyAyXV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0
YVtwaXhlbE9mZnNldCArIDNdXTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxl
JiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFU
YWJsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9
IGFscGhhVGFibGVbaV0gPSBpOwotCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKiko
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJh
bnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUs
ICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlk
ZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAg
ICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9U
QUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5T
RkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAg
ICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1
bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVu
Y3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0
aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZl
Y3RbbV9yZWRGdW5jdGlvbi50eXBlXShyZWRUYWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2Fs
bEVmZmVjdFttX2dyZWVuRnVuY3Rpb24udHlwZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9u
KTsKLSAgICBjYWxsRWZmZWN0W21fYmx1ZUZ1bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVl
RnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFi
bGUsIG1fYWxwaGFGdW5jdGlvbik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IGluIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUpCkBAIC0yMDksMTAgKzEwNSw5
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3Ry
ZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3Ry
ZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwgIltmZUNvbXBvbmVudFRyYW5zZmVyIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiXG4iOwogICAgIHsK
ICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIDIpOwpAQCAt
MjIxLDkgKzExNiw2IEBAIFRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VuCiAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAie2JsdWU6ICIgPDwgbV9ibHVlRnVuY3Rpb24gPDwgIn1cbiI7CiAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAie2FscGhhOiAiIDw8IG1fYWxwaGFGdW5jdGlvbiA8PCAifV1cbiI7CiAg
ICAgfQotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAg
IGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4
IDJiNTg2ZGVmN2ZiNDJhMzdiMmUxMjNlZGE4NzExOWM0ZWIzNDhhNTEuLjc2MTA2OWRiODllNDM3
NzRhODc2ODM2OWU5NTU2ZTY3MTYxNDRhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5o
CkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
Myw5ICsyNCw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBlbnVtIENvbXBvbmVudFRyYW5zZmVyVHlwZSB7CkBAIC01Myw4ICs1MSw3IEBAIHN0cnVjdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKIAogY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlciA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb25l
bnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYWxwaGFGdW5jKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNy
ZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
cmVkRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmN0aW9uOyB9CiAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmVl
bkZ1bmN0aW9uOyB9CkBAIC02MiwyNCArNTksMTUgQEAgcHVibGljOgogICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5j
dGlvbjsgfQogCiBwcml2YXRlOgotICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7Ci0KLSAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvbmVudFRyYW5zZmVyIjsgfQorICAgIEZFQ29t
cG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rp
b24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbik7CiAKLSAgICB1c2luZyBMb29rdXBUYWJs
ZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CiAKLSAgICBz
dGF0aWMgdm9pZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlVGFidWxhclRh
YmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVMaW5lYXJU
YWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAg
ICBzdGF0aWMgdm9pZCBjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVy
UmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMo
TG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFi
bGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIEZpbHRlclJlc3Vs
dCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX3JlZEZ1bmN0aW9uOwogICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ncmVlbkZ1bmN0aW9uOwpAQCAtODgsNyArNzYsMyBAQCBw
cml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCi0gICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBl
ZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpDb21wb25lbnRUcmFuc2ZlcjsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcAppbmRleCA4YjU5ZTY2ZGU5ZmU4ZDYzOTE2Y2JlNWNlNmRkNDAzOGZhNGNi
MmE4Li5hYzIyY2ZjZGM0NWJlMmExNzIyZDA0MmMyNDZjYThhM2QxMjFjNDk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0
LDE3ICsyNSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9zaXRl
LmgiCiAKLSNpbmNsdWRlICJGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRl
KQotICAgICwgbV90eXBlKHR5cGUpCitSZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVh
dGUoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVD
b21wb3NpdGUoY29tcG9zaXRlT3BlcmF0b3IsIGsxLCBrMiwgazMsIGs0KSk7Cit9CisKK0ZFQ29t
cG9zaXRlOjpGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKKyAgICA6IEZpbHRlckVm
ZmVjdChUeXBlOjpGRUNvbXBvc2l0ZSkKKyAgICAsIG1fY29tcG9zaXRlT3BlcmF0b3IoY29tcG9z
aXRlT3BlcmF0b3IpCiAgICAgLCBtX2sxKGsxKQogICAgICwgbV9rMihrMikKICAgICAsIG1fazMo
azMpCkBAIC00MiwyNjQgKzQ2LDYyIEBAIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXIm
IGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvCiB7CiB9CiAK
LVJlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29u
c3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb3NpdGUo
ZmlsdGVyLCB0eXBlLCBrMSwgazIsIGszLCBrNCkpOwotfQotCi1ib29sIEZFQ29tcG9zaXRlOjpz
ZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQorYm9vbCBGRUNvbXBvc2l0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0b3IoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVy
YXRvcikKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fY29tcG9zaXRlT3BlcmF0b3IsIGNvbXBvc2l0ZU9wZXJhdG9yKSAhPSBtX2NvbXBv
c2l0ZU9wZXJhdG9yOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMShmbG9hdCBrMSkKIHsK
LSAgICBpZiAobV9rMSA9PSBrMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazEgPSBr
MTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2sxLCBrMSkg
IT0gbV9rMTsKIH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzIoZmxvYXQgazIpCiB7Ci0gICAg
aWYgKG1fazIgPT0gazIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2syID0gazI7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMiwgazIpICE9IG1f
azI7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEszKGZsb2F0IGszKQogewotICAgIGlmICht
X2szID09IGszKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMyA9IGszOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazMsIGszKSAhPSBtX2szOwog
fQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKIHsKLSAgICBpZiAobV9rNCA9
PSBrNCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazQgPSBrNDsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2s0LCBrNCkgIT0gbV9rNDsKIH0KIAot
dm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkKK0Zsb2F0UmVj
dCBGRUNvbXBvc2l0ZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBpZiAobV90
eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19CisgICAgLy8gRm9yIElu
IGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YK
KyAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50
IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVy
YXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5tYXhE
cmF3aW5nUmVjdChpbnB1dHMsIGlucHV0c1sxXS0+ZHJhd2luZ1JlY3QoKSk7CiAgICAgCi1zdGF0
aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCi17Ci0gICAgdW5zaWduZWQgY2hhciBi
dWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1
bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlsh
ISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGlu
dCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
LXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEp
Ci0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBz
Y2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+
PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNp
Z25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAq
IGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9
IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwot
ICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8v
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2Yg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGlu
ZwotLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBv
cHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBi
MSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24s
IGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBp
ZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAg
ICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxl
bmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAg
ICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQg
PSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0
ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVz
dWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAg
ICAgKytzb3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29m
dHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQotewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6
Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dl
ckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjpt
aW4oMC4wZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYm
ICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1p
dCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0g
ICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJh
eUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21w
dXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQot
ICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5h
dGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0
aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQotfQotI2VuZGlm
Ci0KLWlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGlu
dCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBo
ZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseS4KLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0gICAgQVNTRVJUKCEobGVuZ3RoICYgMHgzKSk7Ci0gICAgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotI2Vsc2UKLSAgICBhcml0aG1ldGljU29mdHdhcmUoc291cmNl
LmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNl
bmRpZgotfQotCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKLSAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0
ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29s
dXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAg
ICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAgICAgIC8vIEFyaXRobWV0aWMgbWF5
IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4n
dAotICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCi0gICAgICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBv
ZiBib3RoIGlucHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKKyAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgaWYg
KG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykK
KyAgICAgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMpOwor
ICAgIAorICAgIHJldHVybiBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0KGlucHV0cywgZ2VvbWV0
cnkpOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmls
dGVyUmVzdWx0KiBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QKIHsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1
dEVmZmVjdCgxKTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOwogCi0gICAgaWYgKG1f
dHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QURy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwotICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaW4yLT5j
b3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdEJEcmF3
aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLQotICAgICAgICBwbGF0Zm9ybUFyaXRo
bWV0aWNTb2Z0d2FyZSgqc291cmNlUGl4ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBt
X2sxLCBtX2syLCBtX2szLCBtX2s0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1h
Z2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW4g
PSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAg
ICAKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0p
KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4y
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0lOOiB7Ci0gICAgICAgIC8vIEFwcGxpZXMgb25seSB0byB0aGUgaW50ZXJzZWN0ZWQg
cmVnaW9uLgotICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoYWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0g
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBk
ZXN0aW5hdGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRS
ZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRS
ZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyMi0+bG9naWNh
bFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VC
dWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
IHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxwdHIpOwogfQog
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGRUNvbXBvc2l0ZU9wZXJhdG9yJiBjb21wb3NpdGVPcGVy
YXRvcikKIHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzd2l0Y2ggKGNvbXBvc2l0ZU9wZXJh
dG9yKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICB0
cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMzI4LDE4ICsxMzAsMTMgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZF
Q29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbXBvc2l0
ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb21wb3NpdGUiOwotICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX3R5cGUgPDwgIlwiIjsKLSAgICBpZiAo
bV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgdHMgPDwgIiBv
cGVyYXRpb249XCIiIDw8IG1fY29tcG9zaXRlT3BlcmF0b3IgPDwgIlwiIjsKKyAgICBpZiAobV9j
b21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQogICAg
ICAgICB0cyA8PCAiIGsxPVwiIiA8PCBtX2sxIDw8ICJcIiBrMj1cIiIgPDwgbV9rMiA8PCAiXCIg
azM9XCIiIDw8IG1fazMgPDwgIlwiIGs0PVwiIiA8PCBtX2s0IDw8ICJcIiI7CiAgICAgdHMgPDwg
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhl
MWY3MTA3YjRiOTY4YzU4ZTNhMzdjMzJhZTJmNzZhZWEwYzMuLjk5ZjI5MDVkY2ZiYzA0YzhmYzFl
YTU4ZjFjMGE1ZjFiODllYjQzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEyICsyNCw5IEBACiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSB7CitlbnVtIEZFQ29tcG9zaXRlT3BlcmF0b3IgewogICAgIEZFQ09N
UE9TSVRFX09QRVJBVE9SX1VOS05PV04gICAgPSAwLCAKICAgICBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVkVSICAgICAgID0gMSwKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiAgICAgICAgID0g
MiwKQEAgLTQxLDEwICszOSwxMCBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBj
bGFzcyBGRUNvbXBvc2l0ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8
RkVDb21wb3NpdGU+IGNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIGJvb2wgc2V0T3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdGlvblR5cGUpOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yOyB9CisgICAg
Ym9vbCBzZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgIGZs
b2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMTsgfQogICAgIGJvb2wgc2V0SzEoZmxvYXQpOwpA
QCAtNTgsMzAgKzU2LDIwIEBAIHB1YmxpYzoKICAgICBmbG9hdCBrNCgpIGNvbnN0IHsgcmV0dXJu
IG1fazQ7IH0KICAgICBib29sIHNldEs0KGZsb2F0KTsKIAotcHJvdGVjdGVkOgotICAgIGJvb2wg
cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBtX3R5
cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQotCiBwcml2YXRlOgotICAg
IEZFQ29tcG9zaXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgRkVDb21wb3NpdGUoRkVDb21wb3NpdGVPcGVy
YXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCiAgICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7
IH0KIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisgICAgYm9vbCBhcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0jaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0
aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgs
IGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHBs
YXRmb3JtQXJpdGhtZXRpY05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpOwotI2VuZGlmCi0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBl
IG1fdHlwZTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAg
ICAgZmxvYXQgbV9rMTsKICAgICBmbG9hdCBtX2syOwogICAgIGZsb2F0IG1fazM7CkBAIC04OSw0
ICs3NywzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguY3BwCmluZGV4IDc1YjJlN2M2ZWExM2MyYzFjMmY4ZjY1ZDNkYjRlZDVj
YzNhZmRhOGYuLjFiZGRlOTUwZDE4M2ZmY2M4NWQ5MDNjOTcwOTkzZTVmYjZiOWI0MDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpv
bHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI0LDE4ICsyNSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9s
dmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1
dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVy
LCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJp
YXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwK
LSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxw
aGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBk
aXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wg
cHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNv
ciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2Vy
dmVBbHBoYSwga2VybmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9s
dmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
LCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEs
IGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChU
eXBlOjpGRUNvbnZvbHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAg
ICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTQgKzUx
LDYgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwg
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdo
dCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4Ojpj
cmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxv
YXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5n
dGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBr
ZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxV
bml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQog
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUpCiB7CiAgICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwpAQCAtMTIwLDMx
OCArMTE0LDIwIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29s
IHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50
YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBp
bWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAg
ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8
Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAg
fCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUg
ICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVn
aW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxj
dWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAg
RXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAg
ICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBU
YXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0
YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAu
Li4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNh
c2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQg
KHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBh
bmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkg
dGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIK
LQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVn
aW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAx
LCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6
IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAx
MCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1v
c3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBj
YWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAg
Rm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxs
cyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFn
ZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2Vy
IHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1
bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNv
bW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhl
bSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxk
IG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWdu
ZWQgY2hhciBtYXggPSAyNTUpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7Ci0gICAg
cmV0dXJuIGNoYW5uZWw7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihpbnB1dHMpOwogfQogCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdB
WVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4
ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMpCitGaWx0ZXJSZXN1
bHQqIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQg
Y2hhciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1
ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAz
OyArK2kpCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRv
dGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0gICAgaWYgKHByZXNlcnZl
QWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVs
cy5pdGVtKHBpeGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKLX0KLQotI2lmIENPTVBJTEVSKE1TVkMp
Ci0vLyBJbmNvcnJlY3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBvZiBzdGFjayBpbiB8dG90YWxz
fCBkdWUgdG8gfHByZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgotCi0vLyBPbmx5IGZvciByZWdp
b24gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQs
IGludCB5RW5kKQotewotICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4
ZWxzCi0gICAgaW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53
aWR0aCArIG1fdGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwotICAgIGludCBrZXJuZWxJbmNyZWFzZSA9
IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNpemUud2lkdGgo
KSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRz
Ci0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07Ci0K
LSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0gICAgLy8gU2tpcCB0aGUg
Zmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCknIGxpbmVzCi0gICAgcGl4ZWwgKz0gKGNsaXBCb3R0
b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLSAgICBpbnQg
c3RhcnRLZXJuZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNs
aXBSaWdodCArIDEpICogNCk7Ci0KLSAgICBmb3IgKGludCB5ID0geUVuZCArIDE7IHkgPiB5U3Rh
cnQ7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0t
eCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1h
dHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJu
ZWxQaXhlbDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwor
ICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxh
c3QoKTsKIAotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sx
XSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVz
ZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgaWYg
KGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsK
LSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBh
aW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAg
ICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1
ZXMpCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQ
aXhlbDsKLSAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlm
ICghLS13aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJ
bmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERl
c3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZp
c29yLCBwYWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9
IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFy
dEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50
IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEu
d2lkdGggJiYgeSA+PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICByZXR1
cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotCi0gICAgc3dpdGNoIChtX2Vk
Z2VNb2RlKSB7Ci0gICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAg
ICAgICAgICAgIHggPSAwOwotICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0
aCkKLSAgICAgICAgICAgIHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOwotICAgICAgICBpZiAo
eSA8IDApCi0gICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGlu
Z0RhdGEuaGVpZ2h0KQotICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwot
ICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNh
c2UgRURHRU1PREVfV1JBUDoKLSAgICAgICAgd2hpbGUgKHggPCAwKQotICAgICAgICAgICAgeCAr
PSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwot
ICAgICAgICB3aGlsZSAoeSA8IDApCi0gICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWln
aHQ7Ci0gICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5
ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICB9Ci19Ci0KLS8vIEZvciBvdGhl
ciByZWdpb25zIHRoYW4gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9p
ZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4
ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQg
PSB5MiAtIHkxOwotICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVs
UGl4ZWxYID0geDEgLSBtX3RhcmdldE9mZnNldC54KCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4
ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEg
LSBtX3RhcmdldE9mZnNldC55KCk7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEu
d2lkdGggLSB3aWR0aCkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNv
bXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6
IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICBmb3Ig
KGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0
aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0
YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndp
ZHRoKCk7Ci0KLSAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNb
MV0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJl
c2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAg
ICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIGludCBw
aXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2Vy
bmVsUGl4ZWxZKTsKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS5pdGVtKHBpeGVsSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBh
aW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2Vy
bmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0ocGl4ZWxJbmRleCArIDMpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKLSAg
ICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0
aCkgewotICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVs
WDsKLSAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFs
cGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBp
eGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOwot
ICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgfQotICAgICAgICBwaXhl
bCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQ
aXhlbFg7Ci0gICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgfQotfQotCi0jaWYgQ09N
UElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2Vu
ZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBC
b3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50
ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1
bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1
ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0g
ICAgZWxzZQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBB
bHRob3VnaCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBp
bXBsZW1lbnRlZCBoZXJlCi0gICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNv
IGltcGxlbWVudGVkIGhlcmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0
U2V0T3V0ZXJQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAg
ZWxzZQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEs
IHkxLCB4MiwgeTIpOwotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLQotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotCi0gICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VQaXhlbEFycmF5OwotICAgIGlmIChtX3By
ZXNlcnZlQWxwaGEpCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGVs
c2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVm
ZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNl
UGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBh
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCku
ZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewotICAg
ICAgICAqc291cmNlUGl4ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAot
ICAgICAgICBwYWludFNpemUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAot
ICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAgIG5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxN
YXRyaXgpCi0gICAgfTsKLQotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAg
ICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgo
KTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6
ZS5oZWlnaHQoKTsKLQotICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7
Ci0gICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAg
ICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0
ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKLSAgICAg
ICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAgICBpbnQgY2h1
bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0KLSAgICAgICAg
V29ya1F1ZXVlOjpjb25jdXJyZW50QXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVfdCBpbmRleCkg
ewotICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0gICAgICAgICAg
ICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0
b20pOwotCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlw
Qm90dG9tLCAwLCBjbGlwQm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNl
dC54KCkgKyAxOwotICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAg
ICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFp
bnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsK
LSAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwg
cGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAg
ICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCks
IG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNsaXBSaWdodCA8IHBh
aW50U2l6ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNs
aXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRv
bSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwog
fQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RWRnZU1vZGVUeXBlJiB0eXBlKQpAQCAtNDUzLDEwICsxNDksOSBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQog
ICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJl
c2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
dHMgPDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJcIiAiCiAgICAgICAgPDwgImtl
cm5lbE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJcIiAiCiAgICAgICAgPDwgImRp
dmlzb3I9XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgpAQCAtNDY1LDkgKzE2MCw2IEBAIFRleHRT
dHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0CiAgICAgICAgPDwgImVkZ2VNb2RlPVwiIiA8PCBtX2VkZ2VNb2Rl
IDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5p
dExlbmd0aCA8PCAiXCIgIgogICAgICAgIDw8ICJwcmVzZXJ2ZUFscGhhPVwiIiA8PCBtX3ByZXNl
cnZlQWxwaGEgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaAppbmRleCA2N2Q0YzY1NjdmY2U2YjI3ZWU1YWI4OTVhNmUxZTUwMDU0ZTEzZGJhLi4xYTY5
NWI0ZDkyMWYyNjg2NmYwZGEzZDEyYjljZjJiNjBlMzk3NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJj
emVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjUsNiBAQAogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsOSArMzgsNyBAQCBlbnVtIEVkZ2VNb2RlVHlwZSB7CiAKIGNsYXNzIEZFQ29u
dm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwKLSAg
ICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNv
bnN0IEZsb2F0UG9pbnQmLAotICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYp
OworICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKGNvbnN0IEludFNpemUm
IGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0
YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpOwogCiAgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxT
aXplOyB9CiAgICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmKTsKQEAgLTY3LDQx
ICs2NSwxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCiBw
cml2YXRlOgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0Owot
ICAgICAgICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsK
LSAgICB9OwotCi0gICAgRkVDb252b2x2ZU1hdHJpeChGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwg
ZmxvYXQsIGZsb2F0LAotICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUs
IGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgRkVD
b252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNv
bnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb252b2x2ZU1hdHJpeCI7IH0KIAotICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KLQotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAg
QUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBp
bnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFM
V0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5
KTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1
dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAgdm9pZCBm
YXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg
aW50IHkyKTsKLQotICAgIC8vIFdyYXBwZXIgZnVuY3Rpb25zCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBj
bGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGlu
dCB5Mik7Ci0KLSAgICAvLyBQYXJhbGxlbGl6YXRpb24gcGFydHMKLSAgICBzdGF0aWMgY29uc3Qg
aW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRh
dGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7CiAgICAgZmxvYXQgbV9k
aXZpc29yOwpAQCAtMTE0LDQgKzg4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCBlZWIxNzI4ZGIzNWU4
YWMzMDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5Li5hMzlkZGRhZDQ2ZjM5OTFjYTliYjIxYmUxZTIz
ZmZiZjcwNjBjYWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywzNiArMjgsMjIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGln
aHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0Nv
bG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0
aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6RGlmZnVz
ZUxpZ2h0aW5nKQorUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3Jl
YXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRURpZmZ1c2VMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQs
IGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7
CiB9CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZF
RGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBzb3Vy
Y2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFu
dCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNv
dXJjZSksIFR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
V1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1
c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQotYm9vbCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKLXsKLSAgICBpZiAobV9kaWZmdXNl
Q29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9kaWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVRleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0
CitUZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbZmVEaWZmdXNlTGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3VyZmFj
ZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJkaWZmdXNl
Q29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgImtl
cm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExlbmd0aFggPDwgIiwgIiA8PCBtX2tl
cm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuaAppbmRleCBkZjYxMTRkMGZiOGUyZjNlMTEyOGI4NDI2MTVlNDc1MTNhMGRk
ZGMzLi45NjAwNjIwNDlhMjJmZTVhODVjYmZlYmIzNDllY2YxYWJkNDE3OTcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
ZmZ1c2VMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDIxICsyNiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIExpZ2h0U291cmNlOwotCiBjbGFzcyBGRURpZmZ1c2VMaWdodGluZyA6IHB1YmxpYyBGRUxp
Z2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVh
dGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRURpZmZ1c2VMaWdodGluZygpOwotCi0g
ICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3Rh
bnQ7IH0KLSAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7Ci0KLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxp
Z2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiBwcml2YXRlOgotICAgIEZFRGlmZnVzZUxp
Z2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3Im
LCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYp
OworICAgIAorICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAiRkVEaWZmdXNlTGlnaHRpbmciOyB9CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIx
NmM1NjNmYTEuLjNhNzVjYzU5NTNmZDYxOGViMTVhMzIyYzMyZDk2ZTQ0MjM1ZThiMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNCwxMzIgKzI1LDU0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlz
cGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6
RGlzcGxhY2VtZW50TWFwKQotICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0
b3IpCi0gICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1f
c2NhbGUoc2NhbGUpCitSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpj
cmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQogeworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2Vs
ZWN0b3IsIHNjYWxlKSk7CiB9CiAKLVJlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1l
bnRNYXA6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5l
bFNlbGVjdG9yLAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxv
YXQgc2NhbGUpCitGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRGlzcGxh
Y2VtZW50TWFwKQorICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0b3IpCisg
ICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1fc2NhbGUo
c2NhbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoZmls
dGVyLCB4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwogfQogCiBi
b29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcikKIHsKLSAgICBpZiAobV94Q2hhbm5lbFNlbGVj
dG9yID09IHhDaGFubmVsU2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3hD
aGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNlbGVjdG9yOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1feENoYW5uZWxTZWxlY3RvciwgeENoYW5uZWxTZWxlY3Rv
cikgIT0gbV94Q2hhbm5lbFNlbGVjdG9yOwogfQogCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvcikKIHsKLSAgICBpZiAobV95Q2hhbm5lbFNlbGVjdG9yID09IHlDaGFubmVsU2VsZWN0b3Ip
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3lDaGFubmVsU2VsZWN0b3IgPSB5Q2hhbm5l
bFNlbGVjdG9yOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
eUNoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3RvcikgIT0gbV95Q2hhbm5lbFNlbGVjdG9y
OwogfQogCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKIHsK
LSAgICBpZiAobV9zY2FsZSA9PSBzY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
c2NhbGUgPSBzY2FsZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX3NjYWxlLCBzY2FsZSkgIT0gbV9zY2FsZTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1h
cDo6c2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKQorRmxv
YXRSZWN0IEZFRGlzcGxhY2VtZW50TWFwOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewot
ICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBv
bmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQotICAgIC8vIGFuZCBkb2VzIG5v
dCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBt
dXN0IHJlbWFpbiBpbiBpdHMKLSAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNlLgotICAgIC8vIFRo
ZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNw
bGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRD
b2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkpOworICAgIHJldHVy
biBnZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzKTsKIH0KIAotdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGlu
LCBjb25zdCBpbnQgaW5kZXgpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqKSBjb25zdAogewotICAgIC8vIERvIG5vdCB0cmFuc2Zvcm0gdGhlIGZpcnN0IHByaW1p
dGl2ZSBpbnB1dCwgYXMgcGVyIHRoZSBzcGVjLgotICAgIGlmIChpbmRleCkKLSAgICAgICAgaW4t
PnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLX0KLQot
c3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNp
Z25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1Bl
clBpeGVsID0gNDsKLSAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7
Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17
Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVj
dCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9y
ICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBD
SEFOTkVMX1VOS05PV04pOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
YXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdS
ZWN0KTsKLQotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhl
IGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBw
ZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8g
ZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2lu
Z1JlY3QpOwotICAgIAotICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBk
aXNwbGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAg
ICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9z
Y2FsZSwgbV9zY2FsZSB9KTsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRo
KCkgLyAyNTUuMDsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8g
MjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAw
LjU7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41
OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2su
dGFrZUxhc3QoKTsKICAgICAKLSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5l
bEluZGV4KCk7Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgp
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBpbnQgcm93Qnl0ZXMgPSBwYWludFNpemUu
d2lkdGgoKSAqIDQ7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQo
KTsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7Ci0K
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0g
ICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25J
bmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAg
ICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3Bs
YWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVs
WSkgKyBzY2FsZWRPZmZzZXRZKTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9u
UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFy
cmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWlu
dFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9
IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihp
bnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRl
cykpOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwg
eyBpbiwgaW4yIH0sIG51bGxwdHIpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKQEAgLTE3
NCwxNyArOTcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW2ZlRGlzcGxhY2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNjYWxlPVwi
IiA8PCBtX3NjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIiIDw8
IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06
OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEp
LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJu
IHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDczZTI2NmJj
ODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uMzljZTU0OWNmMTllYWMwZGE1MjhmNjJiZjMwMjQ4M2Q2
MTUxMGQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM3LDcgKzM2LDcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3MgRkVEaXNw
bGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUo
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBl
IHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5
cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rvcjsg
fQogICAgIGJvb2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBl
KTsKQEAgLTQ4LDIyICs0NywyMSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7
IHJldHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lk
IHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNv
bnN0IGludCkgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAoRmls
dGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVudE1hcChD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUg
eUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVsSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFu
bmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAKICAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxh
Y2VtZW50TWFwIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW50IHhDaGFubmVs
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0gICAgaW50
IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5
cGUgbV94Q2hhbm5lbFNlbGVjdG9yOwogICAgIENoYW5uZWxTZWxlY3RvclR5cGUgbV95Q2hhbm5l
bFNlbGVjdG9yOwpAQCAtNzEsNCArNjksMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggNWNlN2JlM2E0NzFiNDdiOGRkNTQy
NmQ5NjViYmZlNzg5ZjZiYmRkOC4uMjA0YzE2NDQ2MTFmOWFhNzBlYWM2NzhiMzYzNDk3YzZkZjk5
MzJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw5OCArMjQsNDkgQEAKICNpbmNsdWRlICJDb2xv
clNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgCi1GRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwg
ZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYg
c2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmls
dGVyLCBUeXBlOjpEcm9wU2hhZG93KQotICAgICwgbV9zdGRYKHN0ZFgpCi0gICAgLCBtX3N0ZFko
c3RkWSkKLSAgICAsIG1fZHgoZHgpCi0gICAgLCBtX2R5KGR5KQotICAgICwgbV9zaGFkb3dDb2xv
cihzaGFkb3dDb2xvcikKLSAgICAsIG1fc2hhZG93T3BhY2l0eShzaGFkb3dPcGFjaXR5KQotewot
fQogCi1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRl
ciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xv
ciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitSZWY8RkVEcm9wU2hhZG93PiBG
RURyb3BTaGFkb3c6OmNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwgZHksIHNo
YWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVE
cm9wU2hhZG93KHN0ZFgsIHN0ZFksIGR4LCBkeSwgY29sb3IsIG9wYWNpdHkpKTsKIH0KIAotdm9p
ZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0ZFRHJvcFNoYWRv
dzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBk
eSwgY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0
KFR5cGU6OkZFRHJvcFNoYWRvdykKKyAgICAsIG1fc3RkWChzdGRYKQorICAgICwgbV9zdGRZKHN0
ZFkpCisgICAgLCBtX2R4KGR4KQorICAgICwgbV9keShkeSkKKyAgICAsIG1fY29sb3IoY29sb3Ip
CisgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZl
Y3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0
UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAgICBhYnNvbHV0ZU9mZnNldFBhaW50UmVj
dC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsK
LSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0K
LSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVs
U2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBo
YWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1
biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5m
bGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZm
ZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
YWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEcm9wU2hhZG93OjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0CiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRl
cigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNj
YWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJl
Y3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3
aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3Vs
dENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKLSAgICByZXN1bHRDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAg
ICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qgc2hh
ZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0
byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRv
d0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRT
aGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVy
LT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwotICAgIAotICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwotCi0g
ICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7Ci0gICAg
cmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRl
c3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiB7IH07CisvLyAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworLy8KKy8vICAgIEZsb2F0UmVjdCBh
YnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwor
Ly8gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0
KTsKKy8vICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOworLy8gICAgYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOworLy8KKy8vICAgIEludFNpemUga2VybmVs
U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKKy8vCisvLyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXpl
IGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJl
ZSB0aW1lcy4KKy8vICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgKiAwLjVmKTsKKy8vICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBr
ZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisvLworLy8gICAgaWYgKGNsaXBzVG9Cb3VuZHMo
KSkKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZl
Y3RSZWN0KCkpOworLy8KKy8vICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFp
bnRSZWN0KTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoKSBjb25zdApA
QCAtMTI4LDE0ICs4MCwyMyBAQCBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNv
bnN0CiAgICAgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitGaWx0ZXJSZXN1bHQqIEZFRHJvcFNoYWRvdzo6YXBwbHkoRmlsdGVyT3V0cHV0
JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QK
IHsKLSAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7Ci0gICAgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwg
IiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9
XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIg
PDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIg
Zmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOworICAgIEFTU0VS
VCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAot
ICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVm
ZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAg
IGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
aW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
Cit7CisgICAgdHMgIDw8IGluZGVudCA8PCJbZmVEcm9wU2hhZG93IjsKKyAgICB0cyAgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWQorICAgICAgICA8PCAi
XCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5CisgICAgICAgIDw8ICJcIiBj
b2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9jb2xvcikgPDwi
XCIgb3BhY2l0eT1cIiIgPDwgbV9vcGFjaXR5IDw8ICJdXG4iOwogICAgIHJldHVybiB0czsKIH0K
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAxMmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEy
OWVmZjM4NGMuLmQ1NTY1ZTQ5NzI4ZTA4M2UxYjMxM2VlZDExNmJiYzY1YjA4N2NiODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMCwxNCArMjEsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVEcm9wU2hhZG93IDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisgICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9h
dCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7
CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9CiAg
ICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQpA
QCAtNDEsMzIgKzQxLDMzIEBAIHB1YmxpYzoKICAgICBmbG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5KSB7IG1fZHkgPSBkeTsgfQogCi0gICAg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dDb2xvcjsg
fSAKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikgeyBt
X3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9pZCBzZXRjQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQogCi0gICAgZmxvYXQgc2hhZG93T3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsgfQotICAgIHZvaWQgc2V0U2hhZG93T3Bh
Y2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNp
dHk7IH0KKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9Cisg
ICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsg
fQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRkVEcm9wU2hhZG93KGZsb2F0
IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImLCBmbG9h
dCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEludE91
dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRl
OworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CiAgICAgZmxvYXQgbV9keDsKICAgICBm
bG9hdCBtX2R5OwotICAgIENvbG9yIG1fc2hhZG93Q29sb3I7Ci0gICAgZmxvYXQgbV9zaGFkb3dP
cGFjaXR5OworICAgIENvbG9yIG1fY29sb3I7CisgICAgZmxvYXQgbV9vcGFjaXR5OwogfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggYjQyMzU1MzRjMzhiMWVi
YTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uOGI5YTc1ZGI2ZjE3MTQyODY5MjU5Yzg3YmY2Yjk1
YWJjZjY1Yjk5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsy
NSw1NiBAQAogI2luY2x1ZGUgIkZFRmxvb2QuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RD
b2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlw
ZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKLSAgICAsIG1fZmxvb2RP
cGFjaXR5KGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3Qg
Q29sb3ImIGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAotUmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNy
ZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29k
T3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBvcGFj
aXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRmxvb2QpCisgICAgLCBtX2NvbG9yKGNv
bG9yKQorICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVGbG9vZChmaWx0ZXIsIGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOwogfQogCi1ib29s
IEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorYm9vbCBGRUZsb29k
OjpzZXRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fZmxvb2RDb2xvciA9
PSBjb2xvcikKKyAgICBpZiAobV9jb2xvciA9PSBjb2xvcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1fZmxvb2RDb2xvciA9IGNvbG9yOworICAgIG1fY29sb3IgPSBjb2xvcjsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxv
b2RPcGFjaXR5KQorYm9vbCBGRUZsb29kOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCiB7Ci0g
ICAgaWYgKG1fZmxvb2RPcGFjaXR5ID09IGZsb29kT3BhY2l0eSkKKyAgICBpZiAobV9vcGFjaXR5
ID09IG9wYWNpdHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zsb29kT3BhY2l0eSA9
IGZsb29kT3BhY2l0eTsKKyAgICBtX29wYWNpdHkgPSBvcGFjaXR5OwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3Qg
RkVGbG9vZDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkK
LSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBnZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdp
b24oeyB9KTsKK30KKworRmlsdGVyUmVzdWx0KiBGRUZsb29kOjphcHBseShGaWx0ZXJPdXRwdXQm
IG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAg
IGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+
Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKSwgY29sb3IpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwg
eyB9LCBudWxscHRyKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9u
KSBjb25zdAorVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVGbG9vZCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoZmxvb2RDb2xvcigpKSA8PCAiXCIgIgot
ICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBmbG9vZE9wYWNpdHkoKSA8PCAiXCJdXG4i
OworICAgIHRzICA8PCBpbmRlbnQgPDwgIltmZUZsb29kIjsKKyAgICB0cyAgPDwgIiBjb2xvcj1c
IiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IoKSkgPDwgIlwiICIK
KyAgICAgICAgPDwgIm9wYWNpdHk9XCIiIDw8IG9wYWNpdHkoKSA8PCAiXCJdXG4iOwogICAgIHJl
dHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2
MTczNDhlLi43OTg2ZDQ2Njg0YmY1OGFiY2JjZTg0Y2ZiNjZhMjEyMjgwOGFlNzk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0
MiArMjMsMzUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBv
cGFjaXR5KTsKIAotICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9mbG9vZENvbG9yOyB9Ci0gICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7Cisg
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIGJv
b2wgc2V0Q29sb3IoY29uc3QgQ29sb3ImKTsKIAotICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9Ci0gICAgYm9vbCBzZXRGbG9vZE9wYWNpdHko
ZmxvYXQpOwotCi0jaWYgIVVTRShDRykKLSAgICAvLyBmZUZsb29kIGRvZXMgbm90IHBlcmZvcm0g
Y29sb3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJlc3VsdCBpcyBhbHdheXMg
aW4gdGhlIGN1cnJlbnQKLSAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1
ZSBvZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9pZCBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVy
RWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsgfQotICAgIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSNlbmRpZgorICAgIGZsb2F0IG9wYWNpdHko
KSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KKyAgICBib29sIHNldE9wYWNpdHkoZmxvYXQp
OwogCiBwcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7
CisgICAgRkVGbG9vZChjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJl
c3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKLSAgICBmbG9hdCBtX2Zsb29kT3BhY2l0eTsKKyAgICBD
b2xvciBtX2NvbG9yOworICAgIGZsb2F0IG1fb3BhY2l0eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCAwOGU4NWEwOGFhMDFiMDgxMjIz
ZjM2ZWJiNmJiYjhhYjM2Mzk0MzY1Li41NjA0OGQ1YmYzM2ZmMzkxZDJjMTJjYTJmNDY5ZTBkYjVl
NmM5NWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNiw0NTAgKzI2LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKIAotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5o
IgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQg
Z2F1c3NpYW5LZXJuZWxGYWN0b3IoKQotewotICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAq
IHBpRmxvYXQpOwotfQotCi1zdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBi
bHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0
YVJpZ2h0KQorUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZsb2F0
IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKLSAgICAvLyBDaGVjayBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBm
b3IgZGV0YWlscy4KLSAgICBzd2l0Y2ggKGJsdXJJdGVyYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0g
ICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRp
dXMgLyAyIC0gMTsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOwot
ICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7
Ci0gICAgICAgICAgICBkZWx0YUxlZnQrKzsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQtLTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghKHJhZGl1
cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0Kys7Ci0gICAgICAgICAgICByYWRpdXMr
KzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKIH0KIAotRkVHYXVzc2lhbkJs
dXI6OkZFR2F1c3NpYW5CbHVyKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpHYXVz
c2lhbkJsdXIpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQg
eSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFR2F1
c3NpYW5CbHVyKQogICAgICwgbV9zdGRYKHgpCiAgICAgLCBtX3N0ZFkoeSkKICAgICAsIG1fZWRn
ZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKGZp
bHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9IHg7Ci19Ci0KLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKLXsKLSAgICBtX3N0ZFkgPSB5Owot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2b2lkIGJveEJsdXJBbHBo
YU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50
JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRo
LCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQotewotICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90
KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgLy8gTWVtb3J5IGFsaWdubWVu
dCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAg
IGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW0gPSAwOwotCi0gICAg
ICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhL
ZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBp
ICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJbY2hhbm5lbF07Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZl
Y3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBs
aW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAgICAgICB1aW50OF90KiBkc3RQdHIg
PSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAgICAgICAgLy8gU2hpZnQga2VybmVs
LgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsK
LSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7
Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0
T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJh
eSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUs
IGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wg
YWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGNvbnN0IGludCBtYXhL
ZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwotICAgIGlmIChhbHBo
YUltYWdlKQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBk
c3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBl
ZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKLQotICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3RE
YXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJh
eSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhl
IG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNo
YW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAg
ICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAgICAgICAgaW50IHN1bVIgPSAwLCBz
dW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAgICAgIGlmIChlZGdlTW9kZSA9PSBF
REdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRy
Kys7Ci0gICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAg
c3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmlu
Zy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3Ry
aWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5
dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0
IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBd
OwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3Jj
UHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhS
aWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0
T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0Owot
ICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRy
WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUuCi0gICAgICAgICAgICAvLyBHZXQg
ZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUnLgotICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOwotICAgICAgICAgICAgY29u
c3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdp
ZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0g
ICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsK
LSAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2Yg
J2knPwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRl
OwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZz
ZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
c3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVk
Z2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVm
dFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAg
ICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBz
dW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVk
Z2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJp
Z2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsK
LSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRl
T2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0
UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQ
dHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAg
KmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAg
ICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAg
ICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0g
ICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4IDwg
ZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0g
ZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQ
dHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBz
cmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAg
ICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
QSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIg
Kz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZh
bHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRP
ZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotI2lmIFVTRShBQ0NF
TEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQotewot
ICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgewotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCByYWRpdXMuCi0gICAgaWYgKGtlcm5l
bFNpemUgJSAyICE9IDEpCi0gICAgICAgIGtlcm5lbFNpemUgKz0gMTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgZWZmZWN0SW5CdWZmZXI7Ci0gICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IHN0YXRpY19j
YXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOwotICAgIGVmZmVjdEluQnVmZmVyLndpZHRoID0g
ZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0SW5CdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0Owot
ICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgdkltYWdlX0J1ZmZl
ciBlZmZlY3RPdXRCdWZmZXI7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVy
LmRhdGEoKTsKLSAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKLSAgICBl
ZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdE91dEJ1ZmZl
ci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIC8vIERldGVybWluZSB0aGUgc2l6ZSBvZiBhIHRl
bXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gZmlyc3Qgd2l0aCBhIHNwZWNp
YWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhlIHNpemUgbmVlZGVkLCBvciBh
biBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCi0gICAgc2l6ZV90IHRtcEJ1ZmZlclNp
emUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RP
dXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdl
RXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsKLSAgICBpZiAodG1wQnVmZmVyU2l6
ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2b2lkKiB0bXBCdWZmZXIgPSBmYXN0TWFs
bG9jKHRtcEJ1ZmZlclNpemUpOwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZl
Y3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXpl
LCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgdkltYWdlQm94Q29udm9s
dmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVjdEluQnVmZmVyLCB0bXBCdWZmZXIs
IDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAg
ICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRC
dWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQpOwotICAgIFdURjo6ZmFzdEZyZWUodG1wQnVmZmVyKTsKLQotICAgIC8vIFRo
ZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBBU1NFUlQo
aW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5ndGgoKSk7Ci0gICAgbWVtY3B5KGlv
QnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLX0K
LSNlbmRpZgotCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNp
emUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50
IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwotICAgIGludCBkeUxlZnQgPSAwOwot
ICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1
ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVt
cEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlm
IChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6
ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAg
ICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04o
KmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwg
c3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIs
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAg
ICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwg
ZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgp
LCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2Fw
KGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXJuZWxT
aXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVm
dCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAg
aWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZm
ZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBw
YWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJs
dXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwg
c3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhh
SW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZm
ZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBmaW5hbCByZXN1
bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBpZiAoJmlvQnVmZmVyICE9IGZy
b21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IGZyb21CdWZm
ZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgZnJvbUJ1ZmZl
ci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlv
QnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCi17Ci0gICAg
aW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXplWSAmJiAobV9lZGdlTW9kZSA9PSBF
REdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgewotICAg
ICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6
ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZl
ciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50
U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOwotfQotCi12b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0
ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVy
aWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXks
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRT
aXplKTsKLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJh
eSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBw
YWludFNpemUpCitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKIHsK
LSNpZiAhVVNFKEFDQ0VMRVJBVEUpCi0gICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53
aWR0aCgpOwotICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBrZXJuZWxTaXplWSAqIDAuNWY7Ci0g
ICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNp
emUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBh
aW50U2l6ZS53aWR0aCgpKTsKLQotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewot
ICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxs
ZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAg
ICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYg
KGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImJsb2NrSGVp
Z2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGln
aHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJsb2NrSGVpZ2h0ICogam9icyA8IHRv
dGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2Jz
V2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0hlaWdodCA9IHBhaW50U2l6
ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9
IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9
IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBqb2IrKykgewot
ICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRo
aXM7Ci0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAt
IGV4dHJhSGVpZ2h0OwotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRo
RXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBp
bnQgZW5kWSA9IGpvYiA9PSBqb2JzIC0gMSA/IGN1cnJlbnRZIDogY3VycmVudFkgKyBleHRyYUhl
aWdodDsKLQotICAgICAgICAgICAgICAgIGludCBibG9ja1NpemUgPSAoZW5kWSAtIHN0YXJ0WSkg
KiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBpZiAoIWpvYikgewotICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gJmlvQnVmZmVyOwotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9ICZ0bXBQaXhlbEFycmF5OwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSBVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMudG1wUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShw
YXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCksIGlvQnVmZmVyLmRhdGEoKSArIHN0YXJ0WSAqIHNj
YW5saW5lLCBibG9ja1NpemUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHBhcmFtcy53aWR0aCA9IHBhaW50U2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwotICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxT
aXplWCA9IGtlcm5lbFNpemVYOwotICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWSA9
IGtlcm5lbFNpemVZOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJhbGxlbEpvYnMu
ZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0cyBvZiB0
aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0g
ICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICAg
ICAgaW50IGFkanVzdGVkQmxvY2tIZWlnaHQgPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tI
ZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBh
ZGp1c3RlZEJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldCA9IGV4dHJh
SGVpZ2h0ICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQgPSBj
dXJyZW50WSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIHNpemUgPSBhZGp1c3RlZEJsb2Nr
SGVpZ2h0ICogc2NhbmxpbmU7Ci0KLSAgICAgICAgICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0
YSgpICsgZGVzdGluYXRpb25PZmZzZXQsIHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSArIHNv
dXJjZU9mZnNldCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0g
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91
bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotICAgIHBsYXRmb3JtQXBw
bHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6
ZVksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIDMgLyA0LmYgKiBzcXJ0ZigyICogcGlGbG9hdCk7
CiB9CiAKIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKIHsKICAg
ICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3Qg
bWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAogICAgIC8vIGlu
ZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGli
bGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0aWMgY29uc3QgaW50IGdNYXhLZXJu
ZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9y
KCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkpOwogfQotICAgIAotSW50U2l6ZSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2Vy
bmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBBU1NFUlQoc3Rk
RGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7CiAg
ICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs3MSwxMiBAQCBJbnRTaXplIEZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlh
dGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZVVu
c2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHN0ZERldmlh
dGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0
aW9uIC8qZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKi8pOwog
fQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6
ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIGF1dG8ga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOwogCkBAIC00OTYs
NTYgKzg0LDIwIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUo
RmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0
aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRUdhdXNz
aWFuQmx1cjo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5l
bFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0p
OwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFi
c29sdXRlUGFpbnRSZWN0KCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBd
LT5kcmF3aW5nUmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8g
bm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCi0gICAgaWYgKG1fZWRnZU1vZGUg
IT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkKKyAgICAgICAgcmV0dXJuIGRyYXdp
bmdSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlw
bHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0g
ICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAu
NWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdo
dCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0
ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci19Ci0K
LXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEludFNpemUga2VybmVsU2l6ZSA9
IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0
ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJuZWxTaXplLnNjYWxlKGZpbHRlcigp
LmZpbHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURh
dGEpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXpl
IGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJl
ZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgp
ICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0
KCkgKiAwLjVmKTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5LCAq
dG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heERyYXdpbmdSZWN0KGlucHV0cywgZHJh
d2luZ1JlY3QpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29u
c3QKQEAgLTU1NCwxNCArMTA2LDIxIEBAIEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNl
dHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUu
d2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CiB9CiAK
LVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitGaWx0
ZXJSZXN1bHQqIEZFR2F1c3NpYW5CbHVyOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmls
dGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqKSBjb25zdAoreworICAgIEFTU0VS
VCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKwor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0cik7Cit9CisKK1RleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUdhdXNzaWFuQmx1ciI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAg
ICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8
PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNWZi
OTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQzZS4uOTRhMGY1M2QxOTk5ZWE4YWM2
NmE3NzQ1YzUxYTkzM2M0ZDE4ZWZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1OSArMjMsNDAgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0
LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBj
cmVhdGUoZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgZmxvYXQgc3RkRGV2aWF0
aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9u
WChmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpIHsgbV9zdGRYID0g
eDsgfQogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWTsg
fQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZp
YXRpb25ZKGZsb2F0IHkpIHsgbV9zdGRZID0geTsgfQogCiAgICAgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQotICAgIHZvaWQgc2V0RWRnZU1vZGUo
RWRnZU1vZGVUeXBlKTsKKyAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9k
ZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0g
ICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBz
dGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVs
U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUg
Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9u
KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1cihGaWx0ZXIm
LCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQs
IGZsb2F0LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KIAotICAgIHN0YXRpYyBjb25z
dCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRh
dGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5CbHVyKiBmaWx0ZXI7Ci0gICAgICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAg
ICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7Ci0gICAgICAg
IHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1
bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
SW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0
IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2ZjhlMDcwYTQxOGMyMDg1MTgwOTBlZTdh
NmNhMTEzZTU2ZjUuLmVhZmE3ODY4YTZmYmY3ZTZhMmEyM2EwZjQzODgxYzc2YjIzN2EzY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3pl
ZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsNzMgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIK
LSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
TGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5nVHlwZSBsaWdodGlu
Z1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3Vs
YXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5
cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQotICAgICwgbV9s
aWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKGNvbnN0
IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIHNvdXJjZSwgRmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckVmZmVj
dCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZh
Y2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKICAgICAs
IG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwgbV9zcGVjdWxhckV4
cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5l
bFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3Ro
WSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAotYm9vbCBGRUxpZ2h0
aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQotewotICAgIGlmIChtX3N1
cmZhY2VTY2FsZSA9PSBzdXJmYWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IpCitib29sIEZFTGlnaHRpbmc6OnNldENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBpZiAobV9saWdodGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCisgICAgaWYgKG1fY29sb3Ig
PT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fbGlnaHRpbmdDb2xvciA9
IGxpZ2h0aW5nQ29sb3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6
c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgaWYg
KG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2VybmVsVW5pdExlbmd0aFgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVu
Z3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVu
Z3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
bV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOworICAgIG1fY29sb3IgPSBj
b2xvcjsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVs
U2l6ZSA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsK
LXN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50
OF90PigweEZGKTsKLQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVu
dHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Zp
bHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0
ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8g
My5mOwotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGNlbnRlciAr
IDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAqIGNlbnRlciAt
IHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRl
ciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAr
PSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIg
KiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLWxlZnQgLSAyICog
Y2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0g
ICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BS
aWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQg
KyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICog
Y2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNl
dCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBi
b3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJp
Z2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQg
KyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhh
V2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9
IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwotICAgIAotICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQp
KTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdo
dEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0
ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBsZWZ0ID0gYWxwaGFX
aW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOwot
ICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBib3R0b21MZWZ0ID0g
YWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5i
b3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQg
aGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFXaW5kb3cuYWxwaGFb
MF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0Owot
ICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0gICAgCi0gICAgLy8g
Q2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1jaGVj
a3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgpID09
IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVm
dCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9t
UmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVm
dCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRl
ciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAg
aW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
b2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9t
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1
cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJv
dHRvbUxlZnQgKyBib3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGJvdHRvbUxl
ZnQgKyAyICogYm90dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAg
LTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0Citib29sIEZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBz
dXJmYWNlU2NhbGUpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBv
ZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJp
Z2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAt
IHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2FsZSkgIT0gbV9zdXJmYWNl
U2NhbGU7CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90
dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdodGluZzo6c2V0RGlm
ZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKLSAgICBpbnQgbGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQg
KyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCArIGxlZnQgKyAyICogY2VudGVyCi0gICAgfTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZSht
X2RpZmZ1c2VDb25zdGFudCwgZGlmZnVzZUNvbnN0YW50KSAhPSBtX2RpZmZ1c2VDb25zdGFudDsK
IH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5v
cm1hbDJEVmVjdG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0
IHNwZWN1bGFyQ29uc3RhbnQpCiB7Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEs
IHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRh
dGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1
cm4gc3RkOjpleGNoYW5nZShtX3NwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQpICE9
IHNwZWN1bGFyQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5h
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JY
LCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK2Jv
b2wgRkVMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxhckV4cG9uZW50
KQogewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0
U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291cmNl
LT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQotICAg
IGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7
Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUg
ZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6
OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VD
b25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNE
IGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAot
ICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0Rh
dGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBo
YWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAg
IGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVu
Z3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVj
dG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5n
dGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndh
eVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBm
YWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAg
ICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNl
U2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1h
bFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobV9s
aWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55
KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGZs
b2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAg
ICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZl
Y3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJD
b25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAgICBs
aWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxp
Z2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAgICAg
ICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9y
VmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0
U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xv
clZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0
UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZSht
X3NwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQpICE9IG1fc3BlY3VsYXJFeHBvbmVu
dDsKIH0KIAotLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNh
bWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5k
IHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
LXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhl
IHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZKTsKLSAgICBBU1NF
UlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsg
Kyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0
T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IG5l
eHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhh
IHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0
aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAgICAgICAvLyBGb3Ig
ZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNv
bHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAgICAgIGFscGhhV2lu
ZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVs
cy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0o
cm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2lu
ZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0
b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShu
ZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAg
ICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCAr
PSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAgICAg
ICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
Y0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBh
bHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCitib29sIEZFTGlnaHRpbmc6OnNldEtl
cm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQogewotICAgIHBhcmFtZXRl
cnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBw
YXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+
eUVuZCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFgpICE9IG1fa2VybmVsVW5pdExlbmd0aFg7CiB9CiAKLXZvaWQgRkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25z
dCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgdW5zaWdu
ZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOwotICAgIHVu
c2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24s
IG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAg
ICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3Jt
QXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYiA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMg
dGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8geVN0
ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSBy
ZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0g
cm93c1RvUHJvY2VzcyAvIGpvYjsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJh
ID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKLQotICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Ci0g
ICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAg
ICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAg
ICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
LnBhaW50aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMueVN0
YXJ0ID0geVN0YXJ0OwotICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2IgPCBqb2JzV2l0aEV4
dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnlFbmQgPSB5
U3RhcnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRv
IHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsK
LX0KLQotaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSkKK2Jvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5p
dExlbmd0aFkpCiB7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxk
IGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSNpZiBDUFUoQVJNX05FT04p
ICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQotICAg
IHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZWxzZQotICAgIHBsYXRm
b3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZW5kaWYKKyAgICByZXR1cm4g
c3RkOjpleGNoYW5nZShtX2tlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3RoWSkgIT0g
bV9rZXJuZWxVbml0TGVuZ3RoWTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmco
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorRmxvYXRS
ZWN0IEZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7
Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90
aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBj
YXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwg
aGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0g
JnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBm
OwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNp
emU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwotCi0gICAgYXV0byBbciwgZywgYiwg
YV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5j
b2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKLQotICAgIG1fbGlnaHRTb3VyY2Ut
PmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVm
dC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5v
cm1hbChvZmZzZXQpKTsKLQotICAgIC8vIFRvcCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKLQot
ICAgIC8vIEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwot
Ci0gICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwg
ZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJp
Z2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgaWYgKHdpZHRoID49IDMpIHsKLSAgICAgICAgLy8g
VG9wIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhl
bFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
eCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNl
dCkpOwotCi0gICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9IGRhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1Bp
eGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwg
Y0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkp
OwotICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBMZWZ0IGNvbHVt
bi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ks
IG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAg
c2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2Miwg
Y0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAg
Ly8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwg
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFp
bnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0Zh
Y3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAg
IGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIEludGVyaW9yIHBp
eGVscy4KLSAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEpOwotICAgIH0K
LQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICog
aGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkg
Kz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFs
cGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RQaXhl
bDsgaSArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICB1aW50OF90IGExID0gZGF0YS5waXhl
bHMtPml0ZW0oaSk7Ci0gICAgICAgICAgICB1aW50OF90IGEyID0gZGF0YS5waXhlbHMtPml0ZW0o
aSArIDEpOwotICAgICAgICAgICAgdWludDhfdCBhMyA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAy
KTsKLSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8gbWF4KGExLCBhMiwgYTMpCi0g
ICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/
IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihpbnB1dHMpOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CitGaWx0ZXJSZXN1bHQqIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0g
ICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7
CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEp
LiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwotICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0
ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMg
c3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5k
IEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCi0gICAgLy8gQW55d2F5LCBmZUNvbnZv
bHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXV0
byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1
cm4gcmVzdWx0OwogCi0gICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpOwotICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVsQXJyYXks
IGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0cik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggN2ZiNTYwOWRiYjU3Yjc2MjAx
ZjMzMDMzNzA1MmU0MWFjMjUwM2NmOS4uYWU2NmM0YjJmNjVlN2VlNmJmMDUyZjFkNmY1YTJmNzYz
YjdiMDA2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyNiArMjgsMjcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0KLS8vIENvbW1v
biBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5n
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFG
b3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQor
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBi
b29sIHNldENvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQogICAgIGJvb2wgc2V0U3VyZmFjZVNjYWxl
KGZsb2F0KTsKIAotICAgIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9saWdodGluZ0NvbG9yOyB9Ci0gICAgYm9vbCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENv
bG9yJik7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZm
dXNlQ29uc3RhbnQ7IH0KKyAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7CisKKyAg
ICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0
YW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKKworICAgIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0K
KyAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOwogCiAgICAgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhYOyB9CiAgICAg
Ym9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCk7CkBAIC01NCwxMTUgKzU2LDI1IEBAIHB1
YmxpYzoKICAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2Vy
bmVsVW5pdExlbmd0aFk7IH0KICAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsK
IAotICAgIGNvbnN0IExpZ2h0U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlnaHRTb3VyY2UuZ2V0KCk7IH0KKyAgICBjb25zdCBMaWdodFNvdXJjZSYgc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2Fs
IGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsK
LSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAg
fTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhh
WzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50
OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQot
ICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7
IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2Vu
dGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAg
IHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFd
OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBo
YVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUp
ICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1
aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2
b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7
IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsx
XVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1
ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0
Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0g
YWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAg
ICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5
IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBp
eGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAg
ICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0
b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNp
emUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0g
ICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5k
IGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5n
RGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5l
cmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2Vy
KEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAgICBGRUxpZ2h0aW5nKEZpbHRl
ciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQot
Ci0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7Ci0K
LSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKLSAgICB2b2lkIHNldFBpeGVs
SW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKLQotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHko
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZ
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNv
bnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lmIENQVShBUk1fTkVPTikgJiYg
Q1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0gICAgc3Rh
dGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBvbmVudCk7Ci0gICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBMaWdodGluZ1R5cGUgbV9saWdo
dGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwotCi0gICAgQ29s
b3IgbV9saWdodGluZ0NvbG9yOworICAgIEZFTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIEZpbHRlckZ1bmN0aW9uOjpU
eXBlKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJv
b2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9k
aWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckNvbnN0YW50OwogICAgIGZsb2F0
IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAg
IGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX3NvdXJj
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIx
NzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uY2UxYzE2ZWI1ZDk4NzVjODBkZTFkNWQz
YTE3NmI2ZDQ4NGQ1MGM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsNDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUodW5z
aWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVNZXJn
ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBudW1i
ZXJPZkVmZmVjdElucHV0cykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1lcmdlKQorICAg
ICwgbV9udW1iZXJPZkVmZmVjdElucHV0cyhudW1iZXJPZkVmZmVjdElucHV0cykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAgIEFTU0VSVChtX251bWJl
ck9mRWZmZWN0SW5wdXRzKTsKIH0KIAotdm9pZCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorY29uc3QgQXRvbVN0cmluZyYgRkVNZXJnZTo6ZWZmZWN0TmFtZSgpCiB7Ci0gICAgdW5z
aWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAw
KTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IHNfZWZmZWN0TmFtZSgiRkVNZXJnZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICByZXR1cm4gc19lZmZlY3ROYW1lOworfQorCitGaWx0ZXJSZXN1bHQqIEZFTWVyZ2U6
OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJ
bWFnZUJ1ZmZlciopIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSBtX251bWJl
ck9mRWZmZWN0SW5wdXRzKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0
dXJuOworICAgIFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj4gaW5wdXRzOworICAgIGZvciAoYXV0
byBpbnB1dHNTaXplID0gbV9udW1iZXJPZkVmZmVjdElucHV0czsgaW5wdXRzU2l6ZS0tOyApCisg
ICAgICAgIGlucHV0cy5hcHBlbmQoc3RhY2sudGFrZUxhc3QoKSk7CiAKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYg
KEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgfQorICAgIHJl
dHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgaW5wdXRzLCBudWxscHRyKTsKIH0KIAotVGV4dFN0
cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNZXJn
ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNp
emUgPiAwKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwiXVxuIjsK
LQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBpbnB1dEVmZmVjdChpKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIg
bWVyZ2VOb2Rlcz1cIiIgPDwgbV9udW1iZXJPZkVmZmVjdElucHV0cyA8PCAiXCJdXG4iOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTljZWNlZDUwNzNlNTdiMDE5NGVi
Y2YxOGYyNjA3Li5mM2Y0NWMzNjhhM2FhMzFmMzg1ZDYyYzA4NDJjNjNlNjdiNWU5NGU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjgsMTYgKzI5LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVNZXJnZSA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3Jl
YXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKHVuc2lnbmVkIG1f
bnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVm
ZmVjdE5hbWUoKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAgIEZFTWVy
Z2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCiAgICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5
KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
RmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJy
aWRlOworICAgIAorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggOGE3ZTViNjY3YWI3
NzNiOTBiODkwZTM4Mzg2MzkzNTYyYjlkOGRmNS4uYzRkZDIwYzBjMDUwNTg1OWRjMDFiODZiMjIz
YTBiZmQwMjdiZmE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtNCw3ICs0LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAxOCBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwyNjUgKzI1LDYyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKLSNpbmNsdWRlICJDb2xv
ckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2Jz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5
KEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNb3Jw
aG9sb2d5KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKLSAg
ICAsIG1fcmFkaXVzWShyYWRpdXNZKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5Ojpj
cmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xv
Z3kobW9ycGhvbG9neU9wZXJhdG9yLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKLVJlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitGRU1vcnBo
b2xvZ3k6OkZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9y
LCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6
OkZFTW9ycGhvbG9neSkKKyAgICAsIG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVy
YXRvcikKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwg
cmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9n
eU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5
OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVy
YXRvcikKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbW9ycGhvbG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBo
b2xvZ3lPcGVyYXRvcjsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQg
cmFkaXVzWCkKIHsKLSAgICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwog
fQogCiBib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAg
IGlmIChtX3JhZGl1c1kgPT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
cmFkaXVzWSA9IHJhZGl1c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVNb3JwaG9s
b2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBp
ZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVj
dFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVj
dCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVj
dCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5
LCBpbnQgd2lkdGgpCi17Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19Ci0KLWlu
bGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQYWNrZWRDb2xvcjo6UkdC
QSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKQotewotICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdC
QSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsKLX0K
LQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCi17
Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICBy
ZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1h
eChhLCBiKTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxX
QVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBp
bnQgeUVuZCwgaW50IHdpZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21w
b25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4
KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5
IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHks
IHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0s
IHBpeGVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1BTFdBWVNfSU5MSU5F
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBp
bnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9
PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFy
dCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgp
OwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1B
TFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShj
b25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5l
bFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAg
ICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQot
ICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJl
bXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFy
dFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQ
aXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVz
WDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNv
bnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0
ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8
IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBo
ZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0g
ICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAg
ICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFk
aXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVz
RW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJl
bWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNv
IGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChj
b2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQs
IHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0
cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyAr
K3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAg
ICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRp
dXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAg
ICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDAp
OwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdp
ZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JD
b21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAg
ICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWSwgcmFkaXVzWSkg
IT0gbV9yYWRpdXNZOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtl
cihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW0pCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5
OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRm
b3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJh
bS0+ZW5kWSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOworICAgIGRyYXdpbmdSZWN0
LmluZmxhdGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICByZXR1cm4gZ2VvbWV0cnku
bWF4RHJhd2luZ1JlY3QoaW5wdXRzLCBkcmF3aW5nUmVjdCk7CiB9CiAKLXZvaWQgRkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmls
dGVyUmVzdWx0KiBGRU1vcnBob2xvZ3k6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgLy8gRW1w
aXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxl
IGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJu
ZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1
c1kpICogMC42NTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9
IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0g
KDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0g
ICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4
OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
KHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3Ip
IC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+
IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQg
am9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2Vy
IHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNl
IGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAg
ICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFk
czsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAl
IG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsK
LSAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXpl
OwotICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAg
fQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWlu
dGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBhcHBseVBsYXRm
b3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBj
b25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5
T3BlcmF0b3ImIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwg
cmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZs
b2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVn
ZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMu
d2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVy
JiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBp
bi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1p
bihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAgIGlu
dCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRp
dXMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0gICAg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAg
IHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVm
ZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBh
aW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRj
aCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
VU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTI5
NywxNSArOTQsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9
CiAKLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBo
b2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVz
WCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVh
MTEuLmExOTUwMTY5YTVkNWY1M2M4M2EwNzRlMDk1M2Y0YTE1MzVhZTBmOWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjIsMTEgKzIzLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0g
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAgICAg
RkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9FUk9ERSA9IDEsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIKQEAg
LTM0LDEwICszNCwxMCBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBG
RU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9s
b2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3Io
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xv
Z3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAg
Ym9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAgIGZs
b2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNldFJh
ZGl1c1goZmxvYXQpOwpAQCAtNDYsNDAgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFJh
ZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVNb3JwaG9sb2d5IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVy
UmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJ
bWFnZUJ1ZmZlciopIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50
OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBp
bnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWln
aHQ7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9Owot
Ci0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9s
b2d5KiBmaWx0ZXI7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAg
ICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQg
cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50
IGVuZFkpOwotCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhv
bG9neU9wZXJhdG9yIG1fbW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsK
ICAgICBmbG9hdCBtX3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzky
ZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li4zMTM1OGFjMzFkZjA2MDU0YTUwYTQwNWI2ZWIxNGUx
YjJhMzFmYzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI0LDcxICsyNSw0NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFT2Zmc2V0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zm
c2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCitGRU9mZnNldDo6RkVPZmZzZXQoZmxvYXQgZHgsIGZs
b2F0IGR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFT2Zmc2V0KQogICAgICwgbV9keChk
eCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQorUmVmPEZFT2Zmc2V0PiBGRU9m
ZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkK
K0Zsb2F0UmVjdCBGRU9mZnNldDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKIHsKLSAgICBtX2R4ID0gZHg7
CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9
IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKKyAgICBkcmF3aW5nUmVjdC5tb3ZlKHsgbV9keCwg
bV9keSB9KTsKKyAgICByZXR1cm4gZHJhd2luZ1JlY3Q7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnNl
dER5KGZsb2F0IGR5KQorRmlsdGVyUmVzdWx0KiBGRU9mZnNldDo6YXBwbHkoRmlsdGVyT3V0cHV0
JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKikgY29uc3QK
IHsKLSAgICBtX2R5ID0gZHk7Ci19Ci0KLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCkt
PmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsg
bV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRS
ZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKLX0KKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHko
KSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMg
fSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7Cisg
ICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1U
ZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsK
LSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKICAgICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8
PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJm
ZTc2YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uYWU1OWM4ZmUwNDk4OGRiZjRhZDhkYTA2NmJhNTRj
NzAzOGI1OTlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsMzQgKzIzLDY0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBmbG9h
dCBkeSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZs
b2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7
IH0KLSAgICB2b2lkIHNldER4KGZsb2F0KTsKKyAgICB2b2lkIHNldER4KGZsb2F0IGR4KSB7IG1f
ZHggPSBkeDsgfQogCiAgICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9Ci0gICAg
dm9pZCBzZXREeShmbG9hdCk7CisgICAgdm9pZCBzZXREeShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7
IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZWY8RkVPZmZzZXQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFT2Zmc2V0
KEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZs
b2F0IGR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVPZmZzZXQiOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92
ZXJyaWRlOwotICAgIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVy
cmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlclJl
c3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0
ZXJSZXN1bHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9Owog
Cit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwg
bV9keTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZF
T2Zmc2V0Pj4gRkVPZmZzZXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6
b3B0aW9uYWw8ZmxvYXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5
OworICAgIGRlY29kZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OkZFT2Zmc2V0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LnR5cGUoKSA9PSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQ7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2Zh
NDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi42OTkyNDQzM2Y5M2ZlNGYyMWZlYmJhYmY0ODQ0NTg3
NjZlZWU2Yzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAot
I2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxh
ckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4
cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVy
LCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcp
CitSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25z
dCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxl
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxh
ckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3Vs
YXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhj
b2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwg
VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
U3BlY3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3Bl
Y3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5l
bFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGln
aHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCi17
Ci0gICAgaWYgKG1fc3BlY3VsYXJDb25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckNvbnN0YW50ID0gc3BlY3VsYXJDb25zdGFu
dDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNw
ZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKLXsKLSAgICBpZiAobV9zcGVj
dWxhckV4cG9uZW50ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OwotICAgIHJldHVybiB0
cnVlOwotfQotCi1UZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAg
ICAgdHMgPDwgaW5kZW50IDw8ICJbZmVTcGVjdWxhckxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8
PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8
PCAic3BlY3VhbENvbnN0YW50PVwiIiA8PCBtX3NwZWN1bGFyQ29uc3RhbnQgPDwgIlwiICIKICAg
ICAgICA8PCAic3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJc
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4
IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5OGQzOTgxOGJmM2IyNDk1OGEuLmNhZTViODJmYmViYzVh
YjYzNDM1NjkwNWU5YmU3ZTZmM2YwMzJmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcs
MjAgKzI4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0
aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVTcGVj
dWxhckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+
RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCi0gICAgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsg
fQotICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVj
dWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9Ci0gICAg
Ym9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVTcGVjdWxh
ckxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKLSAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIkZFU3BlY3VsYXJMaWdodGluZyI7IH0K
IAotcHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3Im
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNh
MGM1ZGIyZmNhYzIwYWQuLjQ2NDJiYmUyZjU5NGViNDU3YjczZWIzMGJjZDcyN2ZhYjQ1MWY3MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXgg
TWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjEsODAgKzIyLDQxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUaWxl
LmgiCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5j
bHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQu
aCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXIm
IGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitSZWY8RkVU
aWxlPiBGRVRpbGU6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxl
KCkpOwogfQogCi1SZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZF
VGlsZTo6RkVUaWxlKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRVRpbGUpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOwogfQogCi12b2lkIEZFVGlsZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRVRpbGU6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkg
Y29uc3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3Jr
IGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhl
cndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJ
bWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVl
ZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1
dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4g
VGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAg
RmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50
IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9p
bnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBp
ZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQp
IHsKLSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGls
ZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICgh
dGlsZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJ
bWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0
LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9u
LnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBp
bi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdl
Q29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdl
KSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47CisgICAgLy8gRG9u
J3QgdXNlIHRoZSBpbnB1dHMnIHN1YnJlZ2lvbnMgZm9yIDxmZVRpbGU+LgorICAgIHJldHVybiBn
ZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24oeyB9KTsKK30KIAotICAgIEFmZmluZVRyYW5z
Zm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRlKGlu
TWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7CitGaWx0ZXJSZXN1bHQqIEZF
VGlsZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKikgY29uc3QKK3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7
CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBhdXRvIHBhdHRlcm4gPSBQ
YXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRy
dWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJl
c3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBm
aWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGlu
IH0sIG51bGxwdHIpOwogfQogCi1UZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxuIjsKLQotICAgIFRleHRTdHJlYW06
OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotCisgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVUaWxlXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0
N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLjdmMzA3MTJmZjI2OGJhYzQ5MjBjOThiMjM4
NTMwMjMyMzI4YThlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjcgKzIzLDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBS
ZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBGRVRpbGUoRmlsdGVyJik7Cisg
ICAgRkVUaWxlKCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFVGlsZSI7IH0KIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9Cisg
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJl
c3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0
NmU4YTRiYTU4YWFhOTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjEyMzQzM2QzODBjYzcxN2JmZTIw
NmNiZjQxNzBmYThmOTI5NzYwN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1
PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2Ug
WzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVy
ZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIq
KjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0s
IENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhl
IGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0
aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgot
Ki8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3Qg
bG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29u
c3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBv
ZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVU
dXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2Uo
dHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBz
dGl0Y2hUaWxlcykpOworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZp
bHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBt
X3R5cGUodHlwZSkKK0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR1
cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFVHVyYnVsZW5jZSkKKyAgICAsIG1fdHVyYnVsZW5jZVR5cGUodHVy
YnVsZW5jZVR5cGUpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAg
ICwgbV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKICAgICAsIG1fbnVtT2N0YXZlcyhu
dW1PY3RhdmVzKQpAQCAtNTksNDA1ICs0Nyw0NyBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5j
ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQog
ewogfQogCi1SZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZp
bHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJh
c2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBl
LCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRj
aFRpbGVzKSk7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1cmJ1bGVuY2VUeXBl
IHR5cGUpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUoVHVyYnVsZW5jZVR5
cGUgdHVyYnVsZW5jZVR5cGUpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVuY3lZ
KQotewotICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lZID09IGJhc2VGcmVxdWVuY3lZKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fdHVyYnVsZW5jZVR5
cGUsIHR1cmJ1bGVuY2VUeXBlKSAhPSBtX3R1cmJ1bGVuY2VUeXBlOwogfQogCiBib29sIEZFVHVy
YnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpCiB7Ci0gICAg
aWYgKG1fYmFzZUZyZXF1ZW5jeVggPT0gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9iYXNlRnJlcXVlbmN5WCwgYmFzZUZy
ZXF1ZW5jeVgpICE9IG1fYmFzZUZyZXF1ZW5jeVg7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRTZWVkKGZsb2F0IHNlZWQpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVko
ZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCiB7Ci0gICAgaWYgKG1fc2VlZCA9PSBzZWVkKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zZWVkID0gc2VlZDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lZLCBiYXNlRnJlcXVlbmN5WSkg
IT0gbV9iYXNlRnJlcXVlbmN5WTsKIH0KIAogYm9vbCBGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2
ZXMoaW50IG51bU9jdGF2ZXMpCiB7Ci0gICAgaWYgKG1fbnVtT2N0YXZlcyA9PSBudW1PY3RhdmVz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVz
KGJvb2wgc3RpdGNoKQotewotICAgIGlmIChtX3N0aXRjaFRpbGVzID09IHN0aXRjaCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2g7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRh
cHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9u
OgotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5j
ZQotCi0vLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJi
dWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3Jh
bmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5k
USk7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11
bTsKLSAgICBzZWVkID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBm
bG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0ICogdCAqICgzIC0gMiAq
IHQpOwotfQotCi1pbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9h
dCBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7Ci19Ci0KLXZvaWQg
RkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0g
ICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKLQotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNs
YW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgotICAgIGlmIChwYWludGlu
Z0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdE
YXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0
YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0g
c19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0gICAgZm9yIChpbnQg
Y2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdE
YXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9j
a1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFd
KTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50
WzBdLCBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0
aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3Rv
cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7
IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVj
dG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tT
aXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNTRVJUKGogPCAyICogc19i
bG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07Ci0gICAgICAgIHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsK
LSAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsK
LSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSAr
IGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hp
bmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZy
ZXF1ZW5jeVkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0aXRjaFRpbGVzKQotICAgICAgICByZXR1
cm4geyB9OwotCi0gICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKLSAgICBm
bG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUKHRpbGVXaWR0
aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOwotCi0gICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQg
dHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKLSAgICAvLyBzbyB0
aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgotICAgIGlmIChiYXNlRnJl
cXVlbmN5WCkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVl
bmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAg
ICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRv
IHRoZSBzdGFuZGFyZC4KLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5
IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgYmFzZUZyZXF1
ZW5jeVggPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKLSAgICB9Ci0gICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZy
ZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNl
aWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZy
ZXF1ZW5jeVkpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5Owot
ICAgIH0KLQotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKLSAgICBzdGl0Y2hEYXRhLndy
YXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7Ci0gICAgc3RpdGNoRGF0YS5o
ZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBzdGl0Y2hE
YXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OwotCi0gICAgcmV0
dXJuIHN0aXRjaERhdGE7Ci19Ci0KLS8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6
IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVt
ZW50LgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29u
c3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERh
dGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAotewotICAgIHN0cnVjdCBO
b2lzZVBvc2l0aW9uIHsKLSAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3Bl
YyB0ZXh0LgotICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0
ZXh0LgotICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4
dC4KLQotICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOwotICAgICAgICAgICAgLy8gIGJ4
MCA9IChpbnQpdDsKLSAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKLSAgICAgICAgICAgIC8v
ICByeDAgPSB0IC0gKGludCl0OwotICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25l
bnQgKyBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+
KHBvc2l0aW9uKTsKLSAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKLSAgICAgICAg
ICAgIGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAgICAgICAg
Ly8gICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChpbmRleCA+
PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOwotCi0gICAgICAgICAg
ICAvLyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4
MSAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3
cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOwotICAg
IE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7Ci0KLSAgICAvLyBJZiBzdGl0
Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KLSAgICBpZiAobV9zdGl0
Y2hUaWxlcykgewotICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRj
aERhdGEud3JhcFgpOwotICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBz
dGl0Y2hEYXRhLndyYXBZKTsKLSAgICB9Ci0KLSAgICAvLyBieDAgJj0gQk07Ci0gICAgLy8gYngx
ICY9IEJNOwotICAgIC8vIGJ5MCAmPSBCTTsKLSAgICAvLyBieTEgJj0gQk07Ci0gICAgbm9pc2VY
LmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gc19ibG9ja01h
c2s7Ci0gICAgbm9pc2VZLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5uZXh0SW5k
ZXggJj0gc19ibG9ja01hc2s7Ci0KLSAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOwot
ICAgIC8vIGogPSB1TGF0dGljZVNlbGVjdG9yW2J4MV07Ci0gICAgaW50IGxhdHRpY2VJbmRleCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsKLSAgICBpbnQgbmV4
dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5leHRJ
bmRleF07Ci0KLSAgICAvLyBzeCA9IGRvdWJsZShzX2N1cnZlKHJ4MCkpOwotICAgIC8vIHN5ID0g
ZG91YmxlKHNfY3VydmUocnkwKSk7Ci0gICAgZmxvYXQgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVgu
ZnJhY3Rpb24pOwotICAgIGZsb2F0IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLmZyYWN0aW9uKTsK
LQotICAgIGF1dG8gbm9pc2VGb3JDaGFubmVsID0gWyZdKGludCBjaGFubmVsKSB7Ci0gICAgICAg
IC8vIGIwMCA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MF0KLSAgICAgICAgaW50IGIwMCA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsK
LSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDBdOyB1ID0gcngwICog
cVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBxID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2IwMF07Ci0gICAgICAgIGZsb2F0IHUgPSBub2lzZVguZnJhY3Rp
b24gKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLQotICAgICAgICAvLyBiMTAgPSB1
TGF0dGljZVNlbGVjdG9yW2ogKyBieTBdOwotICAgICAgICBpbnQgYjEwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAg
ICAgLy8gcngxID0gcngwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JD
aGFubmVsXVtiMTBdOyB2ID0gcngxICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIHEgPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjEwXTsKLSAgICAgICAgZmxvYXQgdiA9IChu
b2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotICAg
ICAgICAvLyBhID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRl
cnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyBiMDEgPSB1TGF0dGljZVNlbGVjdG9y
W2kgKyBieTFdOwotICAgICAgICBpbnQgYjAxID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltsYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcnkxID0gcnkw
IC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDFdOyB1
ID0gcngwICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbY2hhbm5lbF1bYjAxXTsKLSAgICAgICAgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMSA9IHVMYXR0
aWNlU2VsZWN0b3JbaiArIGJ5MV07Ci0gICAgICAgIGludCBiMTEgPSBwYWludGluZ0RhdGEubGF0
dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAg
ICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTFdOyB2ID0gcngxICogcVswXSAr
IHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
YjExXTsKLSAgICAgICAgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyAobm9pc2VZ
LmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotICAgICAgICAvLyBiID0gbGVycChzeCwgdSwgdik7Ci0g
ICAgICAgIGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAg
ICAvLyByZXR1cm4gbGVycChzeSwgYSwgYik7Ci0gICAgICAgIHJldHVybiBsaW5lYXJJbnRlcnBv
bGF0aW9uKHN5LCBhLCBiKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgbm9pc2VG
b3JDaGFubmVsKDApLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMSksCi0gICAgICAgIG5vaXNl
Rm9yQ2hhbm5lbCgyKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDMpCi0gICAgfTsKLX0KLQot
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxl
bWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCi0vLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1aW50OD4+KFNSR0JBPGZs
b2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3RhdGljIGlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50
c1swXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGlj
X2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBz
dGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzJdICog
MjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxp
bnQ+KGZsb2F0Q29tcG9uZW50c1szXSAqIDI1NSksIDAsIDI1NSksCi0gICAgfTsKKyAgICByZXR1
cm4gc3RkOjpleGNoYW5nZShtX251bU9jdGF2ZXMsIG51bU9jdGF2ZXMpICE9IG1fbnVtT2N0YXZl
czsKIH0KIAotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQogewotICAgIENvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0OwotICAgIEZsb2F0UG9p
bnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBw
b2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOwotICAgIGZsb2F0IHJhdGlv
ID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsr
b2N0YXZlKSB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxO
b2lzZSkKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBh
aW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50
aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87Ci0KLSAgICAg
ICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9pc2VW
ZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsKLQot
ICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRj
aCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNh
dGlvbiBhbmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0
byBzdWJ0cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAy
OwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0g
c19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAg
ICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxp
bk5vaXNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVu
Y2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICog
MjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmIChtX3R5cGUgPT0gVHVy
YnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7Ci0KLSAgICByZXR1
cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOwor
ICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2VlZCwgc2VlZCkgIT0gbV9zZWVkOwogfQogCi12
b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJh
eSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U3Rp
dGNoVGlsZXMoYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7
Ci0KLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
ZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UG9p
bnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAgaW50IGluZGV4T2ZQ
aXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAg
QWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0KLSAgICBmb3Ig
KGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIHBvaW50LnNldFkocG9p
bnQueSgpICsgMSk7Ci0gICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgewotICAg
ICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQpOwotICAgICAg
ICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWlu
dGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5u
ZWwpOwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwotICAgICAgICB9Ci0g
ICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3RpdGNoVGlsZXMsIHN0aXRjaFRpbGVz
KSAhPSBtX3N0aXRjaFRpbGVzOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldv
cmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK0Zsb2F0UmVjdCBGRVR1cmJ1
bGVuY2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPmZp
bGxSZWdpb24oKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0Rh
dGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVy
cy0+ZW5kWSk7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lvbih7IH0p
OwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRl
clJlc3VsdCogRkVUdXJidWxlbmNlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlm
ICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
Ci0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAg
ICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgaWYgKHJl
c3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJv
RmlsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9
IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0KLSAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0
YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVl
bmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUs
IGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5n
RGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAoYXJl
YS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBoZWlnaHQgPSBy
ZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdo
dCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2ln
bmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAg
aWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2Jz
PEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgLy8g
RmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVs
Sm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7Ci0gICAgICAg
ICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRp
bmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCi0g
ICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0WSA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVy
cyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAgICBw
YXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5n
RGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEg
PSBzdGl0Y2hEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7Ci0K
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBqb2JIZWlnaHQgPSAoaSA8IGpvYnNXaXRoRXh0cmEp
ID8gc3RlcFkgKyAxIDogc3RlcFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBwYXJh
bXMuc3RhcnRZICsgam9iSGVpZ2h0OwotICAgICAgICAgICAgICAgIHN0YXJ0WSArPSBqb2JIZWln
aHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21h
bGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgfSwgbnVsbHB0cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpAQCAtNDc2LDExICsxMDYsMTAgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBl
IHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUdXJidWxlbmNlIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8
PCAiIHR5cGU9XCIiIDw8IHR5cGUoKSA8PCAiXCIgIgorICAgIHRzIDw8ICIgdHVyYnVsZW5jZVR5
cGU9XCIiIDw8IHR1cmJ1bGVuY2VUeXBlKCkgPDwgIlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1
ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkg
PDwgIlwiICIKICAgICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJcIiAiCiAgICAgICAg
PDwgIm51bU9jdGF2ZXM9XCIiIDw8IG51bU9jdGF2ZXMoKSA8PCAiXCIgIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
aW5kZXggNGQ1MzZiMzdhODBhYWRmOTExZWJmY2U4OTc3NGNkM2NjZWNiNWNmYi4uMTViYzRjNzA5
NzBhNTc4ODUyOTkzOGRmNmQwNjg5NmM1YjQ2ZmE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC00LDcg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2Vk
Lmh1PgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsOSArMjQsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM4LDEwICszNiwxMCBAQCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsK
IAogY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlw
ZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVy
YnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRj
aFRpbGVzKTsKIAotICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICBib29sIHNldFR5cGUoVHVyYnVsZW5jZVR5cGUpOworICAgIFR1cmJ1bGVuY2VU
eXBlIHR1cmJ1bGVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90dXJidWxlbmNlVHlwZTsgfQor
ICAgIGJvb2wgc2V0VHVyYnVsZW5jZVR5cGUoVHVyYnVsZW5jZVR5cGUpOwogCiAgICAgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VGcmVxdWVuY3lYOyB9CiAgICAg
Ym9vbCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7CkBAIC01OSw3MCArNTcsMTkgQEAgcHVibGlj
OgogICAgIGJvb2wgc2V0U3RpdGNoVGlsZXMoYm9vbCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmlt
YWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZv
ciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBh
aW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXpl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAg
ICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAgICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5n
U2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAg
ICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3Jb
MiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Js
b2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAg
ICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERh
dGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0
aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgot
ICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAg
ICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAgaW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpv
YnM7Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1
bGVuY2UqIGZpbHRlcjsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0g
ICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0
aXRjaERhdGE7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07
Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJz
Kik7Ci0KLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBm
bG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUdXJidWxlbmNlIjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNs
b3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRl
clJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0
YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5
WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3Rp
dGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBz
dGFydFksIGludCBlbmRZKSBjb25zdDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZv
aWQqKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBUdXJidWxlbmNlVHlwZSBtX3R5cGU7CisgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHVyYnVsZW5j
ZVR5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBtX2Jhc2VGcmVx
dWVuY3lZOwogICAgIGludCBtX251bU9jdGF2ZXM7CkBAIC0xMzEsNCArNzgsMyBAQCBwcml2YXRl
OgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJmODdi
NTk5ZTBkNTk3MzM4MmZhNTQ4NjFhYjZkMmZkN2RkNTVjZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGaWx0ZXI6OkZpbHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFR5
cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCisgICAgLCBtX3JlbmRlcmluZ01v
ZGUocmVuZGVyaW5nTW9kZSkKK3sKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBGbG9hdFJlY3Q+IEZpbHRlcjo6YXBwbHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgRmls
dGVyUmVzdWx0VmVjdG9yIHN0YWNrOworICAgIEZpbHRlck91dHB1dCBvdXRwdXQoV1RGTW92ZShn
ZW9tZXRyeSksIG1fcmVuZGVyaW5nTW9kZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGFwcGx5KG91
dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIEFTU0VSVChzdGFjay5pc0VtcHR5KCkpOworICAgIHJlc3VsdC0+dHJh
bnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBy
ZXR1cm4geyByZXN1bHQtPmltYWdlQnVmZmVyKCksIHJlc3VsdC0+YWJzb2x1dGVEcmF3aW5nUmVj
dCgpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGEyZDk5NzkzYjBkYjIy
NThiYzQ3NmRkY2MyOWMwY2UyNjExMGJjMWYuLjMzMGRmZDg4NzgzZTk2MDAyMTAzODZiZmU5NDIx
ZmZiY2Q4ZjRhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MCw1OSArMjEsMjYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsK
KyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6YXBwbHk7CiAKLWNsYXNzIEZpbHRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZpbHRlcj4gewogcHVibGljOgotICAgIEZpbHRlcihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBmbG9hdCBmaWx0ZXJTY2FsZSA9IDEpCi0gICAg
ICAgIDogbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAgICAgLCBt
X2ZpbHRlclNjYWxlKGZpbHRlclNjYWxlKQotICAgIHsgfQotICAgIHZpcnR1YWwgfkZpbHRlcigp
ID0gZGVmYXVsdDsKLQotICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVy
PiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsg
fQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJuIG1fc291cmNlSW1hZ2Uu
Z2V0KCk7IH0KLQotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBm
aWx0ZXJSZXNvbHV0aW9uOyB9Ci0KLSAgICBmbG9hdCBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsdGVyU2NhbGU7IH0KLSAgICB2b2lkIHNldEZpbHRlclNjYWxlKGZsb2F0IHNjYWxl
KSB7IG1fZmlsdGVyU2NhbGUgPSBzY2FsZTsgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07
IH0KLQogICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyaW5nTW9kZTsgfQotICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQotCi0g
ICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBz
aXplKSBjb25zdCB7IHJldHVybiBzaXplICogbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0ID0gMDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gYXBwbHko
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+
JiYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAgOiBtX2ZpbHRlclJlc29sdXRpb24oZmls
dGVyUmVzb2x1dGlvbikKLSAgICB7Ci0gICAgfQorICAgIEZpbHRlcihSZW5kZXJpbmdNb2RlLCBU
eXBlKTsKKworICAgIHZpcnR1YWwgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0
ID0gMDsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7
Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxl
IHsgMSB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1
MWMzNDhlYzdmNjNlNGNjOTI3ZGIxMDguLmZjYTg0NmRmMTU4ZTNlNmE5M2MwZDA2ZDViM2EzOWJj
M2RmNTkwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI0LDY2MCArMjQsMzcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
LQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgot
I2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2Vs
ZXJhdGUuaD4KLSNlbmRpZgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIs
IFR5cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlKHR5cGUpCi17Ci19Ci0KLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0g
ZGVmYXVsdDsKLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKLXsKLSAgICBtX2Fic29sdXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIGZvciAoYXV0
byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUoZWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBjbGlwQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCgp
CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewot
ICAgIC8vIEZpbHRlcnMgaW4gU1ZHIGNsaXAgdG8gcHJpbWl0aXZlIHN1YnJlZ2lvbiwgd2hpbGUg
Q1NTIGRvZXNuJ3QuCi0gICAgaWYgKG1fY2xpcHNUb0JvdW5kcykKLSAgICAgICAgbV9hYnNvbHV0
ZVBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChtX21heEVmZmVjdFJlY3QpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZW5jbG9zaW5nSW50
UmVjdChtX21heEVmZmVjdFJlY3QpKTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3Q7CisgICAg
Zm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgZHJhd2luZ1JlY3QudW5pdGUoaW5w
dXQtPmRyYXdpbmdSZWN0KCkpOworICAgIHJldHVybiBnZW9tZXRyeS5tYXhEcmF3aW5nUmVjdChp
bnB1dHMsIGRyYXdpbmdSZWN0KTsKIH0KIAotRmxvYXRQb2ludCBGaWx0ZXJFZmZlY3Q6Om1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQgdXNlclNwYWNlUG9pbnQpIGNvbnN0
CitGaWx0ZXJSZXN1bHQqIEZpbHRlckVmZmVjdDo6YXBwbHlQbGF0Zm9ybShGaWx0ZXJPdXRwdXQm
IG91dHB1dCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QKIHsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQ
b2ludCh1c2VyU3BhY2VQb2ludCwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24pOwotICAgIGFic29sdXRlUG9pbnQubW92ZUJ5KC1tX2Fic29s
dXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OwotfQot
Ci1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbG9jYXRp
b24gPSBtX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCk7Ci0gICAgbG9jYXRpb24ubW92ZUJ5
KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6
OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
LXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAg
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgc2Nh
bGUpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0uc2Nh
bGUoc2NhbGUpLnRyYW5zbGF0ZSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAg
ICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3Qoc3JjUmVjdCk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0
ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgLy8g
RkVUaWxlLCBGRVR1cmJ1bGVuY2UsIEZFRmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0
YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCi0gICAgRmxvYXRSZWN0IHN1YnJl
Z2lvbjsKLSAgICBpZiAodW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBpbnB1dEVmZmVj
dHMoKS5zaXplKCkpIHsKLSAgICAgICAgc3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBp
bnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFBy
aW1pdGl2ZVN1YnJlZ2lvbik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgc3VicmVn
aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVy
IGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQg
ZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAo
ZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJy
ZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBi
b3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAg
ICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmICho
YXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdo
dCgpKTsKLQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwotCi0g
ICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVy
LmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJS
ZXNvbHV0aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1
c2UgaXQgdG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNv
b3JkaW5hdGVzLgotICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3Vi
cmVnaW9uKTsKLQotICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVy
IHJlZ2lvbi4KLSAgICBhdXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIu
ZmlsdGVyUmVnaW9uKCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmls
dGVyUmVzb2x1dGlvbik7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRl
U2NhbGVkRmlsdGVyUmVnaW9uKTsKLQotICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJy
ZWdpb24pOwotICAgIHJldHVybiBzdWJyZWdpb247Ci19Ci0KLUZpbHRlckVmZmVjdCogRmlsdGVy
RWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obnVtYmVyIDwgbV9pbnB1dEVmZmVjdHMuc2l6ZSgp
KTsKLSAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKLX0KLQotc3Rh
dGljIHVuc2lnbmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCplZmZlY3QsIEhh
c2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCi17Ci0gICAgYWxsRWZmZWN0
cy5hZGQoZWZmZWN0KTsKLSAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5udW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7Ci0gICAgICAg
IGNvbGxlY3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFsbEVm
ZmVjdHMuc2l6ZSgpOwotfQotCi11bnNpZ25lZCBGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZF
ZmZlY3RJbnB1dHMoKSBjb25zdAotewotICAgIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4g
YWxsRWZmZWN0czsKLSAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhpcywgYWxsRWZmZWN0cyk7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCi17Ci0gICAgaWYgKGhhc1Jlc3VsdCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKLSAgICAgICAg
aW4tPmFwcGx5KCk7Ci0gICAgICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIC8vIENvbnZlcnQgaW5wdXQgcmVzdWx0cyB0byB0aGUgY3VycmVu
dCBlZmZlY3QncyBjb2xvciBzcGFjZS4KLSAgICAgICAgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShpbiwgaSk7Ci0gICAgfQotCi0gICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAg
ICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5k
YXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0
ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0
ICIgPDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9uICIgPDwgbV9maWx0ZXIuZmls
dGVyUmVzb2x1dGlvbigpKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gdGhpcy0+ZHJhd2luZ1Jl
Y3QoaW5wdXRzLCBvdXRwdXQuZ2VvbWV0cnkoKSk7CiAKLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50
UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlcXVpcmVz
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIHBsYXRmb3JtIHNw
ZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KLSAgICBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCkKLXsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRp
cGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4K
LSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBpbnQg
cGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7Ci0KLSAgICAvLyBXZSBtdXN0
IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKLSAgICBBU1NF
UlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3Qq
IGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KLSAg
ICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRh
KTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBp
eGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5Q
aXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhl
bHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgo
c2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAg
IHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0gICAgICAgICAgICBwaXhlbERh
dGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7Ci0KLSAg
ICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAgICBpZiAoIXBpeGVsQXJyYXlM
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpbnQgbnVt
UGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFj
aCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlm
IG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFs
cGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4
ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBh
bmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAg
ICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsK
LSAgICB9Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCi17Ci0gICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6
bnVsbG9wdDsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgp
Ci17Ci0gICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJlZ2FyZGxlc3MgdGhhdCB0aGUgY3VycmVu
dCBlZmZlY3QgaGFzCi0gICAgLy8gYSByZXN1bHQuIENhbiBiZSB1c2VkIGlmIGFuIGVmZmVjdCBp
cyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCi0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICBj
bGVhclJlc3VsdCgpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBtX2lu
cHV0RWZmZWN0cy5hdChpKS5nZXQoKS0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7Ci19Ci0KLUlt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKLXsKLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBp
bWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7
Ci0KLSAgICBpZiAoIWhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKTsKLQotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCks
IG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11
bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJl
Y3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhz
Y2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93
PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgIGF1dG8g
cmVzdWx0ID0gb3V0cHV0LmNyZWF0ZUZpbHRlclJlc3VsdChkcmF3aW5nUmVjdCwgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFy
cmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQo
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0g
ICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNo
ZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBp
ZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVj
dCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9u
IHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291
cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8
IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0
aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5
IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgot
ICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAg
fHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47CiAKLSAg
ICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAg
aWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhP
cmlnaW4gPSAwOworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChvdXRwdXQucmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7CisgICAgICAgIGlmIChhcHBs
eUNvcmVJbWFnZShpbnB1dHMsIHNvdXJjZUltYWdlLCAqcmVzdWx0KSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3Qu
bWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAg
IHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAgIGludCB5T3JpZ2luID0gc2Nh
bGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsK
LSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQot
ICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQ
YWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0
aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNl
U2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVz
dGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0
LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9
IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4
T3JpZ2luKSAqIDQ7Ci0KLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCAr
PSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KLQotc3RhdGlj
IHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1
dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5w
dXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndp
ZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBk
ZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0g
ICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgp
KTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQg
PSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVu
dCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VD
b21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNd
OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8g
MjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlu
cHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBp
bnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhl
aWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsK
LSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRh
KCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9u
ZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21w
b25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVz
dGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJj
ZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRb
M107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBo
YTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50
Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAw
OwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0g
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNv
bXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0K
LSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBG
SVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgotCi0gICAgSW50
UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAg
ICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5h
dGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUg
aW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAg
IGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJu
IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhhRm9ybWF0KTsKLX0K
LQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VC
dWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNp
b24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhl
IGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAo
IWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8v
IENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBm
cm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4
ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17
Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQs
IGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9
IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZl
clJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRw
dXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0
aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRl
ZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0
aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8g
ZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVs
QnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNv
bnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMo
Y29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0K
LQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRl
ckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1h
Z2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAg
ICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNl
KSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRp
b24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2Uo
KSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQg
Zm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAg
ICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNl
ID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6
ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAg
ICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1h
Z2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwot
Ci0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBw
cmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1f
aW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVy
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0g
ICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFj
ZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsK
LSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0
U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9y
bWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4
ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShm
b3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0
aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi1JbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAg
TE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQg
JWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndp
ZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3Qg
JXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMp
OwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQo
IWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwot
Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVz
dWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1
ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZp
bHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlz
IGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAg
IEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJl
c3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXpl
KTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmls
dGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsK
LSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2Ug
bmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8g
V2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBp
cyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFu
aXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYm
IHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAg
ICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBu
b24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNvbG9y
U3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRq
dXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNw
YWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhN
RTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIg
Y29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9y
dCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1
bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAg
ICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwogI2VuZGlmCi19CiAKLVRleHRTdHJlYW0mIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhlIGZpbHRlciBwcmltaXRpdmVzIGhl
cmUgbGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3NzaWJsZSBhdCB0aGUgbW9tZW50LCBiZWNh
dXNlIHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgdGFyZ2V0IG9i
amVjdC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9u
VHlwZTo6RGVidWdnaW5nKSB7Ci0gICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxw
aGFJbWFnZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2Ui
LCBtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3Vs
dCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgdHMgPDwgIlxuIiA8
PCBpbmRlbnQ7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KKyAgICBpZiAoYXBwbHlTb2Z0d2Fy
ZShpbnB1dHMsIHNvdXJjZUltYWdlLCAqcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5s
ZWFrUmVmKCk7CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEZpbHRlckVmZmVjdCYgZmlsdGVyKQotewotICAgIC8vIFVzZSBhIG5ldyBzdHJlYW0gYmVjYXVz
ZSB3ZSB3YW50IG11bHRpbGluZSBtb2RlIGZvciBsb2dnaW5nIGZpbHRlcnMuCi0gICAgVGV4dFN0
cmVhbSBmaWx0ZXJTdHJlYW07Ci0gICAgZmlsdGVyLmV4dGVybmFsUmVwcmVzZW50YXRpb24oZmls
dGVyU3RyZWFtLCBGaWx0ZXJFZmZlY3Q6OlJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKTsK
LSAgICAKLSAgICByZXR1cm4gdHMgPDwgZmlsdGVyU3RyZWFtLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggYmZhODc3Y2FhM2U1ZjQyMTFmNzM5YzFiZTM3NjcwN2RmNmVjZDJhNi4uNmQxNDc4MjMxYTFh
NGRmMTg1ZDY1Zjk2ZGE0ZDFmZDJhYmUzNTNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwyMzcg
KzIyLDM2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Cisj
aW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVmZmVjdDsK
LWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0
Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZp
bHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBG
aWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07
CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJl
ZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmls
dGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qgewot
ICAgICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRy
YW5zZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAg
ICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAg
RHJvcFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAg
ICAgSW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9y
cGhvbG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAg
ICAgICBUaWxlLAotICAgICAgICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAg
ICAgICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7
Ci0KLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNp
dmUoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQot
ICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwotICAgIHVuc2ln
bmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMu
c2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0
OwotICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhl
IG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0g
ICAgfQotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50
UmVjdCYpIGNvbnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1
dHMuCi0gICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwot
Ci0gICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgot
ICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0g
ICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9
IGFscGhhSW1hZ2U7IH0KLQotICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2Fic29sdXRlUGFpbnRSZWN0OyB9Ci0gICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50
UmVjdChjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRS
ZWN0ID0gYWJzb2x1dGVQYWludFJlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZl
Y3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3Qg
PSBtYXhFZmZlY3RSZWN0OyB9IAotCi0gICAgdm9pZCBhcHBseSgpOwotCi0gICAgLy8gQ29ycmVj
dCBhbnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZp
bHRlciBvcGVyYXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFs
aWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCi0g
ICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8g
cGVyZm9ybSBjb3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0
SWZOZWVkZWQoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpOwotCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUo
KSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmlydHVh
bCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0KLQot
ICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5n
IH07Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBl
OjpUZXN0T3V0cHV0KSBjb25zdDsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFy
ZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS4KLSAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTYxNC4KLSAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hhc1g7IH0K
LSAgICB2b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQotCi0gICAg
Ym9vbCBoYXNZKCkgY29uc3QgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJv
b2wgdmFsdWUpIHsgbV9oYXNZID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZhbHVl
KSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2hhc0hlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUp
IHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9
Ci0gICAgdm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFy
aWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRF
ZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2Vm
ZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRV
bmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0
ZVVuY2xpcHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50
RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUg
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFz
c1R5cGU7IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAg
ICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAg
ICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0K
LSAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMg
PSB2YWx1ZTsgfQotCi0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdD
b2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7
IH0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Up
IHsgbV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7
IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0K
LSAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8Zmxv
YXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZh
bHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9y
bWFsaXplZFZhbHVlczsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmls
dGVyJiwgVHlwZSk7Ci0gICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgPSAwOwogCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3
aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAg
ICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxw
aGFdLgotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIElmIGEgcHJlLW11bHRpcGxpZWQgaW1hZ2UsIGNo
ZWNrIGV2ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQgY29ycmVjdCBpZiBuZWNlc3NhcnkuCi0g
ICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotCi0gICAgdm9pZCBjbGlw
QWJzb2x1dGVQYWludFJlY3QoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgPSAwOwotCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9p
ZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5
JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24o
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBp
eGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVs
QnVmZmVyJik7Ci0gICAgCi0KLSAgICBGaWx0ZXImIG1fZmlsdGVyOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciBtX2lucHV0RWZmZWN0czsKLQotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0OworcHJvdGVjdGVkOgorICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9u
OjpGaWx0ZXJGdW5jdGlvbjsKIAotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAg
ICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZH
IHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBz
cGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmln
Z2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7
Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3Jk
aW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMu
Ci0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Owog
Ci0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1l
bnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKLSAgICAvLyBm
aWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RC
b3VuZGFyaWVzOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3Vs
dCYpIGNvbnN0ID0gMDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFw
cGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJl
Y3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJvb2wgbV9hbHBoYUltYWdl
IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hh
c0hlaWdodCB7IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0
cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24g
b2YgaXRzIGlucHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQotI2lm
IEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpMaW5lYXJTUkdCKCkgfTsKLSNlbHNlCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1f
b3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Cisj
aWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIGFwcGx5Q29yZUltYWdlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jl
c3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAot
ICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CisKKyAgICBGaWx0ZXJSZXN1
bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Q7CiB9OwogCi1XRUJDT1JF
X0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgRmlsdGVyRWZmZWN0Jik7Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0b3IgPSBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+OwordXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0cyA9IEhhc2hNYXA8UmVm
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVyRWZmZWN0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA+PSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVtICYmIGZ1bmN0aW9uLnR5cGUoKSA8PSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtOyB9CitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2ZjMzFlNWI5ZTlhOWVj
NjA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0q
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIK
LQotI2lmIFVTRShDT1JFX0lNQUdFKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUo
Ym9vbCBhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQsIEZpbHRlckVmZmVjdCYgbGFz
dEVmZmVjdCkKLXsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoYWNjZWxlcmF0ZWRGaWx0
ZXJSZW5kZXJpbmdFbmFibGVkKQotICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OnRyeUNyZWF0ZShsYXN0RWZmZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxh
c3RFZmZlY3QpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQotfSAvLyBuYW1z
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RS
ZW5kZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNS
ZXN1bHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVj
dCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSA9IDA7Ci0gICAg
Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgCi1w
cm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgdmly
dHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZTQx
ZmRlZmM0YTAxMDUzMDBhMDI4NDBjZmEyYjhkZDQ2N2Y3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgK
QEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJSZXByZXNlbnRhdGlvbi5o
IgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIK
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFRl
eHRTdHJlYW07Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyR2VvbWV0
cnk7CitjbGFzcyBGaWx0ZXJPdXRwdXQ7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKKyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisK
KyAgICAgICAgRkVNaW5pbXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAg
ICAgIEZFQ29sb3JNYXRyaXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAg
IEZFQ29tcG9zaXRlLAorICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1
c2VMaWdodGluZywKKyAgICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNo
YWRvdywKKyAgICAgICAgRkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAg
IEZFSW1hZ2UsCisgICAgICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAg
ICAgRkVPZmZzZXQsCisgICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxl
LAorICAgICAgICBGRVR1cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBT
b3VyY2VHcmFwaGljLAorCisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9
OworCisgICAgRmlsdGVyRnVuY3Rpb24oVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBl
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GaWx0ZXJGdW5jdGlvbigpID0gZGVmYXVs
dDsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgdmly
dHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKworICAgIHZp
cnR1YWwgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0ID0gMDsKKyAgICAKKyAg
ICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpU
ZXN0T3V0cHV0KSBjb25zdCA9IDA7CisgICAgCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpD
U1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0
ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAor
ICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVU
dXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNl
QWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFw
aGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41MzI3Y2MyZjRiM2VmODE0MTc2NTQxZDkzY2I2MTYwY2QzNzRkZjlmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJHZW9t
ZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQorICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVy
UmVnaW9uKQorICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQoreworfQor
CitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6Om1heERyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGRyYXdpbmdSZWN0OworLy8gICAgICAgIGF1dG8gbWF4RHJhd2luZ1JlY3QgPSBkcmF3
aW5nUmVjdDsKKy8vICAgICAgICBtYXhEcmF3aW5nUmVjdC5pbnRlcnNlY3QobWF4UHJpbWl0aXZl
U3VicmVnaW9uKGlucHV0cykpOworLy8gICAgICAgIHJldHVybiBtYXhEcmF3aW5nUmVjdDsKK30K
KworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjpwcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAgaWYgKGlucHV0cy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmaWx0ZXJSZWdpb24oKTsKKworICAgIEZsb2F0UmVjdCBzdWJy
ZWdpb247CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgc3VicmVnaW9u
LnVuaXRlKGlucHV0LT5wcmltaXRpdmVTdWJyZWdpb24oKSk7CisKKyAgICByZXR1cm4gc3VicmVn
aW9uOworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6Om1heFByaW1pdGl2ZVN1YnJlZ2lv
bihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3QKK3sKKyAgICBGbG9hdFJl
Y3Qgc3VicmVnaW9uID0gcHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cyk7CisgICAgc3VicmVnaW9u
LmludGVyc2VjdChmaWx0ZXJSZWdpb24oKSk7CisgICAgcmV0dXJuIHN1YnJlZ2lvbjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlKEVu
Y29kZXImKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9w
dGlvbmFsPHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4+IEZpbHRlckdlb21ldHJ5Ojpk
ZWNvZGUoRGVjb2RlciYpCit7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4N2I0N2RhOWZmYTI4MmE1OTZh
MTE4Y2U3NjJmZWNmNDVlNjI5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpOworICAgIHZpcnR1YWwgfkZpbHRl
ckdlb21ldHJ5KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdl
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBp
bnB1dHMpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHRyYW5zZm9ybVRvQWJzb2x1dGVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QgeyByZXR1cm4gcmVjdDsgfQorCisgICAg
RmxvYXRSZWN0IG1heERyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0
IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0OworICAgIEZsb2F0UmVjdCBtYXhQcmltaXRp
dmVTdWJyZWdpb24oY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4+IGRlY29kZShEZWNvZGVyJik7CisKK3Byb3Rl
Y3RlZDoKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgRmxvYXRSZWN0IG1fc291
cmNlSW1hZ2VSZWN0OworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0
cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lY2Q3N2VhNWYwNTFlODQ1YTkzMWViYWMyYmFmZDkxZjliMzZh
NmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZpbHRlck91dHB1dC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJP
dXRwdXQ6OkZpbHRlck91dHB1dChzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2Vv
bWV0cnksIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IG1fZ2VvbWV0cnkoV1RG
TW92ZShnZW9tZXRyeSkpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKK3sK
K30KKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmlsdGVyT3V0cHV0OjpjcmVhdGVGaWx0ZXJSZXN1
bHQoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEZpbHRlclJlc3VsdDo6Y3JlYXRlKCptX2dlb21ldHJ5
LCBkcmF3aW5nUmVjdCwgbV9yZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNwYWNlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFlOGNmZjE3M2Iw
NGU5OTM5MmFiMjdlMTQyMmFjYjRiZjUyMzllNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5
OworY2xhc3MgRmlsdGVyUmVzdWx0OworY2xhc3MgRmlsdGVyRnVuY3Rpb247CisKK2NsYXNzIEZp
bHRlck91dHB1dCB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzdWx0cyA9IEhhc2hNYXA8UmVmPGNv
bnN0IEZpbHRlckZ1bmN0aW9uPiwgUmVmPEZpbHRlclJlc3VsdD4+OworCisgICAgRmlsdGVyT3V0
cHV0KHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiwgUmVuZGVyaW5nTW9kZSk7CisK
KyAgICBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkoKSB7IHJldHVybiAqbV9nZW9tZXRyeTsgfQor
ICAgIFJlc3VsdHMmIHJlc3VsdHMoKSB7IHJldHVybiBtX3Jlc3VsdHM7IH0KKyAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0K
KworICAgIFJlZlB0cjxGaWx0ZXJSZXN1bHQ+IGNyZWF0ZUZpbHRlclJlc3VsdChjb25zdCBGbG9h
dFJlY3QmIGRyYXdpbmdSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4gbV9nZW9tZXRyeTsKKyAgICBSZXN1
bHRzIG1fcmVzdWx0czsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEw
M2E1YWI3NGMwOTQwZWY4YWFlMmY5Y2VlOWI3NWUyZjFkMDY1YWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlZmVyZW5j
ZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RmlsdGVyOworCit1c2luZyBGaWx0ZXJSZWZlcmVuY2UgPSBSZWY8RmlsdGVyPjsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRkYmZmN2Q4MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTliMjAxMWNlZTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJl
c2VudGF0aW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgRmlsdGVyUmVwcmVzZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBUZXN0T3V0
cHV0LAorICAgIERlYnVnZ2luZworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1
bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJS
ZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlZGUyMmVkYjk3NWIwYWIwMGZlOWFkNjMwNDg3ZDhmNmQ0
ZTJlODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIK
KyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorI2luY2x1ZGUgIkZpbHRlclJlc3VsdENvcmVJbWFn
ZS5oIgorI2VuZGlmCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8
YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNj
ZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitS
ZWZQdHI8RmlsdGVyUmVzdWx0PiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZShjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAoZHJhd2luZ1JlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGdlb21ldHJ5LnRyYW5zZm9ybVRvQWJzb2x1dGVSZWN0KGRyYXdpbmdSZWN0KS5z
aXplKCkpKTsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RmlsdGVyUmVzdWx0Q29yZUltYWdlKGdlb21ldHJ5LCBkcmF3aW5nUmVjdCwgcmVuZGVyaW5nTW9k
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGaWx0ZXJSZXN1bHRTb2Z0d2FyZShnZW9tZXRyeSwgZHJhd2luZ1JlY3QsIHJl
bmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkpOworfQorCitGaWx0ZXJS
ZXN1bHQ6OkZpbHRlclJlc3VsdChjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAg
ICA6IG1fZ2VvbWV0cnkoZ2VvbWV0cnkpCisgICAgLCBtX2RyYXdpbmdSZWN0KGRyYXdpbmdSZWN0
KQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCisgICAgLCBtX3Jlc29sdXRp
b25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkK
K3sKK30KKworRmxvYXRSZWN0IEZpbHRlclJlc3VsdDo6YWJzb2x1dGVEcmF3aW5nUmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZ2VvbWV0cnkudHJhbnNmb3JtVG9BYnNvbHV0ZVJlY3QobV9k
cmF3aW5nUmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQor
ICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNy
Yy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0
ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgp
KTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXpl
LndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVz
dC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3Qg
dWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2Fm
ZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24u
ZGF0YSgpOworCisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBp
bnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAy
NTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihz
b3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEg
LyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAg
IHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0
OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0Fs
cGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVS
QVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAg
IHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwor
ICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0g
cm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2Uu
ZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5w
dXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Cisg
ICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAg
ICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNv
bnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICog
NCkudW5zYWZlR2V0KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0
aW5hdGlvbi5kYXRhKCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkg
eworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICog
MjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMl0gPSAwOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyUmVzdWx0OjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0
aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4
ZWxCdWZmZXIqIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBhbHBoYUZvcm1hdCkKK3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZF
eGlzdHMoYWxwaGFGb3JtYXQpOworICAgIGlmIChwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
ICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
YWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9jb2xvclNwYWNlIH07CisgICAgYXV0
byBsb2dpY2FsU2l6ZSA9IGFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCk7CisKKyAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICBwaXhl
bEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQo
KSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52
YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxlZFNpemUobG9naWNhbFNpemUp
OworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUp
KTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVs
QnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAg
IGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSkKKyAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEocGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVm
ZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlz
dHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlV
bnByZW11bHRpcGx5aW5nQWxwaGEocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2Fs
ZWRTaXplKTsKKworICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJSZXN1bHQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUg
c2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNv
cmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQ
aXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsK
KyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVyUmVzdWx0OjpyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8vIFRo
aXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0
cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xv
ciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1
dAorICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisg
ICAgcmV0dXJuIGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vs
c2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRl
ZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyhjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0
KHJlY3QpOworICAgIHNjYWxlZFJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
SW50U2l6ZSBzY2FsZWRQYWludFNpemUoYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSk7Cisg
ICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIC8vIElu
aXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50
aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgorICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAg
fHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxl
bmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRl
cnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8
IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwor
ICAgIGludCB4RGVzdCA9IDA7CisgICAgaWYgKHhPcmlnaW4gPCAwKSB7CisgICAgICAgIHhEZXN0
ID0gLXhPcmlnaW47CisgICAgICAgIHhPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeEVuZCA9
IHNjYWxlZFJlY3QubWF4WCgpOworICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkpCisgICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKKworICAgIGludCB5
T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7CisgICAgaW50IHlEZXN0ID0gMDsKKyAgICBpZiAoeU9y
aWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKKyAgICAgICAgeU9yaWdpbiA9
IDA7CisgICAgfQorICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7CisgICAgaWYgKHlF
bmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHlFbmQgPSBzY2FsZWRQYWlu
dFNpemUuaGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0Owor
ICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKKyAg
ICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7CisgICAg
dWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3Qg
KiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICBjb25zdCB1aW50OF90KiBz
b3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsK
KyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKKyAg
ICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOworICAgICAgICBz
b3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKKyAgICAgICAgKyt5T3JpZ2luOworICAgIH0K
K30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyUmVzdWx0OjpnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFuIElt
YWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8g
aGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpC
R1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJu
YWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBj
b252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAgIHJldHVybiBjb252ZXJ0ZWRJbWFn
ZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKK30KKworc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gRmlsdGVyUmVzdWx0OjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQs
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEludFJlY3Qg
cmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOworICAgIHJlY3Quc2NhbGUoMSAv
IG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdl
QnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpC
R1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgcmVjdCk7
CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFG
b3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weVBp
eGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgYXV0byogcGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KSA/ICZwaXhlbEJ1ZmZlcklm
RXhpc3RzKGFscGhhRm9ybWF0KS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAgIGlmICghcGl4ZWxC
dWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lv
biBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZl
ciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICAgICAgICAgIEludFJlY3QgcmVj
dCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUo
KSkgfTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdl
dENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsICpj
b2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVk
UGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBpeGVsQnVm
ZmVyID0gdGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICgh
cGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgaWYgKGF1dG8g
Y29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZm
ZXIsIGFscGhhRm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRl
cyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcyhwaXhlbEJ1ZmZlci0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpj
b3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUg
b24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZh
bGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1h
Z2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxl
bmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQg
Y29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKwor
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+
PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxB
cnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5jcmVt
ZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBp
eGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZh
bFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFsz
XSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVu
UGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4
ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhl
bHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChwaXhl
bERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsK
KyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0Owor
CisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1
c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1QaXhl
bHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAor
ICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFtcCBl
YWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24K
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgq
cGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAgICAg
ICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxw
aGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlclJlc3VsdDo6
dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQor
eworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRz
IGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vsc2UKKyAgICBp
ZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1
ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBz
dXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBp
bWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50
cmFuc2Zvcm1Db2xvclNwYWNlKG1fY29sb3JTcGFjZSwgY29sb3JTcGFjZSk7CisKKyAgICBtX2Nv
bG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIg
PSBzdGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51
bGxvcHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjViOWRhOTE1MjNhNjg4YzQyZjYzZDI1ZGE3YzM4YzljZTAzMzMzYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVzdWx0LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdl
QnVmZmVyOworY2xhc3MgUGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlclJlc3VsdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZpbHRlclJlc3VsdD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8
RmlsdGVyUmVzdWx0PiBjcmVhdGUoY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJl
Y3QmIGRyYXdpbmdSZWN0LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKKyAgICB2aXJ0dWFsIH5GaWx0ZXJSZXN1bHQoKSA9IGRl
ZmF1bHQ7CisgICAgCisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3aW5nUmVjdDsgfQorICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWN0KCkgY29u
c3Q7CisKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wcmltaXRpdmVTdWJyZWdpb247IH0KKyAgICAKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICAKKyAgICBib29s
IGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQorICAgIHZvaWQg
c2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2UgPSBhbHBoYUlt
YWdlOyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZF
eGlzdHMoKSA9IDA7CisgICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSA9IDA7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgcGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBQaXhlbEJ1ZmZlciogcGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIHZv
aWQgY29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgCisgICAgdm9pZCBjb3JyZWN0UHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJvdGVjdGVkOgorICAgIEZpbHRlclJlc3VsdChj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIFJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgRGVzdGluYXRpb25Db2xvclNwYWNlKTsK
KworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1h
Z2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Up
IGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVs
QnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25D
b2xvclNwYWNlKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsK
KyAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07CisgICAgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIG1fZ2VvbWV0cnk7CisKKyAgICBGbG9hdFJlY3QgbV9kcmF3aW5nUmVjdDsKKyAgICBSZW5k
ZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsK
KyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisK
K3VzaW5nIEZpbHRlclJlc3VsdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj47CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDFh
YjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLjRiYzZiYzcxYzg1ZGZiMWFl
MzkxZGViMjQzZGM4MTQ1NzVkYjBjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApAQCAt
MzYsMTIgKzM2LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0
LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3Np
dGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91
c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQg
b2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4K
LSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRp
b24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZl
cihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKy8vICAgIC8vIFRvIHNjYWxlIFosIG1hcCBh
IHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9u
IGJ5IHouCisvLyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRG
cm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNw
YWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKy8vICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKIH0K
IAogTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIFBvaW50TGlnaHRTb3VyY2U6OmNv
bXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1
OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFkNmNmM2EzLi44NDdhNjllMjlhZjIwYmMyOTZkYTRk
ZGUzNDA0YzI3ZDU5Nzc5Mjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjAgKzIxLDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmls
dGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VB
bHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhh
PiBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3Vy
Y2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VB
bHBoYSgpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUo
KQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpT
b3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBT
b3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorY29uc3QgQXRvbVN0cmlu
ZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0
TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zp
bHRlclJlc3VsdCogU291cmNlQWxwaGE6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciopIGNvbnN0CiB7Ci0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlz
RW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3Qs
IENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7Cisg
ICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIpOwogfQogCi1U
ZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3Qm
IHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCks
IFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNl
RWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5k
KCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgK
aW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uZWJhZDgyY2Q2
ZDQxN2Y5YjA4NTRhZGRkZjRiOWU1MDFkNzM2ZjQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5l
IFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJj
ZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0
aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAgc3RhdGljIFJl
ZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRl
ckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIFNv
dXJjZUFscGhhKCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBh
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5k
ZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzExMDdkNzgzOTJlOS4uNmVkMTc2YTEyNjcw
OWRkNTgwM2FiZGM0NWYzYjljY2MwZDAzZjM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxOCArMjEsMjEgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJP
dXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3Jh
cGhpYzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhp
YygpKTsKK30KKworU291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYygpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6U291cmNlR3JhcGhpYykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
b3VyY2VHcmFwaGljKGZpbHRlcikpOwogfQogCiBjb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VHcmFw
aGljOjplZmZlY3ROYW1lKCkKQEAgLTQwLDI3ICs0NCwyMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBT
b3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKICAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQog
Ci12b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0
UmVjdCBTb3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVy
LnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LnNvdXJjZUltYWdlUmVjdCgpOwogfQogCi12b2lkIFNvdXJjZUdy
YXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIFNvdXJjZUdyYXBo
aWM6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNv
dXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7
ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICBy
ZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgc291cmNlSW1hZ2UpOwogfQogCi1UZXh0
U3RyZWFtJiBTb3VyY2VHcmFwaGljOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CitUZXh0U3RyZWFtJiBTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VHcmFwaGljXVxuIjsK
ICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDMwY2Q1NGYyNDUzYmJhOGEzNzc2
MzIxMzI4ZWYyMTA2YjdmY2E1YmYuLjVkOGYxY2JmOTFjN2FlOTgzMjYzZDQ1OGM3NmFjOTVmZGNi
OWVhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTgsNDEgKzE5LDM0IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUdyYXBoaWNfaAotI2RlZmluZSBTb3VyY2VH
cmFwaGljX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNlR3Jh
cGhpYyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAgICAgICAgCi0gICAgc3RhdGlj
IFJlZjxTb3VyY2VHcmFwaGljPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxTb3Vy
Y2VHcmFwaGljPiBjcmVhdGUoKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZl
Y3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0ZXImIGZpbHRlcikK
LSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VHcmFwaGljKQotICAg
IHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsKIAogICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KIAot
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1l
c3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmKSBj
b25zdCBvdmVycmlkZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpT
b3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgp
ID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgYXBw
bHlDb3JlSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgRmlsdGVyUmVzdWx0JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYg
Ly8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4u
ZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmExZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFj
Y29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMg
Y29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0
LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNl
VG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwg
bWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJl
Y3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNl
clNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1
ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0g
ICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRz
QXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0
b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5n
RGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAg
ICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5n
Q29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25l
QW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0g
ICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBm
IC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0g
ICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2
YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9
PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAg
ZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0
ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlv
bi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBt
X3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQ
b2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVy
KHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91
c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFw
cGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLworLy8gICAgcGFpbnRpbmdEYXRh
LmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0
aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKy8v
CisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8vICAgICAgICBwYWludGluZ0Rh
dGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1
bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAg
ZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29u
ZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVB
bmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOwor
Ly8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgw
LjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1
bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9s
ZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxh
ckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCisvLyAgICAg
ICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOworLy8gICAgZWxzZSBpZiAobV9z
cGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFy
RXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYK
Ky8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0
U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM2NjNlZjFhNGU4YjkyNWQ3ZDEyY2NiZDkwOWJkYzAyOTM2MDZjNjYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgRmlsdGVyUmVzdWx0JiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0
byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4yID0gaW5wdXRzWzFdLmdldCgp
OworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBp
bWFnZUJ1ZmZlcjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyIHx8
ICFpbWFnZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4
dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAgIHJldHVybiB0cnVlOworfQor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3
YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWI0OTkwMWU3YTMyZWM4
ODVhMDQ2YjRkM2VmMzBjNDgzNmQyMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVy
YXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRy
aXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBm
bG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhh
OworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1
ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVl
biAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsg
dmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNb
MTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICog
YSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFs
dWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5
XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJl
ZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7
CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9
IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50
c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAgPSByICogY29tcG9uZW50c1sz
XSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9
IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10gKyBiICogY29tcG9uZW50c1s4
XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVu
Y3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxw
aGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAg
cmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUND
RUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZl
Y3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVy
U2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFy
ZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFr
ZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBG
RUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFj
ayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzld
IHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CisgICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAg
c3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJT
aXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7
CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAg
ICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVm
ZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgp
ICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7
CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGlu
dDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAor
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
IDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBk
aXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9Owor
ICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4
LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQx
Nl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisg
ICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9u
ZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAw
LAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBs
eV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRy
LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2X3Qg
bWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUg
KiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBk
aXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZp
c29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5
X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIs
IGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmls
dGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAg
ZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJh
dGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVy
VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0
cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsK
KworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZp
bHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisg
ICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2Vu
ZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsg
cGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQp
IHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtYXRyaXgocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBw
aXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkg
eworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90
YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgcGl4ZWxBcnJh
eS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVs
QXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCBy
ZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0
IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAg
ICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAg
ICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCAr
IDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZp
bHRlclJlc3VsdCYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09
IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVm
ZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QgPSB7IHsgfSwgaW4uYWJzb2x1dGVEcmF3aW5nUmVj
dCgpLnNpemUoKSB9OworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3QpOworICAgIAorICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OworICAgIAorICAg
IEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgp
KTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwor
ICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOworCisg
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBtX3ZhbHVlczsKKworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVz
LCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNBbHBoYUltYWdlKHRydWUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIo
KnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTNmMmRkZGJkNWZlNDkxMDE0
MGMwZWM4ODBjMTQ2NDFiYWQ1YWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1
bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZjg2ZmNjNTZmMzM0MThlY2I1MDMxN2NiYzBlYTM1MGRhNjY2ZGE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9z
aXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJl
c3VsdCYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNzA5YjMzNGMyYmQ1OGI5YWU0ODg0OTA0NWZhZDc5YmFjZjBj
Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
RUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNvbnZv
bHZlTWF0cml4OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdl
QnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYjM0MWYwZTU3NmRmM2Jk
MTM2ZjZhMWM3N2UzZWEyOTAyMGJhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzE2ZmNmYjlmYjllNTZhNGMwZDRkYTg3OTZhNmQ0ZTNlYWRjYThlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNp
bmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRHJvcFNoYWRvdzo6
YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNp
emUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8g
aW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisvLworLy8gICAgRmxv
YXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7
IG1fc3RkWCwgbV9zdGRZIH0pOworLy8gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7CisvLyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
UmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisvLworLy8gICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKKy8vICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9u
KTsKKy8vICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKy8vCisvLyAg
ICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OworLy8gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworLy8gICAg
cmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9u
V2l0aE9mZnNldCk7CisvLyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOworLy8KKy8vICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29s
b3IpOworLy8KKy8vICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JT
cGFjZSgpIH07CisvLyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCkpOworLy8gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdl
LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworLy8gICAgaWYgKCFwaXhlbEJ1
ZmZlcikKKy8vICAgICAgICByZXR1cm4gbnVsbHB0cjsKKy8vCisvLyAgICBhdXRvJiBzb3VyY2VQ
aXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKy8vICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCks
IDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworLy8KKy8vICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworLy8KKy8vICAgIHJl
c3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VJbik7CisvLyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CisvLyAgICBy
ZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVz
dGluYXRpb25PdmVyKTsKKy8vCisvLyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb24pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9v
ZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWVjYWJhMDExYTJmYmFlY2M5ZjIyZGJmZjIzZTkw
YmUzNDJhYWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2Qu
aCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
Rmxvb2Q6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZm
ZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdEltYWdl
ID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fY29sb3IuY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkobV9vcGFjaXR5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7
IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2luZ1JlY3QoKS5zaXplKCkgfTsKKyAgICAKKyAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KGltYWdlUmVjdCwgY29sb3IpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5C
bHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Q3MGE2
ODBkOGVjMWM1YzdjOTQ5MjdiNGJiNmQ5YjQzMmYyNjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFu
Qmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRp
bmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNjMTIwMTA5OWJk
OTU5ZGZhY2IxMmY5NzEwNmE1YmI1MmJmZWFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWY4MjVi
ZGE4ZWMyMzUwYmJjMTUzMDk0ZTQzMGZhNWMyOGM1N2JiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3Vs
dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKSB7CisgICAgICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0LT5hYnNvbHV0ZURyYXdp
bmdSZWN0KCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNjMzhjYTQ0ZTVhYWIxYjcyMjJjZTZhNzc4YWFjNzkwNWY2NmM4YjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVN
b3JwaG9sb2d5OjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdl
QnVmZmVyKiwgRmlsdGVyUmVzdWx0JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0
d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWNiYjgzNGJiNGU4OTZkOGJkNzhmNjNmM2Q2MGRlOGIz
ZmIyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFT2Zmc2V0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZzZXQ6
OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiwgRmlsdGVyUmVzdWx0JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5z
aXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0Lmlt
YWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0FscGhhSW1hZ2UoKSk7CisKKyAg
ICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgcmVzdWx0LmFic29sdXRlRHJhd2lu
Z1JlY3QoKS5zaXplKCkgfTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGFlNTBjZWJiODZlNjg5YzYwYWYzMGMzYTRjMWY4NjNlMTA2YTBmYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxlLmgiCisKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFz
VGV4dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0Cit7CisvLyAgICBBU1NF
UlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKy8vICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgp
OworLy8KKy8vICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKy8v
ICAgIGF1dG8gaW5CdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworLy8gICAgaWYgKCFyZXN1bHRJ
bWFnZSB8fCAhaW5CdWZmZXIpCisvLyAgICAgICAgcmV0dXJuIGZhbHNlOworLy8KKy8vICAgIHJl
c3VsdC5zZXRJc0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkpOworLy8KKy8vICAgIC8vIFNv
dXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBm
aWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQorLy8gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgorLy8gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4ubWF4RWZmZWN0UmVjdCgp
OworLy8gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRp
b24oKTsKKy8vICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0
KCkubG9jYXRpb24oKTsKKy8vICAgIGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVy
RWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKKy8vICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsK
Ky8vICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRo
KCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorLy8KKy8v
ICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmls
dGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKKy8vICAgIGlmICghdGlsZUltYWdlKQorLy8gICAgICAg
IHJldHVybiBudWxscHRyOworLy8KKy8vICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29u
dGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworLy8gICAgdGlsZUltYWdlQ29udGV4dC50cmFu
c2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkp
OworLy8gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworLy8KKy8vICAgIGF1dG8gdGlsZUltYWdl
Q29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdl
KSk7CisvLyAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCisvLyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisvLworLy8gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07CisvLyAgICBwYXR0
ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9j
YXRpb24pOworLy8KKy8vICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1h
Z2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9
KTsKKy8vCisvLyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOworLy8gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiNGFkN2MxMDg4ZjJhNTBkZDYw
OWRmNjQ2ODA5MDUxNmM5ZGVmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBs
ZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwg
SW1hZ2VCdWZmZXIqLCBGaWx0ZXJSZXN1bHQmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmls
dGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMWQxNjAwM2M0NmZmODczYWRmNjc5
ZTYxZTc3ZTk3MDY1NTU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDUxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0U29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sK
KyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0
KCk7CisKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUo
KTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JT
cGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZShsb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3Rz
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdl
QnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZm
ZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAg
ICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjM4YzQ1NjhmNTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQzM2U5OTEyMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmls
dGVyUmVzdWx0U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0U29mdHdhcmUgOiBwdWJsaWMgRmlsdGVy
UmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4
aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJSZXN1bHRTb2Z0d2FyZSkKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0
dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VB
bHBoYVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzlhY2E3MGVh
NGY1MGNhM2I0NDhmZjE3ZTAzN2M3NDMzOTVjMWNmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFT
b2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU291cmNlQWxwaGEuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYgcmVzdWx0KSBjb25z
dAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5w
dXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRS
ZWN0IHsgeyB9LCByZXN1bHQuYWJzb2x1dGVEcmF3aW5nUmVjdCgpLnNpemUoKSB9OworCisgICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7
CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFw
aGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MTY0ZWI1
ZDVlOGE0NDY0OGMzZjMxNTI0MTMxMjY3YWVlMTgyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBo
aWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNv
dXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoc291cmNlSW1hZ2UpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJ
bWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggNjRlOTgz
ODRhZjAwNGVmNjk5YmM2MmU2YTZjOTc3NTZmNTljNjZmZi4uODUxZWY3YjYxNDQ0ODhjM2NkODQw
NzU5MzhkNjc2NjlmMjMxOTlkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw0MTEgKzI4LDMxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0Zp
bHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYWNo
ZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVy
LmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIu
aCIKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5j
bHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
LSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgot
I2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291
cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRl
KCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsK
KyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIob3BlcmF0aW9ucywgcmVu
ZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRnVuY3Rpb25zKHJlbmRlcmVy
LCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0
U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVh
dGUoKnRoaXMpKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoVmVjdG9yPFJl
ZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIoV1RGTW92ZShmdW5jdGlv
bnMpLCByZW5kZXJpbmdNb2RlKSk7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVm
YXVsdDsKK0NTU0ZpbHRlcjo6Q1NTRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJh
dGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihyZW5kZXJp
bmdNb2RlLCBUeXBlOjpDU1NGaWx0ZXIpCit7CisgICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIG1faGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhh
c0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7Cit9CiAKLUdy
YXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorQ1NTRmlsdGVyOjpDU1NG
aWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVyaW5nTW9kZSwgVHlwZTo6Q1NT
RmlsdGVyKQorICAgICwgbV9mdW5jdGlvbnMoV1RGTW92ZShmdW5jdGlvbnMpKQogewotICAgIHJl
dHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0
ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3Qs
IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0
cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVs
ZW1lbnQgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNl
ZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVy
OiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNl
ICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3
ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRl
ciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91
cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAv
LyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRv
KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9w
ZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jl
c291cmNlcyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBh
dXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmls
dGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCisgICAg
aWYgKCFmaWx0ZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CiAKLSAg
ICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0Vm
ZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNl
QWxwaGE6OmVmZmVjdE5hbWUoKSk7CisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0
ZXJFbGVtZW50LCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAmcHJldmlvdXNFZmZlY3QpOworfQog
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVHcmF5U2NhbGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0g
Y2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKwor
ICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRl
cnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9u
IG9uIHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Cisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIg
LSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAt
IDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsg
MC45Mjc4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisg
ICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0
byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVj
dEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVj
dCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NT
RmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVp
bGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2Vw
aWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0g
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4K
KworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAg
ICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVy
cykpOworfQogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVm
ZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNp
ZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAg
ICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigp
LT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9y
SW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJT
UkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAg
ICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RF
bGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVu
ZCgqZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZN
b3ZlKHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0Oworc3RhdGljIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3Rvcjxm
bG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJp
eE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRl
KEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
IH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCiB7
Ci0gICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscygpOwotICAgIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
eyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9
OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIG1fZWZmZWN0cy5j
bGVhcigpOwotICAgIG1fb3V0c2V0cyA9IHsgfTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0g
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQo
KSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OworICAgIHRy
YW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlT3BhY2l0eUVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rp
b24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1
bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVsbEZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CisK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5j
dGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFz
dEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJj
ZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJF
ZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbikKK3sKKyAgICBm
bG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERl
dmlhdGlvbiwgc3RkRGV2aWF0aW9uLCAvKmNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0
ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiovIEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CisK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0
IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAg
ZmxvYXQgc3RkID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICByZXR1
cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAx
KTsKK30KKworYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQoreworICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1f
ZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKICAgICBmb3IgKGF1dG8m
IG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Ci0gICAgICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9w
ZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAgICAgIGF1dG8m
IHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmls
dGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAg
ICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKworICAgICAgICBBU1NFUlQoZWZmZWN0KTsK
KyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmls
dGVyKCp0aGlzLCByZW5kZXJlciwgKmVmZmVjdCwgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRyOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2Vl
IGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5o
dG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBv
biBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVy
cyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4
NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4
NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjky
NzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0
aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8v
ZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlh
RXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMu
Ci0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAu
NzY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9u
ZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNl
cGlhRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
eyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9
OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkhVRV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZl
Y3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rp
b24pOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQ
TEVfSU5WRVJUX0xJR0hUTkVTUzoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmls
dGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZm
ZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5p
bnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51
bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNy
ZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3Qo
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1v
dW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5h
bW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50Owot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsg
MC41OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChk
b3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25j
YXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBm
bG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRl
ckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBM
SUNBVEUpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRy
b3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVh
dGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dP
cGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJh
dGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNv
bG9yKCksIDEpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoZWZmZWN0KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZH
IEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmls
dGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlw
IHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgotICAgICAgICAgICAgZWZmZWN0LT5zZXRD
bGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVy
T3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAg
ICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZl
Y3QpIH07Ci0gICAgICAgICAgICAgICAgbV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwor
ICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RF
ZmZlY3QoKTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIElmIHdlIGRpZG4ndCBtYWtlIGFueSBlZmZlY3RzLCB0ZWxsIG91ciBjYWxsZXIgd2UgYXJl
IG5vdCB2YWxpZC4KLSAgICBpZiAobV9lZmZlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlua1RvRml0KCk7CisgICAgICAgIGlmICghZWZm
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0TWF4RWZmZWN0UmVjdHMo
bV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoIW1f
ZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RS
ZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0
ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOwotI2VuZGlm
CisgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CisgICAgfQorICAgIAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpCitJbnRPdXRzZXRzIENTU0ZpbHRlcjo6
b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChmaWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVyUmVj
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1Bp
eGVscyB8fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwog
Ci12b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFw
aGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUg
ZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdl
IHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1
ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUg
eyBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgp
IHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUo
bG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxl
KCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsK
LSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVu
ZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZW5kaWYKLSAgICB9
Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKLX0KKyAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+
b3V0c2V0cygpOwogCi12b2lkIENTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQo
KTsKLSAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwot
ICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKLSAg
ICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwg
cmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAg
IEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAgICBzZXRGaWx0ZXJSZXNvbHV0aW9u
KHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKTsKLSAgICB9CisgICAgcmV0dXJuIG1fb3V0c2V0czsKIH0KIAotdm9pZCBDU1NGaWx0
ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCitGaWx0ZXJSZXN1bHQqIENTU0ZpbHRlcjo6
YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QKIHsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNs
ZWFyUmVzdWx0KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxw
aGEtPmNsZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0g
ICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKLX0KKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9u
IDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jdGlvbi0+YXBwbHko
b3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi12b2lkIENTU0ZpbHRlcjo6YXBwbHkoKQotewotICAg
IGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgaWYgKG1fZmlsdGVy
UmVuZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVj
dCk7Ci0gICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAg
ICAgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIHN0
YWNrLmFwcGVuZCh7ICpyZXN1bHQgfSk7CisgICAgICAgIG91dHB1dC5yZXN1bHRzKCkuYWRkKGZ1
bmN0aW9uLCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0KSk7CiAgICAgfQotICAgIGVmZmVjdC5h
cHBseSgpOwotICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLX0KLQotTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVT
b3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQotewotICAgIC8vIFRoZSByZXN1bHQgb2Yg
dGhpcyBmdW5jdGlvbiBpcyB0aGUgYXJlYSBpbiB0aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVl
ZHMgdG8gYmUgcmVwYWludGVkLCBzbyB0aGF0IHdlIGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0
Ii4KLSAgICBhdXRvIHJlY3RGb3JSZXBhaW50ID0gZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHMoKSkKLSAgICAgICAgcmVjdEZvclJlcGFpbnQgKz0gb3V0c2V0cygp
OwotICAgIHJlY3RGb3JSZXBhaW50LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKLSAgICByZXR1
cm4gcmVjdEZvclJlcGFpbnQ7Ci19CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+
aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKTsK
LSAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LX0KLQotdm9pZCBDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCkKLXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJ
bWFnZVJlY3Q7Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBz
ZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0
YWNoZWQgPSBmYWxzZTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOworICAgIGF1dG8g
cmVzdWx0ID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICByZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJuICZyZXN1bHQu
bGVha1JlZigpOwogfQogCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3Qg
RmxvYXRSZWN0JiBlZmZlY3RSZWN0KQorVGV4dFN0cmVhbSYgQ1NTRmlsdGVyOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAg
ICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOwotfQotCi1JbnRSZWN0
IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9
IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVz
dWx0KCkgfHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0
KCkpKQotICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOwotICAgIAotICAgIHJldHVybiB7
IH07Ci19Ci0KLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7Ci0K
LSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9
IGVmZmVjdC0+b3V0c2V0cygpOwotICAgIHJldHVybiBtX291dHNldHM7CisgICAgZm9yIChhdXRv
JiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBmdW5jdGlvbi0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHJldHVybiB0czsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4
IDAwYjkxOTE3YjgwNGM5MmQ5NDA4Yjc1OGUzNzVjMjUyZjI5ZGIwYzUuLjVmNzJmZTdkNDI5Zjk0
ODU3MjE4ZmUxMzRlNjRjZWJjYjI0YTM1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw4NiArMjYsNDUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEZpbHRl
ckVmZmVjdFJlbmRlcmVyOwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLWNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVs
ZW1lbnQ7Ci1jbGFzcyBTb3VyY2VBbHBoYTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWVudW0g
Y2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsK
IAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lkIHNl
dFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZp
bHRlclJlZ2lvbjsgfQogCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAg
Ym9vbCBidWlsZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRl
ckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZv
aWQgYXBwbHkoKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRl
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSA9
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVhdGUoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYs
IFJlbmRlcmluZ01vZGUpOwogCiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBj
b25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsgfQogICAgIGJvb2wgaGFz
RmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luOyB9
CiAKLSAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxSZWY8RmlsdGVyRnVu
Y3Rpb24+PiYgZnVuY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKyAgICBJ
bnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBDU1NGaWx0
ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIoKTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1h
Z2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0K
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0
ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYg
cHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAgIENTU0ZpbHRl
cihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSk7CisgICAgQ1NTRmlsdGVy
KFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdNb2RlKTsKIAotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBidWlsZEZ1
bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5
KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QgZmluYWw7CiAKLSAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKLSAgICB2b2lkIGFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IGZpbmFsOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Ci0KLSAgICBM
YXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKLQotICAg
IEZsb2F0UmVjdCBtX3NvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVy
UmVnaW9uOwotCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAg
UmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBtX3NvdXJjZUFscGhhOwotCi0gICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsK
LQotICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29s
IG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAg
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9maWx0ZXJSZW5k
ZXJlcjsKKworICAgIFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1bmN0aW9uczsKKyAg
ICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNTU0ZpbHRlcikK
LSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsg
cmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7IH0KIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXgg
MWJmMjJlNDJjMzUxODYxODc5ZWY1YWYwY2YxZWMwYjQ3MTQ5YjVlYS4uMDBmNjZlOGFiMjE4YmU0
ZjAxZmE3MmJjY2NhZTkxZTdlODYzYTM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBDU1NGaWx0ZXI7CiBjbGFzcyBDbGlwUmVjdHM7CiBjbGFzcyBD
bGlwUmVjdHNDYWNoZTsKIGNsYXNzIEV2ZW50UmVnaW9uQ29udGV4dDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXggMjUwYTdkNWMwYmFh
MGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uODcyYTY2NmUzNzRlMTk1NDZhMGQ1YzcxMDFm
NGJkOTA5MjY4NDQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5jcHAKQEAgLTMxLDkgKzMxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCiAKLSNpbmNsdWRlICJDU1NGaWx0ZXIuaCIK
ICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3Vt
ZW50UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTExNiwzOSAr
MTE3LDUxIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJD
bGllbnRzKCkKICAgICBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVhcigpOwogfQogCi12b2lk
IFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCit2b2lkIFJl
bmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZs
b2F0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikg
ewotICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmls
dGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRS
ZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZp
bHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRl
clNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRl
UmVzdWx0cygpOwotICAgIH0KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRl
cmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlKTsKK30KKworR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCgpCit7CisgICAg
cmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+Y29udGV4dCgpIDogbnVsbHB0
cjsKK30KKwordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoKQoreworICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VJbWFnZVJlY3Qu
c2l6ZSgpIH07CisgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNh
bFNpemUsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogCi0gICAgLy8gSWYgdGhlIGZpbHRlciBm
YWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0
dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21w
b3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICAvLyBGSVhNRTogdGhpcyBy
ZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmlsdGVyIHN0eWxl
IGRpZG4ndCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRl
cmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCi0g
ICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQg
PSB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5G
aWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVy
TGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFtX2ZpbHRlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7
Ci0gICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVTb3VyY2VJbWFnZVJl
Y3RGb3JEaXJ0eVJlY3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKKyAgICAKKyAgICBhdXRv
IGZpbHRlclNvdXJjZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGZpbHRlci5oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgZmlsdGVyU291cmNlUmVjdCArPSBmaWx0ZXIub3V0
c2V0cygpOworICAgIGZpbHRlclNvdXJjZVJlY3QuaW50ZXJzZWN0KGZpbHRlckJveFJlY3QpOwor
CiAgICAgaWYgKGZpbHRlclNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZpbHRlci51cGRhdGVC
YWNraW5nU3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworICAgIAorICAgIGlmIChmaWx0ZXJT
b3VyY2VSZWN0ICE9IG1fc291cmNlSW1hZ2VSZWN0KSB7CisgICAgICAgIG1fc291cmNlSW1hZ2VS
ZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKKyAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVk
ID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVyLmhhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0OwogICAgIGVsc2Ug
ewotICAgICAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSkKKyAgICAgICAgaWYgKCFtX2dy
YXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZmlsdGVy
U291cmNlUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX3JlcGFpbnRSZWN0ID0g
ZGlydHlSZWN0OwpAQCAtMTU5LDExICsxNzIsOSBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxh
eWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAog
ICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0aW9uKCk7CiAgICAgcmVz
ZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLQotICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVk
KGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0g
ZmlsdGVyLmlucHV0Q29udGV4dCgpOwotICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8
IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQorICAgIGFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBp
bnB1dENvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0
aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlzIGNhcHR1cmVkIGluIHRoZSBvZmZzY3JlZW4gbWVt
b3J5IGJ1ZmZlci4KQEAgLTE3NywyMyArMTg4LDE1IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVy
TGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKLSAgICBBU1NFUlQobV9maWx0ZXItPmlucHV0
Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaW5wdXRDb250ZXh0KCkpOwogCiAgICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXllckZpbHRlcnMgIiA8PCB0aGlz
IDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRl
cjsKLSAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKLQotICAgIGZpbHRlci5h
cHBseSgpOwotCi0gICAgLy8gR2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4g
cGxhY2UuCi0gICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7Ci0g
ICAgZGVzdFJlY3QubW92ZShtX3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9mZnNldC55KCkpOwot
Ci0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQoKSkKLSAgICAgICAg
ZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAot
ICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKKyAgICBhdXRvIGdlb21ldHJ5
ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJlY3QsIG1fc291cmNl
SW1hZ2VSZWN0KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVy
KGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOwogCiAgICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIg
PDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1
NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNh
YzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVy
TGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3Qg
TmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVj
dCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0Nv
bnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5l
ZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRy
PEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVz
b3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsK
IAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3Qg
bV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAg
TGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJB
dHRhY2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAg
IExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDQxNjJiODFm
ZjNiYWM4Y2MxYzJkOGY0ODkxODE0OTkxZWM3NTU3YTEuLjNkM2M2Y2ExODM5MTE1MDZjZjI0ZGI4
MTQwYjlmOGFmNzAxMWM3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSw2ICszNiw4IEBACiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJp
bmdDb250ZXh0LmgiCkBAIC04MCw2MiArODMsMjcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAog
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9u
ID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQog
Ci1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0
ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0g
ZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUg
YnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4o
U291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2
ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5z
ZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxl
bWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkg
ewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0Vm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAg
ICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAg
ICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVS
ZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwg
ZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0g
ICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05f
Q09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJ
bnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9
Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkp
OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAg
IEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAgIExPRyhG
aWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSByZW5kZXJl
ciAlcCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KLSAgICBpZiAobV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuY29udGFpbnMoJnJlbmRlcmVyKSkgewotICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRh
ID0gbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZyZW5kZXJlcik7Ci0gICAgICAgIGlmIChm
aWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBmaWx0ZXJE
YXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWluZykKLSAgICAgICAgICAgIGZpbHRlckRh
dGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6Q3ljbGVEZXRlY3RlZDsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJr
ZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KLSAg
ICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUgU1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0g
bWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0Jv
eCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgYXV0byByZW5kZXJpbmdNb2Rl
ID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAK
LSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJl
Y3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50
KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRh
LT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0
ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmls
dGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmxvYXRS
ZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAg
ICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3Rh
bmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCku
ZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFi
c29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKKyAgICAvLyBDYWxjdWxh
dGUgdGhlIHNvdXJjZUltYWdlUmVjdAorICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24gPSBy
ZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOworICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdp
b24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOworCisgICAgLy8gQ2FsY3VsYXRl
IHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5z
Zm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRl
cm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRlVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDMsNjUgKzEx
MSwyMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBv
ZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1
Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCiAgICAgZmlsdGVyRGF0YS0+c2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAot
ICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRo
ZSBkcmF3aW5nIHJlZ2lvbi4KLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVy
ZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlu
dGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZp
bHRlciByZXNvbHV0aW9uCiAgICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+
ZHJhd2luZ1JlZ2lvbik7CisgICAgZmlsdGVyRGF0YS0+c2NhbGUgPSB7IDEsIDEgfTsKKyAgICBJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUo
KSwgZmlsdGVyRGF0YS0+c2NhbGUpOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2Jq
ZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgp
LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdp
b24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVC
b3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJp
bWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0
ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVy
LiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdn
ZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBh
YnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxl
KTsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQo
KSk7Ci0KLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0
ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVy
RWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwot
ICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5w
dXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVm
ZmVjdCgpKTsKLQotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RS
ZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGlt
YWdlIHNpemUsCi0gICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBz
Y2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3Vi
UmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0
RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5n
UmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4u
Ci0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHks
IHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBv
c3RBcHBseVJlc291cmNlLgotICAgIGlmIChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlzRW1w
dHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5z
KCZyZW5kZXJlcikpOwotICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0
OwotICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3Zl
KGZpbHRlckRhdGEpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENo
YW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJl
ZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KKyAgICAv
LyBDYWxjdWxhdGUgZWZmZWN0aXZlVHJhbnNmb3JtCiAgICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVj
dGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgo
KSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShmaWx0ZXJE
YXRhLT5zY2FsZSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEt
PnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9
IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lm
IEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNv
bG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAg
ICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5k
aWYKKwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9y
bSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VH
cmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFp
bnMoJnJlbmRlcmVyKSk7CkBAIC0yMTAsMTkgKzEzNSwxNSBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIC8vIFNldCB0aGUg
cmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRlckRhdGEt
PmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLQorICAgIC8vIFNldCB0
aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAg
ICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+
Y29udGV4dCgpOwotICAKKyAgICAKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVy
ID0gV1RGTW92ZShzb3VyY2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQg
PSBjb250ZXh0OwotCisgICAgCiAgICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsK
IAotICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVy
KSk7CiAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShm
aWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY3LDM4ICsxODgsMTgg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
RmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0
KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1w
dHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3Qu
IEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZp
bHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9u
IGEKLSAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0
YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXIt
PnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7
Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChm
aWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFz
dEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBG
aWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0g
ICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJv
dW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJE
YXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZm
ZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAg
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5m
aWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJS
ZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1
ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRp
b24oKSk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwor
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lk
dGgoKSwgMSAvIGZpbHRlckRhdGEuc2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29u
dGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gZ2VvbWV0cnkgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckdl
b21ldHJ5PihmaWx0ZXJEYXRhLmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwg
ZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7
CisgICAgICAgIGNvbnRleHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0
ZXIsIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRy
eSkpOworICAgIAorICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0pOwogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxs
cHRyOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7
CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwNiwyNyArMjA3LDEzIEBAIEZs
b2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25z
dCBSZW5kZXJPYmplY3QmIG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxl
bWVudCgpLmZpbHRlclVuaXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGluZ0JveCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCi0gICAgTE9HKEZp
bHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZvciAoY29uc3QgYXV0byYg
b2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewogICAgICAg
ICBjb25zdCBhdXRvJiBmaWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0YVBhaXIudmFsdWU7CiAg
ICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIqIGJ1aWxkZXIgPSBm
aWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJFZmZlY3QqIGVmZmVjdCA9
IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAgICAgaWYgKCFlZmZlY3Qp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gU2luY2UgYWxsIGVmZmVjdHMgc2hh
cmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAgIC8vIG9yIG5vbmUgb2Yg
dGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0dmUtPnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3QpOwotCiAgICAgICAg
IC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgIG1hcmtDbGllbnRG
b3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVwYWludEludmFsaWRh
dGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDU2NGFhYWQ0OGEyMmUzYzQ1MDdlZWY1MGFk
YzY0NDAxZDg3MDNmODMuLjE0OGFjMDhiMzllODFjZjI5NmM2NGZjYmRlZDgzMTk2ZTFhODlkNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgpAQCAt
NDIsOCArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBGaWx0ZXJEYXRhKCkgPSBkZWZhdWx0OwogCi0g
ICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0
ZXJCdWlsZGVyPiBidWlsZGVyOworICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlcjsKICAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBzYXZlZENvbnRleHQgeyBudWxscHRyIH07CiAgICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtOwpAQCAtNzEsOCArNjksNiBAQCBwdWJsaWM6CiAKICAgICBGbG9h
dFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsK
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMo
U1ZHRmlsdGVyJikgY29uc3Q7Ci0KICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGZpbHRl
clVuaXRzKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCk7IH0K
ICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyBy
ZXR1cm4gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCk7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXgg
YjQ3Mzk0MzhjNWYzZTJjNjkxZWYzYjAyYmJiZWM5ZDI5MjA3MDNiNy4uZDJlNTlkMTM5ZDhjOWY0
MmM1N2IwNGNjOWFjNzMxZjc0YWVhOGUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxp
emF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlcklt
YWdlLmgiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2lu
Y2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIK
ICNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50Lmgi
CkBAIC00MjgsMTMgKzQzMCw5IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHdy
aXRlTmFtZVZhbHVlUGFpcih0cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLnByaW1pdGl2ZVVu
aXRzKCkpOwogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNl
aG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZs
b2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6
OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVj
dCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRp
dmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBpZiAoUmVmUHRyPEZpbHRlcj4gZHVt
bXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpKSkgewog
ICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotCi0g
ICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVm
ZmVjdCgpKQotICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOworICAgICAgICAgICAgZHVtbXlGaWx0ZXItPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9
PSBDbGlwcGVyUmVzb3VyY2VUeXBlKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNsaXBwZXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXImPihyZXNvdXJjZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAppbmRleCA3YmNmMDQxODAwZjc5
OWYxMTc0Y2ZlMDRiODIyZDZkMDY0MzFmNjg2Li4xNjBlMDBkY2JlZDY5NWZiNDA3MWU2MTcxZWNm
MTJmMmUxOTY0ZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAK
QEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZH
RmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgogCkBAIC0xMDAsMjAgKzEwMCwxNSBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29u
c3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4x
KCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIo
KSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1
dG8gaW5wdXQyID0gZmlsdGVyLm5hbWVkRWZmZWN0KGluMigpKTsKIAogICAgIGlmICghaW5wdXQx
IHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3Qg
PSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVj
dHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRUJsZW5kOjpjcmVhdGUobW9k
ZSgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBi
OTQxZmM4YjA2ZGVjNjYuLjI3YTgyZjVjY2I0NzBlNjMwNmM1NWI0OWVhZTgyNjQzM2RlOGQyZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw3ICs2OSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2UxZjI0NGU0MzY3ODY4ZjQyYmE5Yy4u
OGFiODBhMjY4ZTlmYzNkMDIxZWQ0MjMzODliYzRiODA5MmM4YTEyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC0yMyw3ICsyMyw3IEBA
CiAjaW5jbHVkZSAiU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CiAKQEAgLTEwMCwxMiArMTAwLDExIEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVm
ZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPGZsb2F0PiBmaWx0ZXJWYWx1ZXM7CiAg
ICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBlKCk7CkBAIC0xMzUsMTUgKzEzNCwx
MyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAgICAgICBpZiAoKGZpbHRlclR5cGUgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiBzaXplICE9IDIwKQogICAgICAgICAgICAgfHwg
KGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSAmJiBzaXplICE9IDEp
CiAgICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEUgJiYgc2l6ZSAhPSAxKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIGZpbHRlclZhbHVlcyA9IHZhbHVlcygp
OwogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKLSAgICBhdXRv
IGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIGZpbHRlclR5cGUsIFdURk1v
dmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQx
IH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMpKSwgeyBpbnB1dDEucmVsZWFzZU5v
bk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3YWIxOThi
MTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uY2E3YTdkNWY1N2Q2NWE4Y2I3ZWI5MWYzYmRkNTQ2MjI5
ZDM5NGY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggZTg5MjY3Y2U3ZDM0MTQ2ZDJhNjVkNmYw
MWRjZTVkZWY0OWM4MmY3OC4uNmIxNTFjYWIyMGE0ODk4MjM1MDkwN2YzNjVhNzNjZjQ4YzYzZDkz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiU1ZHRkVGdW5jQkVsZW1l
bnQuaCIKICNpbmNsdWRlICJTVkdGRUZ1bmNHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFRnVu
Y1JFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KIApAQCAtNjIsMTIgKzYyLDExIEBAIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIAorICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHJlZDsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuOwpAQCAt
ODUsOSArODQsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdAogICAgICAgICAgICAgYWxwaGEg
PSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsK
ICAgICB9CiAgICAgCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpLCB7IHsg
KmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2
ZThiOTkzYTRkZDU0ODYzLi5mMjJkNTFhMmJkOGMyMzc2NWRhOThiZmMyNWU2YTI5OGE4ZWYyZWE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRy
aWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNj
YTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgyMzUuLjYzMDY5NjdjODNjYTY0NWYw
ZDhmNjVhOGEzMTk5OGQyNzU4M2QzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC00MCw3ICs0
MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdO
YW1lczo6aW5BdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2luMT4oKTsKICAgICAgICAg
UHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW4yQXR0ciwgJlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjI+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6
OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9zdmdPcGVyYXRvcj4oKTsKKyAgICAg
ICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JB
dHRyLCBGRUNvbXBvc2l0ZU9wZXJhdG9yLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2NvbXBv
c2l0ZU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3Bl
cnR5PFNWR05hbWVzOjprMUF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazE+KCk7CiAg
ICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmsyQXR0
ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdp
c3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azNBdHRyLCAmU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjptX2szPigpOwpAQCAtNTYsOSArNTYsOSBAQCBSZWY8U1ZHRkVDb21wb3NpdGVFbGVt
ZW50PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1l
ID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIHBy
b3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJv
bVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKLSAgICAgICAg
ICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxDb21wb3NpdGVPcGVyYXRpb25U
eXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlT3BlcmF0b3ItPnNl
dEJhc2VWYWxJbnRlcm5hbDxGRUNvbXBvc2l0ZU9wZXJhdG9yPihwcm9wZXJ0eVZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTksNyArOTksNyBAQCBib29sIFNWR0ZFQ29tcG9z
aXRlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0
LCBjb25zdAogewogICAgIEZFQ29tcG9zaXRlKiBjb21wb3NpdGUgPSBzdGF0aWNfY2FzdDxGRUNv
bXBvc2l0ZSo+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRv
ckF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldE9wZXJhdGlvbihzdmdPcGVyYXRv
cigpKTsKKyAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0Q29tcG9zaXRlT3BlcmF0b3IoY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0dHIp
CiAgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsxKGsxKCkpOwogICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azJBdHRyKQpAQCAtMTMxLDIwICsxMzEsMTUgQEAgdm9pZCBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwotICAgIAorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
Lm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlci5uYW1lZEVmZmVj
dChpbjIoKSk7CisKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShmaWx0ZXIs
IHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1
dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5w
dXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBl
ZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRUNvbXBvc2l0ZTo6
Y3JlYXRlKGNvbXBvc2l0ZU9wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpLCB7IHsg
KmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3YTBmYTMwNDRkZjViN2M1YTA4
MGQ2ZTc3OTcyMmY2Li5kYzk1NDc5YjU2YWQ5NThlMzZjZWNlYWEzYmY0YmE1NjE0YjY2YmNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCkBAIC0yNywxNSAr
MjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8PgotaW5saW5lIHVuc2ln
bmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmhpZ2hlc3RFeHBv
c2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsg
fQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0b3I+Ojpo
aWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FS
SVRITUVUSUM7IH0KIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0
ZU9wZXJhdG9yPiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJl
dHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOyB9CiAKLSAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCiAgICAgewot
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRv
cikgewogICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9PVkVSOgpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Q29t
cG9zaXRlT3BlcmF0aW9uVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIEZFQ29tcG9zaXRlT3BlcmF0b3IgZnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJvdmVy
IikKICAgICAgICAgICAgIHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOwpAQCAtODUs
NyArODUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9p
bjEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgU3RyaW5nIGluMigpIGNvbnN0IHsgcmV0dXJuIG1f
aW4yLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgc3ZnT3Bl
cmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8Q29tcG9z
aXRlT3BlcmF0aW9uVHlwZT4oKTsgfQorICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5jdXJyZW50VmFs
dWU8RkVDb21wb3NpdGVPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IGsxKCkgY29uc3QgeyByZXR1
cm4gbV9rMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBrMigpIGNvbnN0IHsgcmV0dXJu
IG1fazItPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgazMoKSBjb25zdCB7IHJldHVybiBt
X2szLT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBT
VkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMTsgfQogICAgIFNW
R0FuaW1hdGVkU3RyaW5nJiBpbjJBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4yOyB9Ci0gICAgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fc3Zn
T3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBjb21wb3NpdGVPcGVyYXRv
ckFuaW1hdGVkKCkgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQogICAgIFNWR0FuaW1h
dGVkTnVtYmVyJiBrMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMTsgfQogICAgIFNWR0FuaW1hdGVk
TnVtYmVyJiBrMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMjsgfQogICAgIFNWR0FuaW1hdGVkTnVt
YmVyJiBrM0FuaW1hdGVkKCkgeyByZXR1cm4gbV9rMzsgfQpAQCAtMTA5LDEyICsxMDksMTIgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVy
RWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fc3ZnT3BlcmF0
b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01QT1NJVEVfT1BF
UkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9jb21wb3Np
dGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRUNPTVBP
U0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMSB7
IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlz
KSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAppbmRl
eCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJiNDUyZGUwLi5mYzY3MGM5ZWM1NmM0
MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4xOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdP
cGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0
b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
VkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmlt
YXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVh
ODBjNmEyNmRmMS4uMDhhOTE0NjA0NTdhZjUxYmI0ZDBjZTk3MThmM2I5MDkxMjA4ZjcwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIklu
dFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2lu
Y2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CkBAIC0xOTEsMTIgKzE5MSwxMSBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYQogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCBvcmRlclhWYWx1ZSA9IG9yZGVyWCgpOwog
ICAgIGludCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwpAQCAtMjA2LDIyICsyMDUsMjIgQEAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICB9CiAgICAgLy8gU3BlYyBzYXlzIG9yZGVyIG11c3Qg
YmUgPiAwLiBCYWlsIGlmIGl0IGlzIG5vdC4KICAgICBpZiAob3JkZXJYVmFsdWUgPCAxIHx8IG9y
ZGVyWVZhbHVlIDwgMSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgYXV0byYga2VybmVsTWF0cml4ID0gdGhpcy0+a2VybmVsTWF0cml4KCk7CiAgICAg
aW50IGtlcm5lbE1hdHJpeFNpemUgPSBrZXJuZWxNYXRyaXguaXRlbXMoKS5zaXplKCk7CiAgICAg
Ly8gVGhlIHNwZWMgc2F5cyB0aGlzIGlzIGEgcmVxdWlyZW1lbnQsIGFuZCBzaG91bGQgYmFpbCBv
dXQgaWYgZmFpbHMKICAgICBpZiAob3JkZXJYVmFsdWUgKiBvcmRlcllWYWx1ZSAhPSBrZXJuZWxN
YXRyaXhTaXplKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGludCB0YXJnZXRYVmFsdWUgPSB0YXJnZXRYKCk7CiAgICAgaW50IHRhcmdldFlWYWx1
ZSA9IHRhcmdldFkoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRYQXR0
cikgJiYgKHRhcmdldFhWYWx1ZSA8IDAgfHwgdGFyZ2V0WFZhbHVlID49IG9yZGVyWFZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgLy8gVGhl
IHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0WCA9IGZsb29yICggb3JkZXJY
IC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRYQXR0cikpCiAg
ICAgICAgIHRhcmdldFhWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVyWFZhbHVl
IC8gMikpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSAmJiAo
dGFyZ2V0WVZhbHVlIDwgMCB8fCB0YXJnZXRZVmFsdWUgPj0gb3JkZXJZVmFsdWUpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAvLyBUaGUgc3BlYyBz
YXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRZID0gZmxvb3IgKCBvcmRlclkgLyAyICkp
CiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSkKICAgICAgICAg
dGFyZ2V0WVZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob3JkZXJZVmFsdWUgLyAyKSk7
CkBAIC0yMzQsMTEgKzIzMywxMSBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAgICBr
ZXJuZWxVbml0TGVuZ3RoWVZhbHVlID0gMTsKICAgICB9CiAgICAgaWYgKGtlcm5lbFVuaXRMZW5n
dGhYVmFsdWUgPD0gMCB8fCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlIDw9IDApCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgZmxvYXQgZGl2aXNvclZh
bHVlID0gZGl2aXNvcigpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JB
dHRyKSAmJiAhZGl2aXNvclZhbHVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZGl2aXNvckF0dHIp
KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2VybmVsTWF0cml4U2l6ZTsgKytpKQog
ICAgICAgICAgICAgZGl2aXNvclZhbHVlICs9IGtlcm5lbE1hdHJpeC5pdGVtcygpW2ldLT52YWx1
ZSgpOwpAQCAtMjQ2LDkgKzI0NSwxOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAg
ICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZh
bHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0
WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBr
ZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwot
ICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZl
Y3Q7CisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKAorICAg
ICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUpLAorICAgICAgICAgICAg
ZGl2aXNvclZhbHVlLAorICAgICAgICAgICAgYmlhcygpLAorICAgICAgICAgICAgSW50UG9pbnQo
dGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLAorICAgICAgICAgICAgZWRnZU1vZGUoKSwKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVsVW5pdExl
bmd0aFlWYWx1ZSksCisgICAgICAgICAgICBwcmVzZXJ2ZUFscGhhKCksCisgICAgICAgICAgICBr
ZXJuZWxNYXRyaXgpLAorICAgICAgICB7IHsgKmlucHV0MSB9IH0KKyAgICB9OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3ZTA0MzcwZDM1OTgyYTk1YjhkOTA0
OWIzMzkuLjg0MjU5MDIwYTg2OTk2ODkwOTBkMjM1YTY5MDJlNGEzMzFjOTdmZmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCkBAIC0xMDMs
NyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0
ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRi
ZGQ1Li43MWQ4YzdmMzkwZGJiZjUxOTIzZWYwNDEzOGM5NDViNzY2NWY5OTVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAt
MjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgpAQCAtODksMTQgKzg5LDE0IEBAIGJvb2wgU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZl
Y3QsCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVy
LT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2
Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGlu
Zy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRp
bmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRT
dXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ZGlmZnVzZUNvbnN0YW50QXR0cikKICAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+
c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0
U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRT
b3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNl
Jj4oZGlmZnVzZUxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVMaWdodEVsZW1l
bnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRo
aXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNTEsMjggKzE1MSwyNSBAQCB2
b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hh
bmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmls
dGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0
RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAg
YXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxk
ZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGZp
bHRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFw
cGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0Nv
bG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGZp
bHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5p
dExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwot
ICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZl
Y3Q7CisgICAgcmV0dXJuIHsgRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3VyZmFj
ZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxV
bml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSksIHsgeyAqaW5wdXQxIH0gfSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uN2Q5
OTQzMWUxNWVjYjZiM2JmNDBiZTJhZTIyMWY2OGQ1NjA2ZjY4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQu
Y3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3MjJkZmQwNTE3M2Q4YzIuLjkyN2Iz
NGYzN2FkNTYyNDFlOTA3NzYyNzI5ODExYTg1YWNiNTFhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCkBAIC0yMiw3ICsyMiw3
IEBACiAjaW5jbHVkZSAiU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgiCiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgogCkBAIC0xMTUsMjAgKzExNSwxNSBAQCB2b2lkIFNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZp
bHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXIubmFtZWRF
ZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6
Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNj
YWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAg
IGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlu
cHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICByZXR1cm4geyBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFubmVsU2VsZWN0b3IoKSwg
eUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0g
fSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVk
My4uMTIzNzgwOTA4NWFlZDIyNzViNWIwMTBmNDk4Y2ZmNmNiNWJlNmRkNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyAr
OTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6
Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0
YW50TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuY3BwCmluZGV4IGE2ODZiYjhmYTM4ZDlkZGZhMjhlMDJhZWQ5NWU0MWIwOGEzNmYy
ZjcuLjRjMTUzYmVhMThkNzdlY2I2YzBmMjJkN2ExYjFlMDEwNDFiYjk1NWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCkBAIC0zNiw3ICsz
Niw3IEBAIFJlZjxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+IFNWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxM
aWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdAogewogICAgIHJldHVybiBE
aXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCksIGVsZXZhdGlvbigpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAppbmRleCBmYmRm
NzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNjLi40MTZmZTYwYmU3YjE2ZDkxODE1
Y2IzOWVmNTIzYTlmNGU0ZWExZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
dGFudExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25z
dCBTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihT
VkdGRURpc3RhbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXgg
MjJiY2UxZDMzMzE3Yzk1NzFmZTVkNzlmNGIzMjZhODliZmM1YjY4MS4uNzk1NGVjMjcwMWIzYTg2
OGQ4ZDYwZGU5YzVlNDM0MzhjOTViZjQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIlNWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuaCIKIAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTk3LDI3ICs5NywyNSBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9w
U2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8
IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gcmVuZGVy
ZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVy
LT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3Io
KSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwg
c3RkRGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0
LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBy
ZXR1cm4geyBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlv
blkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpLCB7ICppbnB1dDEgfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA5YjYy
ZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFkLi41Mjc1YjFmY2EwMGViZjU1MWVh
MGRkYWJiNDBiNTVkYmQyMDIxMGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0
ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxl
bWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZjMi4u
ZTZiOGEyMzE4ZWNmNTQyZGRjNDhhZDBmMjljY2QzNDdmNzcyNmE4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01MCwyNiArNTAsMjYgQEAgYm9vbCBTVkdG
RUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZm
ZWN0LCBjb25zdCBRdWEKICAgICBGRUZsb29kKiBmbG9vZCA9IHN0YXRpY19jYXN0PEZFRmxvb2Qq
PihlZmZlY3QpOwogCiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpmbG9vZF9jb2xvckF0
dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0Rmxvb2RDb2xvcihzdHlsZS5zdmdTdHlsZSgp
LmZsb29kQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBmbG9vZC0+c2V0Q29sb3Ioc3R5bGUuc3Zn
U3R5bGUoKS5mbG9vZENvbG9yKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxv
b2Rfb3BhY2l0eUF0dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0Rmxvb2RPcGFjaXR5KHN0
eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOworICAgICAgICByZXR1cm4gZmxvb2QtPnNl
dE9wYWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSk7CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBm
aWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJikgY29u
c3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAg
cmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5z
dHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7
CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAgcmV0
dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBvcGFjaXR5KTsKKyAgICByZXR1cm4g
eyBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcy
NDhhMWI2ZjVjZjUxZmVlOTExLi40ODA1ZTIzYTFjNzMwYTJjYjFhY2Y3Y2MzN2VkOTNmYThhNWNi
MTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAtMzYsNyArMzYs
NyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVn
aXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAogICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCA3YTk5ODIyNGM5MjE5NTU1MjQ0
YTg2OWNhNzhhODMwZDU2M2M1OTlkLi45YjZlZTA1MjkyMzk4YzU1MWRiNzY2ODk0NzNhNGViMmQ4
ZDJlMzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcApAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgIlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTk1LDE4ICs5NSwxNiBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQog
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERl
dmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwg
c3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlh
dGlvblkoKSwgZWRnZU1vZGUoKSksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBkODllMWE3NDhmYjJj
NTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi5lZmRiZjAwOTUwNWIzMGY4MTllZDBhMmI0MjJi
ODNjMmE1ZDUwNTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODExOTVkM2MyN2VjNGYuLjYzODM2
MTIwMWE1YzQ3NzQyMDYwOWQ0YzVhMDcyNWQ0ZDAyODRmNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsxNzQsMTcgQEAgdm9pZCBTVkdGRUlt
YWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBOZXR3b3Jr
TG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVu
dFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9CiAKLVJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
JikgY29uc3QKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZFSW1h
Z2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIsIG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVy
ZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIHJldHVybiB7
IEZFSW1hZ2U6OmNyZWF0ZSh7ICptX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRl
cmVyKCkpIH0sIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsgfSB9OwogCiAgICAgYXV0byB0YXJn
ZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwg
dHJlZVNjb3BlKCkpOwogICAgIGlmIChpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZih0
YXJnZXQuZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0
dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoZmlsdGVyLCB0cmVlU2NvcGUoKSwg
aHJlZigpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4geyB9OworICAg
IAorICAgIHJldHVybiB7IH07CisvLyAgICByZXR1cm4geyBGRUltYWdlOjpjcmVhdGVXaXRoSVJJ
UmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRp
bygpKSwgeyB9IH07CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNl
QXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIxMDE1YTI1
NmJhZGExNTRjNWM3Li5lZTEzOTlhNjA3YzM1MWY1ZWFlOTFhYjU3MDhlOTg2NGRhZGNlMDkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1
ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaApp
bmRleCBjZDBiZmI5ZWRjZmQ3YjRlMWFmMzliNTVlZGJiYmQ3ODRhYWVhODlkLi4zZmZlNDhmNDQw
OTc0ZWU3YTkxZGZkZmVhMTI0NGZhNzQ2ZmQ1MzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVM
aWdodEVsZW1lbnQuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNWR0ZpbHRlcjsKIAogY2xhc3MgU1ZH
RkVMaWdodEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChTVkdGRUxpZ2h0RWxlbWVudCk7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBSZWY8TGln
aHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlciYpIGNv
bnN0ID0gMDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1lbnQqIGZpbmRMaWdodEVsZW1lbnQo
Y29uc3QgU1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXppbXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCmluZGV4IGE1NzJhZDUzZDlmMWQ2NWRhM2RlZjRkNTExM2Q1MGE0MjUyMTg4
OGEuLmQ0YTI5NjQ2OGMyMDYyZjRmZGRjZTJiNzBhN2JiYjIxYzc4YjViYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1
ZGUgIkZFTWVyZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJTVkdG
RU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBA
IC00NCwyNCArNDMsMjIgQEAgUmVmPFNWR0ZFTWVyZ2VFbGVtZW50PiBTVkdGRU1lcmdlRWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEQKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1S
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRU1lcmdl
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBlZmZl
Y3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtZXJn
ZUlucHV0czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZH
RkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAg
YXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlci5uYW1lZEVmZmVjdChtZXJnZU5vZGUuaW4xKCkpOwog
ICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZNb3ZlKG1lcmdlRWZmZWN0KSk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQobWVyZ2VFZmZlY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgbWVyZ2VJbnB1dHMuc2hyaW5rVG9GaXQo
KTsKLQogICAgIGlmIChtZXJnZUlucHV0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBGRU1lcmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMuc2l6ZSgpKSwgV1RGTW92ZShtZXJnZUlu
cHV0cykgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAppbmRl
eCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgwMmQyODNjZjRlM2MyLi5mNGQ1MDg4YTMyMmFm
ZGM5M2U0NTZjMTBjMzVhNmI5NDRiNzQwMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5
UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRkVNZXJnZUVsZW1lbnQsIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVy
dHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJv
cGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0Zp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5
UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVkMTc5
NWQzMjFiLi42YTk0YTVkZTE2NGQ0N2VlNjEyZTVmYjllNzcyMTcyODg4MWIxNGY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0yMiw3ICsy
Miw3IEBACiAjaW5jbHVkZSAiU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTM5LDcg
KzM5LDcgQEAgaW5saW5lIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmEKICAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAg
UHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudDo6bV9pbjE+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6
OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9tb3Jw
aG9sb2d5T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OnJhZGl1c0F0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3Jh
ZGl1c1gsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1k+KCk7CiAgICAgfSk7CiB9
CkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVz
KGZsb2F0IHgsIGZsb2F0IHkpCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVl
KQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBNb3Jw
aG9sb2d5T3BlcmF0b3IgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xv
Z3lPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1
ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX21vcnBo
b2xvZ3lPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvcj4ocHJv
cGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg1LDcgKzg1LDcgQEAg
Ym9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiBlZmZlY3QsIGNvbnMKIHsKICAgICBGRU1vcnBob2xvZ3kqIG1vcnBob2xvZ3kg
PSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0
TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOworICAgICAgICByZXR1cm4gbW9ycGhv
bG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcigpKTsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKICAgICAgICAgLy8gQm90aCBz
ZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJhdGVseS4KICAgICAg
ICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWChyYWRpdXNY
KCkpOwpAQCAtMTE0LDIxICsxMTQsMTggQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKICAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwogICAgIGZsb2F0IHlS
YWRpdXMgPSByYWRpdXNZKCk7CisgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMgPCAwKQor
ICAgICAgICByZXR1cm4geyB9OwogCisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZl
Y3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9n
eTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0gICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsK
KyAgICByZXR1cm4geyBGRU1vcnBob2xvZ3k6OmNyZWF0ZShtb3JwaG9sb2d5T3BlcmF0b3IoKSwg
eFJhZGl1cywgeVJhZGl1cyksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApp
bmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li5jYmY5NWI5M2Ri
M2JhOGVhNWNjYzE1ZGVmZDM1NWFkNjI0MTQ4OGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI2LDEyICsyNiwxMiBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9n
eU9wZXJhdG9yVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVy
YXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4g
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0
cmluZyhNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQogICAgIHsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7
CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRVJPREU6CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAg
IH0KIAotICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yIGZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZXJvZGUi
KQogICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERTsKQEAgLTYy
LDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSYWRpdXMoZmxvYXQgcmFkaXVzWCwg
ZmxvYXQgcmFkaXVzWSk7CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEt
PmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBzdmdPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlPigpOyB9CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVy
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8
TW9ycGhvbG9neU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFkaXVzWC0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCByYWRpdXNZKCkgY29u
c3QgeyByZXR1cm4gbV9yYWRpdXNZLT5jdXJyZW50VmFsdWUoKTsgfQogCiAgICAgU1ZHQW5pbWF0
ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KLSAgICBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRv
cjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIG1vcnBob2xvZ3lPcGVyYXRvckFuaW1h
dGVkKCkgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51
bWJlciYgcmFkaXVzWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yYWRpdXNYOyB9CiAgICAgU1ZHQW5p
bWF0ZWROdW1iZXImIHJhZGl1c1lBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWTsgfQogCkBA
IC04MSwxMSArODEsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09w
ZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9t
b3JwaG9sb2d5T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywg
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJl
cj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNZIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0
ZSh0aGlzKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmlkbAppbmRleCBhMmMxODFmMmU2MzdjZDM5MDk4ZWJlNjllNjA5OGFiZTNjMzg1Y2QxLi4y
ZDIxZjJhMWQ4ODhkMDJlYzE3OWRmMTBlMmRlNDNmYzY1Mjk3ZDU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCkBAIC0zMyw3ICszMyw3IEBACiAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1ZHX01PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICAg
PSAyOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4x
OwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRBcz1tb3JwaG9s
b2d5T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9w
ZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJh
ZGl1c1g7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgcmFk
aXVzWTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAppbmRleCAw
MzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li5kYzY5MmRhYmJhZmM0ZDZi
NmFmM2U0NDJlY2M4NWMxNThjZDAxMjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcApAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC04MSwxNiArODEsMTMgQEAgdm9pZCBTVkdG
RU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFT2Zmc2V0OjpjcmVhdGUo
ZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1
dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFT2Zmc2V0OjpjcmVhdGUo
ZHgoKSwgZHkoKSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3MmRiNjdiMTI1ZWEyZWQ0NjVlMzVi
NTczNzA0OWJlZS4uM2VlODhjZWZkZDI1MmU3MjBiY2M0MDZjYTY1MTE3NDFkMDZlZDE2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKaW5kZXggOWZmODQ3MzM4
YTFiNmE1NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uZGI5MzdjYTE1MGI4NDQxYjk0NWI0YjA1
ZTcyMGFmYmQ3N2FhNTkzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGln
aHRFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIApAQCAtMzksMTkgKzM4LDE5IEBAIFJlZjxTVkdGRVBvaW50TGlnaHRFbGVtZW50
PiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVBvaW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6
bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxMaWdodFNv
dXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVy
JikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247Ci0gICAgaWYgKGJ1aWxkZXIu
cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFy
Z2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJl
bmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRp
b24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsK
LQotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBv
aW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5o
dG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkg
KiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJl
bmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotICAgIH0gZWxzZQot
ICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAgIGlm
IChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0g
ZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgo
cmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAg
ICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVp
Z2h0KCkpOworLy8KKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNv
cm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7
CisvLyAgICB9IGVsc2UKKy8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHko
KSwgeigpKTsKICAgICAKICAgICByZXR1cm4gUG9pbnRMaWdodFNvdXJjZTo6Y3JlYXRlKHBvc2l0
aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCmlu
ZGV4IDMzYTViZDc0OTIwODI4Yzk5ODY0NWI3MjJmNzJhNzQ1ZTQ4ZGE3OWUuLmNkZWJlNDc2MTg0
NzMxNWIyYjliODY2YzIwMTRjMGQzODI5ZWMxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFUG9pbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNv
bnN0IFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQyOWE1OS4uYzEx
NjQxYjBlMjBiNmI2NTBjOWJkNjdiOWRkNDY4MjhiOWQ2ZGQ1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtMjYsNyAr
MjYsNyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgpAQCAtOTYsNyArOTYsNyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdAogICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAg
QVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUo
KS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgp
LmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRM
aWdodGluZ0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNl
dENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJm
YWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0U3VyZmFj
ZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZl
Y3QqIGVmZmVjdAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVu
dEF0dHIpCiAgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTcGVjdWxhckV4cG9u
ZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CiAKLSAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0
X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5saWdodFNvdXJjZSgpKTsKKyAg
ICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxp
Z2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxl
bWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIEFT
U0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNjAsMjggKzE2MCwzMSBAQCB2b2lkIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
U1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYgZmlsdGVy
KSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlci5uYW1lZEVmZmVjdChpbjEoKSk7
CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRy
IGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMp
OwotICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAK
LSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVy
QnVpbGRlcik7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKLSAgICBDb2xvciBjb2xvciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5z
dHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLQotICAgIGF1dG8gZWZmZWN0ID0g
RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCks
IHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3Ro
WCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7Ci0gICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAg
ICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1l
bnQodGhpcyk7CisgICAgaWYgKCFsaWdodEVsZW1lbnQpCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgCisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoCisg
ICAgICAgICAgICByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihy
ZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSksCisgICAgICAgICAg
ICBzdXJmYWNlU2NhbGUoKSwKKyAgICAgICAgICAgIHNwZWN1bGFyQ29uc3RhbnQoKSwKKyAgICAg
ICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKSwKKyAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhY
KCksCisgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLAorICAgICAgICAgICAgbGlnaHRF
bGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXIpKSwKKyAgICAgICAgeyB7ICppbnB1dDEgfSB9Cisg
ICAgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmgKaW5kZXggODk3YjhkZTE1NmQxYzc5YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3
YjE0Ni4uNTJkMDEzMjU3MjE4YTJkMDU5ZDM1ODk1NTRiMmE3MmZhNTNlNWU5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCkBAIC01
OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVh
dGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdo
dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5j
cHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0ZWE0YWE5Y2YyZGZiZmZlZS4uOTA0Yzhh
YmExNDRkZDRhZTNhODZjMDBhN2Q5NDhkZDE5NGJhNTlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRl
ICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTM5LDI3ICszOCwyNyBAQCBSZWY8U1ZHRkVTcG90TGlnaHRFbGVtZW50PiBTVkdGRVNw
b3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YQogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3Vy
Y2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZH
RkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXImKSBjb25zdAog
ewogICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKICAgICBGbG9hdFBvaW50M0QgcG9pbnRzQXQ7
Ci0KLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJl
bmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotICAgICAgICAKLSAgICAgICAg
cG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRo
KCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZl
cmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5v
cmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAg
cG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1p
bllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxv
YXQpOwotCi0gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0
WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb2ludHNBdC5zZXRZKHJlZmVy
ZW5jZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAg
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdo
dFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5p
dHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0Wigp
ICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVy
ZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKLSAgICAg
ICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2lu
dHNBdFooKSk7Ci0gICAgfQorLy8KKy8vICAgIGlmIChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAg
ICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7
CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJl
ZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJv
eC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUg
YW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRf
cGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFu
Y2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNv
cm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vCisvLyAgICAgICAgcG9pbnRzQXQuc2V0WChy
ZWZlcmVuY2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Cisv
LyAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiBy
ZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8g
ICAgICAgIHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZl
cmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkp
IC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBwb3NpdGlvbiA9
IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAgICAgICBwb2ludHNBdCA9IEZsb2F0
UG9pbnQzRChwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKy8vICAgIH0K
IAogICAgIHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbiwgcG9pbnRzQXQs
IHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5nbGUoKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKaW5kZXggM2Y3NzE3YzEyNjVjNGYzMWY1
MzA4ODY4ZDQ3Yzk3ODc5N2E3MzIxMS4uYmU5OGZiZWQ4NjZjNWJjZTJmOTk3NTczZjc1OWJhNDIz
MzI1Yzc3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaApA
QCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFU3BvdExpZ2h0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNv
dXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVTcG90TGlnaHRFbGVtZW50KSA9
PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGls
ZUVsZW1lbnQuY3BwCmluZGV4IDM5YmRjYzc3MzU5NjY1MDM2ZTFhZTc0NzYxMmVhZDZmOWFjMzcz
NzAuLjdkZjI1MmRhYTY2M2QwYjBhZWMxNWI4MTRhZTIzMGUzNjE3NDFhZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1
ZGUgIkZFVGlsZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTcwLDE2ICs3MCwxMyBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICgh
aW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVy
biB7IEZFVGlsZTo6Y3JlYXRlKCksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4IDQ1YjMyNzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIy
ZGM0MmEzM2E5MWYuLjcxYTk3NDY4Mzc2MGFkYzAxNmNjNmRlYmVlMzVhMTkxMzUyZWRjN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaApAQCAtNDIsNyArNDIsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IGJ1aWxkKFNWR0ZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKaW5kZXggMTE1NjExMTlkODNl
M2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uNjI3MDdlY2JhZjliMWQ1ODU3MmZiZjc3OGM0
Y2NlMzAwZGJlMjQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmNwcApAQCAtOTIsNyArOTIsNyBAQCBib29sIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29ucwogewog
ICAgIEZFVHVyYnVsZW5jZSogdHVyYnVsZW5jZSA9IHN0YXRpY19jYXN0PEZFVHVyYnVsZW5jZSo+
KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICAg
ICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFR5cGUodHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHR1
cmJ1bGVuY2UtPnNldFR1cmJ1bGVuY2VUeXBlKHR5cGUoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpCiAgICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5z
ZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmJhc2VGcmVxdWVuY3lBdHRyKQpAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9pZCBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlciYp
IGNvbnN0CiB7CiAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VGcmVxdWVuY3lZ
KCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVUdXJidWxlbmNl
OjpjcmVhdGUoZmlsdGVyLCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZ
KCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBF
X1NUSVRDSCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgRkVUdXJidWxlbmNl
OjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1P
Y3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gp
LCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3NjllMTk4YS4uYjkx
NGRmMzhjYmEwMGZkNzhiMzhmNDJjM2IwZmIwMDJlODIyYTU5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKaW5kZXgg
ODEzYmNiZDA4MjBjYWM2NzdhNzk3ZjI3YmNjZThjZTEwOTEyYmM0Ny4uZGY2MDRiYTJhNmNkNzY4
NjJjOTMzMjJkNmM3ZGM4OTNkYjdlOWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQu
aCIKIAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRp
bGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCmluZGV4IGZmNTIyMzA5NDY2YjA0MGJlZjA4
OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjc3MWE0MTZlZjBlZjA1NTgyZDcyOTgxYTMwY2M5ZDYyZTY1
MjlmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBAIC0yNSw5ICsyNSw3IEBACiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDIyICs5MSw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFu
Z2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmls
dGVyRWZmZWN0KSBjb25zdAotewotICAgIEFTU0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICgh
ZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNW
R05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAg
ICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVj
dC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0
dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmICho
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3Qt
PnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJl
bmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0
dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhp
cywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IGM5OGIxM2VkOTYyNzZh
ZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcuLmVjMjY5ZjAzYzQzNjE3Mjg1YzJjZTA2Nzg1MjE0
YWQ3YWFmMDVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTMxLDE3ICszMSwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKLWNs
YXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXI7CiAKIGNsYXNzIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0
KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7Ci0gICAgLy8gUmV0dXJucyB0cnVlLCBp
ZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgotICAgIHZpcnR1
YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5
T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0Vs
ZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHgoKSBjb25zdCB7IHJldHVybiBt
X3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgU1ZH
QW5pbWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVkKCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAg
ICBTVkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5pbWF0ZWQoKSB7IHJldHVybiBtX3Jlc3VsdDsg
fQogCisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXImKSBjb25zdCA9IDA7CisgICAgLy8g
UmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQg
b25lLgorICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYu
LjMzYTZlZjg4NDAzY2E5NTc2ODg0ODVmM2I1MTIzNTliY2I5MGQ3YzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zLDYg
KzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMzAgKzI0LDcyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1
ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdlLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1h
Z2UpCi0gICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKK1Jl
ZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoUmVmPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogeworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoV1RGTW92ZShpbWFnZSksIHByZXNlcnZlQXNwZWN0UmF0
aW8pKTsKIH0KIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0
cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwg
VHlwZTo6SW1hZ2UpCi0gICAgLCBtX3RyZWVTY29wZSgmdHJlZVNjb3BlKQotICAgICwgbV9ocmVm
KGhyZWYpCitGRUltYWdlOjpGRUltYWdlKFJlZjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6IEZpbHRlckVm
ZmVjdChUeXBlOjpGRUltYWdlKQorICAgICwgbV9pbWFnZShXVEZNb3ZlKGltYWdlKSkKICAgICAs
IG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1SZWY8
RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8
SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZl
QXNwZWN0UmF0aW8pCitGbG9hdFJlY3QgRkVJbWFnZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCBpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRp
bykpOworICAgIHJldHVybiB7IH07CisvLyAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVy
KCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
KTsKKy8vCisvLyAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IHsgeyB9LCBtX2ltYWdlLT5zaXplKCkg
fTsKKy8vICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwg
c3JjUmVjdCk7CisvLworLy8gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKy8vICAgICAgICBwYWlu
dFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CisvLyAgICBlbHNlCisvLyAgICAgICAg
cGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisvLworLy8gICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QocGFpbnRSZWN0KTsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0
ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBj
b25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJl
c2VydmVBc3BlY3RSYXRpbykKK2Jvb2wgRkVJbWFnZTo6YXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIEZpbHRlclJlc3VsdCYpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29wZSwgaHJlZiwg
cHJlc2VydmVBc3BlY3RSYXRpbykpOwotfQotCi12b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKLSAg
ICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBzcmNSZWN0
LnNldFNpemUobV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
LnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKLSAgICB9IGVsc2UgaWYgKFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIHNyY1Jl
Y3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkK
LSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UK
LSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKy8vICAgIEFTU0VSVChz
b3VyY2VJbWFnZSk7CisvLworLy8gICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1
ZmZlcigpOworLy8gICAgaWYgKCFyZXN1bHRJbWFnZSkKKy8vICAgICAgICByZXR1cm4gZmFsc2U7
CisvLworLy8gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zv
cm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKy8vICAgIEZsb2F0UmVj
dCBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKKy8v
ICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0
KTsKKy8vCisvLyAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3Qo
KS5sb2NhdGlvbigpOworLy8gICAgZGVzdFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1w
YWludExvY2F0aW9uLnkoKSk7CisvLworLy8gICAgcmVzdWx0SW1hZ2UuY29udGV4dCgpLmRyYXdJ
bWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiB0cnVlOwogfQog
Ci1SZW5kZXJFbGVtZW50KiBGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdAorRmls
dGVyUmVzdWx0KiBGRUltYWdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqKSBjb25zdAogewotICAgIGlmICghbV90cmVlU2NvcGUp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJl
bmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhtX2hyZWYsICptX3RyZWVTY29wZSk7Ci0g
ICAgaWYgKCFpczxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiB0YXJnZXQuZWxlbWVudC0+cmVuZGVyZXIoKTsKLX0KLQotdm9p
ZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdlICYmICFy
ZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBh
bHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmls
dGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpKTsKLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAg
ICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJl
ci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVj
dCk7Ci0gICAgfQotCi0gICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwg
LXBhaW50TG9jYXRpb24ueSgpKTsKLQotICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgp
OwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICAg
ICAgUmVmUHRyIGNvbnRleHROb2RlID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVs
ZW1lbnQoKSk7Ci0gICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkp
IHsKLSAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0Tm9k
ZS5nZXQoKSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwotCi0gICAgICAg
ICAgICAvLyBJZiB3ZSdyZSByZWZlcmVuY2luZyBhbiBlbGVtZW50IHdpdGggcGVyY2VudGFnZSB1
bml0cywgZWcuIDxyZWN0IHdpdGg9IjMwJSI+IHRob3NlIHZhbHVlcyB3ZXJlIHJlc29sdmVkIGFn
YWluc3QgdGhlIHZpZXdwb3J0LgotICAgICAgICAgICAgLy8gQnVpbGQgdXAgYSB0cmFuc2Zvcm1h
dGlvbiB0aGF0IG1hcHMgZnJvbSB0aGUgdmlld3BvcnQgc3BhY2UgdG8gdGhlIGZpbHRlciBwcmlt
aXRpdmUgc3VicmVnaW9uLgotICAgICAgICAgICAgaWYgKGxlbmd0aENvbnRleHQuZGV0ZXJtaW5l
Vmlld3BvcnQodmlld3BvcnRTaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbmNhdENU
TShtYWtlTWFwQmV0d2VlblJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHZpZXdwb3J0U2l6
ZSksIGRlc3RSZWN0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY29u
dGVudFRyYW5zZm9ybWF0aW9uOwotICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJT
dWJ0cmVlVG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
Y29udGV4dC5kcmF3SW1hZ2UoKm1faW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXR1
cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0cik7CiB9CiAKLVRleHRTdHJlYW0m
IEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2Vu
dGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFSW1hZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemU7Ci0gICAgaWYgKG1faW1hZ2UpCi0g
ICAgICAgIGltYWdlU2l6ZSA9IG1faW1hZ2UtPnNpemUoKTsKLSAgICBlbHNlIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIGltYWdlU2l6
ZSA9IGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpLnNpemUoKTsKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gbV9pbWFnZS0+c2l6ZSgp
OwogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlSW1hZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgaW1h
Z2Utc2l6ZT1cIiIgPDwgaW1hZ2VTaXplLndpZHRoKCkgPDwgIngiIDw8IGltYWdlU2l6ZS5oZWln
aHQoKSA8PCAiXCJdXG4iOwogICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBkdW1wIGFsc28gb2Jq
ZWN0IHJldHVybmVkIGJ5IFNWR0ZFSW1hZ2U6OmltYWdlKCkgPwogICAgIHJldHVybiB0czsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRl
eCBhYzE2MGVkY2U3YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li5hODE0NGY3NjdjYmQ4
NzRjZWY0NTA2OTVhYzBiYWY1MGQyY2QxYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNywzNiArMjgsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEltYWdlOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFRyZWVTY29wZTsK
IAogY2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJ
bWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBS
ZWY8RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBz
dGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZShSZWY8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5GRUltYWdlKCkgPSBk
ZWZhdWx0OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBUcmVlU2NvcGUm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAg
ICBGRUltYWdlKFJlZjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYp
OwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUltYWdlIjsgfQogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVuZGVyRWxlbWVudCogcmVmZXJl
bmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Up
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBmaW5h
bDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7Ci0gICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IEZpbHRlclJlc3VsdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEltYWdlPiBtX2lt
YWdlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICAvLyBt
X3RyZWVTY29wZSB3aWxsIG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLiBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0gICAgVHJlZVNjb3BlKiBt
X3RyZWVTY29wZSB7IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVmOworICAgIFJlZjxJbWFn
ZT4gbV9pbWFnZTsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgbV9wcmVzZXJ2ZUFz
cGVjdFJhdGlvOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5
MmI3YmNlNy4uNjBmODk0OGQwYTY4NDQwNzNjMDM0OGEyY2M4NjA2NThjNWM0ZDJiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjkgKzIz
LDE2OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKyNpbmNs
dWRlICJTb3VyY2VHcmFwaGljLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVy
OjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29u
c3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29s
IGVmZmVjdEJCb3hNb2RlKQotICAgIDogRmlsdGVyKGFic29sdXRlVHJhbnNmb3JtKQotICAgICwg
bV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24oYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
KQotICAgICwgbV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKLSAgICAsIG1f
ZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKLSAgICAsIG1fZWZmZWN0QkJveE1vZGUoZWZmZWN0
QkJveE1vZGUpCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJF
bGVtZW50JiBmaWx0ZXJFbGVtZW50LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIEZpbHRl
ckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1h
eENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxk
Tm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIocmVuZGVyaW5nTW9kZSkp
OworICAgIAorICAgIGZpbHRlci0+c2V0dXBCdWlsdGluRWZmZWN0cyhwcmV2aW91c0VmZmVjdCk7
CisgICAgCisgICAgRmlsdGVyRWZmZWN0c0lucHV0cyBlZmZlY3RzSW5wdXRzOworICAgIGlmICgh
ZmlsdGVyLT5idWlsZEVmZmVjdHMoZmlsdGVyRWxlbWVudCwgZWZmZWN0c0lucHV0cykpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRXhwcmVzc2lvbihl
ZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZmls
dGVyOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShIYXNoTWFwPEF0
b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiYmIG5hbWVkRWZmZWN0cywgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyKFdU
Rk1vdmUobmFtZWRFZmZlY3RzKSwgcmVuZGVyaW5nTW9kZSkpOworfQorCitTVkdGaWx0ZXI6OlNW
R0ZpbHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVy
aW5nTW9kZSwgVHlwZTo6U1ZHRmlsdGVyKQoreworfQorCitTVkdGaWx0ZXI6OlNWR0ZpbHRlcihI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiYmIG5hbWVkRWZmZWN0cywgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5
cGU6OlNWR0ZpbHRlcikKKyAgICAsIG1fbmFtZWRFZmZlY3RzKFdURk1vdmUobmFtZWRFZmZlY3Rz
KSkKK3sKK30KKwordm9pZCBTVkdGaWx0ZXI6OmFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3sKKyAgICBpZiAobmFtZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0LnB0cigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMobmFtZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIoKTsKKyAg
ICBtX25hbWVkRWZmZWN0cy5zZXQobmFtZSwgV1RGTW92ZShlZmZlY3QpKTsKK30KKworUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjpuYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBu
YW1lKSBjb25zdAoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9s
YXN0RWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVjdDsKKworICAgICAgICBy
ZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsK
KyAgICB9CisKKyAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhuYW1lKSkKKyAgICAg
ICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KG5hbWUpOworCisgICAgcmV0dXJuIG1fbmFt
ZWRFZmZlY3RzLmdldChuYW1lKTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OnNldHVwQnVpbHRpbkVm
ZmVjdHMoRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBpZiAocHJldmlvdXNF
ZmZlY3QpIHsKKyAgICAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZm
ZWN0TmFtZSgpLCBSZWY8RmlsdGVyRWZmZWN0PiB7ICpwcmV2aW91c0VmZmVjdCB9KTsKKyAgICAg
ICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNl
QWxwaGE6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc291
cmNlR3JhcGhpYyA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7CisgICAg
bV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxw
aGE6OmNyZWF0ZSgpKTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0
ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5w
dXRzKQoreworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IG5hbWVkRWZmZWN0KFNvdXJjZUdyYXBo
aWM6OmVmZmVjdE5hbWUoKSk7CisgICAgYXV0byBzb3VyY2VBbHBoYSA9IG5hbWVkRWZmZWN0KFNv
dXJjZUFscGhhOjplZmZlY3ROYW1lKCkpOworICAgIGVmZmVjdHNJbnB1dHMuc2V0KHNvdXJjZUFs
cGhhLnJlbGVhc2VOb25OdWxsKCksIEZpbHRlckVmZmVjdFZlY3RvciB7IHNvdXJjZUdyYXBoaWMu
cmVsZWFzZU5vbk51bGwoKSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVy
RWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0gZWZmZWN0RWxlbWVu
dC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVjdCB9LCBXVEZNb3Zl
KGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJlc3VsdCgp
LCBlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU1ZHRmlsdGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVj
dD4mIGVmZmVjdCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmls
dGVyRWZmZWN0VmVjdG9yJiBzdGFjaykKK3sKKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQo
MCwgeyBlZmZlY3QgfSk7CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZvciAo
YXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3QpKSB7CisgICAgICAg
IGlmICghYnVpbGRFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5wdXRzLCBzdGFjaykp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKCFzdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gZWZmZWN0LnB0cigp
KTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTVkdGaWx0ZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBl
ZmZlY3RzSW5wdXRzKQogewotICAgIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVRy
YW5zZm9ybS5tYXBSZWN0KGZpbHRlclJlZ2lvbik7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7
CisgICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0c0lu
cHV0cywgc3RhY2spOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJl
c29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGaWx0ZXJSZXN1bHQqIFNWR0ZpbHRlcjo6
YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QKIHsKLSAgICBpZiAobV9lZmZlY3RCQm94TW9k
ZSkKLSAgICAgICAgc2l6ZSA9IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsKKyAg
ICBpZiAoIW1fbGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAo
IXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlSW1hZ2UgPSBzdGFjay50YWtlTGFzdCgp
LT5pbWFnZUJ1ZmZlcigpOworCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGZvciAoYXV0
byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZWZmZWN0
LT5hcHBseShvdXRwdXQsIHN0YWNrLCBzb3VyY2VJbWFnZSk7CisgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3RhY2suYXBwZW5kKHsg
KnJlc3VsdCB9KTsKKyAgICAgICAgb3V0cHV0LnJlc3VsdHMoKS5hZGQoZWZmZWN0LCBSZWY8Rmls
dGVyUmVzdWx0PigqcmVzdWx0KSk7CisgICAgfQogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkg
LyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsK
KyAgICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgcmVzdWx0LT50cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIHJldHVy
biAmcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVh
dGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRS
ZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJC
b3hNb2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0s
IGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJl
Z2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZXhwcmVz
c2lvbikKKyAgICAgICAgZWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4
IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2YuLjYwYWYwM2Y4YjVhZmFi
N2RlYzE3YTBhZjI4ZDQ0NTI1ZDgwZTA4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDQxICsyMSw0OCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNp
bmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
U1ZHRmlsdGVyRWxlbWVudDsKKwogY2xhc3MgU1ZHRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOworICAgIHN0
YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFJlbmRlcmlu
Z01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBGaWx0ZXJFZmZlY3QqIHByZXZp
b3VzRWZmZWN0ID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxT
VkdGaWx0ZXI+IGNyZWF0ZShIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiYm
IG5hbWVkRWZmZWN0cywgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0
cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNv
bHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIGNvbnN0IEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZp
bHRlckVmZmVjdD4+JiBuYW1lZEVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBtX25hbWVkRWZmZWN0
czsgfQogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUp
IGNvbnN0IGZpbmFsOworcHJpdmF0ZToKKyAgICBTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSk7Cisg
ICAgU1ZHRmlsdGVyKEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+JiYgbmFt
ZWRFZmZlY3RzLCBSZW5kZXJpbmdNb2RlKTsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJl
Y3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsg
fQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0Qm91bmRpbmdCb3g7IH0KKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+KTsKIAotICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3Rz
KEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOworICAgIGJvb2wgYnVpbGRFZmZlY3RzKFNW
R0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CisgICAgYm9vbCBidWlsZEV4
cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5w
dXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjayk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Np
b24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi1wcml2YXRlOgotICAgIFNWR0ZpbHRl
cihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJl
Y3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJv
eE1vZGUpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBmaW5hbDsK
KworICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29s
dXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0Jv
eDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3Qg
bV9maWx0ZXJSZWdpb247Ci0gICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworICAgIEhhc2hNYXA8
QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7CisgICAgSGFz
aE1hcDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7CisgICAg
VmVjdG9yPFJlZjxjb25zdCBGaWx0ZXJFZmZlY3Q+PiBtX2V4cHJlc3Npb247CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0
dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBm
dW5jdGlvbi50eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRl
cjsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFm
MzA4N2I5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiU291cmNlQWxwaGEuaCIKLSNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8Rmls
dGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQotewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNv
dXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGlu
RWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0
ZSgqc291cmNlR3JhcGhpYykpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7Ci19Ci0KLXZvaWQg
U1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QpCi17Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBtX2xh
c3RFZmZlY3QgPSBlZmZlY3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9i
dWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFz
dEVmZmVjdCA9IGVmZmVjdDsKLSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVj
dCk7Ci19Ci0KLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVj
dEJ5SWQoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNvbnN0Ci17Ci0gICAgaWYgKGlkLmlzRW1wdHko
KSkgewotICAgICAgICBpZiAobV9sYXN0RWZmZWN0KQotICAgICAgICAgICAgcmV0dXJuIG1fbGFz
dEVmZmVjdDsKLQotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9idWlsdGluRWZmZWN0cy5j
b250YWlucyhpZCkpCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChpZCk7Ci0K
LSAgICByZXR1cm4gbV9uYW1lZEVmZmVjdHMuZ2V0KGlkKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJC
dWlsZGVyOjphcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVj
dD4mJiBlZmZlY3QsIFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIFRoZSBlZmZlY3Qg
bXVzdCBiZSBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1fZWZm
ZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAh
bV9lZmZlY3RSZW5kZXJlci5jb250YWlucyhvYmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5j
ZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVy
T2ZJbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAgIC8v
IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhZGQgdGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdpY2Uu
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kp
Ci0gICAgICAgIGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRkKGVm
ZmVjdC5nZXQoKSk7Ci0KLSAgICAvLyBJZiBvYmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0aGUg
ZWxlbWVudCBpc24ndCBhdHRhY2hlZCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2ggaW4g
dHVybiBtZWFuIHRoYXQgY2VydGFpbiB0eXBlcyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QKLSAg
ICAvLyB3b3JrICh0aGUgTGF5b3V0T2JqZWN0IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdpbGwg
bm90IGJlIGRlZmluZWQpLgotICAgIGlmIChvYmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVuZGVy
ZXIuYWRkKG9iamVjdCwgZWZmZWN0LmdldCgpKTsKLX0KLQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVy
OjpjbGVhckVmZmVjdHMoKQotewotICAgIG1fbGFzdEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9u
YW1lZEVmZmVjdHMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAg
ICBtX2VmZmVjdFJlbmRlcmVyLmNsZWFyKCk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKLX0K
LQotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZm
ZWN0KiBlZmZlY3QpCi17Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci0KLSAgICBmb3IgKGF1dG8mIHJl
ZmVyZW5jZSA6IGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRz
UmVjdXJzaXZlKHJlZmVyZW5jZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5
NzRmYTMzZTc2NDYwY2U5N2ZhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5
cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyT2Jq
ZWN0OwotY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKLQotY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNo
U2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKLQotICAgIFNWR0ZpbHRlckJ1aWxk
ZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7Ci0KLSAgICB2b2lkIHNldFRh
cmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94
ID0gcjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAgICAKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0czsgfQot
ICAgIHZvaWQgc2V0UHJpbWl0aXZlVW5pdHMoU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB1bml0
cykgeyBtX3ByaW1pdGl2ZVVuaXRzID0gdW5pdHM7IH0KLQotICAgIHZvaWQgYWRkKGNvbnN0IEF0
b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pik7Ci0KLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7
IH0KLQotICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+JiYsIFJlbmRlck9iamVjdCopOwotCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdFNl
dCYgZWZmZWN0UmVmZXJlbmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKLSAgICB7Ci0gICAgICAg
IC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KLSAg
ICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAg
ICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwotICAgIH0K
LQotICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBk
dXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBl
ZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJl
bmRlcmVyLmdldChvYmplY3QpOyB9Ci0KLSAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwotICAgIHZv
aWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOwotCi1wcml2YXRlOgotICAg
IGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0
byYgZWZmZWN0IDogbV9idWlsdGluRWZmZWN0cy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1fZWZm
ZWN0UmVmZXJlbmNlcy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0gICAgfQotCi0g
ICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZm
ZWN0czsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX25h
bWVkRWZmZWN0czsKLSAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0
aG9zZSBmaWx0ZXIgZWZmZWN0cywKLSAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmls
dGVyIGVmZmVjdC4KLSAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZl
Y3RTZXQ+IG1fZWZmZWN0UmVmZXJlbmNlczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZp
bHRlckVmZmVjdCo+IG1fZWZmZWN0UmVuZGVyZXI7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2xhc3RFZmZlY3Q7Ci0gICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAg
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRzIHsgU1ZHVW5pdFR5cGVz
OjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07Ci19OwotICAgIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU3ZWIzNjkxYzdkMzE3MzUyZTc5
ZDgyNjUxOTc4NzJkMmFmNTNkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU1ZHRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNWR0ZpbHRlckdlb21ldHJ5
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFNp
emUmIHJlc29sdXRpb24pCisgICAgICAgIDogRmlsdGVyR2VvbWV0cnkoZmlsdGVyUmVnaW9uLCBz
b3VyY2VJbWFnZVJlY3QpCisgICAgICAgICwgbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRy
YW5zZm9ybSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb24ocmVzb2x1dGlvbikKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Fic29sdXRlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHJl
Y3RJblVzZXJTcGFjZSA9IG1fYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKKyAgICAg
ICAgcmVjdEluVXNlclNwYWNlLnNjYWxlKG1fcmVzb2x1dGlvbik7CisgICAgICAgIHJldHVybiBy
ZWN0SW5Vc2VyU3BhY2U7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lv
bihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBGaWx0ZXJHZW9tZXRyeTo6cHJpbWl0aXZlU3VicmVnaW9uKGlucHV0
cyk7CisgICAgICAgIAorLy8gICAgICAgIHJldHVybiBGbG9hdFJlY3QgeworLy8gICAgICAgICAg
ICBwcmltaXRpdmVCb3VuZHJpZXMueC52YWx1ZV9vcihzdWJyZWdpb24ueCgpKSwKKy8vICAgICAg
ICAgICAgcHJpbWl0aXZlQm91bmRyaWVzLnkudmFsdWVfb3Ioc3VicmVnaW9uLnkoKSksCisvLyAg
ICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy53aWR0aC52YWx1ZV9vcihzdWJyZWdpb24ud2lk
dGgoKSksCisvLyAgICAgICAgICAgIHByaW1pdGl2ZUJvdW5kcmllcy5oZWlnaHQudmFsdWVfb3Io
c3VicmVnaW9uLmhlaWdodCgpKQorLy8gICAgICAgIH07CisgICAgfQorICAgIAorICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0U2l6ZSBtX3Jlc29sdXRp
b247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIuY3BwCmluZGV4IDA4NzVhNWVjZmZhOWM2N2U2MGMxYWY2NmM5MGM3MDk1ZmU3YmQxMDQuLjhm
YjBmNDAyNmNiZTM5OTA0MDMyMWYzZTJhODI5YzY4NTJkNDhiODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aEdyYW1tYXIuY3BwCkBAIC0xOTg2LDcgKzE5ODYsNyBAQCB5eXJlZHVjZToKICNsaW5lIDQx
OSAiV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkiCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3Qo
KHl5dnNwWygyKSAtICgyKV0uZXhwcmVzc2lvblZlY3RvcikpOwotICAgICAgICAoeXl2YWwuZXhw
cmVzc2lvbikgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3Bb
KDEpIC0gKDIpXS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAg
ICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IFhQYXRoOjpGaWx0ZXIoc3RkOjp1bmlxdWVfcHRy
PEV4cHJlc3Npb24+KCh5eXZzcFsoMSkgLSAoMildLmV4cHJlc3Npb24pKSwgV1RGTW92ZSgqcHJl
ZGljYXRlTGlzdCkpOwogICAgIDt9CiAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIueQppbmRleCBiNzUxYTYxYmEzZjQyMjI0MGU3YzBiZTBlNGY1ZDYxM2UyZjdhNTViLi4zNTMw
OTgwYWIyYTk0ZTc2NmJkY2NiOTIwYmQ3YTllNGNkYTJjNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
R3JhbW1hci55CkBAIC00MTgsNyArNDE4LDcgQEAgRmlsdGVyRXhwcjoKICAgICBQcmltYXJ5RXhw
ciBQcmVkaWNhdGVMaXN0CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3QoJDIpOwotICAgICAgICAk
JCA9IG5ldyBGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCQxKSwgV1RGTW92ZSgq
cHJlZGljYXRlTGlzdCkpOworICAgICAgICAkJCA9IG5ldyBYUGF0aDo6RmlsdGVyKHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICB9
CiAgICAgOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYWE5NDU2NDE0OWQwOGU0ODk2
MzQ3ZDk0ZjAzOTQ2MTU0NzI5YmY3My4uMTFlZmFjOTFkNDRjNDZlYzg1M2M3OGM2OGVjNTQwY2Fk
YTVlY2MyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVhZGVySGFuZGxl
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0
ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIu
aCIKQEAgLTQ3OCw2ICs0ODAsMzUgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRT
aGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmcKICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UmJiBmaWx0ZXJSZWZl
cmVuY2UsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UmJiBnZW9tZXRyeVJlZmVyZW5jZSwK
KyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYXV0byBmaWx0ZXIgPSBmaWx0ZXJSZWZlcmVuY2UudGFrZUZpbHRlcigpOworICAgIGF1
dG8gZ2VvbWV0cnkgPSBnZW9tZXRyeVJlZmVyZW5jZS50YWtlR2VvbWV0cnkoKTsKKyAgICAKKyAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZdKCkgeworICAgICAgICBh
dXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVy
KGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZpbHRlcmVkSW1hZ2UoZmls
dGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKyAgICAg
ICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXpl
KGltYWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9KTsKKyAgICAgICAgaWYg
KCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gY29udGV4dCA9IGJp
dG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKCppbWFnZSwgRmxv
YXRQb2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICB9
KCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKK30KKwogdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuYXRpdmVJ
bWFnZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDdkODBiNzI1ODYzOTRlNTVlY2NjYzliZjczZjk1
ZWZiMGNjOTQwNTAuLjE5MTYyNzI0MDc3Y2EyNjc1ZTkwMTQ0ZGNkZjZlMzU0NmY0ZjczNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtNTksNiArNTksMTEgQEAgZW51bSBjbGFzcyBSZW5kZXJp
bmdNb2RlIDogYm9vbDsKIAogfQogCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVy
ZW5jZTsKK2NsYXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOworfQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU7CkBAIC0xNDIsNiArMTQ3LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRTaGFyZWFi
bGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBnZXRGaWx0ZXJlZEltYWdl
Rm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBJUEM6
OkZpbHRlclJlZmVyZW5jZSYmLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlJiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOwogICAgIHZv
aWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVm
PFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZkY2M5NzYyNzRlMzU2YWIy
MmI0ZWE0ZTcxYmNmYWMwYjBkZi4uMjRiZTM2ZjYxNmJhN2YzZTgyMTgxMWI2MjQzYTg1MmMxMjZm
ODZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTMyLDYg
KzMyLDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgR2V0RGF0
YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMK
ICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5j
aHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKKyAgICBHZXRGaWx0ZXJl
ZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlQnVmZmVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIsIElQQzo6RmlsdGVyR2Vv
bWV0cnlSZWZlcmVuY2UgZ2VvbWV0cnkpIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIENhY2hlRm9udChJUEM6
OkZvbnRSZWZlcmVuY2UgZm9udCkKICAgICBEZWxldGVBbGxGb250cygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZjliZWFkZTFiYTA3OTBjY2RkNjlmY2JmMDM4YjhjYzQ3NzdhMmI0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVu
Y2UuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RmlsdGVyR2VvbWV0cnkuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCisgICAgICAg
IDogbV9nZW9tZXRyeShXVEZNb3ZlKGdlb21ldHJ5KSkKKyAgICB7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiB0YWtlR2VvbWV0cnkoKSB7IHJl
dHVybiBXVEZNb3ZlKG1fZ2VvbWV0cnkpOyB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgewor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJl
ZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAyZjMxNzMwMDMxN2QzMDE3NzA1ODM2YWJlYTNmMzM2NDc5ZWQ3ODkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZl
cmVuY2UuY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRD
b2Rlci5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFT2Zmc2V0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXIuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK0Zp
bHRlclJlZmVyZW5jZTo6RmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmls
dGVyKQorICAgIDogbV9maWx0ZXIoV1RGTW92ZShmaWx0ZXIpKQoreworfQorCitzdGF0aWMgdm9p
ZCBlbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3Qs
IEVuY29kZXImIGVuY29kZXIpCit7CisgICAgQVNTRVJUKGVmZmVjdC50eXBlKCkgPj0gV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1pbmltdW0gJiYgZWZmZWN0LnR5cGUoKSA8PSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWF4aW11bSk7CisKKyAgICBlbmNvZGVyIDw8IGVm
ZmVjdC50eXBlKCk7CisKKyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kOgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXg6CisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZToKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdzoKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kOgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyOgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVNZXJnZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGRvd25jYXN0PFdlYkNv
cmU6OkZFT2Zmc2V0PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlOgorICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VBbHBoYToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VH
cmFwaGljOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgZW5jb2RlU1ZHRmlsdGVyKGNvbnN0IFdlYkNvcmU6OlNWR0Zp
bHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGVuY29kZXIgPDwgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcjsKKworLy8gICAgYXV0byYgbmFtZWRF
ZmZlY3RzID0gZmlsdGVyLm5hbWVkRWZmZWN0cygpOworLy8gICAgZW5jb2RlciA8PCBuYW1lZEVm
ZmVjdHMuc2l6ZSgpOworLy8KKy8vICAgIGZvciAoYXV0byBpdCA9IG5hbWVkRWZmZWN0cy5iZWdp
bigpOyBpdCAhPSBuYW1lZEVmZmVjdHMuZW5kKCk7ICsraXQpIHsKKy8vICAgICAgICBlbmNvZGVy
IDw8IGl0LT5rZXk7CisvLyAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGl0LT52YWx1ZSwgZW5j
b2Rlcik7CisvLyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUNTU0ZpbHRlcihjb25zdCBX
ZWJDb3JlOjpDU1NGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNv
ZGVyIDw8IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7CisgICAgZW5j
b2RlciA8PCBmaWx0ZXIuZnVuY3Rpb25zKCkuc2l6ZSgpOworICAgIAorICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBmaWx0ZXIuZnVuY3Rpb25zKCkpIHsKKyAgICAgICAgaWYgKGlzPFdlYkNvcmU6
OlNWR0ZpbHRlcj4oZnVuY3Rpb24pKQorICAgICAgICAgICAgZW5jb2RlU1ZHRmlsdGVyKGRvd25j
YXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGRvd25jYXN0PFdlYkNvcmU6
OkZpbHRlckVmZmVjdD4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBSZWZQdHI8V2ViQ29yZTo6RmlsdGVyRWZmZWN0PiBkZWNvZGVGaWx0ZXJFZmZlY3QoRGVj
b2RlciYgZGVjb2RlciwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKK3sKKyAg
ICBpZiAoISh0eXBlID49IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1pbmltdW0g
JiYgdHlwZSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZDoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4OgorICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGU6CisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeDoKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZzoKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZDoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlOgorICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBpZiAoYXV0byBl
ZmZlY3QgPSBXZWJDb3JlOjpGRU9mZnNldDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHsgKCplZmZlY3QpLnB0cigpIH07CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nOgorICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZToKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGE6Cisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhpYzoKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTVkdGaWx0ZXI+IGRl
Y29kZVNWR0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6
ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXpl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworLy8gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBS
ZWY8V2ViQ29yZTo6RmlsdGVyRWZmZWN0Pj4gbmFtZWRFZmZlY3RzOworLy8KKy8vICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisvLyAgICAgICAgc3RkOjpvcHRpb25hbDxB
dG9tU3RyaW5nPiBuYW1lOworLy8gICAgICAgIGRlY29kZXIgPj4gbmFtZTsKKy8vICAgICAgICBp
ZiAoIW5hbWUpCisvLyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgICAgICBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworLy8gICAg
ICAgIGRlY29kZXIgPj4gdHlwZTsKKy8vICAgICAgICBpZiAoIXR5cGUpCisvLyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworLy8KKy8vICAgICAgICBhdXRvIGVmZmVjdCA9IGRlY29kZUZpbHRl
ckVmZmVjdChkZWNvZGVyLCAqdHlwZSk7CisvLyAgICAgICAgaWYgKCFlZmZlY3QpCisvLyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworLy8KKy8vICAgICAgICBuYW1lZEVmZmVjdHMuc2V0KCpu
YW1lLCBlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisvLyAgICB9CisvLworLy8gICAgcmV0dXJu
IFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKFdURk1vdmUobmFtZWRFZmZlY3RzKSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3N0YXRpYyBSZWZQdHI8V2ViQ29yZTo6Q1NTRmlsdGVyPiBkZWNvZGVDU1NGaWx0ZXIoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICBk
ZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uPj4gZnVu
Y3Rpb25zOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7
CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGZpbHRl
ciA9IGRlY29kZVNWR0ZpbHRlcihkZWNvZGVyKSkgeworICAgICAgICAgICAgICAgIGZ1bmN0aW9u
cy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0KKworICAgICAgICBhdXRvIGVmZmVjdCA9IGRlY29kZUZpbHRlckVmZmVjdChkZWNvZGVyLCAq
dHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUoV1RG
TW92ZShmdW5jdGlvbnMpLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
K30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXI+IGRlY29kZUZpbHRlcihEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOworICAgIGlmICghdHlwZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkNTU0ZpbHRlcikKKyAgICAgICAgcmV0dXJuIGRlY29kZUNTU0ZpbHRlcihk
ZWNvZGVyKTsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6U1ZHRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlU1ZHRmlsdGVyKGRlY29kZXIpOwor
ICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXIo
Y29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAg
aWYgKGlzPFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSkKKyAgICAgICAgZW5jb2RlQ1NTRmls
dGVyKGRvd25jYXN0PFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSwgZW5jb2Rlcik7CisgICAg
ZWxzZQorICAgICAgICBlbmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVy
PihmaWx0ZXIpLCBlbmNvZGVyKTsKK30KKwordm9pZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZUZpbHRlcihtX2ZpbHRlciwgZW5j
b2Rlcik7Cit9CisKK3N0ZDo6b3B0aW9uYWw8RmlsdGVyUmVmZXJlbmNlPiBGaWx0ZXJSZWZlcmVu
Y2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGlmIChhdXRvIGZpbHRlciA9IGRl
Y29kZUZpbHRlcihkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyLnJlbGVhc2VOb25O
dWxsKCkgfTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJ
UEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5j
ZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjBjMmZhMTQ4ZDRhNWNhMDcwOTViNzFlMmU2M2Q0NmZjN2EzN2E3YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdl
YkNvcmUvRmlsdGVyLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBFbmNvZGVyOworY2xh
c3MgRGVjb2RlcjsKKworY2xhc3MgRmlsdGVyUmVmZXJlbmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0
ZXJSZWZlcmVuY2UoUmVmPFdlYkNvcmU6OkZpbHRlcj4mJik7CisKKyAgICBSZWY8V2ViQ29yZTo6
RmlsdGVyPiB0YWtlRmlsdGVyKCkgeyByZXR1cm4gV1RGTW92ZShtX2ZpbHRlcik7IH0KKworICAg
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxG
aWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgUmVmPFdl
YkNvcmU6OkZpbHRlcj4gbV9maWx0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGVkOTRhM2VlNTY2OGEzNDhi
Yzc2YWRiZDQyYjY1MDA3MWQxYjk1MWEuLjc5OWFiNDgyYmE2Nzg3NDE4NTY0NGNkZmI2NGJmZjk5
MDhmNzUwMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAt
Mjg5LDcgKzI4OSw2IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVk
KCk6CiAgICAgICAgICdXZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJD
b3JlOjpNZWRpYVNlc3Npb25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUlt
YWdlUmVmZXJlbmNlJywKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OlBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXInLAogICAg
ICAgICAnV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCBj
NGE4NGUxZmI2ZjQ2NmI4ZmJkNTRlNmNhNDZjNDcyNDIyYjNiMGM4Li5kMzUzZTUyYjg0NjAyYzRk
MjYxZDgwYTNhN2UzNGUzODZjODVkNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTE2Myw2ICsxNjMsNyBA
QCBQbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAgQG5vLXVuaWZ5
CiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAgQG5vLXVuaWZ5CitQbGF0Zm9ybS9JUEMvRmlsdGVy
UmVmZXJlbmNlLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuY3BwIEBu
by11bmlmeQogUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlUXVldWVNYXAuY3BwIEBuby11bmlm
eQogUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlck1hcC5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiYTIzNzll
YzRlMDk3YTIzNjRhZmRhNGZiMjczNGY2ZmQxN2QxZjhkLi4yNWI2MTgzZjUwYjRjNzg3ZTViYmFh
MmNlYmM5M2ZiYzg4MWU2Y2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwog
CWNsYXNzZXMgPSB7CiAJfTsKLQlvYmplY3RWZXJzaW9uID0gNTI7CisJb2JqZWN0VmVyc2lvbiA9
IDU0OwogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9u
ICovCkBAIC0xMzMxLDYgKzEzMzEsNyBAQAogCQk3MUE2NzZBNjIyQzYyMzI1MDA3RDYyOTUgLyog
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3Vj
aEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi87IH07CiAJCTcxQkFBNzMzMjVGRkQwOTgwMEQ3
Q0Q1RCAvKiBXS01vZGVsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFCQUE3MzEyNUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3LmggKi87
IH07CiAJCTcxRkI4MTBCMjI2MDYyN0UwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VF
dmVudHNEaXNwYXRjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRN
b3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi87IH07CisJCTcyMDBDRjc1MjcwRDk1NDQwMDUx
NUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIwMENGNzQyNzBEOTIyNjAwNTE1QzI0IC8qIEZpbHRlclJlZmVy
ZW5jZS5jcHAgKi87IH07CiAJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CiAJ
CTc1QThEMkM4MTg3Q0NGQUIwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkM0MTg3Q0NGOUYw
MEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07CiAJCTc1QThEMkQ2MTg3RDFDMEUwMEMzOUM5RSAvKiBXS1dl
YnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmggKi87IH07CkBAIC00NjgzLDYgKzQ2ODQsOSBAQAogCQk3MUJBQTczMTI1
RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV0tNb2RlbFZpZXcuaDsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MUJBQTczMjI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2Rl
bFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS01vZGVs
Vmlldy5tbTsgcGF0aCA9IGlvcy9XS01vZGVsVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3Vz
ZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMDBDRjY5MjcwQzUyRUEwMDUxNUMyNCAvKiBGaWx0ZXJSZWZl
cmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMDBDRjZBMjcwQzU3QTcwMDUxNUMyNCAvKiBGaWx0ZXJHZW9tZXRy
eVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAwQ0Y3NDI3MEQ5MjI2MDA1MTVDMjQgLyog
RmlsdGVyUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMDM0NDlBMjZBNkM0NEMwMDBBNUY1
NCAvKiBNb25vdG9uaWNPYmplY3RJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vbm90b25p
Y09iamVjdElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIwMzQ0
OUIyNkE2QzQ3NjAwMEE1RjU0IC8qIFJlbmRlcmluZ1VwZGF0ZUlELmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlcmluZ1VwZGF0ZUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMjc4
MDBCMjQwOEJEN0QwMDdEMzc2QiAvKiBQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzIwLDYgKzczMjQsOSBAQAogCQkJCUJDMDMyRDlFMTBG
NDM3RDEwMDU4QzE1QSAvKiBEZWNvZGVyLmggKi8sCiAJCQkJQkMwMzJEOUYxMEY0MzdEMTAwNThD
MTVBIC8qIEVuY29kZXIuY3BwICovLAogCQkJCUJDMDMyREEwMTBGNDM3RDEwMDU4QzE1QSAvKiBF
bmNvZGVyLmggKi8sCisJCQkJNzIwMENGNkEyNzBDNTdBNzAwNTE1QzI0IC8qIEZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlLmggKi8sCisJCQkJNzIwMENGNzQyNzBEOTIyNjAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5jcHAgKi8sCisJCQkJNzIwMENGNjkyNzBDNTJFQTAwNTE1QzI0IC8qIEZpbHRl
clJlZmVyZW5jZS5oICovLAogCQkJCTlCRDhBQjQ5MjU4MjBFNTIwMDUzODZGOCAvKiBGb250UmVm
ZXJlbmNlLmggKi8sCiAJCQkJNDE1MUU1QzMxRkJCOTBBOTAwRTQ3RTJEIC8qIEZvcm1EYXRhUmVm
ZXJlbmNlLmggKi8sCiAJCQkJQzBDRTcyQUMxMjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3Nh
Z2UuaCAqLywKQEAgLTEzNjU5LDcgKzEzNjY2LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0
dHJpYnV0ZXMgPSB7Ci0JCQkJRGVmYXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9y
aWdpbmFsOwogCQkJCUxhc3RTd2lmdFVwZGF0ZUNoZWNrID0gMTMwMDsKIAkJCQlMYXN0VXBncmFk
ZUNoZWNrID0gMTE0MDsKIAkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewpAQCAtMTQ0NTEsNiArMTQ0
NTcsNyBAQAogCQkJCTJEOTJBNzgwMjEyQjZBNzEwMEY0OTNGRCAvKiBFbmNvZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNEQ0RDOTlFMjQ4RkU4REEwMEE2OTUyMiAvKiBFbmRvd21lbnRTdGF0
ZVRyYWNrZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUE1NzYwMjE0OTZCOTc5MDBBNEVFMDYg
LyogRXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTcyMDBDRjc1MjcwRDk1NDQwMDUxNUMyNCAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQ0RBOTNEQjEyMkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNl
Y2hldXJpc3RpY1BhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzFBMTUyRDcyNEU1
QTI5QTAwOTc4QzhCIC8qIEhhbmRsZVhQQ0VuZHBvaW50TWVzc2FnZXMubW0gaW4gU291cmNlcyAq
LywKIAkJCQkyNzQ5RjY0NDIxNDY1NjFCMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCAy
N2JjZDAwNTQ1MDk1OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi5jODY5M2FlMjlkOGJhN2Rk
MmQ0MWNjYjQyMWMwNjlhN2RlYTA0YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApA
QCAtMjAzLDYgKzIwMywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBiaXRtYXAtPmNy
ZWF0ZUltYWdlKCk7CiAgICAgfQogCisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBmaWx0ZXJl
ZEltYWdlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAg
cmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRGaWx0ZXJlZEltYWdlRm9y
SW1hZ2VCdWZmZXIobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGZpbHRlciwgV1RGTW92
ZShnZW9tZXRyeSkpOworICAgIH0KKwogICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBk
ZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3Qg
ZmluYWwKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4
IGVjNzkzNDEwNmIxMWIzNjZjNzg4YzUzYmQ5YjI0MDk3OTY5YmQ5ZDkuLjc2MGM1NDNiMzFmOGY0
MzE3MzUxZjlmNjc1ZjNkNGM1M2Y5MDk1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oIgorI2luY2x1ZGUgIkZpbHRl
clJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgiCkBAIC0yMzcsNiArMjM4LDI0IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFwKFJlbmRlcmluCiAgICAg
cmV0dXJuIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CiB9CiAKK1JlZlB0cjxJbWFn
ZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VC
dWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBjb25zdCBGaWx0
ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQor
eworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOworCisgICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNlIHsgUmVmPEZpbHRlcj4g
eyBjb25zdF9jYXN0PEZpbHRlciY+KGZpbHRlcikgfSB9LCBJUEM6OkZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlKFdURk1vdmUoZ2VvbWV0cnkpKSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgQVNTRVJUX1VOVVNFRChzZW5kUmVz
dWx0LCBzZW5kUmVzdWx0KTsKKworICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4geyB9OworICAgIAor
ICAgIHJldHVybiBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Q2FjaGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0
Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDg3YWU1MjJjYmJiMjgxZmM0YTg4MDc2NWI5OWY0Yzkw
MjU2YTlkMjUuLjRkN2RlNGY2NTVmMTFjYzFhMjkwMmYyZWNkZDczM2VjZDk4ZDY5M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMjcsNiArMjcsOCBAQAogCiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVu
Y2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNz
Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiSVBDU2VtYXBob3JlLmgiCkBAIC0xMDIsNiArMTA0LDcgQEAgcHVibGlj
OgogICAgIFZlY3Rvcjx1aW50OF90PiBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZsdXNo
SWRlbnRpZmllciBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZpbHRlciYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4mJik7
CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hl
Rm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440768</attachid>
            <date>2021-10-11 02:46:37 -0700</date>
            <delta_ts>2021-10-11 03:04:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211011024636.patch</filename>
            <type>text/plain</type>
            <size>722238</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhMDA2NDYzZjNkOGRk
NzAxZTg2ODJlNGIzZmJiZjY5NGVkNWVkMC4uMGViZDYzZTdkOTM4ZWU3YmViYThhNGU0Y2Q5MWFj
Y2NlZTRlNTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1MyBAQAorMjAyMS0xMC0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29j
b2EubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcklm
RXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6aW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpzZXRCbGVuZE1v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
dHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKGlzVHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OnNldEsxKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRL
Mik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzMpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnNldEs0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBw
bHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0T3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb21wb3NpdGVPcGVy
YXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6b3BlcmF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0
ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6
c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpkaWZmdXNlQ29u
c3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVE
aXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNl
dFhDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnNldFlDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpyZXN1
bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Ynl0ZU9mZnNldE9mUGl4ZWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5k
ZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVs
SW5kZXggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVGbG9vZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9v
ZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVz
c2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5L
ZXJuZWxGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0
ZERldmlhdGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OnNldEVkZ2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9u
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRn
ZU1vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpz
ZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3Bl
Y3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRM
ZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5n
dGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9w
Um93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFp
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VD
b25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNv
bnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhw
b25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0
KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjps
aWdodGluZ0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmxpZ2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0
b3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFX
aW5kb3c6OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpBbHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxw
aGFXaW5kb3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0
b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRy
YXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OnNldER5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFy
Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5n
OjpzZXRTcGVjdWxhckV4cG9uZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVT
cGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJFeHBvbmVudCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpkcmF3aW5nUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFR1cmJ1
bGVuY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVgpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5
WSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTZWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWlu
dGluZ0RhdGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR1cmJ1bGVuY2VUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpmaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YWJzb2x1dGVUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRSZW5kZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZp
bHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRp
cGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpw
cmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldE9wZXJhdGluZ0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzQWxwaGFJ
bWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVj
dFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpv
dXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNZIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzV2lkdGgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNIZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFVuY2xpcHBlZEFic29s
dXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6RmlsdGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZp
bHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291
cmNlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojph
YnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6cmVzb2x1dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNv
bnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyR2VvbWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5h
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9B
YnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21l
dHJ5OjpjbGlwVG9QcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpjcmVhdGVGaWx0ZXJSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3V0cHV0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6
cmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OnJlbmRlcmluZ01vZGUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVz
ZW50YXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
UmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4
ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyUmVzdWx0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHRWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2lu
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFs
cGhhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFs
aXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOgorICAgICAgICAoV2ViQ29yZTo6YXJpdGhtZXRpY1Nv
ZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseUFyaXRobWV0aWNTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlOb25Bcml0aG1ldGlj
U29mdHdhcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNv
ZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBs
eVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFw
cGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdFNvZnR3YXJl
OjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAg
ICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L1NvdXJjZUFscGhhU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdy
YXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6Omlu
cHV0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9j
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9y
Pjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlw
ZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGw6CisgICAg
ICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29u
c3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
Pjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbDoKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6
YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUltYWdlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
Y3JlYXRlV2l0aEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNy
ZWF0ZVdpdGhJUklSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFn
ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmluZGV4ZWRFZmZlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpsYXN0RWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZm
ZWN0UmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWls
ZGVyOjpjbGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpz
ZXRQcmltaXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckdlb21ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJHZW9tZXRyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5
OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRy
eTo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyR2VvbWV0cnk6OmJvdW5kYXJ5U2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGlu
YXRlcyBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2Vv
bWV0cnkuaDogQWRkZWQuCisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci5jcHA6CisgICAgICAg
ICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTEwICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBpdGVyYXRpbmcgRmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMDk0NDkwNTE4OGQ5Zjg4N2E1ZTU3ZjMz
Y2UxMjI4MjQ2MTdlY2UzLi43NDdkNTM2NGFjNTFiMWFhODM3NTAxOTBiOGYwNzM2NTUxZDZjZGJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTEwLTExICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpG
aWx0ZXJSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoSVBDOjplbmNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVDU1NGaWx0
ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoSVBDOjpk
ZWNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVDU1NGaWx0ZXIpOgorICAgICAg
ICAoSVBDOjpkZWNvZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXIpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6
OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmlsdGVy
UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OnRha2VG
aWx0ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAo
dHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCk6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKwogMjAyMS0xMC0xMCAg
U2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgaXRlcmF0aW5nIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
MmIwM2ZhNzE5YTAxYjlkYTkyOWY4YjU5NGFhN2IwMjA4MTNiMGMwMC4uZjk2ZjJjNjE1ZDAxNDQ3
NDA1ZjA3NDUzZGJkY2M0NDNjYTUwMWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNTQsMTQgKzIw
NTQsMzQgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09PcmlnaW5hbEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAKQEAgLTI2NDQsNiArMjY2NCw3IEBAIHN2Zy9ncmFwaGlj
cy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyR2VvbWV0cnkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcAog
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5jcHAK
IHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggYTRjMGE3NjI3YzM3ODFkZmNkMDQ5MDZmYzUyMzMwOWM5MDczMGMyYy4uMGJk
ZGI5OWMyMzhhZDBlNzExZDMzOTI3MGEzZWM1MWU5MWQ2NjI1NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CkBAIC0zOTgsNyArMzk4LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRp
ZXMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZmFjYjNiZGQwMjhjZjJkMDZmMGZmMThlZTAyOTYzNzg3NjA0MzE3Mi4uZWEzNTRjNDQ3
NjgzMDg5NjY0ZjU0NTU3NzQxMzFlMjdmMjYyODBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM1LDcgKzIzNSw2IEBACiAJ
CTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JG
MDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYw
M0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNW
R1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8q
IFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0
YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJG
MzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFF
QTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFF
QTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdG
QjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1
NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBG
b250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NzcsOCArNzc2LDYgQEAKIAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENT
U051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsK
IAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAw
MERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMw
MEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1M
TWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktp
dE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtl
eU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlh
S2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAg
Ki87IH07CkBAIC0yMjk3LDcgKzIyOTQsMTggQEAKIAkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5RDA1MzAy
NTMxNDI0MzAwNDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5RDA1MkUyNTMxM0UyNjAw
NDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQTczQkVGMjQ1QTNGOTAwMDFDOUQw
MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDMzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDgzMjcwNjY3NEMwMDND
NUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVu
Y3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJEMjcxNDMw
QjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhDNCAv
KiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDOTI3MTQz
N0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0EyNzE0
MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0
NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMwQjAwMDNFODhD
NCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2
QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNW
R0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJC
QUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQTUyM0UxNzMyODAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERp
YWdub3N0aWNMb2dnaW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dp
bmdEb21haW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTI3MDAsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3
RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcg
LyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAy
MTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhT
dHJpbmdTb3VyY2UuaCAqLzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0
NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0
ZXIuaCAqLzsgfTsKLQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQy
NjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2
MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVl
cnlMaXN0RXZlbnQuaCAqLzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3Rh
bnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICov
OyB9OwogCQk4NDczMEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTI3MTEsNyArMjcx
Nyw3IEBACiAJCTg0NzMwRDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVMaWdodGluZy5oICovOyB9OwogCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgfTsKIAkJODQ3
MzBEODUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFTW9ycGhvbG9neS5oICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVP
ZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4NzEy
NDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMw
RDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlD
OSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwogCQk4NDcz
MEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyog
RkVUdXJidWxlbmNlLmggKi87IH07CkBAIC02MTAwLDggKzYxMDYsNiBAQAogCQkwODE2NjhENzEy
NTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRM
YXlvdXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExh
eW91dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEy
MzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5
IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVB
MjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAz
NDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjI0OCw4ICs2MjUyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8q
IEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xs
VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAv
KiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQz
NCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
ckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzU4LDEwICs3MzYwLDYgQEAKIAkJMkI0MjM1QTAxNTI1
MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAg
LyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRN
ZWRpYUtleU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDA2MjE0NzFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5l
ZWRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTMyLDkgKzEw
NTMwLDUwIEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlck91dHB1dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBG
aWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAv
KiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFB
RSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAz
REMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUy
NzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVB
QUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8q
IEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVB
QUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29s
b3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJD
OTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBG
RUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3
YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAw
M0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5k
U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2
NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2Vv
bWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAw
M0U4OEM0IC8qIEZpbHRlclJlc3VsdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1
bHRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjYyNzE0MkYz
NzAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QjcyNzE0MkYzODAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQUE0NkI4MjcxNDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI5MjcxNDJG
NzkwMDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkEyNzE0MkY3QTAwM0U4OEM0IC8qIEZpbHRl
clJlc3VsdENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2
QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkMyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlck91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJPdXRwdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQg
LyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJFeHBy
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkMwMjcxNDMyREYw
MDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkFBNDZDMTI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyR2VvbWV0cnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzIyNzE0MzJFMDAwM0U4OEM0IC8qIFNW
R0ZpbHRlckdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
QTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckJvdW5kYXJ5U2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0Ux
NzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1NDYsNiArMTA1ODUsOCBAQAogCQk3
MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQ3OCw5ICsxMTUxOSw2IEBACiAJCTg0MzAwQkQ1MTIw
QzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1
RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcy
RjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAv
KiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTUxMiw4ICsxOTU1MCw5IEBACiAJCTJDRTExODk4MjRD
MjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQy
RjdBMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggKi8sCisJCQkJNzJBQTQ2Qjgy
NzE0MkY3OTAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFB
NDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gY29yZWltYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTIzMTI5LDYgKzIzMTY4LDMyIEBACiAJCQlwYXRoID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8q
IHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk3MkE4M0Q4MjI3MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAq
LywKKwkJCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4NjAwM0M1QUFFIC8qIEZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFF
IC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdFMjcwNjMz
NkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzgy
NzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0Iy
NzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovLAorCQkJCTcy
QTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICov
LAorCQkJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNEODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cCAqLywKKwkJCQk3MkFBNDZCNjI3MTQyRjM3MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0U29mdHdh
cmUuY3BwICovLAorCQkJCTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRT
b2Z0d2FyZS5oICovLAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBo
YVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAg
LyogU2V0dGluZ3NUZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMjUxODMsNiArMjUyNDgsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0
ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovLAogCQkJCUExRTEx
NTQzMTMwMTVDM0QwMDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0
NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
NzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCkBAIC0yNTIxOSwxNSAr
MjUyODUsMjQgQEAKIAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8s
CiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJ
CQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0
NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNE
RkQ4MDAzQzVBQUUgLyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVB
QUUgLyogRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRl
ckJvdW5kYXJ5U2V0LmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRl
ckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVm
ZmVjdC5oICovLAotCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAgKi8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRl
ckVmZmVjdFZlY3Rvci5oICovLAorCQkJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0
ZXJGdW5jdGlvbi5oICovLAorCQkJCTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJH
ZW9tZXRyeS5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJh
dGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyT3V0cHV0
LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0Lmgg
Ki8sCisJCQkJNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9u
LmggKi8sCisJCQkJNzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAg
Ki8sCisJCQkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovLAor
CQkJCTcyQUE0NkI0MjcxNDJDRUIwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRWZWN0b3IuaCAqLywK
IAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
MUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJ
ODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2
OTkwLDEwICsyNzA2NSwxMyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1NTk4RUEwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRUltYWdlLmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5jcHAgKi8sCi0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5oICovLAotCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmNwcCAqLywKLQkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oICovLAorCQkJCTcyQTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3Bw
ICovLAorCQkJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLywKKwkJ
CQk3MkFBNDZDMDI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCisJ
CQkJNzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJ
CQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oICovLAor
CQkJCTcyQUE0NkMyMjcxNDMyRTAwMDNFODhDNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5jcHAgKi8s
CisJCQkJNzJBQTQ2QzEyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21ldHJ5LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMzAxMDAsOCArMzAxNzgsOCBAQAogCQkJCUNBN0U5QjQ3MjQzNjFEQzUwMDRFODlGNiAvKiBD
b250ZW50ZnVsUGFpbnRDaGVja2VyLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQxODYyMzAwNjkxQkQ0
IC8qIENvdW50ZXJOb2RlLmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyog
Q291bnRlck5vZGUuaCAqLywKLQkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmls
dGVyLmNwcCAqLywKLQkJCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmgg
Ki8sCisJCQkJNzJBODNENkMyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5jcHAgKi8sCisJ
CQkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovLAogCQkJCUUzQkJD
MjQ1MjM4MzU1MUEwMDZFQzM5RiAvKiBDU1NWYWx1ZUtleS5oICovLAogCQkJCUU0QThEMjE1MjI1
NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5jcHAgKi8sCiAJCQkJRTRBOEQyMTQyMjU3OERB
MDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggKi8sCkBAIC0zMTUyNCw2ICszMTYwMiw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENF
IC8qIEFib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0MDBB
N0QyREQgLyogQWJzdHJhY3RET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzIxODMsNiAr
MzIyNjIsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFn
ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyog
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZD
QUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MkFBNDZDQTI3MTQzOTAxMDAzRTg4QzQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZh
Y2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNjg3LDEyICszMjc2NywxNiBAQAogCQkJCTkz
MEU0NDg2MjcwQzM3MjIwMERFN0FCNyAvKiBGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2NSAvKiBG
aWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIwMzFDQyAv
KiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzkyNzE0MzdEMTAwM0U4OEM0
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0
IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3
QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyQzg1NjUz
NDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0IyNzE0Mzk5NzAwM0U4OEM0IC8q
IEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZD
MzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhD
NCAvKiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5Rjgw
MDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1
NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZG
QjdEMkREMjUwRkQ4MjgwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzU1OTAsOSArMzU2NzQsOSBAQAogCQkJCUIyMjI3QTAzMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QTA2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0EwOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNDMjcxNDM5RDkwMDNFODhD
NCAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBDMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDRDI3
MTQzOUU1MDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMEYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZpdFRvVmlld0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUIwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MzU1LDcg
KzM2NDM5LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJRGVm
YXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9yaWdpbmFsOwogCQkJCUxhc3RTd2lm
dFVwZGF0ZUNoZWNrID0gMDcwMDsKIAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTE0MDsKIAkJCQlU
YXJnZXRBdHRyaWJ1dGVzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCmluZGV4IDhjZjkwOWFlOWU1MzcyNGI5MWRiNGFjZTE0YWUyODU3MWRkOTU1MjYuLjM3
MzZiNGY5MjgyMTI0ZTkxMThlMmJhNDM3ZjEyZGNlYTIzOTkxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKQEAgLTExNiwyNiArMTE3LDIzIEBAIFJlZlB0cjxJbWFnZT4gQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZs
b2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAv
LyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUpCiAg
ICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJlY3Qg
PSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVy
OjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVy
ZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAg
Y3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNzc0ZpbHRl
ci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZp
bHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRl
cmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVy
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBjc3NGaWx0ZXItPmFw
cGx5KCk7CiAKLSAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwotICAgIGlm
ICghb3V0cHV0KQotICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKKyAgICBhdXRv
IGdlb21ldHJ5ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4oaW1hZ2VSZWN0LCBpbWFnZVJl
Y3QpOworICAgIGlmIChhdXRvIGZpbHRlcmVkSW1hZ2UgPSB0ZXh0dXJlLT5maWx0ZXJlZEltYWdl
KCpmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcmVkSW1h
Z2U7CiAKLSAgICByZXR1cm4gb3V0cHV0LT5jb3B5SW1hZ2UoKTsKKyAgICByZXR1cm4gJkltYWdl
OjpudWxsSW1hZ2UoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpmaWx0ZXJJbWFn
ZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKaW5kZXggYTVkZDI4YjczN2JjODM1
ZTg2ZWEzZWYyMDJhNzRlNDZhYjIyMjE4MS4uODhhMzEwMjc3OTgyZjMyN2QyNDM5NDZlZWVmNTI2
ZTVmNzIwOTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKIApAQCAtMTM4LDYgKzEzOSwxOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIFJlZlB0cjxJbWFnZT4gZmlsdGVy
ZWRJbWFnZShjb25zdCBGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21l
dHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKworICAgICAgICBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgICAgICBzdGQ6OnRpZShpbWFnZUJ1
ZmZlciwgc3RkOjppZ25vcmUpID0gZmlsdGVyLmFwcGx5KHRoaXMsIFdURk1vdmUoZ2VvbWV0cnkp
KTsKKyAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyID8gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgp
IDogbnVsbHB0cjsKKyAgICB9CisKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggODVlM2QyNGJlYjBjMjA0YzMyNWEyNjU2ZDljYTU0MDQwODY2ZmI3Mi4uY2U4
OWY0YmQzYWRmNzhlMjI1ODkxZWQ2NzM3M2M5OWYwYzk2OTJmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYwOSw2ICs2MTEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdAogICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2Up
LCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiBmaWx0ZXIsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KQoreworICAgIGF1dG8gW2ZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0XSA9IGZpbHRlci5hcHBs
eShzb3VyY2VJbWFnZSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIGlmIChmaWx0ZXJkSW1hZ2Up
CisgICAgICAgIGRyYXdJbWFnZUJ1ZmZlcigqZmlsdGVyZEltYWdlLCBpbWFnZVJlY3QpOworfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QpCiB7CiAgICAgUGF0aCBwYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkNmUyNTY3N2JlZjcxNWJh
NDljZjA0MWUxNGM5ZWM4MDFjNWM5N2MzLi5iNjFmNTQ0YTQ4ZGMxNDY5NWI0MDlkNzZjODQzYzc2
ZWEzNWZmZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaApAQCAtODUsNiArODUsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
VUludDg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OwogY2xhc3MgRmxvYXRSb3VuZGVkUmVj
dDsKIGNsYXNzIEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OwpAQCAtNDQyLDYgKzQ0NCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBv
aW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggMTM5NzgwMWI0ZDhlMGZmY2Q2OTQ2N2NhMTQyMjBkMDA1M2NmMTVlZS4u
YWIzNGM5NjU2M2UwYmVmZWY1NDFkZjk5ZWVhYjhkYzJkOTBlNmUwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC00Miw2ICs0Miw5IEBA
IGNsYXNzIERyYXdpbmdDb250ZXh0Owogc3RydWN0IEl0ZW1CdWZmZXJIYW5kbGU7CiB9CiAKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworCiBjbGFzcyBJbWFnZUJ1ZmZlciA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUJ1ZmZlciwgV1RGOjpEZXN0cnVjdGlv
blRocmVhZDo6TWFpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJbWFnZUJ1ZmZlcj4gewogcHVi
bGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFp
bHVyZS4KQEAgLTEwNiw2ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxO
YXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJH
ZW9tZXRyeT4mJikgPSAwOwogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4
IGQ0ZmEzYzRiZmFkMzRhYWYzMDkzYTlmMDI0ODZiYjcyN2Y5OGQ0YWEuLmQ0NWFiMzNjNDQwOGVk
NjM2MDc0NjE0ZDQ2ZjQ1OWRhNmY1MWQ2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRl
cnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NTRmlsdGVyOjpidWlsZCgp
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgorLy8gRklY
TUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6OmJ1aWxkKCkgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCiBzdGF0aWMgY29uc3Qg
ZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7IDAuMzkzLCAwLjc2OSwg
MC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZlMmMwNDRhZjcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0KLSNpbXBvcnQgIkZpbHRlckVmZmVj
dFJlbmRlcmVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCi0jaW1wb3J0IDx3
dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1MgQ0lJbWFnZTsKLU9CSkNfQ0xBU1MgQ0lGaWx0ZXI7
Ci1PQkpDX0NMQVNTIENJQ29udGV4dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
RUNvbG9yTWF0cml4OwotY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlcjsKLWNsYXNzIFNvdXJjZUdy
YXBoaWM7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlIDogcHVibGljIEZp
bHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAK
LXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0gICAgUmV0YWluUHRyPENJQ29u
dGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZm
ZWN0JikgZmluYWw7Ci0gICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X291dHB1dEltYWdlOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZpbmFsOwot
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2UoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGNvbm5l
Y3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVy
KEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwotICAgIHN0YXRpYyBib29sIGNhblJlbmRlclVzaW5n
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIAotICAgIFJldGFpblB0cjxDSUltYWdlPiBp
bWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYpOwotICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZl
Y3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdl
Rm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9y
PFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICAKLSAgICBSZWZQdHI8SU9TdXJmYWNlSW1hZ2VC
dWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IG1fb3V0
cHV0SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg2ZmM0YzIzYWY5NTQ1NTU3YTU1OGM4YzQ1MWUxOWE4YTM4
ZmI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGRUNv
bG9yTWF0cml4LmgiCi0jaW1wb3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCi0jaW1wb3J0ICJG
aWx0ZXIuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdC5oIgotI2ltcG9ydCAiRmlsdGVyT3BlcmF0
aW9uLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgot
I2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgotI2ltcG9ydCA8Q29yZUltYWdlL0NJQ29udGV4dC5o
PgotI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+Ci0jaW1wb3J0IDxDb3JlSW1hZ2UvQ29y
ZUltYWdlLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6IEB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFj
ZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VT
UkdCKX1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0YXRpYyBib29sIGlzTnVsbE9y
TGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVy
JiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9IFtdIChjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24u
dHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAgICAgICAgICAgfHwg
ZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgIH07
Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRGdW5jdGlvbigpKSAmJiBpc051
bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAgICAgICAmJiBpc051bGxPckxp
bmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5hbHBo
YUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICAv
LyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVt
ZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgewotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1h
dHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCku
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAg
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwotCi0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0
cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxp
Z2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgbV9vdXRwdXRJbWFnZSA9IGNv
bm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKLX0KLQot
UmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAgIFZlY3RvcjxSZXRhaW5QdHI8
Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5p
bnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0
ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7Ci0gICAgfQot
ICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGVmZmVjdC5zZXRS
ZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIAotICAg
IGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVm
ZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdy
YXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291
cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9y
TWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGRvd25jYXN0PEZF
Q29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29t
cG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KSwgaW5w
dXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5n
IENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUltYWdlCi0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZl
TWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxh
ckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdy
YXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3Qu
ZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpz
b3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6
ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFjZSgpLnN1
cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6c291
cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOwotfQot
Ci1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdl
Rm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBlZmZlY3QsIGNvbnN0IFZlY3Rv
cjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsKLSAgICBhdXRvIGlucHV0SW1h
Z2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFsdWVzID0gRkVDb2xvck1hdHJp
eDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwotICAgIGZsb2F0IGNvbXBvbmVu
dHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0
ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVh
azsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywg
dmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlv
bgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byAqY29sb3JN
YXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07
Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5
OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpjb21wb25lbnRzWzFdIFo6
Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNb
M10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZvcktleTpAImlucHV0R1Zl
Y3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6Y29tcG9uZW50c1s4XSBX
OjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAg
ICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAg
ICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjBdIGZvcktleTpAImlu
cHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVlc1sxXSAgWjp2YWx1ZXNb
Ml0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzVdICBZ
OnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9yS2V5OkAiaW5wdXRHVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNbMTJdIFc6dmFsdWVzWzEz
XV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZOnZhbHVlc1sxNl0gWjp2
YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07Ci0gICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVz
WzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5XV0gZm9yS2V5OkAiaW5w
dXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gY29s
b3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNv
bnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdl
Pj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIHJlc3Qgb2Yg
RkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NFUlQoaXNOdWxsT3JMaW5lYXJD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0gICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVy
V2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAotICAgIFtmaWx0ZXIgc2V0VmFs
dWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAg
YXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvbi50eXBl
ID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5j
dGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9OwotICAgIHNldENvZWZmaWNp
ZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJlZEZ1bmN0aW9uKCkpOwotICAg
IHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVudHMiLCBlZmZlY3QuZ3JlZW5G
dW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEJsdWVDb2VmZmljaWVudHMi
LCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxw
aGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLSAgICAKLSAgICByZXR1
cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsK
LSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVmZmVjdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3Rz
KCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygqaW4pIHx8ICFj
YW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMgPDwgIiB1c2luZyBDb3JlSW1h
Z2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVyLmdldCgpOwotfQotICAgIAot
dm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCksIGxh
c3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlm
ICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVhclJlc3VsdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjog
bV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3Vy
ZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTps
YXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07Ci19Ci0g
ICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGRlc3RT
aXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6
ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UmVj
dCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKLSAgICByZXR1
cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNs
ZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBt
X291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAgICA6IEZpbHRlckVmZmVjdFJl
bmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FiZTU2MWI3MDFi
Y2EwNWIyNDRlNTI1ZTE3OGVjMjRmNmRkZDFmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
aApAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBt
ZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlclJlc3VsdC5oIgorCitPQkpD
X0NMQVNTIENJSW1hZ2U7CitPQkpDX0NMQVNTIENJQ29udGV4dDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyUmVzdWx0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsKKworICAg
IHZvaWQgc2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYpOworICAgIAorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgb3ZlcnJpZGU7Cisg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlKQorICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0
LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNzkyYjFhYmU5NzBkOGNkZjg5YWY4
NWE1OGQ1NGQ1YWI4MDBiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisj
aW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUlt
YWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2UoUmV0YWluUHRyPENJ
SW1hZ2U+JiYgaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBtX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4mIEZpbHRlclJlc3VsdENvcmVJ
bWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cygpCit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVyKCkK
K3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzVjNDg0OGEwMjczNTk4ZDA0NjFhZjkzZmMwMjI3YWQ2NDNiY2ZlZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCisKKyNpZiBVU0Uo
Q09SRV9JTUFHRSkKKworI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVy
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworICAgIGlmICgh
c291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZTsKKyAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFn
ZSkpCisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0
PElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCld
OworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNv
dXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKKwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBkb3duY2Fz
dDxGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U+KHJlc3VsdCkuc2V0SW1hZ2UoV1RGTW92ZShpbWFnZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAyNjExMGNkZmIwYmI2Y2Y0OTA0NTgz
ODc3ODdhYzEwZmExNzFjZjE4Li5iM2QyYTU5NDY5NDIyMzUzMjM0MzkzMjg2NTZlOTY0ZTljMTZl
ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMTA3LDE1ICsxMDcsMTggQEAg
cHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKEZpbHRlclJl
c3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3Qo
KTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyKCkuY3Jl
YXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCksIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVm
ZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMyLDcgQEAgdm9pZCBGRUJsZW5kOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgg
Pj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBv
bmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJh
eUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKICAgICBwbGF0Zm9ybUFw
cGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
Pihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworCisg
ICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNy
Y1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDVmMzZhOWMzYjcyZGE2MTljMjE4YmE4
MmY2ZjE4MGJkYmExNTIwOWIuLmUzNjlkMzMxNDgwYWUzMTFlYzEyMGJhOTcyMGRmYjQ1ZTk2ZjQ4
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTE4Miw2
ICsxODIsMTQgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QKICAgICByZWNvcmREcmF3UGF0dGVy
bihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
IH0KIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEZpbHRlciYsIEltYWdl
QnVmZmVyKiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKQoreworLy8gICAgaWYg
KG1fZGVsZWdhdGUpCisvLyAgICAgICAgbV9kZWxlZ2F0ZS0+cmVjb3JkSW1hZ2VCdWZmZXJVc2Uo
KnNvdXJjZUltYWdlKTsKKy8vICAgIHJlY29yZEZpbHRlclVzZShmaWx0ZXIpOworLy8gICAgYXBw
ZW5kPERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oZmlsdGVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGdlb21l
dHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVjb3JkU2F2ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggNDg2NmM4MmNhYzk0MzBk
N2MzNzRhYzNmYTViZThjMDc3Y2Q5M2E0MS4uZDAxN2U2MDJiYzg4MWQzOGVjOTYyMWUyZDc4MTNm
N2M5YWMxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0y
MzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2
N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uMTZkYTAyODBkMWE2ZjYyMGQ3Nzg0NWE2NDYxMzll
YTNlYzk1MzkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJp
Z2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0NCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQo
RmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgVHlwZTo6QmxlbmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5k
OjpjcmVhdGUoQmxlbmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVC
bGVuZChtb2RlKSk7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUJsZW5kKQorICAgICwgbV9tb2RlKG1vZGUpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUpKTsKIH0KIAog
Ym9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1f
bW9kZSA9PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vZGUsIG1vZGUp
ICE9IG1fbW9kZTsKIH0KIAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZF
QmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFQmxlbmQ6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwor
ICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwor
ICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQ
b2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4sIGluMiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQotI2VuZGlm
CiAKLVRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJl
YW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQi
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgbW9kZT1cIiIgPDwgKG1fbW9kZSA9PSBCbGVuZE1vZGU6Ok5v
cm1hbCA/ICJub3JtYWwiIDogY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyLCBtX21vZGUpKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4u
YjVkOGFlNmExMjVjM2VmYzA5MWM3M2I0MGU5ZjU0NDU5NDNiNmIzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTMsNiAr
Myw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDMyICsyNSwyNyBAQAogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2Rl
KTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1vZGUpOwogCiAgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgc2V0
QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6CisgICAgRkVCbGVuZChCbGVuZE1vZGUp
OworCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUJsZW5kIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4
ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBk
c3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JB
cnJheUxlbmd0aCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBw
bHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2Rl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRl
eCAzODA2NWNiOTZjN2I0YjRiMDNmYzZiMGVlZDg1YWM0YjZjOTY4YTU0Li5iZDk5MmZmNDAwNjU4
NWI3YzlhYTE1ODExZmUyYWRjY2UzMzMzY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMs
NiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDI4ICsyNCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29s
b3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8Zmxv
YXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRy
aXgpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkK
K1JlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBl
IHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb2xvck1hdHJpeCh0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAotUmVmPEZFQ29s
b3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRy
aXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCitGRUNvbG9yTWF0cml4OjpGRUNv
bG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQor
ICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29sb3JNYXRyaXgpCisgICAgLCBtX3R5cGUodHlw
ZSkKKyAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZpbHRlciwgdHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9
CiAKIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAg
LTYzLDI1OCArNTYsNDMgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPGZsb2F0PiAmdmFsdWVzKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBt
YXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi17Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAg
ICBmbG9hdCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0gICAgZmxvYXQgYSA9IGFs
cGhhOwotCi0gICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2
YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKLSAgICBn
cmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlcyBbN10gKiBi
ICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OwotICAgIGJsdWUgICAgPSB2YWx1
ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNd
ICogYSArIHZhbHVlc1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsg
dmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVz
WzE5XSAqIDI1NTsKLX0KLQotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAgICBmbG9h
dCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0KLSAgICByZWQgICAgID0gciAqIGNv
bXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOwotICAg
IGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNv
bXBvbmVudHNbNV07Ci0gICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBv
bmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKLX0KLQotLy8gRklYTUU6IHRoaXMgc2hvdWxk
IHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KLWlu
bGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVl
LCBmbG9hdCYgYWxwaGEpCi17Ci0gICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBn
cmVlbiArIDAuMDcyMSAqIGJsdWU7Ci0gICAgcmVkID0gMDsKLSAgICBncmVlbiA9IDA7Ci0gICAg
Ymx1ZSA9IDA7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLXRlbXBsYXRlPENvbG9yTWF0cml4
VHlwZSBmaWx0ZXJUeXBlPgotYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNv
bXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKLXsKLSAgICBBU1NFUlQocGl4ZWxBcnJh
eS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAotICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUg
aW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAg
ICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAg
IGlmICh2YWx1ZXNbNF0gIT0gMCB8fCB2YWx1ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAg
fHwgdmFsdWVzWzE5XSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMu
ZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRy
aXhbNCAqIDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyA1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCi0KLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEx
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTZdICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WyA4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCi0gICAgICAgIH07Ci0gICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRz
WzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBv
bmVudHNbNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0KLSAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIGRp
dmlzb3IsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0gewotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEyNSAqIGRpdmlzb3Ip
KSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRpdmlzb3IpKSwKLQot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5v
RmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
cnVlOworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKKyAgICBj
b21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sy
XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMg
LSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2
YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAg
IGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRz
WzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4XSA9ICgwLjA3
MiArIDAuOTI4ICogdmFsdWUpOwogfQotI2VuZGlmCiAKLXRlbXBsYXRlPENvbG9yTWF0cml4VHlw
ZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFy
cmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFNpemUgYnVmZmVyU2l6ZSkKK3Zv
aWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLQotICAg
IGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZh
bHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
IGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVl
cywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCi0KLSAgICBzd2l0Y2ggKGZpbHRlclR5
cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3Jl
ZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBm
bG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAg
ICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7
Ci0gICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVl
biA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAg
ICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsK
LSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBv
bmVudHMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4p
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7
Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNl
dCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNl
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBmbG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBmbG9hdCBz
aW5IdWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBjb21wb25lbnRzWzBdID0g
MC4yMTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOworICAgIGNvbXBvbmVudHNb
MV0gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7CisgICAgY29tcG9u
ZW50c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKKyAgICBj
b21wb25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwor
ICAgIGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4x
NDA7CisgICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUg
KiAwLjI4MzsKKyAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNp
bkh1ZSAqIDAuNzg3OworICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1
ICsgc2luSHVlICogMC43MTU7CisgICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICog
MC45MjggKyBzaW5IdWUgKiAwLjA3MjsKIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUNvbG9yTWF0cml4OjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
IChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJl
c3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIXBpeGVs
QnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxC
dWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZm
ZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBF
X01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAg
ICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZh
bHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5z
aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwot
ICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpw
aXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlw
ZSYgdHlwZSkKQEAgLTMzOSwxMCArMTE3LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKICAgICByZXR1
cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8
IGluZGVudCA8PCAiW2ZlQ29sb3JNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgdHlwZT1cIiIg
PDwgbV90eXBlIDw8ICJcIiI7CiAgICAgaWYgKCFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgdHMgPDwgIiB2YWx1ZXM9XCIiOwpAQCAtMzU3LDkgKzEzNCw2IEBAIFRleHRTdHJlYW0mIEZF
Q29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uCiAgICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwot
ICAgIAotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0
ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi42ZDY1YmI1MzIxNjg2MTZkYzRmNWM3MzBmZGRh
ODg0ZDBmNTBjMThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcs
NyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+
IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAg
c3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8
ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhUeXBlKTsKQEAgLTQ2LDU0ICs0
NSwyMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2
b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0
IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxv
YXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAg
c3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB2YWx1ZXMpOwogCiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRy
aXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKICAgICBWZWN0
b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkK
LXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMl0g
PSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0g
MC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s3
XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIg
KyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17
Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxv
YXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1sw
XSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25l
bnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNv
bXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0g
ICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0
MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAq
IDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2lu
SHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMg
LSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAw
LjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1
ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXgp
Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZm
ZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdlYTU4ZjVm
OWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi43OTQxYjg5OTdlZDU5ZGFlOWFhYjRmYmZl
YWU2M2ZkNmJmOTY1MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTQs
NiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUsMjAgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5j
bHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyKQorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJs
dWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOworfQorCitGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVkRnVuY3Rp
b24pCiAgICAgLCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1fYmx1ZUZ1
bmN0aW9uKGJsdWVGdW5jdGlvbikKQEAgLTQzLDExOSArNDYsMTUgQEAgRkVDb21wb25lbnRUcmFu
c2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVyLCByZWRG
dW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKLXsKLX0KLQotdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCitG
aWx0ZXJSZXN1bHQqIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0
cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0
KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNm
ZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6
ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91
YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0g
dGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWlu
KChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsg
KGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgw
LjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkp
OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVz
OwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4gPCAxKQot
ICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChp
ICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Ci0gICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91
dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAg
ICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwotICAg
IExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAg
IGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxw
aGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVu
bXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxl
bmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRh
ID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtk
YXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVu
VGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCAr
IDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0gICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKLSAgICB9
Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29r
dXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYg
Ymx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0g
Z3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhhVGFibGVbaV0gPSBpOwotCi0gICAg
dXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsK
LSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAg
IC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3Jl
dGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAg
Y29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVO
R1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RI
KGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9yZWRGdW5jdGlvbi50eXBlXShyZWRU
YWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2dyZWVuRnVuY3Rpb24udHlw
ZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYmx1ZUZ1
bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3Rb
bV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1fYWxwaGFGdW5jdGlvbik7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBi
b3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA4LDkgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29tcG9uZW50VHJhbnNmZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAg
ICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEs
OSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9
Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5w
dXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1
ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uN2QwMDY4NzIyMjBkOGIwNDcy
ZGIyNzJmMTliZTE2ODE2OTRmMjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkg
KzI0LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVu
dW0gQ29tcG9uZW50VHJhbnNmZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRy
YW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
cmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRl
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGFscGhhRnVuY3Rpb24pOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVu
Y3Rpb247IH0KQEAgLTYyLDI0ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9u
OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25l
bnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0g
c3RkOjphcnJheTx1aW50OF90LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRh
YmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9v
a3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247
CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuY3Rpb247CkBAIC04OCw3
ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3Qp
IHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2
ZGQ0MDM4ZmE0Y2IyYTguLjZjOTNjZmJlNzg5NDI2NmUwNmExNDkwOWRlZTM2ZjkwMzUyNjc5ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTcgKzI1LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZp
bHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21w
b3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsK
K30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9zaXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVy
YXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQog
ICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDYsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9z
aXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBm
bG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVD
b21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29s
IEZFQ29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3Ip
ICE9IG1fY29tcG9zaXRlT3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZs
b2F0IGsxKQogewotICAgIGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9rMSA9IGsxOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fazEsIGsxKSAhPSBtX2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBr
MikKIHsKLSAgICBpZiAobV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
azIgPSBrMjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2sy
LCBrMikgIT0gbV9rMjsKIH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7
Ci0gICAgaWYgKG1fazMgPT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0g
azM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMp
ICE9IG1fazM7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAg
IGlmIChtX2s0ID09IGs0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0Owot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBt
X2s0OwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KQorRmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlICE9IEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
cmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQg
Y2hhciBjbGFtcEJ5dGUoaW50IGMpCi17Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25lZCB1YyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZm
KSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0
Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVu
Z3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9h
dCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNj
YWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0
ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGky
ID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBp
MjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEg
KiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0Owot
Ci0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAgICArK3Nv
dXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8gaXMgbm90
IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25z
IHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgot
c3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAg
ICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAg
ICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRL
NCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsg
azMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsx
ICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytzb3VyY2U7
Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWdu
ZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJy
YXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAg
IGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBr
MikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3Rk
OjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMp
ICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0
ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYm
IGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBp
ZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8
MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChr
MSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAw
Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEs
IGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFy
cmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQotfQotI2VuZGlmCisgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKKyAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVP
cGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5j
bGlwVG9QcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpLCBwcmltaXRp
dmVTdWJyZWdpb24pOwogCi1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5n
dGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOwotICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCi0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4Mykp
OwotICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24u
ZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNlbHNlCi0gICAgYXJpdGhtZXRpY1Nv
ZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7Ci0jZW5kaWYKLX0KKyAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUg
Y29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAvLyBvcHRp
bWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3Ig
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIHByaW1p
dGl2ZVN1YnJlZ2lvbjsKIAotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAg
IC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUg
cmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAg
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUg
dW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0
dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZl
U3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICAg
ICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBp
eGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0g
ICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0
aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0g
ICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBz
dGFjay50YWtlTGFzdCgpOworICAgIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5
IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25S
ZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25S
ZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0
aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBh
ZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRp
b25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50
UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKS5sb2NhdGlvbigpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
VE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIy
LCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUF0b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJh
dG9yOjpYT1IpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJl
Y3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVy
YXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBp
bjIgfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRkVDb21wb3NpdGVPcGVyYXRvciYgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAg
c3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04i
OwogICAgICAgICBicmVhazsKQEAgLTMyOCwxOCArMTMwLDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiB0eXBlCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJl
cHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9zaXRlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
IG9wZXJhdGlvbj1cIiIgPDwgbV90eXBlIDw8ICJcIiI7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8
PCBtX2NvbXBvc2l0ZU9wZXJhdG9yIDw8ICJcIiI7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0
b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBr
MT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9XCIiIDw8IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2sz
IDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8PCAiXCIiOwogICAgIHRzIDw8ICJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5w
dXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1
OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi44ZjdiNTUxZGM5NmQxZmQ3N2MzYjE5ODE3ZjZlMWZmNGQ2
YjEyNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMiArMjQsOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5
cGUgeworZW51bSBGRUNvbXBvc2l0ZU9wZXJhdG9yIHsKICAgICBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9VTktOT1dOICAgID0gMCwgCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiAgICAgICA9
IDEsCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4gICAgICAgICA9IDIsCkBAIC00MSwxMCAr
MzksMTAgQEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3Np
dGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29t
cG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBj
cmVhdGUoRkVDb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpOwogCi0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRpb25UeXBlKTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQorICAgIGJvb2wgc2V0Q29tcG9z
aXRlT3BlcmF0b3IoRkVDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICBmbG9hdCBrMSgpIGNvbnN0
IHsgcmV0dXJuIG1fazE7IH0KICAgICBib29sIHNldEsxKGZsb2F0KTsKQEAgLTU4LDMwICs1Niwy
MyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAg
Ym9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShG
aWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQpOworICAgIEZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lk
IGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Cisg
ICAgYm9vbCBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAg
ICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGht
ZXRpY05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpOwotI2VuZGlmCi0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKKyAg
ICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAgICAgZmxvYXQgbV9r
MTsKICAgICBmbG9hdCBtX2syOwogICAgIGZsb2F0IG1fazM7CkBAIC04OSw0ICs4MCwzIEBAIHBy
aXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCmluZGV4IDc1YjJlN2M2ZWExM2MyYzFjMmY4ZjY1ZDNkYjRlZDVjYzNhZmRhOGYuLjdl
OGQxZmVjMjE2YmIyMDFlOTQ3ZjcyNWNkODdiZjZkOTNmMTcxYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
IDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwx
OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIK
IAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRT
aXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IElu
dFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRy
aXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBo
YSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFy
Z2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBoYSwga2Vy
bmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29u
c3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbnZv
bHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlz
b3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTQgKzUxLDYgQEAgRkVDb252
b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6
ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9
CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwg
ZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJl
c2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBk
aXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAot
ICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQogdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpCiB7CiAg
ICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwpAQCAtMTIwLDMxOCArMTE0LDIwIEBA
IGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxw
aGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5n
bGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIg
fCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFp
bnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhv
dXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAg
ICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2Vy
bmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwg
eTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRl
IHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAg
Li4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBm
b2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMg
dGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHky
IGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkp
IHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVn
aW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAw
LCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6
IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAK
LSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVn
aW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBp
eGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhl
c2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJl
Z2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZh
bHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJl
IHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGlt
YWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0g
ICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNp
ZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhl
cmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVh
bGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXgg
PSAyNTUpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBt
YXg7Ci0gICAgcmV0dXJuIGNoYW5uZWw7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsK
IH0KIAotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2
b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQ
aXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCog
dG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzKQorRmlsdGVyUmVzdWx0KiBGRUNvbnZv
bHZlTWF0cml4OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICB1bnNpZ25l
ZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZh
bHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUo
dG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAocHJlc2Vy
dmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNlUGl4
ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAg
ZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQotCi0jaWYgQ09NUElMRVIoTVNW
QykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3Rh
bHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkK
LSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCi0KLS8vIE9ubHkgZm9yIHJl
Z2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFy
dCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBw
aXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRh
LndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNl
ID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0
aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVu
dHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsK
LQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRo
ZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJv
dHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGlu
dCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAo
Y2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlT
dGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsg
LS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtl
cm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtl
TGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxz
WzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXBy
ZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkg
ewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4
W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAg
ICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZh
bHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5l
bFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAg
aWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5l
bEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0
RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rp
dmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwg
Kz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0
YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBp
bnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0
YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJl
dHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1f
ZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVy
biAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQot
ICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndp
ZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlm
ICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50
aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7
Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAg
Y2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4
ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7
Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhl
aWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90
aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12
b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBw
aXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdo
dCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJu
ZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5
MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0
YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAw
IDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZv
ciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdp
ZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4
ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0g
c3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUu
d2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFs
c1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFw
cmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAg
ICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50
IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBr
ZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAg
ICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAg
ICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwot
ICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4
ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAg
ICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZl
QWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7
Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBp
eGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5l
bFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0j
ZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1l
bnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8g
ZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAot
ICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0
cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsK
LSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8v
IEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlz
IGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFs
c28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZh
c3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAg
ICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4
MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1f
cHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3Vy
Y2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0g
ICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXks
Ci0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCks
Ci0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5l
bE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwot
ICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxT
aXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDAp
IHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0
aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29s
dXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAg
ICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBj
aHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAg
ICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4
KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAg
ICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJv
dHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xp
cFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zm
c2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwot
ICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkp
OwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRP
dXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0Lnko
KSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwg
cGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90
dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwg
Z2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCAr
MTQ5LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZF
Q29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29u
dm9sdmVNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4
ICA8PCAiXCIgIgogICAgICAgIDw8ICJkaXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIK
QEAgLTQ2NSw5ICsxNjAsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdAogICAgICAgIDw8ICJl
ZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0
TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIlwiICIKICAgICAgICA8PCAicHJl
c2VydmVBbHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4g
dHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFi
ODk1YTZlMWU1MDA1NGUxM2RiYS4uZWI5MTQ4MDNiMjVmMTdlZDFjODIyNjViY2ViNTVmYWJlOWNk
YzdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI0LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDkgKzM4LDcgQEAgZW51bSBFZGdl
TW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IElu
dFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJv
b2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRy
aXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0
IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQogICAgIHZvaWQgc2V0S2VybmVsU2l6ZShj
b25zdCBJbnRTaXplJik7CkBAIC02Nyw0MSArNjUsMTcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0
UHJlc2VydmVBbHBoYShib29sKTsKIAogcHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0
aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVj
dG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQotICAgIEZFQ29udm9sdmVNYXRyaXgo
RmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOworICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2Vy
bmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdl
dE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29udm9sdmVNYXRyaXgiOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJy
aWRlOwotCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFMV0FZ
U19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmEzOWRkZGFk
NDZmMzk5MWNhOWJiMjFiZTFlMjNmZmJmNzA2MGNhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRURpZmZ1
c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFRGlm
ZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQot
ewotICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3RhbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAi
CiAgICAgICAgPDwgImRpZmZ1c2VDb25zdGFudD1cIiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVu
Z3RoWCA8PCAiLCAiIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIlwiXVxuIjsKLQotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVy
biB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2Ux
MTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjk2MDA2MjA0OWEyMmZlNWE4NWNiZmViYjM0OWVjZjFh
YmQ0MTc5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjEgKzI2LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGlnaHRTb3VyY2U7Ci0KIGNsYXNzIEZFRGlmZnVzZUxp
Z2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlm
ZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RpZmZ1c2VDb25zdGFudDsgfQotICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZs
b2F0KTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKIHByaXZh
dGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VM
aWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgCisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJGRURpZmZ1c2VMaWdodGluZyI7IH0KKworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIy
ODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2M2ZhMS4uMjQ0ZWY4NTJjNWVhOWZkY2ZhMDQ5ZWZiODhl
M2I3YzcyMTY2YzBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDEzMiArMjUsNjQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRl
ciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpEaXNwbGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2Vs
ZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5l
bFNlbGVjdG9yKQotICAgICwgbV9zY2FsZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4g
RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUp
CiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxT
ZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2Vt
ZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3Bs
YWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVEaXNwbGFjZW1lbnRNYXApCisgICAgLCBtX3hDaGFubmVsU2VsZWN0b3Io
eENoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV9zY2FsZShzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpc3BsYWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0
b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2Vs
ZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQogewotICAg
IGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV94Q2hhbm5lbFNlbGVj
dG9yLCB4Q2hhbm5lbFNlbGVjdG9yKSAhPSBtX3hDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wg
RkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQogewotICAgIGlmIChtX3lDaGFubmVsU2VsZWN0b3Ig
PT0geUNoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feUNoYW5u
ZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV95Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yKSAh
PSBtX3lDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNj
YWxlKGZsb2F0IHNjYWxlKQogewotICAgIGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAhPSBtX3NjYWxlOwogfQogCi12
b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpCitjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2Vt
ZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
KSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJz
JyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8v
IGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNv
dXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNl
LgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2Ug
aXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0
OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkp
OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0t
PmNvbG9yU3BhY2UoKTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCitGbG9hdFJl
Y3QgRkVEaXNwbGFjZW1lbnRNYXA6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0
aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0
ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMp
CitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJPdXRwdXQmIG91
dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICBy
ZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9X
Tik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwot
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2lu
ZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9u
LXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2Ug
PSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAg
IGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+
bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUg
PSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsK
LSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBm
bG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQg
c2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKICAgICAK
LSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50
IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5
dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1
dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAg
IGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JY
ICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVt
KGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZ
KTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3Rp
bmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRT
aXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsK
LSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBp
eGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkg
KyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOwotICAgICAgICB9Ci0g
ICAgfQorICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxw
dHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpA
QCAtMTc0LDE3ICsxMDcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBj
b25zdAorVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlRGlzcGxhY2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNj
YWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9
XCIiIDw8IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNl
bGVjdG9yPVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRT
dHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZm
ZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDcz
ZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uYzY1NTQ3ZjEyOGZkYWQwMmFiZDZlOTUzNjY5
YTJjMDIxZWY1MTMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM3LDcgKzM2LDcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3Mg
RkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBj
cmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvcjsgfQogICAgIGJvb2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0
b3JUeXBlKTsKQEAgLTQ4LDIyICs0NywyMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAg
ICB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVj
dCosIGNvbnN0IGludCkgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRN
YXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVu
dE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVs
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50
IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
RGlzcGxhY2VtZW50TWFwIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBGaWx0ZXJSZXN1bHQqIGFw
cGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFy
eVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFu
bmVsU2VsZWN0b3I7CiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7
CkBAIC03MSw0ICs3MSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3
ODlmNmJiZGQ4Li45ZDI1ZWJmZTJmNjViNjgzM2MwMjgwODJmOTVkNjhmMDQyYzg4ZWY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIzLDE2ICsyNCwxOCBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICAKLUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRY
LCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xv
ciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6
OkRyb3BTaGFkb3cpCisKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZs
b2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dP
cGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBm
bG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRv
dykKICAgICAsIG1fc3RkWChzdGRYKQogICAgICwgbV9zdGRZKHN0ZFkpCiAgICAgLCBtX2R4KGR4
KQpAQCAtNDIsMTAwICs0NSw1MSBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXIm
IGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewogfQogCi1S
ZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxv
YXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hh
ZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6
b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93
KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkp
OworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRz
ZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjpt
YXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSksCisgICAgICAgIHN0ZDo6bWF4
PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCksCisgICAgICAgIHN0ZDo6bWF4PGlu
dD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+
KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCisgICAgfTsKIH0KIAotdm9pZCBGRURyb3BT
aGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRURyb3BTaGFk
b3c6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAg
ICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGFic29sdXRlUGFp
bnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKLQotICAgIEludFNpemUga2Vy
bmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBt
X3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBh
dXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogCisgICAgZHJhd2lu
Z1JlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyh7IG1fZHgsIG1f
ZHkgfSkpOworICAgIAorICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0c1swXS0+ZHJhd2luZ1Jl
Y3QoKSk7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICAKICAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWlu
dFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlm
IChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdCht
YXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVs
U2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5l
bFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xp
cFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwog
fQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJl
c3VsdCogRkVEcm9wU2hhZG93OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgQVNTRVJUKCFzdGFjay5p
c0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRo
aXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVy
UmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwotICAgIGRyYXdpbmdS
ZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKLQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghc291cmNlSW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29udGV4dCA9IHJl
c3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRv
d09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFn
ZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEo
MSk7Ci0KLSAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBt
X3NoYWRvd0NvbG9yKTsKLQotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0
Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1h
Z2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3Vy
Y2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVy
LT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Ci0KLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKLQotICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2lu
Z1JlZ2lvbik7Ci19Ci0KLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QK
LXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0
c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6
bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAotICAgICAgICBzdGQ6Om1h
eDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAotICAgICAgICBzdGQ6Om1heDxp
bnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50
PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQotICAgIH07CisgICAgcmV0dXJuIGFwcGx5
UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7
CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAg
ICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGRE
ZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8
IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2Vy
aWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qt
b3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRlZTg4
YTI5ZWZmMzg0Yy4uNGY4NWEzOTdlNWM4YTgyM2E3NjZiYjBlYzBhYWJhM2MyYTQ1MWIyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3Jl
YXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZs
b2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5
KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0K
ICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9
CkBAIC00MSwyNCArNDEsMjYgQEAgcHVibGljOgogICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1
cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CiAKLSAg
ICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9y
OyB9IAorICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
ZG93Q29sb3I7IH0KICAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KIAogICAgIGZsb2F0IHNoYWRv
d09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd09wYWNpdHk7IH0KICAgICB2b2lkIHNl
dFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0eSkgeyBtX3NoYWRvd09wYWNpdHkgPSBz
aGFkb3dPcGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVEcm9wU2hhZG93KEZpbHRlciYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRURy
b3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25z
dCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BTaGFkb3ciOyB9CiAKLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYs
IEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKQEAgLTY5LDQgKzcx
LDMgQEAgcHJpdmF0ZToKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
CmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYzYjZiMDEuLjUxOGNlZjYz
Y2E3MTBiMTUxZDdhNGM3NGJhMWQyYmYxZTgyNWExOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMyw2ICszLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNCwyMiArMjUsMjAgQEAKICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNp
bmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRl
ciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29k
Q29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4g
RkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLVJl
ZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBm
bG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVGbG9vZCkKKyAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9m
bG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
Rmxvb2QoZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZs
b29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTU4LDE3ICs1NywyMCBA
QCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K0Zsb2F0UmVjdCBGRUZsb29kOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAoreworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247Cit9CisKK0ZpbHRl
clJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBj
b25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0
cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAot
ICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
Zmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7
CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21ldHJ5
LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5
NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2MTczNDhlLi40OGUwZmY4OGMyODEzMjc4OTAxZGMz
OTkwMDU5NGI1MTA4M2YxZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxNCArMjMsMTMgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUo
RmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBj
cmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBm
bG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRG
bG9vZENvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0zNywyNyArMzcsMjcgQEAgcHVibGljOgogICAg
IGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAg
ICAgYm9vbCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOwogCitwcml2YXRlOgorICAgIEZFRmxvb2Qo
Y29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKKworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KKyAgICAKICNpZiAhVVNFKENH
KQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9m
IGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8v
IGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRp
b24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1
bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmls
dGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxv
b2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVG
bG9vZCI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jiwg
Y29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29m
dHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb2xvciBtX2Zsb29k
Q29sb3I7CiAgICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2Yz
NmViYjZiYmI4YWIzNjM5NDM2NS4uNTUxMTVkYjA4NjBmMDliYjU0NGRiNzIxZDdlZGQ2YmY4MDc5
MTA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjYsNDUwICsyNiwzOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAot
I2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgot
I2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdh
dXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBw
aUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1
ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFS
aWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4
LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9y
IGRldGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAg
ICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVz
IC8gMiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0Owot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAg
ICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMg
JSAyKSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVy
OjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3Np
YW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUdhdXNz
aWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VN
b2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVy
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0
ZXIsIHgsIHksIGVkZ2VNb2RlKSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERl
dmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0K
LQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
KQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBv
bmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRB
cnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYg
ZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwg
aW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAgICBjb25z
dCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCog
ZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQg
aXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBp
bnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQotICAgICAg
ICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2Vy
bmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAq
IHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBv
ZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0
V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGlu
ZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0g
ZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4K
LSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9m
ZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXks
Ci0gICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBp
bnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBjb25zdCBpbnQgbWF4S2Vy
bmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0
UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZm
ZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50
OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0
YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkg
d2lkdGgvbGVuZ3RoOiBpdCBpcyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBu
dW1iZXIgb2YgcGl4ZWxzIHdpbGwgYmUKLSAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFu
bmVscy4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAg
ICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW1SID0gMCwgc3Vt
RyA9IDAsIHN1bUIgPSAwLCBzdW1BID0gMDsKLQotICAgICAgICBpZiAoZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSkgewotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotICAgICAgICAgICAg
ICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisr
OwotICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1
bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcu
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlk
ZTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRl
T2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1HIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBr
ZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBz
dHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0Rh
dGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0
clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4Umln
aHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9m
ZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsy
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJlLgotICAgICAgICAgICAgLy8gR2V0IGVk
Z2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRlJy4KLSAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsKLSAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAobGluZSArIChlZmZlY3RXaWR0
aCAtIDEpICogc3RyaWRlKTsKLQotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwgZHhSaWdodDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgdmFsdWVzIG9mICdp
Jz8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsK
LSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0
OwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdl
VmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
RyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdl
VmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdo
dFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdW1S
ICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA8IGR4
TGVmdCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBz
dW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRy
ID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3Jj
UHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEg
LT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4
ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1
ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zm
c2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAg
ICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKLXsKLSAg
ICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
ZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgotICAgIGlmIChrZXJuZWxT
aXplICUgMiAhPSAxKQotICAgICAgICBrZXJuZWxTaXplICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2Fz
dDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKLSAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVm
ZmVjdFdpZHRoOwotICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAg
ICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
ZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5k
YXRhKCk7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZm
ZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RPdXRCdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1w
b3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFs
IGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgotICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4g
ZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgotICAgIHNpemVfdCB0bXBCdWZmZXJTaXpl
ID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0
QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxv
Yyh0bXBCdWZmZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZl
X0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAw
LCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAg
dkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVm
ZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VF
ZGdlRXh0ZW5kKTsKLSAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUg
ZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlv
QnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1
ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0j
ZW5kaWYKLQotaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXpl
LCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGludCBk
eExlZnQgPSAwOwotICAgIGludCBkeFJpZ2h0ID0gMDsKLSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAg
ICBpbnQgZHlSaWdodCA9IDA7Ci0gICAgCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZm
ZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBC
dWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAo
a2VybmVsU2l6ZVgpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVY
LCBkeExlZnQsIGR4UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAg
ICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBr
ZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAg
ICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4
UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwg
aXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChm
cm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2VybmVsU2l6
ZVkpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQs
IGR5UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlm
ICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXpl
WSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVy
KCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0
cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgaXNBbHBoYUlt
YWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVy
LCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0
IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9t
QnVmZmVyKSB7Ci0gICAgICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVy
LT5sZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXIt
PmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQotewotICAgIGlu
dCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAg
ICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVy
cy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXks
IHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFp
bnRTaXplKQorc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7Ci0j
aWYgIVVTRShBQ0NFTEVSQVRFKQotICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lk
dGgoKTsKLSAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAg
IGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXpl
LmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWlu
dFNpemUud2lkdGgoKSk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVs
Sm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAg
ICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChq
b2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdo
dCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0
bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3Rh
bCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dp
dGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUu
aGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBw
YWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAw
OwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlz
OwotCi0gICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBl
eHRyYUhlaWdodDsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4
dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgaW50
IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWln
aHQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICog
c2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFy
YW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2Fu
bGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBw
YXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
aGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6
ZVggPSBrZXJuZWxTaXplWDsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBr
ZXJuZWxTaXplWTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4
ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhl
IGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQg
am9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAg
ICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IGRlc3Rp
bmF0aW9uT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgICAg
IGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVp
Z2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRq
dXN0ZWRCbG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhl
aWdodCAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3Vy
cmVudFkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hl
aWdodCAqIHNjYW5saW5lOwotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEo
KSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3Vy
Y2VPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAg
IH0KLSNlbmRpZgotCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxk
IGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZ
LCBwYWludFNpemUpOworICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAqIHBpRmxvYXQpOwog
fQogCiBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAg
Ly8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1h
a2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZs
YXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxl
IHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVs
U2l6ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3Rvcigp
ICsgMC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KLSAgICAKLUludFNpemUgRkVH
YXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2
aWF0aW9uKQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5l
bFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgQVNTRVJUKHN0ZERl
dmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwogICAg
IEludFNpemUga2VybmVsU2l6ZTsKQEAgLTQ4MywxMiArNzEsMTIgQEAgSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pCiAgICAgcmV0dXJuIGtlcm5lbFNpemU7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRp
b24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlv
biAvKmZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSovKTsKIH0K
IAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUg
c3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUg
PSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDcy
ICs4NCw0MyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZs
b2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwogfQogCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIEludFNp
emUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
KyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCksIG91
dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OworfQogCi0gICAgRmxvYXRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBk
cmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVz
IG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0
LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUp
CisgICAgICAgIHJldHVybiBkcmF3aW5nUmVjdDsKIAotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBr
ZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRl
WSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIEludFNpemUga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAotICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhF
ZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUo
bWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFu
ZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0
aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICog
MC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkg
KiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3Vi
cmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUdhdXNz
aWFuQmx1cjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsK
KyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29w
eVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZ
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGtlcm5lbFNpemUu
c2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKLSAgICBp
ZiAoIXRtcEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1BcHBseShk
ZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwg
a2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKLX0KLQotSW50T3V0c2V0cyBGRUdhdXNz
aWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2Fs
Y3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7IG91dHNl
dFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwg
b3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUdh
dXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVHYXVzc2lh
bkJsdXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwiIiA8PCBtX3N0ZFggPDwg
IiwgIiA8PCBtX3N0ZFkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3Bl
IGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCmluZGV4IDVmYjk3ZmZiMDcwYzJkYWViNmViMjgzYmVhYWExNzY0N2NiYjJkM2UuLjk3
YzgwNDM2NjljNWY1MmUwMzMwZGEwODk5OTdlYWU0M2ExYzVlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsNTkgKzIzLDQwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRy
aXguaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUdhdXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIFJlZjxG
RUdhdXNzaWFuQmx1cj4gY3JlYXRlKGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKIAogICAg
IGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2b2lk
IHNldFN0ZERldmlhdGlvblgoZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9h
dCB4KSB7IG1fc3RkWCA9IHg7IH0KIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblkoKSBjb25zdCB7
IHJldHVybiBtX3N0ZFk7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQpOworICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KSB7IG1fc3RkWSA9IHk7IH0KIAogICAgIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KLSAgICB2
b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyB9CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYsIEZsb2F0U2l6ZSBz
dGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVs
U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxh
dGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXpl
IGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNp
emUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVz
c2lhbkJsdXIoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOworICAgIEZFR2F1
c3NpYW5CbHVyKGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVHYXVzc2lhbkJsdXIiOyB9CiAK
LSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBz
dHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgewotICAgICAgICBGRUdhdXNzaWFuQmx1ciog
ZmlsdGVyOwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsK
LSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OwotICAgICAg
ICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVYOwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKLSAgICB9OwotCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBJbnRPdXRzZXRzIG91dHNl
dHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBv
dXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJP
dXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdv
cmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseShV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBh
aW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7CisgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3Rk
WDsKICAgICBmbG9hdCBtX3N0ZFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBkZjE3NmY4ZTA3MGE0MThj
MjA4NTE4MDkwZWU3YTZjYTExM2U1NmY1Li5kNmQ1OTQyZjJmZmJhMmRjMzlmYmRkODRlNmI0MmFj
Y2YyYzU1MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0NzAgKzI4LDc3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ29sb3JD
b252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRl
clJlc3VsdFZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZF
TGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBt
X2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9y
KGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSwg
RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQorICAg
ICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAg
ICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKICAgICAsIG1fc3BlY3VsYXJD
b25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1
bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhY
KQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1f
c291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpzZXRTdXJm
YWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQotewotICAgIGlmIChtX3N1cmZhY2VTY2FsZSA9
PSBzdXJmYWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fc3VyZmFjZVNj
YWxlID0gc3VyZmFjZVNjYWxlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFTGlnaHRp
bmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCitib29sIEZF
TGlnaHRpbmc6OnNldENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAobV9saWdo
dGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCisgICAgaWYgKG1fY29sb3IgPT0gY29sb3IpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29s
b3I7CisgICAgbV9jb2xvciA9IGNvbG9yOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZF
TGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQot
ewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVuaXRMZW5ndGhYKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVsVW5p
dExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0S2Vy
bmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17Ci0gICAgaWYgKG1fa2Vy
bmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci1z
dGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKLXN0YXRpYyBjb25z
dGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGKTsK
LQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBmcm9t
IHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNm
ZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Ix
ZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAt
MSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7
Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8gMy5mOwotCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGNlbnRlciArIDIgKiByaWdodCAt
IGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAqIGNlbnRlciAtIHJpZ2h0ICsgMiAq
IGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIgKiByaWdodCAtIGJv
dHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyIC0gcmln
aHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJv
dHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQgKyAyICogY2VudGVy
IC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsgYm90
dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQg
Kz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewot
ICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9t
ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogYm90dG9t
ICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBo
YVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9IG9mZnNldCArIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwotICAgIAotICAgIGludCByaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQpKTsKLSAgICBpbnQg
dG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0
IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBsZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgp
OwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOwotICAgIGludCB0b3Ag
PSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBib3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cu
Ym90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5ib3R0b20oKTsKLQot
ICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxs
IGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BS
aWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0OwotICAgIGFscGhhV2lu
ZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0
aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1jaGVja3MuCi0gICAgQVNT
RVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgpID09IHBpeGVscy0+aXRl
bShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0
IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQsCi0gICAg
ICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIDIgKiBib3R0
b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIg
KiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAg
ICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBi
b3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90
dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0
b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCAr
IHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0Citib29sIEZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUp
CiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxl
ZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsg
bGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UobV9zdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2FsZSkgIT0gbV9zdXJmYWNlU2NhbGU7CiB9CiAK
LWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50
KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAyICog
bGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAy
ICogY2VudGVyCi0gICAgfTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2RpZmZ1c2VDb25z
dGFudCwgZGlmZnVzZUNvbnN0YW50KSAhPSBtX2RpZmZ1c2VDb25zdGFudDsKIH0KIAotdm9pZCBG
RUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9y
KQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQpCiB7Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4gc3RkOjpleGNo
YW5nZShtX3NwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQpICE9IHNwZWN1bGFyQ29u
c3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0
LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK2Jvb2wgRkVMaWdodGlu
Zzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxhckV4cG9uZW50KQogewotICAgIGZs
b2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291cmNlLT5jb21wdXRlUGl4
ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0
U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7Ci0gICAgICAgIC8v
IE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2Fz
ZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdo
dGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0
b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAg
ICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9y
TGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1
bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVj
dWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1
bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0
aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBmYWN0b3JYICogbm9y
bWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgZmFj
dG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAg
ICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0
aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndh
eVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgp
LAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCi0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlW
ZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9y
bWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBv
d2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAq
IGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAq
IDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBs
aWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkg
KiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxW
YWx1ZSwgMywgb2Zmc2V0KTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3NwZWN1bGFyRXhw
b25lbnQsIHNwZWN1bGFyRXhwb25lbnQpICE9IG1fc3BlY3VsYXJFeHBvbmVudDsKIH0KIAotLy8g
VGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVm
ZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUg
bm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJp
Y1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICAvLyBN
YWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJv
dyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZKTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0
YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAg
ICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IG5leHRSb3dTdGFydCA9
IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLQotICAg
ICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KLSAg
ICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdl
IHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwg
d2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAg
ICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFRvcChk
YXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2
aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0
KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhl
bHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBh
bHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAgICAgIGludCBvZmZz
ZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXpl
KSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAgICAgICAgICAgc2V0UGl4
ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0
LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyks
IGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMqIHBhcmFtZXRlcnMpCitib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5n
dGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+
cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5w
YWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0
aFgpICE9IG1fa2VybmVsVW5pdExlbmd0aFg7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgdW5zaWduZWQgcm93c1RvUHJv
Y2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOwotICAgIHVuc2lnbmVkIG1heE51
bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0g
MSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVh
ZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICAvLyBJbml0
aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1B
cHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlHZW5lcmlj
V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJh
bWV0ZXIgYXJyYXkKLSAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMo
KTsKLSAgICAgICAgaWYgKGpvYiA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2Ig
aW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRv
IGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8geVN0ZXAgKiBqb2JzIDwg
dG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpv
YnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0gcm93c1RvUHJvY2Vz
cyAvIGpvYjsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJhID0gcm93c1RvUHJv
Y2VzcyAlIGpvYjsKLQotICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Ci0gICAgICAgICAgICBm
b3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9i
KTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0
YSA9IHBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0
OwotICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8geVN0ZXAg
KyAxIDogeVN0ZXA7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnlFbmQgPSB5U3RhcnQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJl
YWRlZCBtb2RlLgotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoZGF0YSwg
cGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKLX0KLQotaW5saW5l
IHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK2Jvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCiB7
Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5h
bWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1f
VFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQotICAgIHBsYXRmb3JtQXBw
bHlOZW9uKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZWxzZQotICAgIHBsYXRmb3JtQXBwbHlHZW5l
cmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2tlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3RoWSkgIT0gbV9rZXJuZWxVbml0
TGVuZ3RoWTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorRmxvYXRSZWN0IEZFTGlnaHRp
bmc6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0g
ICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdE
YXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdo
dCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZp
bmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRo
IDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEu
cGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxl
IC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAq
IGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwot
ICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwotCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3Bh
Y2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0
aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKLQotICAgIG1fbGln
aHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7Ci0KLSAgICAv
LyBUb3AgbGVmdC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEu
dG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIFRvcCByaWdodC4KLSAgICBvZmZzZXQg
PSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
LCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZz
ZXQpKTsKLQotICAgIC8vIEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9m
ZnNldCkpOwotCi0gICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRh
LmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgaWYgKHdpZHRoID49IDMpIHsKLSAg
ICAgICAgLy8gVG9wIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0
ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9y
bWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRo
RGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFs
KG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBM
ZWZ0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAg
ICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0
b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0K
LSAgICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkg
PSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwg
ZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3Ix
ZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwotICAg
IH0KLQotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIElu
dGVyaW9yIHBpeGVscy4KLSAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEp
OwotICAgIH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRp
bmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0
UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwg
Y09wYXF1ZUFscGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICB1aW50OF90IGExID0g
ZGF0YS5waXhlbHMtPml0ZW0oaSk7Ci0gICAgICAgICAgICB1aW50OF90IGEyID0gZGF0YS5waXhl
bHMtPml0ZW0oaSArIDEpOwotICAgICAgICAgICAgdWludDhfdCBhMyA9IGRhdGEucGl4ZWxzLT5p
dGVtKGkgKyAyKTsKLSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8gbWF4KGExLCBh
MiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChh
MSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsK
IH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVz
dWx0KiBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0
VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0K
LSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwotICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEs
MSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCi0gICAgLy8gc3RhbmRhcmQgaGFzIG5v
IHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhh
cyBzdHJhbmdlCi0gICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBh
bmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KLSAgICAvLyBBbnl3YXksIGZlQ29u
dm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIGlmIChh
dXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAKLSAgICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkp
OworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyLCBnZW9t
ZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CmluZGV4IDBmZmZjZDA2NDM5NmQ4ZjRiNjQwODIyNjljYzIwNzRmN2M5ZGJkYmMuLmI4OThhYzk3
ODg3YmNkZmYwMWRiNTZkZjM1MDI4ODM4ZWNiYzQxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTM5ICszMSw1MSBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotCi0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVE
aWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKLQogY2xhc3MgRkVM
aWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBjb25zdCBDb2xvciYgY29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgYm9vbCBzZXRDb2xvcihjb25zdCBD
b2xvciYpOwogCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJm
YWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKLSAgICBjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsg
fQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CisgICAg
Ym9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOworCisgICAgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGJvb2wgc2V0
U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CiAKKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxh
ckV4cG9uZW50KGZsb2F0KTsKKyAgICAKICAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KICAgICBib29sIHNldEtlcm5lbFVu
aXRMZW5ndGhYKGZsb2F0KTsKIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsgfQogICAgIGJvb2wgc2V0S2VybmVsVW5pdExl
bmd0aFkoZmxvYXQpOwogCi0gICAgY29uc3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsgfQorICAgIGNvbnN0IExpZ2h0U291cmNl
JiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAw
OyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIEZFTGlnaHRp
bmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3Vy
Y2U+JiYsIEZpbHRlckZ1bmN0aW9uOjpUeXBlKTsKIAotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsK
LSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAg
fTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhh
WzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50
OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQot
ICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7
IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2Vu
dGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAg
IHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFd
OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBo
YVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUp
ICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1
aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2
b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7
IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsx
XVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1
ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0
Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0g
YWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAg
ICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5
IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBp
eGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAg
ICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0
b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNp
emUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0g
ICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5k
IGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5n
RGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5l
cmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2Vy
KEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAgICBGRUxpZ2h0aW5nKEZpbHRl
ciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQot
Ci0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7Ci0K
LSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKLSAgICB2b2lkIHNldFBpeGVs
SW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKLQotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHko
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZ
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNv
bnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lmIENQVShBUk1fTkVPTikgJiYg
Q1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0gICAgc3Rh
dGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBvbmVudCk7Ci0gICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBMaWdodGluZ1R5cGUgbV9saWdo
dGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwotCi0gICAgQ29s
b3IgbV9saWdodGluZ0NvbG9yOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0
ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJl
KEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBDb2xvciBtX2NvbG9yOwogICAgIGZsb2F0IG1fc3VyZmFjZVNjYWxlOwogICAgIGZs
b2F0IG1fZGlmZnVzZUNvbnN0YW50OwogICAgIGZsb2F0IG1fc3BlY3VsYXJDb25zdGFudDsKICAg
ICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3Ro
WDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9zb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDBh
MjAwMDFiMTczYmQ4ZmRmNmJiYTYzNmNkMjNjZTQ3MDI2ZTdiM2YuLmE2MDQyOWFjNTQ4MmRlOGY2
ZWIyMmE5NmM4OWFlOTFjY2IzZGRkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNTEgKzIzLDQ5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3Jl
YXRlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKQogeworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFTWVyZ2UobnVtYmVyT2ZFZmZlY3RJbnB1dHMpKTsKIH0KIAotUmVmPEZFTWVyZ2U+
IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZFTWVyZ2U6OkZFTWVyZ2UodW5zaWdu
ZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVNZXJn
ZSkKKyAgICAsIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQo
bV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZFTWVyZ2U6OmVmZmVjdE5hbWUoKQogewot
ICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChz
aXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKK30KKworRmlsdGVyUmVzdWx0KiBG
RU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3Rh
Y2suc2l6ZSgpID09IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJSZXN1bHQ+PiBp
bnB1dHM7CisgICAgZm9yIChhdXRvIGlucHV0c1NpemUgPSBtX251bWJlck9mRWZmZWN0SW5wdXRz
OyBpbnB1dHNTaXplLS07ICkKKyAgICAgICAgaW5wdXRzLmFwcGVuZChzdGFjay50YWtlTGFzdCgp
KTsKIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMg
fSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KGkpOwotICAgICAgICBpZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVm
ZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCBpbnB1dHMsIG51
bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlw
ZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNp
emUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAg
dHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3Ry
ZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIi
IDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uYTFj
MDc4ZTAzMGE1N2I5ZjcxYzk3OWY5YzE5MmQ0ZGJiMWRjODNlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsK
KyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0
SW5wdXRzKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAK
IHByaXZhdGU6Ci0gICAgRkVNZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdlKHVuc2lnbmVkIG51
bWJlck9mRWZmZWN0SW5wdXRzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQm
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2Fi
NzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmRiODgwYjRmOTI2YzBiOWQwYWQ5MzNiZGNl
NGNlMzEyN2JiMzUwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjY1ICsyNSw2NCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29s
b3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5o
IgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9n
eShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9y
cGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0g
ICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6
Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9s
b2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi1SZWY8RkVN
b3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorRkVNb3Jw
aG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRv
ciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBl
OjpGRU1vcnBob2xvZ3kpCisgICAgLCBtX21vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3Bl
cmF0b3IpCisgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZ
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neShmaWx0ZXIsIHR5cGUs
IHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCitib29sIEZFTW9ycGhvbG9n
eTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3Bl
cmF0b3IpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX21vcnBob2xvZ3lPcGVyYXRvciwgbW9ycGhvbG9neU9wZXJhdG9yKSAhPSBtb3Jw
aG9sb2d5T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNYKGZsb2F0
IHJhZGl1c1gpCiB7Ci0gICAgaWYgKG1fcmFkaXVzWCA9PSByYWRpdXNYKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNYID0gcmFkaXVzWDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3JhZGl1c1gsIHJhZGl1c1gpICE9IG1fcmFkaXVzWDsK
IH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQgcmFkaXVzWSkKIHsKLSAg
ICBpZiAobV9yYWRpdXNZID09IHJhZGl1c1kpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3JhZGl1c1kgPSByYWRpdXNZOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZFTW9ycGhv
bG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIEZsb2F0UmVjdCBwYWlu
dFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5pbmZsYXRlKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAg
aWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZl
Y3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJl
Y3QpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoKQotewotICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OwotfQotCi1p
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKLXsKLSAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOwotfQotCi1pbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Ci19
Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiKQot
ewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAg
cmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKLQotICAgIHJldHVybiBwZXJDb21wb25lbnRN
YXgoYSwgYik7Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwg
aW50IHlFbmQsIGludCB3aWR0aCkKLXsKLSAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29t
cG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRl
eCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7Ci0KLSAgICBmb3IgKGludCB5ID0geVN0YXJ0ICsgMTsg
eSA8IHlFbmQ7ICsreSkgewotICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50
c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5
LCB3aWR0aCkpIH0pOwotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVt
LCBwaXhlbCk7Ci0gICAgfQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElO
RSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwg
aW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUg
PT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4gY29sdW1uRXh0
cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhlbEFycmF5LCB4LCB5U3Rh
cnQsIHlFbmQsIHdpZHRoKTsKLQotICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRo
KTsKLX0KLQotdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4sIDE2PjsKLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0o
Y29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJu
ZWxbMF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBrZXJuZWwuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7Ci0K
LSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKLQotICAgIHJldHVybiBrZXJuZWxFeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOwotfQotCi12b2lkIEZF
TW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQotewotICAgIEFTU0VSVChlbmRZID4gc3Rh
cnRZKTsKLQotICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNy
Y1BpeGVsQXJyYXk7Ci0gICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheTsKLQotICAgIGNvbnN0IGludCByYWRpdXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1
c1g7Ci0gICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWludGluZ0RhdGEucmFkaXVzWTsKLSAgICBj
b25zdCBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgY29uc3QgaW50IGhlaWdo
dCA9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0KLSAgICBBU1NFUlQocmFkaXVzWCA8PSB3aWR0aCB8
fCByYWRpdXNZIDw9IGhlaWdodCk7Ci0gICAgQVNTRVJUKHN0YXJ0WSA+PSAwICYmIGVuZFkgPD0g
aGVpZ2h0ICYmIHN0YXJ0WSA8IGVuZFkpOwotCi0gICAgQ29sdW1uRXh0cmVtYSBleHRyZW1hOwot
ICAgIGV4dHJlbWEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyICogcmFkaXVzWCArIDEpOwotCi0g
ICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgeVJh
ZGl1c1N0YXJ0ID0gc3RkOjptYXgoMCwgeSAtIHJhZGl1c1kpOwotICAgICAgICBpbnQgeVJhZGl1
c0VuZCA9IHN0ZDo6bWluKGhlaWdodCwgeSArIHJhZGl1c1kgKyAxKTsKLQotICAgICAgICBleHRy
ZW1hLnNocmluaygwKTsKLQotICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVmdCBlZGdlLCBz
byBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCi0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQo
Y29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5k
LCB3aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4
dHJlbWEgb2YgbmV4dCBjb2x1bW4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
Kyt4KSB7Ci0gICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAgICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFk
aXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAg
ICAgICAgIGlmICh4ID4gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgw
KTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3
aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9y
Q29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpKS52YWx1ZTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIo
UGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQotewotICAgIHBhcmFtLT5maWx0ZXItPnBs
YXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBw
YXJhbS0+ZW5kWSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9yYWRpdXNZLCByYWRpdXNZ
KSAhPSBtX3JhZGl1c1k7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6
ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBs
aW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQg
MC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNY
ICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUo
KSA9PSAxKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgp
OwogCi0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAvLyBF
bXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotICAgIAotICAgIHVuc2lnbmVk
IG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lk
dGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBt
YXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhy
ZWFkTnVtYmVyKTsKLSAgICAgICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMubnVt
YmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7Ci0gICAgICAgICAg
ICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEg
ZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAg
ICAgLy8gam9iU2l6ZSAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRs
ZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBpbnQgam9i
U2l6ZSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyBudW1PZlRocmVhZHM7Ci0gICAgICAgICAgICBp
bnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgJSBudW1PZlRocmVhZHM7Ci0g
ICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0g
bnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2Ip
OwotICAgICAgICAgICAgICAgIHBhcmFtLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAg
cGFyYW0uc3RhcnRZID0gY3VycmVudFk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9i
IDwgam9ic1dpdGhFeHRyYSA/IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5lbmRZID0gY3VycmVudFk7Ci0gICAgICAgICAgICAgICAgcGFyYW0ucGFpbnRpbmdE
YXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAotICAgIH0KKyAgICBkcmF3aW5nUmVj
dC5pbmZsYXRlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9yYWRpdXNY
LCBtX3JhZGl1c1kgfSkpOwogCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWMocGFpbnRpbmdEYXRh
LCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKLX0KLQotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25z
dCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKLXsKLSAgICBp
ZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGlu
LT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihk
cmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFTW9ycGhvbG9neTo6YXBw
bHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdl
QnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3Vu
ZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGlu
ID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAg
ICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAgIEludFNpemUgcmFkaXVzID0g
Zmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYg
KHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJh
d2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291
cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpbnQg
cmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMu
d2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5o
ZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAocGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVz
WCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxB
cnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlv
blBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2lu
Z1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEu
aGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFk
aXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIHBsYXRmb3JtQXBwbHkocGFpbnRp
bmdEYXRhKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0
ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUp
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9y
cGhvbG9neU9wZXJhdG9yJiBtb3JwaG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBl
KSB7CisgICAgc3dpdGNoIChtb3JwaG9sb2d5T3BlcmF0b3IpIHsKICAgICBjYXNlIEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAg
IGJyZWFrOwpAQCAtMjk3LDE1ICs5NiwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlTW9ycGhvbG9neSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBvcGVyYXRv
cj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwgIlwiICIKICAgICAgICA8PCAicmFkaXVz
PVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsKLQotICAg
IFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVj
dCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJl
dHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2Yx
NGVkZjA3NWRlMzljNWExMS4uMzAwYTVlOTYyM2UwZWY4NGI4ZjQwZDhkYzI2NDU4ODdmZjllN2Rk
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiwxMSArMjMsMTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKK2VudW0gTW9ycGhvbG9neU9w
ZXJhdG9yIHsKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCiAgICAgRkVN
T1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
RElMQVRFID0gMgpAQCAtMzQsMTAgKzM0LDEwIEBAIGVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSB7CiAKIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgc3RhdGlj
IFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9s
b2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICBNb3JwaG9sb2d5T3Bl
cmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3Bl
cmF0b3I7IH0KKyAgICBib29sIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0
b3IpOwogCiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWDsgfQog
ICAgIGJvb2wgc2V0UmFkaXVzWChmbG9hdCk7CkBAIC00Niw0MCArNDYsMTkgQEAgcHVibGljOgog
ICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNb3JwaG9sb2d5
KEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpOworICAgIEZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0
KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9y
bUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3Qg
SW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdE
YXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0g
ICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lk
dGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBp
bnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
IHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0gICAgICAgIGludCBzdGFydFk7Ci0g
ICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0
YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9y
bUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50
aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdE
YXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1fbW9ycGhvbG9neU9wZXJhdG9yOwog
ICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApp
bmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li5kZGE2NjVkNzUy
ZmI1MDBkNmIwODZiNjQ5YTdmODBhNWFjOGIwOWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcxICsyNSw0OCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQg
ZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCitGRU9mZnNldDo6
RkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZF
T2Zmc2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9m
ZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5
KQorUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCi12b2lkIEZFT2Zm
c2V0OjpzZXREeChmbG9hdCBkeCkKK0Zsb2F0UmVjdCBGRU9mZnNldDo6ZHJhd2luZ1JlY3QoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAg
bV9keCA9IGR4OwotfQorICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8g
ZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdSZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6
OnNldER5KGZsb2F0IGR5KQotewotICAgIG1fZHkgPSBkeTsKLX0KKyAgICBkcmF3aW5nUmVjdC5t
b3ZlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9keCwgbV9keSB9KSk7
CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBG
bG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7
Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QubW92
ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAg
aWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZl
Y3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJl
Y3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdp
bmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRU9mZnNldDo6YXBwbHkoRmlsdGVyT3V0
cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91
bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwor
ICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxh
c3QoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGlm
IChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOwor
ICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRy
eSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0
aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8
IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgp
IDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uODFiNGFk
MWFhMDkwYTZmYzVkODRmMDg3ZWY5NTA4YzAzZjkyNjk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMzQgKzIzLDY0IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZp
bHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRl
KEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBmbG9hdCBk
eCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KLSAgICB2b2lkIHNldER4KGZsb2F0KTsKKyAgICB2
b2lkIHNldER4KGZsb2F0IGR4KSB7IG1fZHggPSBkeDsgfQogCiAgICAgZmxvYXQgZHkoKSBjb25z
dCB7IHJldHVybiBtX2R5OyB9Ci0gICAgdm9pZCBzZXREeShmbG9hdCk7CisgICAgdm9pZCBzZXRE
eShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBkZWNvZGUoRGVjb2RlciYpOwog
CiBwcml2YXRlOgotICAgIEZFT2Zmc2V0KEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7Cisg
ICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVPZmZzZXQiOyB9CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIAotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3Qo
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jiwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jiwg
Y29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1f
ZHg7CiAgICAgZmxvYXQgbV9keTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZFT2Zmc2V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBGRU9mZnNldDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHg7CisgICAgZGVjb2Rl
ciA+PiBkeDsKKyAgICBpZiAoIWR4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHk7CisgICAgZGVjb2RlciA+PiBkeTsKKyAgICBpZiAo
IWR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFT2Zmc2V0
OjpjcmVhdGUoKmR4LCAqZHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVPZmZzZXQpCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBl
ZmZlY3QudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNldDsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCmluZGV4IDU5OTcyMzA2ODg2YTYzZmE0MTJiNWI3MTQxZjc0ZjljNDg3YTE0NGMuLjY5OTI0
NDMzZjkzZmU0ZjIxZmViYmFiZjQ4NDQ1ODc2NmVlZTZjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIyLDQ5ICsyMywyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFU3BlY3VsYXJMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVT
cGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNl
KQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwg
a2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNl
KSwgVHlwZTo6U3BlY3VsYXJMaWdodGluZykKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3Bl
Y3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiBzb3VyY2UpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxp
Z2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhw
b25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3Vy
Y2UpKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9u
ZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJl
ZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVj
dWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9h
dCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBz
b3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFy
Q29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0
TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpLCBUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRp
bmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpKSk7CiB9CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6fkZFU3BlY3VsYXJMaWdodGluZygpID0g
ZGVmYXVsdDsKLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3RhbnQo
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKLXsKLSAgICBpZiAobV9zcGVjdWxhckNvbnN0YW50ID09
IHNwZWN1bGFyQ29uc3RhbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1bGFy
Q29uc3RhbnQgPSBzcGVjdWxhckNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxhckV4
cG9uZW50KQotewotICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gc3BlY3VsYXJFeHBvbmVu
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1
bGFyRXhwb25lbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIEZFU3BlY3Vs
YXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVTcGVjdWxh
ckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVNwZWN1bGFy
TGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZh
Y2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8IG1fc3Bl
Y3VsYXJDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWxhckV4cG9uZW50PVwiIiA8
PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4
YmYzYjI0OTU4YS4uY2FlNWI4MmZiZWJjNWFiNjM0MzU2OTA1ZTliZTdlNmYzZjAzMmY3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywyMCArMjgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBj
b25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0
U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1bGFyTGlnaHRpbmcoKTsKKyAgICBzdGF0
aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJik7CiAKLSAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9Ci0gICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50
KGZsb2F0KTsKLQotICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBt
X3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQp
OworcHJpdmF0ZToKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmKTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biAiRkVTcGVjdWxhckxpZ2h0aW5nIjsgfQogCi1wcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdo
dGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXgg
MzVjNTFjYmIyMjlkZWU5NjQyZGMxZTdkY2EwYzVkYjJmY2FjMjBhZC4uOTM2YTk4MTI0NGQ1ODM0
NGNlYjc0MTkxMmNmYjIwNjEyNTdlMTE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdt
YWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw4MCArMjIsNDEgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRVRpbGUuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6VGlsZSkKK1JlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZm
ZWN0KFR5cGU6OkZFVGlsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoZmls
dGVyKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRS
ZWN0IEZFVGlsZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFy
b3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndp
c2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFn
ZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJl
c3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMg
bW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBn
aXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhp
cyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxv
YXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGlu
TWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQg
bWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAo
aW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsK
LSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJl
Y3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRl
ci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5o
ZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGls
ZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFn
ZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRy
YW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnko
KSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdlQ29w
eSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7
Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47CisgICAgLy8gRG9uJ3Qg
dXNlIHRoZSBpbnB1dCdzIGRyYXdpbmdSZWN0IGZvciA8ZmVUaWxlPi4KKyAgICByZXR1cm4gcHJp
bWl0aXZlU3VicmVnaW9uOworfQogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAt
IG1heEVmZmVjdExvY2F0aW9uKTsKK0ZpbHRlclJlc3VsdCogRkVUaWxlOjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBi
b3VuZGFyeVNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAg
YXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJu
OjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRydWUsIHBh
dHRlcm5UcmFuc2Zvcm0gfSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmls
dGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJD
b250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51
bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFVGlsZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
LSAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGUiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICJdXG4iOwot
Ci0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0
RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0K
KyAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGVdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgK
aW5kZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uYzcwZGFjMTdk
OGFkYzVhM2IyODBiZDc5MmY3MjI0YjcwYjc5ZTNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyNyArMjMsMjUgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVy
Jik7CisgICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZF
VGlsZShGaWx0ZXImKTsKKyAgICBGRVRpbGUoKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQogCi0gICAgRmlsdGVyRWZmZWN0
VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZVRpbGU7IH0KKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRl
ck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RS
ZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CmluZGV4IGFjMjM0NmU4YTRiYTU4YWFhOTI0YTZkNjdiZDVlNGI3N2RkMjI2OGYuLjRkOTk3NmNi
YmQ2MDQxMWUzYzM2YTY5NDdjMzk5MWUxOTk3NWFlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAg
LTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5m
LnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYs
MzEgKzI2LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNl
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBp
biB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKLSAgICByID0gKGEgKiBy
KSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5k
TWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFy
ayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAg
VG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgw
NjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwg
c2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1z
dGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAx
Ci1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmlt
aXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0g
LyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVy
YnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3Rh
dmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5j
ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVu
Y2UpCi0gICAgLCBtX3R5cGUodHlwZSkKK0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1
bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVHVyYnVsZW5jZSkKKyAgICAsIG1fdHVyYnVs
ZW5jZVR5cGUodHVyYnVsZW5jZVR5cGUpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVx
dWVuY3lYKQogICAgICwgbV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKICAgICAsIG1f
bnVtT2N0YXZlcyhudW1PY3RhdmVzKQpAQCAtNTksNDA1ICs0Nyw0NyBAQCBGRVR1cmJ1bGVuY2U6
OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZQogewogfQogCi1SZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2Uo
ZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMs
IHNlZWQsIHN0aXRjaFRpbGVzKSk7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1
cmJ1bGVuY2VUeXBlIHR5cGUpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUo
VHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJh
c2VGcmVxdWVuY3lZKQotewotICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lZID09IGJhc2VGcmVxdWVu
Y3lZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VG
cmVxdWVuY3lZOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
dHVyYnVsZW5jZVR5cGUsIHR1cmJ1bGVuY2VUeXBlKSAhPSBtX3R1cmJ1bGVuY2VUeXBlOwogfQog
CiBib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5j
eVgpCiB7Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVggPT0gYmFzZUZyZXF1ZW5jeVgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9iYXNlRnJlcXVl
bmN5WCwgYmFzZUZyZXF1ZW5jeVgpICE9IG1fYmFzZUZyZXF1ZW5jeVg7CiB9CiAKLWJvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCitib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFz
ZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCiB7Ci0gICAgaWYgKG1fc2VlZCA9PSBz
ZWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zZWVkID0gc2VlZDsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lZLCBiYXNl
RnJlcXVlbmN5WSkgIT0gbV9iYXNlRnJlcXVlbmN5WTsKIH0KIAogYm9vbCBGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpCiB7Ci0gICAgaWYgKG1fbnVtT2N0YXZlcyA9
PSBudW1PY3RhdmVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9udW1PY3RhdmVzID0g
bnVtT2N0YXZlczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNl
dFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQotewotICAgIGlmIChtX3N0aXRjaFRpbGVzID09IHN0
aXRjaCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2g7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNv
ZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBz
cGVjaWZpY2F0aW9uOgotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1s
I2ZlVHVyYnVsZW5jZQotCi0vLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5l
IGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyBy
ZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChz
ZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQgKz0g
c19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0ICog
dCAqICgzIC0gMiAqIHQpOwotfQotCi1pbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihm
bG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7
Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEpCi17Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKLQotICAgIC8vIFRoZSBz
ZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgotICAg
IGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9
IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYg
KHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5n
RGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0g
ICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAgICAgIGdyYWRpZW50
ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAgICAgICAgZG8gewot
ICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGlu
Z0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Js
b2NrU2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0
PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1Np
emUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYg
IWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5
cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFswXSAv
PSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFs
aXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBzX2Js
b2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20o
KSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNTRVJU
KGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VT
ZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07Ci0gICAgICAgIHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VT
ZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyAr
K2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtz
X2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBd
OwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXpl
ICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNv
bXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0aXRjaFRpbGVzKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lk
dGgoKTsKLSAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAgQVNT
RVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOwotCi0gICAgLy8gV2hlbiBzdGl0
Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQK
LSAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgotICAg
IGlmIChiYXNlRnJlcXVlbmN5WCkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9v
cmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICBmbG9h
dCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGls
ZVdpZHRoOwotICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUg
YWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8g
bG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAg
ICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKLSAgICB9Ci0gICAgaWYgKGJhc2VG
cmVxdWVuY3lZKSB7Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVp
Z2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgZmxvYXQgaGlnaEZy
ZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0
OwotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVl
bmN5IC8gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0Zy
ZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdo
RnJlcXVlbmN5OwotICAgIH0KLQotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICBzdGl0
Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKLSAgICBz
dGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7Ci0gICAg
c3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsK
LSAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0
OwotCi0gICAgcmV0dXJuIHN0aXRjaERhdGE7Ci19Ci0KLS8vIFRoaXMgaXMgdGFrZW4gMToxIGZy
b20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2VFbGVtZW50LgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6
Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERh
dGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAotewot
ICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKLSAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5
MCBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBp
biB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4g
dGhlIHNwZWMgdGV4dC4KLQotICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOwotICAgICAg
ICAgICAgLy8gIGJ4MCA9IChpbnQpdDsKLSAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKLSAg
ICAgICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0OwotICAgICAgICAgICAgZmxvYXQgcG9zaXRp
b24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgaW5kZXggPSBzdGF0
aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKLSAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsg
MTsKLSAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQot
ICAgICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAg
IGlmIChpbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOwot
Ci0gICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAg
ICAgICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKG5l
eHRJbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rv
ci54KCkpOwotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7Ci0KLSAg
ICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KLSAg
ICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEu
d2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwotICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERh
dGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKLSAgICB9Ci0KLSAgICAvLyBieDAgJj0gQk07
Ci0gICAgLy8gYngxICY9IEJNOwotICAgIC8vIGJ5MCAmPSBCTTsKLSAgICAvLyBieTEgJj0gQk07
Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWC5uZXh0SW5kZXgg
Jj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5v
aXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0KLSAgICAvLyBpID0gdUxhdHRpY2VTZWxl
Y3RvcltieDBdOwotICAgIC8vIGogPSB1TGF0dGljZVNlbGVjdG9yW2J4MV07Ci0gICAgaW50IGxh
dHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsK
LSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
bm9pc2VYLm5leHRJbmRleF07Ci0KLSAgICAvLyBzeCA9IGRvdWJsZShzX2N1cnZlKHJ4MCkpOwot
ICAgIC8vIHN5ID0gZG91YmxlKHNfY3VydmUocnkwKSk7Ci0gICAgZmxvYXQgc3ggPSBzbW9vdGhD
dXJ2ZShub2lzZVguZnJhY3Rpb24pOwotICAgIGZsb2F0IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZ
LmZyYWN0aW9uKTsKLQotICAgIGF1dG8gbm9pc2VGb3JDaGFubmVsID0gWyZdKGludCBjaGFubmVs
KSB7Ci0gICAgICAgIC8vIGIwMCA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MF0KLSAgICAgICAg
aW50IGIwMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9p
c2VZLmluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDBd
OyB1ID0gcngwICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBxID0g
cGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMF07Ci0gICAgICAgIGZsb2F0IHUgPSBu
b2lzZVguZnJhY3Rpb24gKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLQotICAgICAg
ICAvLyBiMTAgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTBdOwotICAgICAgICBpbnQgYjEwID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLmlu
ZGV4XTsKLSAgICAgICAgLy8gcngxID0gcngwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFk
aWVudFtuQ29sb3JDaGFubmVsXVtiMTBdOyB2ID0gcngxICogcVswXSArIHJ5MCAqIHFbMV07Ci0g
ICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjEwXTsKLSAgICAgICAg
ZmxvYXQgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24g
KiBxWzFdOwotICAgICAgICAvLyBhID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGEg
PSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyBiMDEgPSB1TGF0
dGljZVNlbGVjdG9yW2kgKyBieTFdOwotICAgICAgICBpbnQgYjAxID0gcGFpbnRpbmdEYXRhLmxh
dHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAg
Ly8gcnkxID0gcnkwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFu
bmVsXVtiMDFdOyB1ID0gcngwICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAxXTsKLSAgICAgICAgdSA9IG5vaXNlWC5mcmFj
dGlvbiAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotCi0gICAgICAgIC8v
IGIxMSA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MV07Ci0gICAgICAgIGludCBiMTEgPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dElu
ZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTFdOyB2ID0g
cngxICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1bYjExXTsKLSAgICAgICAgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFb
MF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotICAgICAgICAvLyBiID0gbGVycChz
eCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2
KTsKLQotICAgICAgICAvLyByZXR1cm4gbGVycChzeSwgYSwgYik7Ci0gICAgICAgIHJldHVybiBs
aW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAg
ICAgICAgbm9pc2VGb3JDaGFubmVsKDApLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMSksCi0g
ICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgyKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDMpCi0g
ICAgfTsKLX0KLQotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVU
dXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNvbXBv
bmVudHMuCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1aW50
OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3RhdGljIGlubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCi17Ci0gICAg
cmV0dXJuIHsKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZs
b2F0Q29tcG9uZW50c1swXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUp
LAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21w
b25lbnRzWzJdICogMjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90Pihz
dGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1szXSAqIDI1NSksIDAsIDI1NSksCi0gICAg
fTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX251bU9jdGF2ZXMsIG51bU9jdGF2ZXMpICE9
IG1fbnVtT2N0YXZlczsKIH0KIAotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVs
ZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQogewot
ICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0Owot
ICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VG
cmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOwotICAg
IGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251
bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5
cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAr
PSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBu
b2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0
aW87Ci0KLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKLSAg
ICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKLSAgICAgICAgcmF0
aW8gKj0gMjsKLQotICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8g
VXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRo
ZSBtdWx0aXBsaWNhdGlvbiBhbmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQg
c2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0
YS53aWR0aCAqPSAyOwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hE
YXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0
ICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3Jh
cFkgLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVl
IG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAo
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmICht
X3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgdHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7
Ci0KLSAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2VlZCwgc2VlZCkgIT0gbV9z
ZWVkOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERh
dGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Citib29sIEZFVHVyYnVs
ZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICBBU1NFUlQoZW5k
WSA+IHN0YXJ0WSk7Ci0KLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwot
ICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAg
aW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkg
PDwgMik7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5h
YnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7
Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIHBv
aW50LnNldFkocG9pbnQueSgpICsgMSk7Ci0gICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9u
LngoKSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7
ICsreCkgewotICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9p
bnQpOwotICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVG
b3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4
T2ZQaXhlbENoYW5uZWwpOwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0Owot
ICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3RpdGNoVGlsZXMs
IHN0aXRjaFRpbGVzKSAhPSBtX3N0aXRjaFRpbGVzOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK0Zsb2F0
UmVjdCBGRVR1cmJ1bGVuY2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0CiB7Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5maWxsUmVnaW9uKCpwYXJhbWV0
ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5z
dGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5k
YXJ5U2V0KSBjb25zdAogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50U2l6ZSByZXN1bHRT
aXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VG
cmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmco
dGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0KLSAgICBQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFy
ZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwot
Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7Ci0gICAgdW5zaWduZWQg
b3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1i
ZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJz
PiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwg
b3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFy
cmF5Ci0gICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsK
LSAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9i
IGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50
byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCi0gICAgICAgICAgICB1bnNpZ25lZCBz
dGVwWSA9IGhlaWdodCAvIG51bUpvYnM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4
dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsK
LSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJy
YXk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7Ci0KLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBqb2JIZWlnaHQgPSAoaSA8IGpvYnNXaXRoRXh0cmEpID8gc3RlcFkgKyAxIDogc3RlcFk7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBwYXJhbXMuc3RhcnRZICsgam9iSGVpZ2h0
OwotICAgICAgICAgICAgICAgIHN0YXJ0WSArPSBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMo
KS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIC8vIEZhbGxi
YWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3
IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwuCi0gICAgZmlsbFJlZ2lvbihk
ZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0
KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgfSwgbnVsbHB0ciwgZ2VvbWV0
cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00NzYsMTEgKzEwNiwxMCBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5
cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRz
IDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCisgICAgdHMgPDwgIiB0eXBlPVwiIiA8
PCB0dXJidWxlbmNlVHlwZSgpIDw8ICJcIiAiCiAgICAgICAgPDwgImJhc2VGcmVxdWVuY3k9XCIi
IDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVlbmN5WSgpIDw8ICJcIiAi
CiAgICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgogICAgICAgIDw8ICJudW1P
Y3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRk
NTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjAwMzU1MzRhYTEzZTM0MWQ5
NjBkMDU3ZGU4NjJjMTlkYzBlMjI0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0LDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI0LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zOCwxMCArMzYsMTAgQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAKIGNsYXNz
IEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0
LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+
IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VG
cmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7
CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0g
ICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKKyAgICBUdXJidWxlbmNlVHlwZSB0dXJi
dWxlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHVyYnVsZW5jZVR5cGU7IH0KKyAgICBib29s
IHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKIAogICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lYKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRnJlcXVlbmN5WDsgfQogICAgIGJvb2wgc2V0
QmFzZUZyZXF1ZW5jeVgoZmxvYXQpOwpAQCAtNTksNzAgKzU3LDE5IEBAIHB1YmxpYzoKICAgICBi
b29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBp
bnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9
IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERp
bWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxs
ZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0Rh
dGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVk
KHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0g
ICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAg
LCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0K
LSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Js
b2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUg
KyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5s
aW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAg
ICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07
IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAg
aW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBo
ZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0g
ICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBm
aWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQ
YWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
OwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAg
c3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwotCi0g
ICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGlu
dCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludChQ
YWludGluZ0RhdGEmKTsKLSAgICBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0
aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNv
bnN0OwotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAg
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQ
b2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFp
bnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAg
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVy
UmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
IG92ZXJyaWRlOworCisgICAgVHVyYnVsZW5jZVR5cGUgbV90dXJidWxlbmNlVHlwZTsKICAgICBm
bG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVk7CiAgICAg
aW50IG1fbnVtT2N0YXZlczsKQEAgLTEzMSw0ICs3OCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTljOTE3ZTRmYzAxY2M5YTZl
YmM4NDNkMmI1YzYzNmZmNDM0MmZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zp
bHRlcjo6RmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgVHlwZSB0eXBlKQorICAg
IDogRmlsdGVyRnVuY3Rpb24odHlwZSkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdN
b2RlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4g
RmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0
b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91dHB1dChtX3JlbmRlcmluZ01vZGUpOworCisg
ICAgYXV0byByZXN1bHQgPSBhcHBseShvdXRwdXQsIHN0YWNrLCBzb3VyY2VJbWFnZSwgKmdlb21l
dHJ5KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEFTU0VS
VChzdGFjay5pc0VtcHR5KCkpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4geyByZXN1bHQtPmltYWdl
QnVmZmVyKCksIGdlb21ldHJ5LT5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC0+
ZHJhd2luZ1JlY3QoKSkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJk
OTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uMDFhZDdkMTM2NTVmOGI2NWIw
YWM3YjViYWFhYTI0NGFkMzgzMTE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDU5ICsyMSwyNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVy
RnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3MgRmls
dGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxl
ID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQot
ICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVh
bCB+RmlsdGVyKCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8
SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291
cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9z
b3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJl
c29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVz
b2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KLQotICAgIGZsb2F0IGZpbHRlclNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUo
ZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9Ci0KLSAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0
ZVRyYW5zZm9ybTsgfQotCiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdN
b2RlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24o
RmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclJlc29sdXRpb247
IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgPSAwOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dHVwbGU8UmVmUHRyPEltYWdlQnVmZmVyPiwgRmxvYXRS
ZWN0PiBhcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0
ZXJHZW9tZXRyeT4mJikgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVz
b2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsKLSAgICB9CisgICAgRmlsdGVyKFJlbmRl
cmluZ01vZGUsIFR5cGUpOwogCi1wcml2YXRlOgotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9z
b3VyY2VJbWFnZTsKLSAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwotICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAgIGZsb2F0IG1f
ZmlsdGVyU2NhbGUgeyAxIH07CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjg2NzAxMWM0OTQ5OTI1YjdhZWY4M2Q2NmJlMDA3MDcxNTliNzNhNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlckJvdW5kYXJ5U2V0IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEZsYWdz
IHsKKyAgICAgICAgSGFzWCAgICAgID0gMSA8PCAwLAorICAgICAgICBIYXNZICAgICAgPSAxIDw8
IDEsCisgICAgICAgIEhhc1dpZHRoICA9IDEgPDwgMiwKKyAgICAgICAgSGFzSGVpZ2h0ID0gMSA8
PCAzCisgICAgfTsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KCkgPSBkZWZhdWx0OworCisgICAg
RmlsdGVyQm91bmRhcnlTZXQoY29uc3QgRmxvYXRSZWN0JiBib3VuZGFyaWVzLCBPcHRpb25TZXQ8
RmxhZ3M+IGZsYWdzKQorICAgICAgICA6IG1fYm91bmRhcmllcyhib3VuZGFyaWVzKQorICAgICAg
ICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IHgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6
Okhhc1gpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy54KCk7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geSgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWSkp
CisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLnkoKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB3aWR0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzV2lkdGgp
KQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy53aWR0aCgpOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGhlaWdo
dCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFz
SGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMuaGVpZ2h0KCk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UmVj
dCBtX2JvdW5kYXJpZXM7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOworfTsKKyAgICAK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRm
YzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li42ZjQ3NDVjZWQ5MzM5NjM3ZDA1ODVlODlj
YjQ2Y2YwZjE0N2UzNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDg4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFZlY3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5l
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlmCi0KLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRl
ciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIpCi0gICAgLCBtX2Zp
bHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQotCi1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJF
ZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRl
UGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFi
c29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQ
YWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6cHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAg
ICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxlIENT
UyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQ
YWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJl
Y3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQ
b2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBjb25z
dAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFjZVBv
aW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJl
Z2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3QubG9j
YXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVy
RWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYg
ZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQ
YWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9j
YXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFTU0VSVCho
YXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7CisgICAgRmxvYXRS
ZWN0IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb247CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJhbnNsYXRlKC1tX2Fic29sdXRl
UGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFuc2Zvcm0ubWFwUmVjdChzcmNS
ZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVyYnVsZW5jZSwgRkVGbG9vZCBk
b24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRlciByZWdpb24gYXMgdW5pdGUg
cmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlmICh1bnNpZ25lZCBudW1iZXJP
ZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkgewotICAgICAgICBzdWJyZWdp
b24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsg
KytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZlU3VicmVnaW9uID0gaW5wdXRF
ZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICAg
ICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVnaW9uKTsKLSAgICAgICAgfQor
ICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24gZm9yIDxmZVRpbGU+LgorICAg
IGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgICAg
IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXQtPnByaW1pdGl2ZVN1YnJlZ2lv
bigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVn
aW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVn
aW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZp
bHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJS
ZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRh
cmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJp
ZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFy
aWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0
aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3Vi
cmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsKKyAgICAgICAgZGVmYXVsdFBy
aW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRlclJlZ2lvbigpOwogCi0gICAgc2V0Rmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7CisgICAgRmxvYXRSZWN0IHByaW1pdGl2
ZVN1YnJlZ2lvbjsKIAotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29s
dXRpb24gPSBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdp
b24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlw
cGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNw
YWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJl
Z2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFgoYm91
bmRhcnlTZXQueCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ueCgpKSk7Cisg
ICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFkoYm91bmRhcnlTZXQueSgpLnZhbHVlX29yKGRlZmF1
bHRQcmltaXRpdmVTdWJyZWdpb24ueSgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFdp
ZHRoKGJvdW5kYXJ5U2V0LndpZHRoKCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lv
bi53aWR0aCgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyeVNl
dC5oZWlnaHQoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLmhlaWdodCgpKSk7
CiAKLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24u
Ci0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJl
Z2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29s
dXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0ZVNjYWxlZEZp
bHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsK
LSAgICByZXR1cm4gc3VicmVnaW9uOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5pbnRlcnNlY3Qo
Z2VvbWV0cnkuZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247
CiB9CiAKLUZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBu
dW1iZXIpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihudW1iZXIgPCBtX2lucHV0RWZmZWN0cy5zaXpl
KCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwotfQotCi1z
dGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KmVmZmVjdCwg
SGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKLXsKLSAgICBhbGxFZmZl
Y3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPm51bWJlck9mRWZm
ZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKLSAgICAg
ICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0KLSAgICByZXR1cm4gYWxs
RWZmZWN0cy5zaXplKCk7Ci19CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0OworICAgIGZvciAo
YXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0LT5k
cmF3aW5nUmVjdCgpKTsKIAotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZm
ZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFs
bEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVmZmVjdHMpOwor
ICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oZHJhd2luZ1JlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCitG
aWx0ZXJSZXN1bHQqIEZpbHRlckVmZmVjdDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmIChoYXNSZXN1bHQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXpl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGlu
LT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8gdGhlIGN1cnJlbnQg
ZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
aW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
c2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBlZmZlY3RCb3VuZGFy
aWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJy
ZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQ
YWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAi
IDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKSk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkg
fHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVk
ZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1
bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KLSAgICBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKTsKKyAgICByZXR1cm4gYXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UsIGdlb21l
dHJ5LCBGaWx0ZXJCb3VuZGFyeVNldCgpKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNl
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK0ZpbHRlclJlc3VsdCogRmlsdGVyRWZmZWN0Ojph
cHBseVBsYXRmb3JtKEZpbHRlck91dHB1dCYgb3V0cHV0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QK
IHsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIg
Zm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5
ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhl
bERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGlt
YWdlQXJyYXkubGVuZ3RoKCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSB0aGlzLT5w
cmltaXRpdmVTdWJyZWdpb24oaW5wdXRzLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOworICAgIGF1
dG8gZHJhd2luZ1JlY3QgPSB0aGlzLT5kcmF3aW5nUmVjdChpbnB1dHMsIGdlb21ldHJ5LCBwcmlt
aXRpdmVTdWJyZWdpb24pOworICAgIGF1dG8gYWJzb2x1dGVEcmF3aW5nUmVjdCA9IGdlb21ldHJ5
LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoZHJhd2luZ1JlY3QpOworICAgIGF1dG8gcmVz
dWx0Q29sb3JTcGFjZSA9IHRoaXMtPnJlc3VsdENvbG9yU3BhY2UoaW5wdXRzKTsKIAotICAgIC8v
IFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwot
ICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAg
dWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgz
Zik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5
IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChw
aXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChz
aXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAg
c2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4
dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2
bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAg
ICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAg
IHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVs
KTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4
ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0ZXJhdGUg
b3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBv
bmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKLSAgICAg
ICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWludDhfdCBh
ID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8g
YWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0g
ICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVsRGF0YTsK
LSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAgICsrcGl4
ZWxEYXRhOwotICAgIH0KLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKLXsK
LSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gc3RkOjpudWxsb3B0OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVj
dXJzaXZlKCkKLXsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRo
ZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4g
ZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0g
ICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVj
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsK
LX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQotewot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4
aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigq
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZl
Y3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIHNjYWxl
ZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3Jk
T3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBp
eGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFy
cmF5OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVj
dC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNj
YWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+
KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkp
CisgICAgYXV0byByZXN1bHQgPSBvdXRwdXQuY3JlYXRlRmlsdGVyUmVzdWx0KHByaW1pdGl2ZVN1
YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGFic29sdXRlRHJhd2luZ1JlY3Quc2l6ZSgpLCByZXN1bHRD
b2xvclNwYWNlKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2Up
OwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJl
Y3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVu
dCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAo
c2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1h
eFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgp
LCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhl
IHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVk
UmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3Qu
eCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxl
ZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4g
PSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwg
MCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKLSAg
ICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVz
dCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47
Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3Qu
bWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAg
ICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVu
ZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJl
Y3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlv
bi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0g
ICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2lu
ICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OwogCi0gICAgd2hpbGUg
KHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3Vy
Y2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25T
Y2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAg
ICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0Fs
cGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAg
IHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwot
ICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0g
cm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2Uu
ZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5w
dXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0g
ICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAg
Y29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25z
dCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQp
LnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlv
bi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAg
IGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBo
YSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAg
ICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9
IDQ7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmls
dGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHlQbGF0
Zm9ybSgpOiIKKyAgICAgICAgPDwgIlxuICBwcmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRp
dmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBkcmF3aW5nUmVjdCAiIDw8IGRyYXdpbmdSZWN0
CisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVEcmF3aW5nUmVjdCAiIDw8IGFic29sdXRlRHJhd2lu
Z1JlY3QKKyAgICAgICAgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IGdlb21ldHJ5LnJl
c29sdXRpb24oKSk7CisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAob3V0cHV0LnJlbmRl
cmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgeworICAgICAgICBpZiAo
YXBwbHlDb3JlSW1hZ2UoKnJlc3VsdCwgaW5wdXRzLCBzb3VyY2VJbWFnZSkpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAjZW5kaWYKLX0KIAotc3RhdGljIHZv
aWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0
U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1
dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0
ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAg
ICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkp
OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50
ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25l
bnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGlu
YXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNv
bXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107
Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihz
b3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1
NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBv
bmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNl
bmRpZgotfQorICAgIGlmIChhcHBseVNvZnR3YXJlKCpyZXN1bHQsIGlucHV0cywgc291cmNlSW1h
Z2UsIGdlb21ldHJ5KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiAKLXN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwg
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFn
ZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNz
YXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5z
Y2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwot
ICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZl
cgotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9m
aWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdD
b2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhl
bEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVy
VG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwg
cGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQpOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFn
ZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENv
bG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVjdCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKK1RleHRTdHJlYW0mIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24u
Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNv
cnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNv
bnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNv
bnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENv
bG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9t
IG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0g
ICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFu
ZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJl
c3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRG
b3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5h
dGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBp
eGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xv
clNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUg
ZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVz
dGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZl
cnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29u
dmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVm
ZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2Ug
YnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAg
aWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkg
ewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24o
ZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1h
dCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAg
ICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5z
Y2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09
IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIg
IiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2Ug
YnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0g
ICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVm
ZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1h
Z2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAg
ICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9
OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6
ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0
KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAg
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3Jt
YXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFj
ZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi1JbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9H
KEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4
JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRo
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkg
b25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0g
ICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVk
U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQot
Ci1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMg
JXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwot
Ci0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhh
c1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0g
ICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0
Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZl
cjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRl
cnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Iiwg
ZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFs
bG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIElu
dFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3Vs
dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsK
LSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVy
RWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNp
ZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVl
ZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ug
b25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBk
aWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1
bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYmIHJl
c3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAgICAv
LyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24t
Q0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0
bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNl
KTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
PT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTog
V2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29u
dmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBm
b3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQo
KS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBt
X3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2VuZGlmCi19Ci0KLVRleHRTdHJlYW0mIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhlIGZpbHRlciBwcmltaXRpdmVzIGhlcmUg
bGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3NzaWJsZSBhdCB0aGUgbW9tZW50LCBiZWNhdXNl
IHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgdGFyZ2V0IG9iamVj
dC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlw
ZTo6RGVidWdnaW5nKSB7CisgICAgaWYgKHJlcHJlc2VudGF0aW9uID09IEZpbHRlclJlcHJlc2Vu
dGF0aW9uOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIGltYWdlIiwgbV9h
bHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFj
ZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVz
dWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICB0cyA8PCAiXG4i
IDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAg
ICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3Ig
bG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRl
ci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXBy
ZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRl
clN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2UyY2YwNWI1Mjc3M2YyYjk2YjQ3MWMuLmRlOGEx
MzM3MDE0OGM4OTQ0YWUyYzA0ZTVhYTU2ZGQ1OWM2NzRlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
MjIsMjM3ICsyMiw0OSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVj
dEV4dGVudC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19CisjaW5j
bHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNs
YXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4g
RmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRl
ckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0
ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07Citj
bGFzcyBGaWx0ZXJCb3VuZGFyeVNldDsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OwogCi1jbGFzcyBG
aWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZp
bHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAgICAgICBDb2xvck1hdHJp
eCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAg
ICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlz
cGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAgICBGbG9vZCwKLSAgICAg
ICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAg
ICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBPZmZzZXQsCi0gICAgICAg
IFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0g
ICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2
aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2
b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB1bm11bHRpcGxpZWRS
ZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0
aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVubXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQg
Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3Rk
OjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0
dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNp
Z25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7
IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJl
ck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7Ci0gICAgCi0gICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0g
c3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBG
aWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Ci0gICAgICAg
ICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIAot
ICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KLSAgICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAvLyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRp
ZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhh
SW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQotCi0gICAgSW50UmVjdCBhYnNv
bHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWludFJlY3Q7IH0KLSAg
ICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRS
ZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVjdDsgfQotCi0gICAg
RmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7
IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RS
ZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0gCi0KLSAgICB2b2lkIGFw
cGx5KCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFueSBpbnZhbGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5
LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJhdGlvbi4KLSAgICAvLyBUaGlzIG1ldGhv
ZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBh
bmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0
ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNvcnJlY3Rpb24uCi0gICAgdmlydHVhbCB2
b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLSAgICB2aXJ0dWFsIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVV
bmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0
dXJuIEludE91dHNldHMoKTsgfQotCi0gICAgZW51bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUg
eyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKLSAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRwdXQpIGNvbnN0OwotCi0gICAgLy8gVGhl
IGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgotICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NjE0LgotICAgIGJvb2wgaGFzWCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQgc2V0SGFzWChib29sIHZhbHVlKSB7IG1f
aGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1koKSBjb25zdCB7IHJldHVybiBtX2hhc1k7
IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0g
ICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzV2lkdGg7IH0KLSAgICB2b2lk
IHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNXaWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBi
b29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBz
ZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hlaWdodCA9IHZhbHVlOyB9Ci0KLSAgICBG
bG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZp
cnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAotICAgIEZsb2F0UmVj
dCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9
Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91
bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9CisgICAg
dmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJikgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNw
YWNlOyB9CiAgICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25z
dCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAg
ICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9p
bnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQotICAgIEZpbHRlciYgZmlsdGVy
KCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7
IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9v
bCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQotCiAgICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0
aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3Bh
Y2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JT
cGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmls
dGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7Ci0gICAgCi0gICAgc3RhdGljIFZl
Y3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMp
Ci0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNp
emUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1
ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKLSAgICB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwgVHlwZSk7Ci0gICAgCi0gICAgdmlydHVh
bCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgPSAwOwotCi0gICAgSW1hZ2VCdWZmZXIq
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogCi0gICAgLy8g
UmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24g
dmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAgICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNo
IGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBz
dGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJv
dW5kYXJ5U2V0JikgY29uc3QgPSAwOwogCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFn
ZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2Fy
eS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgY2xpcEFic29sdXRl
UGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6Rmls
dGVyRnVuY3Rpb247CiAKLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5h
dGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlDb252
ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1
ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJU
b0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4ZWxCdWZmZXImKTsK
LSAgICAKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5k
YXJ5U2V0JikgY29uc3Q7CiAKLSAgICBGaWx0ZXImIG1fZmlsdGVyOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciBtX2lucHV0RWZmZWN0czsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAKLSAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBGaWx0ZXJSZXN1
bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsK
IAotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAvLyBUaGUgbWF4
aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1p
dGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZl
Y3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhl
IHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmls
dGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBT
Vkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOworICAg
IEZpbHRlclJlc3VsdCogYXBwbHlQbGF0Zm9ybShGaWx0ZXJPdXRwdXQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Q7CiAKLSAgICAvLyB4
LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVl
ZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9mIHRoZQotICAgIC8vIGZpbHRlciBwcmlt
aXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7
CisgICAgdmlydHVhbCBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCA9IDA7CiAgICAgCi0gICAgLy8gZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIG1hcHBlZCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcyBiZWZvcmUgY2xpcHBpbmcu
Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb247Ci0KLSAgICBib29s
IG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9OwotCi0gICAgLy8gU2hvdWxkIHRoZSBlZmZl
Y3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29t
YmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0gICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0
cnVlIH07Ci0KLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
Ci0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIH07Ci0jZWxzZQotICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSB9OworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1YWwgYm9vbCBhcHBseUNv
cmVJbWFnZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1
ZmZlciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKLSAgICBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkgfTsKICAgICAKLSAgICBjb25zdCBUeXBlIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOworICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6RmlsdGVyRWZmZWN0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA+
PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVtICYmIGZ1bmN0aW9uLnR5
cGUoKSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2Zj
MzFlNWI5ZTlhOWVjNjA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0q
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0q
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVy
Ojp0cnlDcmVhdGUoYm9vbCBhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQsIEZpbHRl
ckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoYWNj
ZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKQotICAgICAgICByZXR1cm4gRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShsYXN0RWZmZWN0KTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGxhc3RFZmZlY3QpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LQotfSAvLyBuYW1zcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3
NWE3NTczZTljYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJFZmZlY3RSZW5kZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbWFnZUJ1ZmZlciog
b3V0cHV0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0
IEZpbHRlckVmZmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQo
KSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1
bHQ7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1
bHQ7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0Jikg
PSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9y
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzVmNGM4MzJjZTNhZTE2ZDllYTkyMDljZjg3MmVkYjc4YzBjYjc5Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJFZmZl
Y3Q7CisKK3VzaW5nIEZpbHRlckVmZmVjdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iN2Q1NTc2NWEzOTZkOTlhYjAyMTBiM2IxODBiYThmOWUyMGNhMmQwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5j
dGlvbi5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50
YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0
ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdURiB7Citj
bGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRl
ckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0OworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIENTU0ZpbHRlciwKKyAgICAgICAgU1ZHRmls
dGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKworICAgICAgICBGRUJsZW5kID0gRkVNaW5pbXVt
LAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAgICAgICBGRUNvbXBvbmVudFRyYW5zZmVyLAor
ICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAgRkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAg
RkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZFRGlzcGxhY2VtZW50TWFwLAorICAgICAgICBG
RURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2QsCisgICAgICAgIEZFR2F1c3NpYW5CbHVyLAor
ICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1lcmdlLAorICAgICAgICBGRU1vcnBob2xvZ3ks
CisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBGRVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAg
IEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNlLAorICAgICAgICBTb3VyY2VBbHBoYSwKKyAg
ICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAgICBGRU1heGltdW0gPSBTb3VyY2VHcmFwaGlj
CisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9uKFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5
cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9
IGRlZmF1bHQ7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisK
KyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpUZXN0T3V0cHV0KSBjb25zdCA9IDA7CisgICAg
Citwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJn
ZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1YzY2MGVhNzk5ODNhMDdh
MTcyYzBiMjdkYTE4YjJkY2M0YTA4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCisjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRy
eShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QpCisgICAgICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICAg
ICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB+RmlsdGVyR2VvbWV0cnkoKSA9IGRlZmF1bHQ7CisKKyAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7
IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgcmVzb2x1dGlvbigpIGNv
bnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgRmlsdGVyQm91bmRhcnlTZXQgYm91bmRh
cnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCkgY29uc3QgeyByZXR1cm4geyB9OyB9
CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNv
bnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0IHsgcmV0dXJuIGRyYXdpbmdSZWN0OyB9
CisgICAgdmlydHVhbCBGbG9hdFNpemUgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25z
dCBGbG9hdFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQor
CisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoY29uc3Qg
RmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxvYXRSZWN0JiByZXN1bHRSZWN0KSBjb25z
dAorICAgIHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAg
aW1hZ2VSZWN0Lm1vdmVCeSgtcmVzdWx0UmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1hZ2VSZWN0KTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyhjb25zdCBGbG9hdFNp
emUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorICAgIAorICAg
IHZpcnR1YWwgRmxvYXRTaXplIHJlc29sdmVUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxv
YXRTaXplJiBkcmF3aW5nU2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x2ZWRE
cmF3aW5nUmVjdCA9IHJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKGRyYXdpbmdTaXplKTsKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzb2x2ZWREcmF3aW5n
UmVjdCk7CisgICAgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2xpcFRvUHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBjbGlwcGVkRHJhd2lu
Z1JlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAgY2xpcHBlZERyYXdpbmdSZWN0LmludGVyc2Vj
dChwcmltaXRpdmVTdWJyZWdpb24pOworICAgICAgICByZXR1cm4gY2xpcHBlZERyYXdpbmdSZWN0
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAg
ICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRlYzgwYzI2Yzk3NWUyYTdhZmU2YzQ2
NTk5ZGE4NTA2N2JjN2NkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcApAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdl
b21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKQorICAgIDogbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK1JlZlB0
cjxGaWx0ZXJSZXN1bHQ+IEZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0
LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEZpbHRlclJlc3VsdDo6Y3JlYXRlKHByaW1p
dGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGxvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUs
IDEsIGNvbG9yU3BhY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YWEwZGYzMzI0M2ExNzA0NDAzN2EyNmNlMTk2YzQ5YjQwNjk5OTc2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPdXRwdXQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVy
aW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CitjbGFzcyBGaWx0ZXJSZXN1bHQ7CitjbGFzcyBG
aWx0ZXJGdW5jdGlvbjsKKworY2xhc3MgRmlsdGVyT3V0cHV0IHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBSZXN1bHRzID0gSGFzaE1hcDxSZWY8Y29uc3QgRmlsdGVyRnVuY3Rpb24+LCBSZWY8RmlsdGVy
UmVzdWx0Pj47CisKKyAgICBGaWx0ZXJPdXRwdXQoUmVuZGVyaW5nTW9kZSk7CisKKyAgICBSZXN1
bHRzJiByZXN1bHRzKCkgeyByZXR1cm4gbV9yZXN1bHRzOyB9CisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisKKyAgICBS
ZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGVGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCitw
cml2YXRlOgorICAgIFJlc3VsdHMgbV9yZXN1bHRzOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXBy
ZXNlbnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYmZmN2Q4MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTli
MjAxMWNlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgRmlsdGVyUmVwcmVzZW50YXRpb24g
OiB1aW50OF90IHsKKyAgICBUZXN0T3V0cHV0LAorICAgIERlYnVnZ2luZworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0YTI1NGRhMDhm
M2VjMTIxZTQ4MjhjZGE3Yjg1NmZiMDU5YThmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAs
MCArMSwzOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisK
KyNpZiBVU0UoQ09SRV9JTUFHRSkKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIK
KyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9u
ZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJh
dGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRy
PEZpbHRlclJlc3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7
CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5pc0VtcHR5KCkgfHwgZHJhd2luZ1JlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisjaWYgVVNFKENPUkVfSU1BR0Up
CisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3VsdENvcmVJbWFnZShwcmltaXRp
dmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWx0ZXJSZXN1bHRTb2Z0d2FyZShwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0
LCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
KSk7Cit9CisKK0ZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQor
ICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICwgbV9k
cmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1fbG9naWNhbFNpemUobG9naWNhbFNpemUp
CisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
eworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qg
cm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNy
Yy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwor
ICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMg
PSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0
aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0g
c291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKwor
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9Cisj
ZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBz
aXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVm
ZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwor
ICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisK
KyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93
Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdl
dCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0
YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFs
cGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhh
OworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4mIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBG
aWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3Jt
YXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhh
Rm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZm
ZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIg
PSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNp
emUobV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgp
OworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7Cisg
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwor
ICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYg
KCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAocGl4ZWxC
dWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQor
ICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXIt
PmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgY29weVVucHJl
bXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNp
emUpOworCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQorCitSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEZpbHRlclJlc3VsdDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBzY2Fs
ZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gVWludDhD
bGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weVBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAg
IHJldHVybiBwaXhlbEJ1ZmZlcjsKK30KKworYm9vbCBGaWx0ZXJSZXN1bHQ6OnJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBm
dW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBj
b2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNv
bnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Cisg
ICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICBy
ZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQor
ICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9u
IG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVj
dCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRT
aXplIHNjYWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBzY2FsZWRQYWludFNpemUu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGlu
YXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRo
ZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8
IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2Fs
ZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0
KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8g
RWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3Vy
Y2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkg
PD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2Fs
ZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsK
KyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAg
ICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7
CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9
IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0
LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAg
ICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50
IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKwor
ICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9u
U2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGlu
ZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgo
KSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNl
LmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4p
ICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVz
dGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBp
eGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJj
ZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNv
bnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRT
aXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUg
Y29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2Ug
Y29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNv
bnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8v
IENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBm
cm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVy
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBj
b2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHJlY3QpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0
ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
ciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBp
eGVsQnVmZmVyLnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUp
OworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShy
ZWN0LnNpemUoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5j
b21pbmcgUGl4ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0
aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWlt
YWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZm
ZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29u
dmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JT
cGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVy
SWZFeGlzdHMoYWxwaGFGb3JtYXQpID8gJnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQp
LnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4
aXN0cygpKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9OworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNv
bnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVy
LCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwg
c3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1h
dCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNl
KSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRl
ZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAg
ICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJ
bWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKK30K
Kwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQor
eworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBm
b3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBs
aWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5
JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1
aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91
ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhl
bEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAg
IGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhl
bCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgICAgICBkbyB7
CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAg
IHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAg
ICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxb
MF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFs
WzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNd
KTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBp
eGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4
KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7
CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4
ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0g
cGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwg
Y2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2Fy
eQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRo
ZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsg
Myk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVt
ZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQorICAgICAgICAgICAgICAgICpw
aXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9
CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMg
Y29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29s
b3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlh
bGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8g
Y29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQg
YXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkK
KyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9jb2xvclNwYWNlLCBj
b2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnBy
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGRkNmM5NDQwNmRhOWFhMjZjMzIx
MjMxNTZhNDViOWU5MjBmMDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJS
ZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJSZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0
KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgRmxvYXRSZWN0IGRyYXdpbmdS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nUmVjdDsgfQorCisgICAgRmxvYXRTaXplIGxv
Z2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQor
ICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhh
SW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorCisgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1YWwg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Cisg
ICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxv
cHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOwor
ICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisK
K3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4p
IGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxC
dWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBGbG9hdFJl
Y3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgRmxvYXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisK
KyAgICBGbG9hdFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVy
aW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9
OworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKK307CisKK3VzaW5nIEZpbHRlclJlc3VsdFZlY3RvciA9IFZlY3RvcjxSZWY8
RmlsdGVyUmVzdWx0Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3Vs
dFZlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MzE1MWI5ODI0ZjYyMjlmZGI0OWZiMDU2NzJmODNjNzZm
NWNhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdFZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyUmVzdWx0OworCit1c2luZyBGaWx0ZXJSZXN1bHRWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRl
clJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi40YmM2
YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIwYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
IGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKQogewotICAg
IG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFj
ZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwotICAgIC8vIFRvIHNjYWxlIFos
IG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGly
ZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7Ci0gICAgbV9i
dWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwor
Ly8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBz
Y2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRo
ZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZm
ZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54
KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7
CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0
aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBQb2ludExp
Z2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAK
aW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNhMy4uNGM4ZDUyOGEy
NGMyNDk1YmU4MWEyZTY0Mjc0ZjQzMDRiM2FkMzFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDYwICsyMSw0NCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAKLSNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VB
bHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKK1Jl
ZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhh
OjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSgpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6U291cmNlQWxwaGEpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUFscGhhIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7
CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK2Nv
bnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKIHsKLSAgICBpbnB1dEVm
ZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUo
IlNvdXJjZUFscGhhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHJl
dHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIFNvdXJjZUFscGhhOjphcHBseShGaWx0ZXJPdXRwdXQm
IG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFy
eVNldCkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2su
dGFrZUxhc3QoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0
KDApLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBmaWx0ZXJD
b250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrKTsKLSAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEludFBvaW50KCksIENvbXBvc2l0ZU9w
ZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotVGV4dFN0cmVh
bSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJlYW0mIFNvdXJjZUFscGhhOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VBbHBoYV1cbiI7CiAgICAgcmV0dXJu
IHRzOwogfQogCi1Tb3VyY2VBbHBoYTo6U291cmNlQWxwaGEoRmlsdGVyRWZmZWN0JiBzb3VyY2VF
ZmZlY3QpCi0gICAgOiBGaWx0ZXJFZmZlY3Qoc291cmNlRWZmZWN0LmZpbHRlcigpLCBUeXBlOjpT
b3VyY2VBbHBoYSkKLXsKLSAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKHNvdXJjZUVmZmVjdC5v
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNl
RWZmZWN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCmluZGV4IDY2
MjlhMzY3ZmQ0MzI0MmQxYzRhYWRlNjRjNTYxZTg2NGEzOTQ5MGYuLjM4OWVjYjNiZmNkNjQ0NWY1
NmU2N2IyNThiYzY0ZTViMWZiMjUxMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE3LDggKzE4LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlQWxwaGFfaAotI2RlZmluZSBTb3VyY2VB
bHBoYV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCkBAIC0y
NiwyMSArMjYsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VBbHBoYSA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAgICAgICAgCi0gICAgc3RhdGljIFJlZjxT
b3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlckVmZmVjdCYpOworICAgIHN0YXRpYyBSZWY8U291cmNl
QWxwaGE+IGNyZWF0ZSgpOwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5h
bWUoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3Qm
KTsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KKyAgICBTb3VyY2VBbHBo
YSgpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJTb3VyY2VBbHBoYSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwot
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3Vs
dCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJv
dW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmls
dGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZUFscGhhX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMxMTA3ZDc4MzkyZTkuLjhiZGZj
YjgxZGI5Y2EzOTFhZGY3MTVmZGE3MGUyOTUyYTg0ODVlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTggKzIxLDIxIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
RmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNv
dXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBT
b3VyY2VHcmFwaGljOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJj
ZUdyYXBoaWMoKSk7Cit9CisKK1NvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMoKQorICAgIDog
RmlsdGVyRWZmZWN0KFR5cGU6OlNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU291cmNlR3JhcGhpYyhmaWx0ZXIpKTsKIH0KIAogY29uc3QgQXRvbVN0cmluZyYgU291
cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCkBAIC00MCwyNyArNDQsMjAgQEAgY29uc3QgQXRvbVN0
cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFt
ZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
CitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJl
Y3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVy
UmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBnZW9tZXRyeS5zb3VyY2VJbWFnZVJl
Y3QoKTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQor
RmlsdGVyUmVzdWx0KiBTb3VyY2VHcmFwaGljOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwg
RmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlIHx8ICFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJldHVybiBhcHBseVBsYXRmb3Jt
KG91dHB1dCwgeyB9LCBzb3VyY2VJbWFnZSwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAot
VGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlR3Jh
cGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11c
biI7CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThh
Mzc3NjMyMTMyOGVmMjEwNmI3ZmNhNWJmLi5mYWZjNmZlZjk3ZWYzOTgyMDFhMjdkNDk1NTc1NTc1
ZjRhNzhiY2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNv
bT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4LDQxICsxOSwzNCBAQAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291
cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJj
ZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0
YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8
U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0
ZXIpCi0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykK
LSAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOwotICAgIH0KKyAgICBTb3VyY2VHcmFwaGljKCk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9
CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRmls
dGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
RmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0OyB9Ci19OworICAgIEZpbHRlclJlc3VsdCogYXBw
bHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5
U2V0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wg
YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRl
ckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkg
PT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBhcHBs
eUNvcmVJbWFnZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKK307CiAKLSNlbmRpZiAv
LyBTb3VyY2VHcmFwaGljX2gKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmNwcAppbmRleCA3MTYwN2FiMDBmZjlkNmE2ZDAxNjkxZDliYmI4NTUzZDFmMzQ4ZDAwLi5k
MWJlYzEyMDIwNmE1MzZlMTBiMTBiZjJjMTEzMGY0ZjM0MmJiYTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuY3BwCkBAIC00MSwzNiArNDEsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gYWNj
b3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKIHN0YXRpYyBj
b25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKIAotdm9pZCBTcG90TGlnaHRT
b3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3Qs
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQ
YWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikKIHsKLSAgICBt
X2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VU
b0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKLSAgICAvLyBUbyBzY2FsZSBaLCBt
YXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVj
dGlvbiBieSB6LgotICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2lu
dEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2Vy
U3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOwotICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKLSAg
ICAKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2ludHNB
dCAtIG1fdXNlclNwYWNlUG9zaXRpb247Ci0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ci5ub3JtYWxpemUoKTsKLQotICAgIGlmICghbV9saW1pdGluZ0NvbmVBbmdsZSkgewotICAgICAg
ICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOwotICAg
ICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQotICAgICAgICAgICAgbGltaXRpbmdD
b25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgICAgIGlmIChsaW1pdGluZ0NvbmVB
bmdsZSA+IDkwLjBmKQotICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSA5MC4wZjsKLSAg
ICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAuMGYg
LSBsaW1pdGluZ0NvbmVBbmdsZSkpOwotICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdo
dCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKLSAg
ICB9Ci0KLSAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZh
bHVlcwotICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQotICAgICAgICBwYWludGluZ0RhdGEu
c3BlY3VsYXJFeHBvbmVudCA9IDA7Ci0gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09
IDEuMGYpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKLSAgICBl
bHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgotICAgICAgICBwYWludGluZ0RhdGEu
c3BlY3VsYXJFeHBvbmVudCA9IDI7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRl
ckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9u
Lnh5KCkpKTsKKy8vICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1f
dXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCisvLyAgICBGbG9hdFBv
aW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
eyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKy8vICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBw
ZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKKy8vCisvLyAgICBwYWludGluZ0RhdGEu
ZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRp
b247CisvLyAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOworLy8K
Ky8vICAgIGlmICghbV9saW1pdGluZ0NvbmVBbmdsZSkgeworLy8gICAgICAgIHBhaW50aW5nRGF0
YS5jb25lQ3V0T2ZmTGltaXQgPSAwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBm
bG9hdCBsaW1pdGluZ0NvbmVBbmdsZSA9IG1fbGltaXRpbmdDb25lQW5nbGU7CisvLyAgICAgICAg
aWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKKy8vICAgICAgICAgICAgbGltaXRpbmdDb25l
QW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7CisvLyAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFu
Z2xlID4gOTAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Cisv
LyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAu
MGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xk
OworLy8gICAgfQorLy8KKy8vICAgIC8vIE9wdGltaXphdGlvbiBmb3IgY29tbW9uIHNwZWN1bGFy
RXhwb25lbnQgdmFsdWVzCisvLyAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKKy8vICAgICAg
ICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7CisvLyAgICBlbHNlIGlmIChtX3Nw
ZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCA9IDE7CisvLyAgICBlbHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgor
Ly8gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMjsKIH0KIAogTGlnaHRT
b3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIFNwb3RMaWdodFNvdXJjZTo6Y29tcHV0ZVBpeGVs
TGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50
IHksIGZsb2F0IHopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzMxNTdhMGVkOTk4ZWMzNDBmMjMxMzkzM2Q4YmY2MzAxZTUwZWY5Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVCbGVuZC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUhBVkUo
QVJNX05FT05fSU5UUklOU0lDUykKK2Jvb2wgRkVCbGVuZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMu
c2l6ZSgpID09IDIpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8m
IGluMiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFn
ZUJ1ZmZlcigpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAg
aWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisvLyAgICBHcmFwaGlj
c0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworLy8gICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKy8vICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzczMmUzMGFiZWQ0M2IwMzYyZjQwNjY2ZTlkZDhlODkzZDhiM2FhZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKwor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBn
ID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhhOworCisg
ICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJd
ICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0g
dmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVz
WyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICog
ciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZh
bHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2
XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1
NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxv
YXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAg
ZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7
CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSAr
IGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcg
KiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBj
b21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKK30K
KworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24g
aW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBm
bG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAw
LjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0g
MDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFU
RSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBs
eUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkK
K3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAq
IDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0
eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9y
TWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBu
b24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZh
bHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9
IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndp
ZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAg
c3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0
LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6
ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsK
KyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGludDE2X3Qg
bWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3Ip
KSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICog
ZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29y
KSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNd
ICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9OworICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1h
dHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9u
ZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICAw
LAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sy
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdC
ODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdklt
YWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZp
c29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29y
KSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSks
CisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4
ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlw
ZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQg
Y29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9
PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAg
ICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lm
IFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5
cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAg
IHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisK
KyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxC
eXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwor
ICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0o
cGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQg
KyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQg
KyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5
dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAg
ICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Cisg
ICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShw
aXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJl
ZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQo
cGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVu
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxv
YXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAg
ICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwor
ICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworVmVjdG9yPGZsb2F0PiBGRUNvbG9yTWF0cml4Ojpub3Jt
YWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKK3sKKyAgICBWZWN0b3I8
ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNb
aV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKKyAgICByZXR1cm4gbm9ybWFsaXplZFZh
bHVlczsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
cHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1
bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlQnVmZmVy
ID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgYXV0
byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVz
KGluLmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAgICAgcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3Qp
OworICAgIH0KKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHQuY29s
b3JTcGFjZSgpIH07CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+
Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOworICAgIGlmICghcGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVm
ZmVyLT5zaXplKCk7CisKKyAgICBhdXRvIHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9VTktOT1dOOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVg6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFy
cmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToK
KyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIHJlc3Vs
dC5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBv
bmVudFRyYW5zZmVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY3NDMxNTQxMWQyZWJkOGY3Mjc3ODllNTI0YzAyYjRmZTAwYjQyYmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RkVDb21wb25lbnRUcmFuc2Zlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVD
b21wb25lbnRUcmFuc2Zlcjo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzI4OGZiNmQxZmMxNjRkZDZjMjA0ODA0MzU5MzcxNjhhODQ3MzQ3ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b21wb3NpdGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUo
aW50IGMpCit7CisgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKKyAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjKTsKKyAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+
MHUgPj4gMSkpXTsKK30KKwordGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgorc3RhdGljIGlubGlu
ZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5z
aWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRLMTsKKyAg
ICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0gazEgLyAy
NTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOworCisg
ICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGNo
YXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9u
OworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAgICAgaWYg
KGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAgICAgICAg
aWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OworCisgICAgICAgICpkZXN0
aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOworICAgICAgICArK3NvdXJjZTsKKyAgICAgICAg
KytkZXN0aW5hdGlvbjsKKyAgICB9Cit9CisKKy8vIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9y
IHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZworLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhp
cyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12
ZWN0b3JpemF0aW9uLgordGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgorc3RhdGljIGlubGluZSB2
b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJj
ZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRL
MTsKKyAgICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0g
azEgLyAyNTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBm
OworCisgICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3Rp
bmF0aW9uOworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAg
ICAgaWYgKGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAg
ICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OworCisgICAgICAg
ICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVz
dGluYXRpb247CisgICAgfQorfQorCisjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKK3N0
YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNl
LCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQoreworICAgIGZsb2F0IHVwcGVyTGlt
aXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgw
LjBmLCBrMykgKyBrNDsKKyAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEp
ICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMpICsgazQ7CisgICAgaWYg
KChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBw
ZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0g
MS4wZikpIHsKKyAgICAgICAgaWYgKGs0KSB7CisgICAgICAgICAgICBpZiAoazEpCisgICAgICAg
ICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
PDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAg
ICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3Rp
bmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwg
MD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQp
OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoazQpIHsKKyAg
ICAgICAgaWYgKGsxKQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4o
c291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihz
b3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEs
IGsyLCBrMywgazQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7CisgICAgfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0
Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQoreworICAgIGludCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7CisgICAg
QVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7
CisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5h
bWljYWxseS4KKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgQVNTRVJUKCEobGVu
Z3RoICYgMHgzKSk7CisgICAgcGxhdGZvcm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBk
ZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOworI2Vsc2UKKyAgICBh
cml0aG1ldGljU29mdHdhcmUoc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbmRpZgorfQorCitib29sIEZFQ29tcG9zaXRlOjphcHBs
eUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0
c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbjIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3Jk
aW5hdGVzKGluLmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICBhdXRv
IHNvdXJjZVBpeGVsQXJyYXkgPSBpbi5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBlbmNsb3NpbmdJbnRSZWN0KGVmZmVjdEFEcmF3aW5nUmVjdCks
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGVmZmVjdEJEcmF3aW5nUmVjdCA9IGdlb21l
dHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4yLmRyYXdpbmdSZWN0KCks
IHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICBpbjIuY29weVBpeGVsQnVmZmVyKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5j
bG9zaW5nSW50UmVjdChlZmZlY3RCRHJhd2luZ1JlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OworCisgICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJl
KEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1
dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1
dG8mIGluMiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5p
bWFnZUJ1ZmZlcigpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAg
IGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGlu
YXRlcyhpbi5kcmF3aW5nUmVjdCgpLCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgYXV0byBp
bWFnZVJlY3QyID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhp
bjIuZHJhd2luZ1JlY3QoKSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgIAorICAgIHN3aXRj
aCAobV9jb21wb3NpdGVPcGVyYXRvcikgeworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
VU5LTk9XTjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW1hZ2VSZWN0Mik7CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogeworICAgICAg
ICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAgICAgYXV0
byBkcmF3aW5nUmVjdCA9IGluLmRyYXdpbmdSZWN0KCk7CisgICAgICAgIGF1dG8gZHJhd2luZ1Jl
Y3QyID0gaW4yLmRyYXdpbmdSZWN0KCk7CisgICAgICAgIGF1dG8gcmVzdWx0UmVjdCA9IHJlc3Vs
dC5kcmF3aW5nUmVjdCgpOworCisgICAgICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gZHJhd2lu
Z1JlY3Q7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoZHJhd2luZ1JlY3QyKTsK
KyAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChyZXN1bHRSZWN0KTsKKyAgICAgICAg
aWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBhdXRvIGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAg
ICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdC5tb3ZlQnkoLXJlc3VsdFJlY3QubG9jYXRpb24o
KSk7CisgICAgICAgIGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZ2VvbWV0cnkuY29udmVydFRv
QWJzb2x1dGVDb29yZGluYXRlcyhhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCk7CisKKyAgICAgICAg
YXV0byBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2VSZWN0Lm1v
dmVCeSgtZHJhd2luZ1JlY3QubG9jYXRpb24oKSk7CisgICAgICAgIHNvdXJjZVJlY3QgPSBnZW9t
ZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworCisgICAgICAg
IGF1dG8gc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7CisgICAgICAgIHNvdXJjZTJSZWN0
Lm1vdmVCeSgtZHJhd2luZ1JlY3QyLmxvY2F0aW9uKCkpOworICAgICAgICBzb3VyY2UyUmVjdCA9
IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoc291cmNlMlJlY3QpOworCisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGFkanVz
dGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2UyUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QsIHNv
dXJjZVJlY3QsIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW1hZ2VS
ZWN0MiwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkpLCBD
b21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCwgSW50UmVjdChJ
bnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VBdG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9YT1I6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0xJR0hURVI6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRl
cik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEZFQ29tcG9zaXRlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0g
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIGFwcGx5QXJp
dGhtZXRpY1NvZnR3YXJlKHJlc3VsdCwgaW5wdXRzLCBnZW9tZXRyeSk7CisgICAgcmV0dXJuIGFw
cGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKHJlc3VsdCwgaW5wdXRzLCBnZW9tZXRyeSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmFlODcxYTkyOGRmYmY0ODRm
NDc1N2EwMDczNTBhYTFmMjQ1N2ZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9OyAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI5NjdkMTgwOWNkMGQ4OWZiMzllZGRmNzM4NTJiOWNk
MjUwZWQ1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitib29sIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdAoreworLy8gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OworLy8gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKy8vCisvLyAgICBB
U1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CisvLyAgICBBU1NF
UlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CisvLworLy8gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworLy8gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorLy8gICAgICAgIHJldHVy
bjsKKy8vCisvLyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7CisvLworLy8gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOworLy8gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZm
ZWN0QURyYXdpbmdSZWN0KTsKKy8vCisvLyAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOworLy8gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZy
b20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3Ig
dmFsdWVzLgorLy8gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisvLyAgICAKKy8vICAgIGlmICghaW5wdXRJbWFn
ZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCisvLyAgICAgICAgcmV0dXJuOworLy8KKy8vICAgIEFT
U0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkp
OworLy8KKy8vICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisvLyAgICBJbnRT
aXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworLy8gICAgcGFpbnRT
aXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKy8vCisvLyAgICBGbG9hdFNpemUgc2Nh
bGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9
KTsKKy8vICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOwor
Ly8gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOworLy8g
ICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CisvLyAg
ICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7CisvLyAg
ICAKKy8vICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWCA9IHhDaGFubmVsSW5kZXgoKTsKKy8v
ICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKy8vCisvLyAg
ICBpbnQgcm93Qnl0ZXMgPSBwYWludFNpemUud2lkdGgoKSAqIDQ7CisvLworLy8gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBwYWludFNpemUuaGVpZ2h0KCk7ICsreSkgeworLy8gICAgICAgIGludCBs
aW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7CisvLworLy8gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkgeworLy8gICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OworLy8gICAgICAgICAgICAK
Ky8vICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNv
bG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFj
ZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKy8vICAgICAgICAgICAgaW50IHNyY1kg
PSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdl
LT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRP
ZmZzZXRZKTsKKy8vCisvLyAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5hdGlvblBpeGVsUHRy
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRh
KCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKKy8vICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNy
Y1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUu
aGVpZ2h0KCkpIHsKKy8vICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsK
Ky8vICAgICAgICAgICAgICAgIGNvbnRpbnVlOworLy8gICAgICAgICAgICB9CisvLworLy8gICAg
ICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93
Qnl0ZXMpKTsKKy8vICAgICAgICB9CisvLyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNo
YWRvd1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2FmZjBkZmUxNDMzNjhhY2Y4NzIyMzNhOGIx
YTRlYmU3MTZlMzJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGRURyb3BTaGFkb3cuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJT
aGFkb3dCbHVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRURyb3BTaGFkb3c6
OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRy
eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBp
biA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFNpemUgYmx1clJh
ZGl1cyA9IDIgKiBnZW9tZXRyeS5yZXNvbHZlVG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHsgbV9zdGRY
LCBtX3N0ZFkgfSk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IGdlb21ldHJ5LnJlc29sdmVUb0Fi
c29sdXRlQ29vcmRpbmF0ZXMoeyBtX2R4LCBtX2R5IH0pOworCisgICAgYXV0byBpbWFnZVJlY3Qg
PSBpbi5kcmF3aW5nUmVjdCgpOworICAgIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fi
c29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW1hZ2VSZWN0LCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7
CisKKyAgICBhdXRvIGltYWdlUmVjdFdpdGhPZmZzZXQgPSBpbWFnZVJlY3Q7CisgICAgaW1hZ2VS
ZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHJlc3Vs
dENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIHJlc3VsdENvbnRleHQuc2V0
QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKKyAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdFdpdGhPZmZzZXQpOworICAgIHJlc3VsdENvbnRleHQu
c2V0QWxwaGEoMSk7CisKKyAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywg
b2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgcmVzdWx0LmNvbG9yU3BhY2UoKSB9OworICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9
IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgc291
cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5i
bHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUo
KSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CisKKyAgICByZXN1bHRJbWFnZS0+
cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKKworICAgIHJlc3VsdENv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7
CisgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZXN1
bHQubG9naWNhbFNpemUoKSksIG1fc2hhZG93Q29sb3IpOworICAgIHJlc3VsdENvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwor
CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMDYwZDQ0Y2NmYzFhMzZmYzk2NTcyYmIyYzIzYjg5ZDQzZTU0ZmYyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgRkVGbG9vZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gY29sb3IgPSBtX2Zsb29kQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9m
bG9vZE9wYWNpdHkpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJz
b2x1dGVDb29yZGluYXRlcyhyZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZVJlY3Quc2l6
ZSgpKSwgY29sb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zNGZmYzBlNWY5MDM5NjViOTIyNzk5N2RjZmIwN2YzY2ZkOGUwNWYzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5
U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VC
dWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTJmYTU2NDNmZWZhOTQzY2UzZmI5YTBh
MDE1MWQ4MDlkMDI0NzBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVMaWdodGluZy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgRkVMaWdodGluZzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBj
b25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODBiZGY3ZDI4NjU3OTM0ZDAzMzE0M2QzNGJkZDA5MGRmODEyNzFlOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVNZXJnZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVNZXJnZS5oIgorCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBw
bHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBj
b25zdAoreworICAgIEFTU0VSVCghaW5wdXRzLmlzRW1wdHkoKSk7CisKKyAgICBhdXRvIHJlc3Vs
dEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1
dHMpIHsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGlucHV0LT5pbWFnZUJ1ZmZlcigpOwor
ICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRD
b29yZGluYXRlcyhpbnB1dC0+ZHJhd2luZ1JlY3QoKSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdl
UmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzRkNzkyMjY2ZmM1NzFkYmZhMWFkYTRiZmJjMjgwZjBiNmM4ZmQ5MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIw
MTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRkVNb3JwaG9sb2d5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRU1vcnBo
b2xvZ3k6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRT
b2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlNjFkMDliMDNhYzRmMGVl
ZGQ1NTEyNjQ2ZjVjOGYzODNjNjRkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZzZXQ6OmFwcGx5U29m
dHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5w
dXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQuc2V0SXNBbHBoYUltYWdlKGlu
LmlzQWxwaGFJbWFnZSgpKTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW4uZHJhd2luZ1JlY3Qo
KTsKKyAgICBpbWFnZVJlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRl
cyh7IG1fZHgsIG1fZHkgfSkpOworICAgIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fi
c29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW1hZ2VSZWN0LCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7
CisKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWVhM2NmNzY0NzFiYmFjMTk5ODk0ZTcyNWRhYzk3YzNjMDllZTI4OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVU
aWxlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZFVGlsZS5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHRhcmdl
dFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRv
IGxvZ2ljYWxSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0YXJnZXRSZWN0KTsKKwor
ICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUobG9naWNhbFJlY3Quc2l6ZSgpLCBzY2FsZSk7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5n
TW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdl
QnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUoLWxvZ2ljYWxS
ZWN0LmxvY2F0aW9uKCkpLm11bHRpcGx5KGFic29sdXRlVHJhbnNmb3JtKTsKKworICAgIEdyYXBo
aWNzQ29udGV4dCYgaW1hZ2VDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBp
bWFnZUNvbnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisKKyAgICByZXR1cm4gaW1hZ2VCdWZm
ZXI7Cit9CisKK2Jvb2wgRkVUaWxlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0
LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBh
dXRvIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW4u
ZHJhd2luZ1JlY3QoKSk7CisgICAgYXV0byByZXN1bHRJbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252
ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAgIGF1
dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGlu
YXRlcyhpbi5wcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgYXV0byByZXN1bHRQcmltaXRpdmVT
dWJyZWdpb24gPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5w
cmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgCisgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1v
cmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2
ZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMg
aXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFBvaW50IGluTWF4
RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgbWF4
RWZmZWN0TG9jYXRpb24gPSByZXN1bHRQcmltaXRpdmVTdWJyZWdpb24ubG9jYXRpb24oKTsKKy8v
ICAgIGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlu
cHV0KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAg
ICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVj
dC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJS
ZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorCisgICAgYXV0byB0aWxlSW1hZ2VCdWZm
ZXIgPSBjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgZ2VvbWV0cnkuYWJzb2x1dGVUcmFuc2Zv
cm0oKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOworICAgIGlmICghdGlsZUltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC1pbk1h
eEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9jYXRpb24ueSgpKTsKKyAgICB0aWxl
SW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2Nh
dGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBpZiAoIXRpbGVJbWFnZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRy
YW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0
aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6
Y3JlYXRlKHRpbGVJbWFnZS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5U
cmFuc2Zvcm0gfSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RG
TW92ZShwYXR0ZXJuKSk7CisgICAgCisgICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCByZXN1bHRJbWFnZVJlY3Quc2l6ZSgpKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0
d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZThkNDA5ZDZjMWFiOGQz
ZGI0YWZkMmM2YjkyODM1OTUwMWEwNWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
QXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBj
b25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNlMWNjZTI4YjNkYTYyNjYyMGUzNDIzNGM5NDY1ODIyNmU0NjY2YjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVyUmVzdWx0U29mdHdh
cmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlciogRmlsdGVyUmVzdWx0
U29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgp
OworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9naWNhbFNpemUp
IH07CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIo
KnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCksIHJlY3QpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2Fy
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
aWx0ZXJSZXN1bHRTb2Z0d2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzOGM0NTY4ZjUxYzM2MmI5ZmNhOTZi
NGFmYjQzNWI0MzNlOTkxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmgKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZp
bHRlclJlc3VsdFNvZnR3YXJlIDogcHVibGljIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQ7CisgICAgCitwcml2YXRlOgorICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBvdmVycmlkZSB7IHJldHVy
biBtX2ltYWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJp
ZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0U29mdHdhcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlclJlc3VsdCYgcmVzdWx0KSB7IHJldHVybiByZXN1bHQucmVuZGVyaW5nTW9k
ZSgpID09IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhh
U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYjVkNzMwMDVjNzg5NzYwYWQxYWU0MGFkOGM3MWQx
ZGNhNzIyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
cHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVz
dWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0
ZUNvb3JkaW5hdGVzKGluLmRyYXdpbmdSZWN0KCkpOworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRl
eHQoKS5maWxsUmVjdChGbG9hdFJlY3QgeyB7IH0sIGltYWdlUmVjdC5zaXplKCkgfSwgQ29sb3I6
OmJsYWNrKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIEludFBvaW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1Nv
dXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGUwMjhjNTI2ZWRhOWE4Y2YxY2UwNmU5OTBmMmM3M2QwZjlkZmM2ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291
cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKKwor
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGY0NGFlMTI5ZDA3MzhkMzBjNzZlNzEwODViMmFlYzA1
YTdiNmYxZGEuLmFmZGUwMjQxNTI5N2UzNmJiZTEyZWI5ZWNmZThmZjU5YTFiNzFhNDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDEyICsyOCwzMTQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hl
ZFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIK
LSNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4Lmgi
CiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRv
dy5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCi0jaW5jbHVkZSAiRkVNZXJnZS5oIgot
I2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisj
aW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiUmVmZXJlbmNlZFNWR1Jlc291
cmNlcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgi
Ci0jaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNs
dWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8ZDJkMS5oPgot
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPENTU0ZpbHRlcj4gQ1NTRmlsdGVy
OjpjcmVhdGUoKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NG
aWx0ZXIpOworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYobmV3IENTU0ZpbHRlcihvcGVyYXRp
b25zLCByZW5kZXJpbmdNb2RlKSk7CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRGdW5jdGlvbnMo
cmVuZGVyZXIsIG9wZXJhdGlvbnMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBmaWx0ZXI7CiB9CiAKLUNTU0ZpbHRlcjo6Q1NTRmlsdGVyKCkKLSAgICA6IEZpbHRlcihG
bG9hdFNpemUgeyAxLCAxIH0pCi0gICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6
Y3JlYXRlKCp0aGlzKSkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFZlY3Rv
cjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1bmN0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTRmlsdGVyKFdURk1vdmUoZnVu
Y3Rpb25zKSwgcmVuZGVyaW5nTW9kZSkpOwogfQogCi1DU1NGaWx0ZXI6On5DU1NGaWx0ZXIoKSA9
IGRlZmF1bHQ7CitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVu
ZGVyaW5nTW9kZSwgVHlwZTo6Q1NTRmlsdGVyKQoreworICAgIG1faGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKKyAgICBtX2hh
c0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9u
cy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworfQog
Ci1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK0NTU0ZpbHRlcjo6
Q1NTRmlsdGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1bmN0aW9ucywgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6
OkNTU0ZpbHRlcikKKyAgICAsIG1fZnVuY3Rpb25zKFdURk1vdmUoZnVuY3Rpb25zKSkKIHsKLSAg
ICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxs
cHRyOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNl
RmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZm
ZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoRmlsdGVyJiBmaWx0ZXIsIFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QgJnByZXZpb3VzRWZmZWN0LCBjb25zdCBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKIHsKLSAgICBhdXRvKiBmaWx0
ZXJFbGVtZW50ID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpLnJlZmVy
ZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgaWYgKCFmaWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZp
bHRlcjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNv
dXJjZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKLSAgICAgICAgLy8gQWx0aG91
Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQgbWlnaHQgZXhpc3Qg
bGF0ZXIgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBhbm9u
eW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTA4NT4KLSAgICAg
ICAgLy8gRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5nLgotICAgICAgICBpZiAo
YXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShmaWx0
ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgKmVsZW1lbnQpOworICAgIGF1dG8mIHJlZmVyZW5jZWRT
VkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7Cisg
ICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNl
ZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKwor
ICAgIGlmICghZmlsdGVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQor
ICAgIAorICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgJnByZXZpb3VzRWZmZWN0KTsKK30KIAotICAgIGF1dG8gYnVpbGRl
ciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oJnByZXZpb3VzRWZmZWN0KTsKLSAgICBt
X3NvdXJjZUFscGhhID0gYnVpbGRlci0+Z2V0RWZmZWN0QnlJZChTb3VyY2VBbHBoYTo6ZWZmZWN0
TmFtZSgpKTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVHcmF5U2NhbGVFZmZl
Y3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVy
YXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczov
L2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5
c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisK
KyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVy
biBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVj
dDsKLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IHJlZmVyZW5jZUVmZmVjdHM7CitzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91
YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1v
dW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZY
VEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAv
LyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAu
NjA3ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
NzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAw
LjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAor
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsg
MC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAg
ICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAg
ICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgZm9yIChhdXRv
JiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzPigqZmlsdGVyRWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0
RWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0
KSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NG
aWx0ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWls
ZCBlZmZlY3QgZnJvbSAiIDw8IGVmZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIH0KK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1
cmF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1h
dHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Cisg
ICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICAgICAgZWZmZWN0RWxlbWVu
dC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVj
dEVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFD
RV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVy
cG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAg
ICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAg
ICAgIHJlZmVyZW5jZUVmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBt
X2VmZmVjdHMuYXBwZW5kVmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJl
dHVybiBlZmZlY3Q7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSHVlUm90YXRl
RWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4
T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICBy
ZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLWJvb2wgQ1NTRmlsdGVyOjpidWlsZChS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9u
cywgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAg
ICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3Bl
cmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigp
OworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0
cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwor
ICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0g
MiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKwor
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgIG1fZWZmZWN0
cy5jbGVhcigpOwotICAgIG1fb3V0c2V0cyA9IHsgfTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBjcmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3Vu
dCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShu
dWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9u
KTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZl
Y3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFu
c2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0
ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlv
bi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uKQor
eworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIC8qY29uc3VtZXIgPT0gRmlsdGVyQ29uc3Vt
ZXI6OkZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6Ki8gRURHRU1PREVfRFVQTElDQVRF
KTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZl
Y3QoY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikK
K3sKKyAgICBmbG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOwor
ICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGQsIHN0ZCwgZHJvcFNoYWRvd09wZXJh
dGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNv
bG9yKCksIDEpOworfQorCitib29sIENTU0ZpbHRlcjo6YnVpbGRGdW5jdGlvbnMoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7Cisg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCk7
CisgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKIAotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOwogICAgIGZv
ciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKLSAgICAgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRp
b24gPSAqb3BlcmF0aW9uOwotICAgICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkp
IHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewotICAgICAgICAg
ICAgYXV0byYgcmVmZXJlbmNlT3BlcmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gYnVpbGRSZWZl
cmVuY2VGaWx0ZXIocmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCwgcmVmZXJlbmNlT3BlcmF0aW9u
KTsKKyAgICAgICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGVmZmVjdCk7CisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRl
ciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywgcmVuZGVyZXIsICplZmZlY3QsIGRvd25jYXN0PFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOworICAgICAgICAgICAgZWZmZWN0
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNs
YW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAg
ICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlw
L2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBm
b3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8v
ZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlh
RXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMu
Ci0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAu
NzY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9u
ZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3Qg
PSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNFUElBOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNB
VFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0
ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
eyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9
OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1
dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRy
YW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0g
ICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
aW50ZXJjZXB0ID0gYW1vdW50OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFw
cGxlLWNvbG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBl
ID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFt
b3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsK
LSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3Jl
YXRlT3BhY2l0eUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0
byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmln
aHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAg
ICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9w
ZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAu
NSAqIGFtb3VudCArIDAuNTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBv
bmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29u
dHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVy
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1
c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25z
dW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDog
RURHRU1PREVfRFVQTElDQVRFKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAg
ICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJv
cFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRy
b3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRv
d09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0
KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAg
Ly8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlv
bnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNo
b3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAg
IGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6Rmls
dGVyRnVuY3Rpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAg
ICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7CiAgICAgICAgICAgICBlZmZlY3QtPnNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0gICAgICAgICAgICAgICAg
bV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBy
ZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICAgICAgbV9mdW5jdGlvbnMu
YXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVjdHMs
IHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2VmZmVjdHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2VmZmVjdHMuc2hyaW5rVG9G
aXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgc2V0TWF4RWZmZWN0UmVjdHMobV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsK
LSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAg
IG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRl
cmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCks
IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVjdCkKLXsKLSAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGZpbHRlclJlY3QgPT0gc291cmNlSW1hZ2VSZWN0KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNldFNvdXJjZUltYWdlUmVjdChmaWx0ZXJSZWN0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQotewotICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwgYW5kIHRo
ZQotICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBhdHRhY2gg
dGhlIGdyYXBoaWMKLSAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUgc28uCi0K
LSAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKSB9Owot
ICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9
IGxvZ2ljYWxTaXplKSB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRTb3VyY2VJbWFn
ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJn
ZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0
Q29udGV4dCk7Ci0gICAgICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAg
c2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmls
dGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpC
R1JBOCkpOwotI2VuZGlmCisgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7
CiAgICAgfQotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7Ci19CiAKLXZvaWQg
Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIGF1
dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3Qu
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJl
Z2lvbiA9IGxhc3RFZmZlY3QubWF4RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0IG9uZSBG
aWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUgZWZm
ZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxlOwot
ICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwg
c2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBs
YXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLX0K
LQotdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCi17Ci0gICAgbV9z
b3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAg
ICAgICBtX3NvdXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0
IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19Ci0KLXZvaWQg
Q1NTRmlsdGVyOjphcHBseSgpCi17Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3Qo
KS5nZXQoKTsKLSAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikgewotICAgICAgICBtX2ZpbHRlclJl
bmRlcmVyLT5hcHBseUVmZmVjdHMoZWZmZWN0KTsKLSAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVy
ZXItPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWZmZWN0LmFwcGx5KCk7Ci0gICAgZWZmZWN0LnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCi1MYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJj
ZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgLy8gVGhlIHJlc3VsdCBvZiB0aGlz
IGZ1bmN0aW9uIGlzIHRoZSBhcmVhIGluIHRoZSAiZmlsdGVyQm94UmVjdCIgdGhhdCBuZWVkcyB0
byBiZSByZXBhaW50ZWQsIHNvIHRoYXQgd2UgZnVsbHkgY292ZXIgdGhlICJkaXJ0eVJlY3QiLgot
ICAgIGF1dG8gcmVjdEZvclJlcGFpbnQgPSBkaXJ0eVJlY3Q7Ci0gICAgaWYgKGhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscygpKQotICAgICAgICByZWN0Rm9yUmVwYWludCArPSBvdXRzZXRzKCk7Ci0g
ICAgcmVjdEZvclJlcGFpbnQuaW50ZXJzZWN0KGZpbHRlckJveFJlY3QpOwotICAgIHJldHVybiBy
ZWN0Rm9yUmVwYWludDsKLX0KIAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29u
c3QKK0ludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBpZiAobV9m
aWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkKLSAgICAgICAg
cmV0dXJuIG1fZmlsdGVyUmVuZGVyZXItPm91dHB1dCgpOworICAgIGlmICghbV9oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMgfHwgIW1fb3V0c2V0cy5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIG1f
b3V0c2V0czsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKLXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24g
PSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0
KTsKLSAgICBzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNz
QnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVj
dFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVj
dFJlY3QpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAg
bV9vdXRzZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7CisgICAgCisgICAgcmV0dXJuIG1fb3V0
c2V0czsKIH0KIAotSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKSBjb25zdAorRmlsdGVy
UmVzdWx0KiBDU1NGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZl
Y3RzLmxhc3QoKS5nZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8
fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0g
ICAgICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihJbnRSZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6
IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZnVuY3Rpb24tPmFwcGx5KG91
dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlLCBnZW9tZXRyeSk7CisgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBzdGFjay5h
cHBlbmQoeyAqcmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygpLmFkZChmdW5jdGlv
biwgUmVmPEZpbHRlclJlc3VsdD4oKnJlc3VsdCkpOworICAgIH0KICAgICAKLSAgICByZXR1cm4g
eyB9OworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gMSk7CisgICAgYXV0byByZXN1bHQgPSBz
dGFjay50YWtlTGFzdCgpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJlc3VsdC5sZWFrUmVmKCk7
CiB9CiAKLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKK1RleHRTdHJlYW0m
IENTU0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmICghbV9v
dXRzZXRzLmlzWmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwotCi0gICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91
dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24g
OiBtX2Z1bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4
MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5lMjM5NmIzYWM0OTcyMDQ0YzQxZWVjNzdi
ZmIyZTUxNWRlNTZhNjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsODYgKzI2LDQ1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVk
ZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5k
ZXJlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1j
bGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xh
c3MgU291cmNlQWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1lbnVtIGNsYXNzIEZpbHRl
ckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07CiAKIGNsYXNzIENT
U0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFn
ZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247
IH0KIAotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wgYnVpbGQo
UmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7
Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShSZW5kZXJFbGVt
ZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPENT
U0ZpbHRlcj4gY3JlYXRlKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdN
b2RlKTsKIAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9p
ZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoKSBjb25zdDsKKyAgICBjb25zdCBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mIGZ1
bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9CisgICAgSW50T3V0c2V0cyBv
dXRzZXRzKCkgY29uc3QgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAg
dmlydHVhbCB+Q1NTRmlsdGVyKCk7Ci0KLSAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlRHJhd2luZ1JlZ2lvbjsgfQotCi0gICAgRmxvYXRS
ZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9
Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
UmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZm
ZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mKTsKKyAgICBDU1NGaWx0ZXIoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUpOworICAgIENTU0ZpbHRlcihWZWN0b3I8UmVm
PEZpbHRlckZ1bmN0aW9uPj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKLSAgICB2b2lkIHNldE1heEVm
ZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIGJvb2wgYnVpbGRGdW5jdGlvbnMoUmVu
ZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmluYWw7CiAKLSAgICBib29sIHVwZGF0ZUJh
Y2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKLSAgICB2b2lkIGFs
bG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAg
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29u
c3Q7Ci0KLSAgICBMYXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlS
ZWN0KTsKLQotICAgIEZsb2F0UmVjdCBtX3NvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRS
ZWN0IG1fZmlsdGVyUmVnaW9uOwotCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2Vm
ZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhhOwotCi0gICAgbXV0YWJsZSBJbnRPdXRzZXRz
IG1fb3V0c2V0czsKLQotICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2Ug
fTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBm
YWxzZSB9OwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4g
bV9maWx0ZXJSZW5kZXJlcjsKKworICAgIFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1
bmN0aW9uczsKKyAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkNTU0ZpbHRlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVy
JiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc0NTU0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIu
dHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7IH0KIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKaW5kZXggMWJmMjJlNDJjMzUxODYxODc5ZWY1YWYwY2YxZWMwYjQ3MTQ5YjVlYS4uMDBm
NjZlOGFiMjE4YmU0ZjAxZmE3MmJjY2NhZTkxZTdlODYzYTM1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xhc3MgVGV4dFN0cmVhbTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NGaWx0ZXI7CiBjbGFzcyBDbGlwUmVj
dHM7CiBjbGFzcyBDbGlwUmVjdHNDYWNoZTsKIGNsYXNzIEV2ZW50UmVnaW9uQ29udGV4dDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXgg
MjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uODcyYTY2NmUzNzRlMTk1
NDZhMGQ1YzcxMDFmNGJkOTA5MjY4NDQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTMxLDkgKzMxLDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCiAKLSNpbmNsdWRlICJD
U1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIkNh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
QEAgLTExNiwzOSArMTE3LDUxIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZl
cmVuY2VGaWx0ZXJDbGllbnRzKCkKICAgICBtX2ludGVybmFsU1ZHUmVmZXJlbmNlcy5jbGVhcigp
OwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUpCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGZsb2F0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYg
KCFtX2ZpbHRlcikgewotICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0g
ICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1f
ZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAo
bV9maWx0ZXItPmZpbHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0
ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFy
SW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIH0KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6
Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2Rl
KTsKK30KKworR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4
dCgpCit7CisgICAgcmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+Y29udGV4
dCgpIDogbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3Vy
Y2VJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUobG9naWNhbFNpemUsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIDEsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogCi0gICAgLy8gSWYg
dGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3
aWxsIHN0aWxsIGF0dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2lu
ZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICAvLyBG
SVhNRTogdGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUg
ZmlsdGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVu
ZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQ
cm9wZXJ0eSkpCi0gICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICBtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQgPSB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmls
dGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRp
cnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29u
dGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBk
aXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYg
KCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvJiBmaWx0ZXIg
PSAqbV9maWx0ZXI7Ci0gICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVT
b3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKKyAg
ICAKKyAgICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGZpbHRl
ci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgZmlsdGVyU291cmNlUmVjdCAr
PSBmaWx0ZXIub3V0c2V0cygpOworICAgIGZpbHRlclNvdXJjZVJlY3QuaW50ZXJzZWN0KGZpbHRl
ckJveFJlY3QpOworCiAgICAgaWYgKGZpbHRlclNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZp
bHRlci51cGRhdGVCYWNraW5nU3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworICAgIAorICAg
IGlmIChmaWx0ZXJTb3VyY2VSZWN0ICE9IG1fc291cmNlSW1hZ2VSZWN0KSB7CisgICAgICAgIG1f
c291cmNlSW1hZ2VSZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKKyAgICAgICAgbV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVyLmhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0
OwogICAgIGVsc2UgewotICAgICAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAgICAgICBtX3JlcGFpbnRS
ZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX3Jl
cGFpbnRSZWN0ID0gZGlydHlSZWN0OwpAQCAtMTU5LDExICsxNzIsOSBAQCBHcmFwaGljc0NvbnRl
eHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdAogICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0aW9u
KCk7CiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgYXV0byogc291cmNlR3JhcGhp
Y3NDb250ZXh0ID0gZmlsdGVyLmlucHV0Q29udGV4dCgpOwotICAgIGlmICghc291cmNlR3JhcGhp
Y3NDb250ZXh0IHx8IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQorICAg
IGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBhdXRvKiBzb3VyY2VHcmFwaGlj
c0NvbnRleHQgPSBpbnB1dENvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvbnRl
eHQgc28gdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlzIGNhcHR1cmVkIGluIHRoZSBv
ZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KQEAgLTE3NywyMyArMTg4LDE1IEBAIEdyYXBoaWNzQ29u
dGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKLSAgICBBU1NFUlQobV9m
aWx0ZXItPmlucHV0Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaW5wdXRDb250ZXh0KCkpOwogCiAg
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXllckZpbHRl
cnMgIiA8PCB0aGlzIDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAogICAgIGF1dG8mIGZpbHRl
ciA9ICptX2ZpbHRlcjsKLSAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKLQot
ICAgIGZpbHRlci5hcHBseSgpOwotCi0gICAgLy8gR2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5k
IGRyYXcgaXQgaW4gcGxhY2UuCi0gICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRw
dXRSZWN0KCk7Ci0gICAgZGVzdFJlY3QubW92ZShtX3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9m
ZnNldC55KCkpOwotCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQo
KSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVm
ZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgaW5wdXRDb250ZXh0KCktPnJl
c3RvcmUoKTsKIAotICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKKyAgICBh
dXRvIGdlb21ldHJ5ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4obV9zb3VyY2VJbWFnZVJl
Y3QsIG1fc291cmNlSW1hZ2VSZWN0KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRl
ckltYWdlQnVmZmVyKGZpbHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRy
eSkpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5
ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNk
YTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQw
NDdjMGU3MTUyNzNhYzE0MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAog
Y2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVu
dENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERp
cnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAg
ICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBW
ZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0
b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZH
UmVmZXJlbmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAg
ICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9m
aWx0ZXI7CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3Jh
cGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBl
ciBwYWludAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmlu
ZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjY4YWY3ZWUzMTQ2
NzQ4MDQyZThmYTk5YzdjZjFjMjY0NjZkZDY3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNyw2ICszOCw4IEBACiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCisjaW5jbHVkZSAi
U1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKQEAgLTgyLDYyICs4NSwyNyBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihj
bGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFy
ZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYg
ZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxk
Tm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxkTm9kZXMoKSA+
IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9h
dFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLQot
ICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSk7
Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2
ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5k
aW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQoKSkpIHsK
LSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksIGZpbHRl
cik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVyLT5jbGVhckVm
ZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAg
IGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigp
LCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5kYXJkQXR0cmli
dXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJvdW5kYXJpZXMo
U1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMo
KSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVuZGVyZXIoKSkg
ewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAg
ICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJlbmRlcmVyKCkt
PnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJ
bnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNS
R0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAg
ICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVsZW1lbnQu
cmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyOwot
fQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSkKIHsK
ICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZU1vZGUsICFy
ZXNvdXJjZU1vZGUpOwogCi0gICAgTE9HKEZpbHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ciAlcCBhcHBseVJlc291cmNlIHJlbmRlcmVyICVwIiwgdGhpcywgJnJlbmRlcmVyKTsKLQotICAg
IGlmIChtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKSB7Ci0gICAg
ICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5nZXQo
JnJlbmRlcmVyKTsKLSAgICAgICAgaWYgKGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6
OlBhaW50aW5nU291cmNlIHx8IGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkFwcGx5
aW5nKQotICAgICAgICAgICAgZmlsdGVyRGF0YS0+c3RhdGUgPSBGaWx0ZXJEYXRhOjpDeWNsZURl
dGVjdGVkOwotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFscmVhZHkgYnVpbHQsIG9yIHdlJ3Jl
IGluIGEgY3ljbGUsIG9yIHdlJ3JlIG1hcmtlZCBmb3IgcmVtb3ZhbC4gUmVnYXJkbGVzcywganVz
dCBkbyBub3RoaW5nIG1vcmUgbm93LgotICAgIH0KLQorICAgIC8vIEJ1aWxkIHRoZSBTVkdGaWx0
ZXIKICAgICBhdXRvIGZpbHRlckRhdGEgPSBtYWtlVW5pcXVlPEZpbHRlckRhdGE+KCk7Ci0gICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3go
KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJh
dGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIAotICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBT
VkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0
ZXJFbGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGlu
Z0JveCk7Ci0gICAgaWYgKGZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpKQorICAgIGZp
bHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgcmVu
ZGVyaW5nTW9kZSk7CisgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0ZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSByZW5kZXJl
ci5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBTVkdM
ZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJF
bGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0Jv
eCk7CiAKLSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZv
ciBmaWx0ZXIuIAorICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlSW1hZ2VSZWN0CisgICAgZmls
dGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7Cisg
ICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRh
cmllcyk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlVHJhbnNmb3JtCiAgICAgQWZm
aW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2Fs
Y3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIp
OwogICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE0NSw4NiArMTEzLDM5IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
CiAgICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZl
VGlsZS4KICAgICBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmlu
ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFu
c2Zvcm0ueVNjYWxlKCksIDAsIDApOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIGJvdW5k
YXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgotICAgIGZpbHRlckRh
dGEtPmRyYXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwotICAgIGZp
bHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMp
OworICAgIC8vIENhbGN1bGF0ZSB0aGUgZmlsdGVyIHJlc29sdXRpb24KICAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uKTsKKyAgICBmaWx0ZXJEYXRh
LT5zY2FsZSA9IHsgMSwgMSB9OworICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhh
YnNvbHV0ZURyYXdpbmdSZWdpb24uc2l6ZSgpLCBmaWx0ZXJEYXRhLT5zY2FsZSk7CiAKLSAgICAv
LyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGlu
Z0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+Zmls
dGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRh
dGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVh
dGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxk
ZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0
ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEZXRlcm1p
bmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFn
ZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZs
b2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9h
dFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHRl
bXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLQotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2
ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1
dGlvbihzY2FsZSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVj
dElucHV0cyA9IDEwMDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRh
LT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZl
Y3QtPnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpm
aWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkpOwotCi0gICAgbGFzdEVmZmVjdC0+ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lv
biA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKLSAgICAvLyBBdCBsZWFzdCBvbmUgRmls
dGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKLSAgICAvLyByZWNhbGN1bGF0ZSB0
aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAg
ICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAg
ICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAg
fQotCi0gICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRo
aW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KLSAgICAvLyBFdmVuIGlmIHRoZSB0YXJnZXQgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3IHRoZSBsYXN0
IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCi0gICAgaWYgKGZpbHRl
ckRhdGEtPmRyYXdpbmdSZWdpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9yZW5k
ZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgICAgIGZpbHRlckRh
dGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRh
TWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUoZmlsdGVyRGF0YSkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2hhbmdlIHRoZSBjb29yZGluYXRlIHRyYW5zZm9ybWF0
aW9uIGFwcGxpZWQgdG8gdGhlIGZpbHRlcmVkIGVsZW1lbnQgdG8gcmVmbGVjdCB0aGUgcmVzb2x1
dGlvbiBvZiB0aGUgZmlsdGVyLgorICAgIC8vIENhbGN1bGF0ZSBlZmZlY3RpdmVUcmFuc2Zvcm0K
ICAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgZWZmZWN0
aXZlVHJhbnNmb3JtLnNjYWxlKGZpbHRlckRhdGEtPnNjYWxlKTsKICAgICBlZmZlY3RpdmVUcmFu
c2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwog
Ci0gICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNF
X0xJTkVBUl9TUkdCKQogICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6TGluZWFyU1JHQigpOwogI2Vsc2UKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKTsKICNlbmRpZgorCiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2lu
Z1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBj
b250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKLSAgICAgICAgQVNTRVJUKCFtX3Jl
bmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKKy8vICAgICAgICBBU1NF
UlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwogICAgICAg
ICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtX3JlbmRlcmVy
RmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAvLyBTZXQgdGhlIHJlbmRlcmluZyBt
b2RlIGZyb20gdGhlIHBhZ2UncyBzZXR0aW5ncy4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNl
dFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CiAKKyAgICAvLyBTZXQgdGhlIHdvcmtpbmcg
R3JhcGhpY0NvbnRleHQgdG8gdGhlIGZpbHRlciBzb3VyY2VHcmFwaGljCiAgICAgR3JhcGhpY3ND
b250ZXh0JiBzb3VyY2VHcmFwaGljQ29udGV4dCA9IHNvdXJjZUdyYXBoaWMtPmNvbnRleHQoKTsK
LSAgCisKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gV1RGTW92ZShzb3Vy
Y2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogCiAg
ICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5k
ZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZp
bHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY5LDM4ICsxOTAsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdy
YXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZm
ZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVm
ZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMg
aXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUg
Y2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBq
dXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25k
IGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1
aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1v
dmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlz
IHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBG
aWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkp
IHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsK
LSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0
LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNv
bmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52
YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lk
dGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxh
c3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2Nh
bGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIGNvbnRl
eHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVy
c2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEu
c2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRl
ckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgICAgICB9CisgICAgICAgIGF1
dG8gZ2VvbWV0cnkgPSBTVkdGaWx0ZXJHZW9tZXRyeTo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwg
ZmlsdGVyRGF0YS5ib3VuZGFyaWVzLCBmaWx0ZXJEYXRhLmRyYXdpbmdSZWdpb24sIHJlbmRlcmVy
Lm9iamVjdEJvdW5kaW5nQm94KCksIGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zv
cm0sIGZpbHRlckRhdGEuc2NhbGUpOworICAgICAgICBjb250ZXh0LT5kcmF3RmlsdGVySW1hZ2VC
dWZmZXIoKmZpbHRlckRhdGEuZmlsdGVyLCBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIu
Z2V0KCksIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICAKKyAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRh
LnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKICAgICB9Ci0gICAgZmlsdGVyRGF0YS5zb3Vy
Y2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RB
cHBseVJlc291cmNlIGRvbmVcbiIpOwogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OnJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCkBA
IC0zMDgsMjcgKzIwOSwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJl
c291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplYwogICAgIHJldHVybiBT
VkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0
ZXJFbGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCBvYmplY3Qub2JqZWN0
Qm91bmRpbmdCb3goKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpCiB7
Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBwcmltaXR2ZSA9IHN0
YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KG9iamVjdC0+
bm9kZSgpKTsKLQotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAg
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCByZW5kZXJlciAlcCIsIHRoaXMsIG9iamVjdCk7Ci0K
ICAgICBmb3IgKGNvbnN0IGF1dG8mIG9iamVjdEZpbHRlckRhdGFQYWlyIDogbV9yZW5kZXJlckZp
bHRlckRhdGFNYXApIHsKICAgICAgICAgY29uc3QgYXV0byYgZmlsdGVyRGF0YSA9IG9iamVjdEZp
bHRlckRhdGFQYWlyLnZhbHVlOwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgIT0gRmls
dGVyRGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTVkdGaWx0
ZXJCdWlsZGVyKiBidWlsZGVyID0gZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAgICAgICAg
RmlsdGVyRWZmZWN0KiBlZmZlY3QgPSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9iamVjdCk7
Ci0gICAgICAgIGlmICghZWZmZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8v
IFNpbmNlIGFsbCBlZmZlY3RzIHNoYXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUsIGFsbAot
ICAgICAgICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAgICBpZiAo
IXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNp
dmUoZWZmZWN0KTsKLQogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVu
LgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFp
ci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA4Y2Uw
YzdhYmMxNDNiZGI2NTM4NTBjOTNlMzI5MmFjOWRhNDliYmM3Li43MWU0ZDFmMzQ2YzMyNjJkN2Y0
ZTAzM2M0YzNmODE5YzI4YzE4MWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMsOSBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAi
U1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KQEAgLTQzLDggKzQyLDcgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRGF0YSgp
ID0gZGVmYXVsdDsKIAotICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQdHI8RmlsdGVyPiBm
aWx0ZXI7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAg
IEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwogICAgIEFmZmluZVRy
YW5zZm9ybSBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKQEAgLTcyLDggKzcwLDYgQEAgcHVi
bGljOgogCiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2Jq
ZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4g
YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYpIGNvbnN0OwotCiAgICAgaW5saW5lIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgZmlsdGVyVW5pdHMoKSBjb25zdDsKICAgICBpbmxpbmUgU1ZHVW5p
dFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCBkZTQ5MzI4MjYzZDA2MmEyMzViY2QyZjQ2NjdlZWYwOWMxMmViM2IzLi42Zjc2ZjIwYzljOWRj
ZGE1MjEyMDUzMjc0MDZhOGVjNDFhOTMwZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJTVkdSZW5kZXJUcmVlQXNUZXh0LmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlh
bGl6YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKQEAgLTUyLDYgKzUzLDcgQEAKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRWxsaXBz
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVU
ZXh0Qm94SW5saW5lcy5oIgogI2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHUGF0aEVsZW1lbnQuaCIKQEAgLTQzMSwxMyArNDMzLDkgQEAgdm9pZCB3cml0ZVNWR1Jlc291
cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lciYKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicHJpbWl0aXZlVW5pdHMiLCBm
aWx0ZXIucHJpbWl0aXZlVW5pdHMoKSk7CiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgICAgIC8v
IENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVp
bGRlci4KLSAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKLSAgICAgICAgYXV0byBkdW1teUZp
bHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKEFmZmluZVRyYW5zZm9ybSgpLCBkdW1teVJlY3QsIGR1
bW15UmVjdCwgZHVtbXlSZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8gYnVpbGRlciA9IGZp
bHRlci5idWlsZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CisgICAgICAgIGlmIChS
ZWZQdHI8RmlsdGVyPiBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0
ZXJFbGVtZW50KCkpKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0KLSAgICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3Qg
PSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCi0gICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgICAgICAgICBkdW1teUZpbHRlci0+ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNl
LnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKICAgICAgICAgY29uc3Qg
YXV0byYgY2xpcHBlciA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ciY+KHJlc291cmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5k
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmlu
ZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJkNmQwNjQzMWY2ODYuLjliMTNlNjU1MzQ5
YjQwOGU5OGUwNDAwZDc0M2UyMWQ2MzA3OGE1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
QmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDIwICsxMDAsMTUgQEAgdm9pZCBTVkdGRUJsZW5kRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
YnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogCiAg
ICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBhdXRvIGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIG1vZGUoKSk7Ci0gICAgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwot
ICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFw
cGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAg
cmV0dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IEZFQmxl
bmQ6OmNyZWF0ZShtb2RlKCkpLCB7IHsgKmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKaW5kZXggOTAzN2NiMTIxZjkz
NjdiNzg4ZDkyMTZlMGI5NDFmYzhiMDZkZWM2Ni4uYmM5NWJjOTI1Y2QwMzU3MTQ3NGVjMmY3MjU4
NTQ2ZGZlNDNkNzY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKQEAg
LTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2Ux
ZjI0NGU0MzY3ODY4ZjQyYmE5Yy4uZTg2ODUyNzA3Mzg4MDI2NjUxODM4MzZkNDkzMzExYTEzNGZm
OWYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
Y3BwCkBAIC0xMDAsMTIgKzEwMCwxMSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzOwog
ICAgIENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlID0gdHlwZSgpOwpAQCAtMTM1LDE1ICsxMzQs
MTMgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYgc2l6ZSAhPSAyMCkKICAgICAgICAgICAgIHx8
IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAx
KQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVS
QVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIAogICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMo
KTsKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0
byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZN
b3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCmluZGV4IDdhYjRhYTQxODFlN2FiMTk4
YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLjFiZWM1NDM3YTZlMGRmNTRlZTQ3NTdiOWJiMDc0M2Zh
MTk4YTY5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmlt
YXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAppbmRleCA5MGE1NWI3ZWZmZjdhM2Zl
NjA2YTllMDU3OWE3NmVkZTlmOTY4MDExLi4wNzVjY2EzNWM1MjY5MDk0NzIzNWU4ODU3Njk4MjQ3
NjAyYzVmY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5jcHAKQEAgLTYzLDEyICs2MywxMSBAQCB2b2lkIFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRv
IGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIAorICAg
IGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1
dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWQ7CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBncmVlbjsKQEAgLTg2LDkgKzg1LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHQKICAg
ICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxkKS50cmFu
c2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgcmV0dXJuIHsgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKSwgeyB7ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5kZXggYmI1ODkzNDdk
ODgyNmRmYjM2MDllZGFjNmU4Yjk5M2E0ZGQ1NDg2My4uNzkzNzExNmQzNGM3YTc1YmU0M2JlYjM1
ZjBjMzE0OTRlNTcyYzNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICAv
LyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVk
U3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9z
aXRlRWxlbWVudC5jcHAKaW5kZXggM2NhOTliODc1NzA4YmJkOGE2YmFmNjUzZGMwNmZlMjA1YWM5
ODIzNS4uNDM2MzgwYjA5MTJiOWE5YjdhNzc3MWIyNDhmMTdhOTkwNTQ1NzYyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKQEAgLTQwLDcgKzQwLDcg
QEAgaW5saW5lIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywg
W10gewogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVz
OjppbkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4xPigpOwogICAgICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjppbjJBdHRyLCAmU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjptX2luMj4oKTsKLSAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVn
aXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBDb21wb3NpdGVPcGVyYXRpb25U
eXBlLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIs
IEZFQ29tcG9zaXRlT3BlcmF0b3IsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fY29tcG9zaXRl
T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8
U1ZHTmFtZXM6OmsxQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMT4oKTsKICAgICAg
ICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azJBdHRyLCAm
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2syPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprM0F0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6Om1fazM+KCk7CkBAIC01Niw5ICs1Niw5IEBAIFJlZjxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ+
IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhCiB2
b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBl
IHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBl
Pjo6ZnJvbVN0cmluZyh2YWx1ZSk7CisgICAgICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgcHJvcGVy
dHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3Ry
aW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAg
bV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+
KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9jb21wb3NpdGVPcGVyYXRvci0+c2V0QmFz
ZVZhbEludGVybmFsPEZFQ29tcG9zaXRlT3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNv
bnN0CiB7CiAgICAgRkVDb21wb3NpdGUqIGNvbXBvc2l0ZSA9IHN0YXRpY19jYXN0PEZFQ29tcG9z
aXRlKj4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0
cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0T3BlcmF0aW9uKHN2Z09wZXJhdG9yKCkp
OworICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRDb21wb3NpdGVPcGVyYXRvcihjb21wb3Np
dGVPcGVyYXRvcigpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0cikKICAg
ICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzEoazEoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprMkF0dHIpCkBAIC0xMzEsMjAgKzEzMSwxNSBAQCB2b2lkIFNWR0ZFQ29tcG9z
aXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjIoKSk7CisKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShm
aWx0ZXIsIHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpOwotICAgIEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAg
ICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBl
bmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJl
dHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRUNvbXBv
c2l0ZTo6Y3JlYXRlKGNvbXBvc2l0ZU9wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkp
LCB7IHsgKmlucHV0MSB9LCB7ICppbnB1dDIgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3YTBmYTMwNDRkZjVi
N2M1YTA4MGQ2ZTc3OTcyMmY2Li5mNTEwMDFlMjBkNzA0ZGQ4NjgzMTZiOGQzMGIyYTIwZDk4NDk0
NWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCkBAIC0y
NywxNSArMjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8PgotaW5saW5l
IHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmhpZ2hl
c3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhN
RVRJQzsgfQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8RkVDb21wb3NpdGVPcGVy
YXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzsgfQogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEZF
Q29tcG9zaXRlT3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1
ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI7IH0KIAotICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmcoQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmcoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcikK
ICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBvc2l0
ZU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoK
ICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX09WRVI6CkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRy
YWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb21wb3NpdGVPcGVyYXRpb25UeXBlIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgRkVDb21wb3NpdGVPcGVyYXRvciBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUg
PT0gIm92ZXIiKQogICAgICAgICAgICAgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI7
CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbjEoKSBjb25zdCB7IHJl
dHVybiBtX2luMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBTdHJpbmcgaW4yKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbjItPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1
ZTxDb21wb3NpdGVPcGVyYXRpb25UeXBlPigpOyB9CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3ItPmN1
cnJlbnRWYWx1ZTxGRUNvbXBvc2l0ZU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgazEoKSBjb25z
dCB7IHJldHVybiBtX2sxLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IGsyKCkgY29uc3Qg
eyByZXR1cm4gbV9rMi0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBrMygpIGNvbnN0IHsg
cmV0dXJuIG1fazMtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoK
IAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9
CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjI7IH0K
LSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1
cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIGNvbXBvc2l0
ZU9wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yOyB9CiAgICAg
U1ZHQW5pbWF0ZWROdW1iZXImIGsxQW5pbWF0ZWQoKSB7IHJldHVybiBtX2sxOyB9CiAgICAgU1ZH
QW5pbWF0ZWROdW1iZXImIGsyQW5pbWF0ZWQoKSB7IHJldHVybiBtX2syOyB9CiAgICAgU1ZHQW5p
bWF0ZWROdW1iZXImIGszQW5pbWF0ZWQoKSB7IHJldHVybiBtX2szOyB9CkBAIC0xMDksMTIgKzEw
OSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBTVkdBbmlt
YXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRp
b24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywg
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbj4gbV9jb21wb3NpdGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0
ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9rMSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRo
aXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0ZWROdW1i
ZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9zaXRlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmlkbAppbmRleCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJiNDUyZGUw
Li5mYzY3MGM5ZWM1NmM0MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgsNyBAQAog
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4xOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAgICBbSW1w
bGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51
bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3BlcmF0b3Jd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVkZWNhYmI0
ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uM2I0NjU0MGY3ZWUxYzQxMGZiOGI3MzZhZTQyMzQw
MDgxNjcxNjgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsMTIgKzE5MSwxMSBAQCB2b2lkIFNWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQx
ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0
MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCBvcmRlclhW
YWx1ZSA9IG9yZGVyWCgpOwogICAgIGludCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwpAQCAtMjA2
LDIyICsyMDUsMjIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICB9CiAgICAgLy8gU3Bl
YyBzYXlzIG9yZGVyIG11c3QgYmUgPiAwLiBCYWlsIGlmIGl0IGlzIG5vdC4KICAgICBpZiAob3Jk
ZXJYVmFsdWUgPCAxIHx8IG9yZGVyWVZhbHVlIDwgMSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYga2VybmVsTWF0cml4ID0gdGhpcy0+a2Vy
bmVsTWF0cml4KCk7CiAgICAgaW50IGtlcm5lbE1hdHJpeFNpemUgPSBrZXJuZWxNYXRyaXguaXRl
bXMoKS5zaXplKCk7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGlzIGlzIGEgcmVxdWlyZW1lbnQs
IGFuZCBzaG91bGQgYmFpbCBvdXQgaWYgZmFpbHMKICAgICBpZiAob3JkZXJYVmFsdWUgKiBvcmRl
cllWYWx1ZSAhPSBrZXJuZWxNYXRyaXhTaXplKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCB0YXJnZXRYVmFsdWUgPSB0YXJnZXRYKCk7CiAg
ICAgaW50IHRhcmdldFlWYWx1ZSA9IHRhcmdldFkoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNW
R05hbWVzOjp0YXJnZXRYQXR0cikgJiYgKHRhcmdldFhWYWx1ZSA8IDAgfHwgdGFyZ2V0WFZhbHVl
ID49IG9yZGVyWFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0
WCA9IGZsb29yICggb3JkZXJYIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp0YXJnZXRYQXR0cikpCiAgICAgICAgIHRhcmdldFhWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4o
Zmxvb3JmKG9yZGVyWFZhbHVlIC8gMikpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnRhcmdldFlBdHRyKSAmJiAodGFyZ2V0WVZhbHVlIDwgMCB8fCB0YXJnZXRZVmFsdWUgPj0gb3Jk
ZXJZVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRZID0gZmxv
b3IgKCBvcmRlclkgLyAyICkpCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdl
dFlBdHRyKSkKICAgICAgICAgdGFyZ2V0WVZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYo
b3JkZXJZVmFsdWUgLyAyKSk7CkBAIC0yMzQsMTEgKzIzMywxMSBAQCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQgogICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlID0gMTsKICAgICB9CiAgICAg
aWYgKGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUgPD0gMCB8fCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVl
IDw9IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgZmxvYXQgZGl2aXNvclZhbHVlID0gZGl2aXNvcigpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSAmJiAhZGl2aXNvclZhbHVlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6ZGl2aXNvckF0dHIpKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2VybmVs
TWF0cml4U2l6ZTsgKytpKQogICAgICAgICAgICAgZGl2aXNvclZhbHVlICs9IGtlcm5lbE1hdHJp
eC5pdGVtcygpW2ldLT52YWx1ZSgpOwpAQCAtMjQ2LDkgKzI0NSwxOCBAQCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQgogICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBh
dXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3Jk
ZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRh
cmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxV
bml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgp
LCBrZXJuZWxNYXRyaXgpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsKKyAgICAgICAgRkVDb252b2x2ZU1h
dHJpeDo6Y3JlYXRlKAorICAgICAgICAgICAgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFs
dWUpLAorICAgICAgICAgICAgZGl2aXNvclZhbHVlLAorICAgICAgICAgICAgYmlhcygpLAorICAg
ICAgICAgICAgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLAorICAgICAgICAg
ICAgZWRnZU1vZGUoKSwKKyAgICAgICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhW
YWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksCisgICAgICAgICAgICBwcmVzZXJ2ZUFscGhh
KCksCisgICAgICAgICAgICBrZXJuZWxNYXRyaXgpLAorICAgICAgICB7IHsgKmlucHV0MSB9IH0K
KyAgICB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3ZTA0
MzcwZDM1OTgyYTk1YjhkOTA0OWIzMzkuLjE4NzA2ZGE3MzVmZDJhNzc4ZjdmMTg1ODc2Zjc0OGY4
NGNhMWYwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZkOGU5
NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0YmRkNS4uYjljMWIzYTI5NzY4M2RmOTgwNGZjNjkxMjc1
ZTA2MDdmYjZjNzY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCBib29sIFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCog
ZWZmZWN0LAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3IgPSByZW5k
ZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUo
KS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBkaWZmdXNlTGln
aHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gZGlmZnVzZUxp
Z2h0aW5nLT5zZXRDb2xvcihjb2xvcik7CiAgICAgfQogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+
c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCiAgICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRp
bmctPnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CiAKLSAgICBhdXRvJiBs
aWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmctPmxp
Z2h0U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNv
dXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+c291cmNlKCkpOwogICAgIGNvbnN0IFNWR0ZFTGlnaHRF
bGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVu
dCh0aGlzKTsKICAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKIApAQCAtMTUxLDI4ICsxNTEsMjUg
QEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodEUKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBidWls
ZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZWZQdHIgbGlnaHRFbGVtZW50
ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CiAgICAgaWYgKCFs
aWdodEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNl
KCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5s
aWdodFNvdXJjZShidWlsZGVyKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5
bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHls
ZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVzZUxpZ2h0
aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFu
dCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRl
KGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5n
dGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKSwgeyB7ICpp
bnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuaAppbmRleCA2ODk5OTYwOWY0YjZiNTZhNzZjODhlYTU2OTVmMWUw
ZTllMjA1NTgwLi45YjM0YWE3MjJiMDRkNTQxYWQ2NDk3ODBlM2FjZjQwZDUxMTAxZDVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCkBA
IC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3
MjJkZmQwNTE3M2Q4YzIuLmM5ZWQyZjUyNzBmMDJmZDc3Nzg4NTBlZmVmYTdlNzEzMGE0ZTJlMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCkBAIC0xMTUsMjAgKzExNSwxNSBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTgogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZm
ZWN0KGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNy
ZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2Fs
ZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBp
bnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1
dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIHsgRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlD
aGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0g
fTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1ZDMu
LjBlNTkzZGQwZGEyNDYwMzA5ZTFlYzY4MTYxYTgxNzcxNDliNDBmNTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcgKzkx
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwot
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudC5jcHAKaW5kZXggYTY4NmJiOGZhMzhkOWRkZmEyOGUwMmFlZDk1ZTQxYjA4
YTM2ZjJmNy4uOTE2ZjAzYzBmOTE1N2VjODI4YzkyZTk5YjYzYmQ2MjJlOTUyNmE0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAgUmVmPFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudD4gU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmEKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAot
UmVmPExpZ2h0U291cmNlPiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdAorUmVmPExpZ2h0U291cmNlPiBTVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewog
ICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCksIGVsZXZhdGlv
bigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQu
aAppbmRleCBmYmRmNzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNjLi5iYmJmZTk0
NzM5YjQ0MzljMDYwNmJjMTM4OGVkODBmNzIyNzI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdo
dFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3Rh
dGljX2Fzc2VydChzaXplb2YoU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZH
RkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2YTg5YmZjNWI2
ODEuLjYzNDcxMDhmMjZiYjhhNTM4ZWE2OTNlMTMwN2VmMTA0ZjhkNDJhODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTk3LDI3ICs5Nywy
NSBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURyb3BT
aGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewor
ICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFp
bnB1dDEpCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkg
PCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAKICAgICBDb2xvciBjb2xvciA9IHJl
bmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29k
Q29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwog
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LSAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVm
ZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGRE
ZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVy
biB7IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgp
LCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRi
NDU0YmI3ZDI3NThlNzEyYjYyMWI4Y2JlNDJmNzQ1MWQuLjFjNmUxMjIwMGMwYjA3YTU2NTk0MDA1
ZmQzYzQxMjZhMmU2ZGVjODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29k
RWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZj
Mi4uZjJmYThkNTQwYThkMTBjOTkwZTRkZTc0YjZkZDRiYWFmMDBhODExMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01OCwxOCArNTgsMTggQEAgYm9vbCBT
VkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCog
ZWZmZWN0LCBjb25zdCBRdWEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
CisgICAgICAgIHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAgICAgQ29sb3IgY29sb3IgPSBy
ZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9v
ZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsK
IAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7Cisg
ICAgcmV0dXJuIHsgRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFjaXR5KSwgeyB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNl
NzVlNGEzMTY3MjQ4YTFiNmY1Y2Y1MWZlZTkxMS4uNGYwM2E3NjVjOTg3Mjg1M2Y5M2Y1YTJmODAw
ZGYyNjI1NWMzZTYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAg
LTM2LDcgKzM2LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBw
cm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5
OyB9CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdh
OTk4MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmJlODIwNmE0YjdkNWM4YmY1
NmFiYWJkY2MxNTA5OTA3NTI4Yjc2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NSwxOCArOTUsMTYgQEAgdm9pZCBTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1
dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2
aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBl
ZGdlTW9kZSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAg
ICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3Rk
RGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpLCB7ICppbnB1dDEgfSB9
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmgKaW5kZXggZDg5ZTFhNzQ4ZmIyYzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4uYjVmNjJk
NGEwM2IzYzE4OGI4NWM4MjYzMTM2NjAxOGU1MjNiMTE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKaW5kZXggZTE0Njg4YTVlYjE3NmYwMmEx
NmMwNTUwZjA4MTE5NWQzYzI3ZWM0Zi4uMTkzNDA4NzIyM2M5NTNjMDQ1MWI0ZjBjNmZmODhkYWM2
NjA1OWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgorI2lu
Y2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzQsMTYgKzE3NSw0NCBAQCB2b2lk
IFNWR0ZFSW1hZ2VFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYsIGNvbnN0
IE5ldHdvcmtMb2FkTWV0cmljcwogICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnBhcmVudFJlbmRlcmVyKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHRkVJbWFn
ZUVsZW1lbnQ6OmltYWdlQnVmZmVyRm9yRWZmZWN0KCkgY29uc3QKIHsKLSAgICBpZiAobV9jYWNo
ZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIs
IG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNw
ZWN0UmF0aW8oKSk7Ci0KICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0
RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CisgICAgaWYgKCFpczxT
VkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAg
ICAgaWYgKGlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50Lmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSk7CisgICAgYXV0byBjb250ZXh0Tm9kZSA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpOworICAgIGF1dG8gcmVuZGVyZXIgPSBjb250
ZXh0Tm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc3JjUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgY29u
dGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgY29udGV4dC50cmFuc2xhdGUoLXNy
Y1JlY3QubG9jYXRpb24oKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGVudFRyYW5zZm9y
bWF0aW9uOworICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQo
Y29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOworCisgICAgcmV0dXJu
IGltYWdlQnVmZmVyOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVy
biB7IEZFSW1hZ2U6OmNyZWF0ZShSZWY8SW1hZ2U+IHsgKm1fY2FjaGVkSW1hZ2UtPmltYWdlRm9y
UmVuZGVyZXIocmVuZGVyZXIoKSkgfSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKSwgeyB9IH07CisK
KyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVyRm9yRWZmZWN0KCkpCisgICAg
ICAgIHJldHVybiB7IEZFSW1hZ2U6OmNyZWF0ZShpbWFnZUJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgp
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpLCB7IH0gfTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
IHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0
SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li4wNWJl
ZjlhZjEzOWJkNjA0NmZkYjZlOGI4ZTYyZDNhYWY1MTEzODBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsOSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlckZvckVmZmVjdCgpIGNvbnN0Owor
ICAgIAorICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlcXVlc3RJbWFn
ZVJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCmluZGV4IGNk
MGJmYjllZGNmZDdiNGUxYWYzOWI1NWVkYmJiZDc4NGFhZWE4OWQuLjFjYjI3ZGYzMTUwNDAxN2M2
OTllMDEwY2VkNGIwZDVkNjAwYmM2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxl
bWVudC5oCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBT
VkdGRUxpZ2h0RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKFNWR0ZFTGlnaHRFbGVtZW50KTsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIFJlZjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0ID0gMDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1lbnQqIGZpbmRMaWdo
dEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXppbXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwCmluZGV4IGJlMmY2ZTAzMDdkYzU1MTYwMDc5MGZkNWJmMTgy
ZjFkOTQ2MjNkZDYuLjVkN2Q3MGNkY2U2MDFlNDI4NmJkNzVlYTNmNjIyMGE0NWZkOWEyZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtMjYsNyArMjYsNiBA
QAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVs
cGVycy5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTQ1LDI0ICs0NCwyMiBAQCBSZWY8U1ZHRkVNZXJnZUVs
ZW1lbnQ+IFNWR0ZFTWVyZ2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFTWVyZ2VFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBi
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRl
cik7Ci0gICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAg
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbWVyZ2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8m
IG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMp
KSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBidWlsZGVy
Lm5hbWVkRWZmZWN0KG1lcmdlTm9kZS5pbjEoKSk7CiAgICAgICAgIGlmICghbWVyZ2VFZmZlY3Qp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5k
KFdURk1vdmUobWVyZ2VFZmZlY3QpKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IG1lcmdlSW5wdXRzLmFwcGVuZChtZXJnZUVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9
CiAKICAgICBtZXJnZUlucHV0cy5zaHJpbmtUb0ZpdCgpOwotCiAgICAgaWYgKG1lcmdlSW5wdXRz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFTWVyZ2U6OmNyZWF0ZShtZXJn
ZUlucHV0cy5zaXplKCkpLCBXVEZNb3ZlKG1lcmdlSW5wdXRzKSB9OwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCmluZGV4IDc0NTA4NjgxNmY2OTc2YzY2OTdkYzUx
MDc1ODAyZDI4M2NmNGUzYzIuLjU1YTYxMWYwNzg4ZTA3NDJiNWIzYmIxOGNhZGFmZTE1ODM4Yzcw
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCkBAIC0zNSw3ICszNSw3
IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3du
ZXJSZWdpc3RyeTxTVkdGRU1lcmdlRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lz
dHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApp
bmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi4yOWJiNTlkNzFm
NTdhNDcyZTMzMGUxZjI4ZTQ1MWE4ZjJjN2I3M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIGlubGluZSBTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJl
Z2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
Om1faW4xPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNW
R05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsICZTVkdGRU1vcnBo
b2xvZ3lFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVy
YXRvciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9ycGhvbG9neU9wZXJhdG9yPigpOwog
ICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpyYWRp
dXNBdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNYLCAmU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwogfQpAQCAtNTksOSArNTksOSBAQCB2
b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1cyhmbG9hdCB4LCBmbG9hdCB5KQog
dm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yIHByb3Bl
cnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3Ry
aW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAg
bV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+
KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9tb3JwaG9sb2d5T3BlcmF0b3ItPnNldEJh
c2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBj
b25zCiB7CiAgICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5ID0gc3RhdGljX2Nhc3Q8RkVNb3Jw
aG9sb2d5Kj4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9y
QXR0cikKLSAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvcihz
dmdPcGVyYXRvcigpKTsKKyAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lP
cGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IoKSk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpyYWRpdXNBdHRyKSB7CiAgICAgICAgIC8vIEJvdGggc2V0UmFkaXVzIGZ1bmN0aW9ucyBz
aG91bGQgYmUgZXZhbHVhdGVkIHNlcGFyYXRlbHkuCiAgICAgICAgIGJvb2wgaXNSYWRpdXNYQ2hh
bmdlZCA9IG1vcnBob2xvZ3ktPnNldFJhZGl1c1gocmFkaXVzWCgpKTsKQEAgLTExNCwyMSArMTE0
LDE4IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LSAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwotICAgIGZsb2F0IHlSYWRpdXMgPSByYWRp
dXNZKCk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwog
ICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAorICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7CisgICAgZmxvYXQgeVJhZGl1
cyA9IHJhZGl1c1koKTsKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1cyA8IDApCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZl
Y3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIHhSYWRpdXMs
IHlSYWRpdXMpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAg
IHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVNb3JwaG9sb2d5OjpjcmVhdGUobW9ycGhv
bG9neU9wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZmNjZh
YTY2OS4uM2Q3MjdhM2Y1MGI2MDc1YjU1Y2ZjMDM0M2VjMzkxMzI5OTFkYWM0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0yNiwxMiArMjYsMTIg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxNb3JwaG9sb2d5T3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1W
YWx1ZSgpIHsgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7IH0KIAotICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorICAgIHN0
YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRv
cikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKG1vcnBo
b2xvZ3lPcGVyYXRvcikgewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktO
T1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVN
T1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgU1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1vcnBob2xvZ3lPcGVy
YXRvciBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
dmFsdWUgPT0gImVyb2RlIikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRVJPREU7CkBAIC02MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVz
KGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0
IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgc3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50
VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBob2xvZ3lPcGVyYXRv
ciBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRv
ci0+Y3VycmVudFZhbHVlPE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IHJhZGl1
c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxv
YXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVudFZhbHVlKCk7IH0K
IAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9
Ci0gICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0
dXJuIG1fc3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBtb3JwaG9s
b2d5T3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CiAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVz
WDsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQoKSB7IHJldHVybiBt
X3JhZGl1c1k7IH0KIApAQCAtODEsMTEgKzgxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3By
b3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9p
bjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1h
dGVkRW51bWVyYXRpb24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpj
cmVhdGUodGhpcywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OworICAgIFJlZjxTVkdB
bmltYXRlZEVudW1lcmF0aW9uPiBtX21vcnBob2xvZ3lPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51
bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3JhZGl1c1ggeyBTVkdBbmltYXRlZE51bWJlcjo6
Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3JhZGl1c1kgeyBT
VkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCmluZGV4IGEyYzE4MWYyZTYzN2NkMzkwOThl
YmU2OWU2MDk4YWJlM2MzODVjZDEuLjJkMjFmMmExZDg4OGQwMmVjMTc5ZGYxMGUyZGU0M2ZjNjUy
OTdkNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5p
ZGwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVkdfTU9SUEhP
TE9HWV9PUEVSQVRPUl9ESUxBVEUgICA9IDI7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZH
QW5pbWF0ZWRTdHJpbmcgICAgICBpbjE7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3Jd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAg
IFtJbXBsZW1lbnRlZEFzPW1vcnBob2xvZ3lPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkTnVtYmVyICAgICAgcmFkaXVzWDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZH
QW5pbWF0ZWROdW1iZXIgICAgICByYWRpdXNZOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwCmluZGV4IDAzODI2OGI4OWIyZjE5ZjliZTU2ODczOWQxMjMwMzU0MTAw
YTVlZTcuLjg3YmEzODdiMzUwNTgxZWZmZDQzNmQwNWQzYjQwZTRjNTZlZTQ3NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCkBAIC04MSwxNiArODEsMTMgQEAg
dm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEg
PSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7
IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3MmRi
NjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJlZS4uZmZhMWMxNjgzMzdmNDRjOTUyMDFiNzJlODhj
MzFmYzViZTVmMWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApA
QCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVs
ZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMzOGExYjZhNTVmY2RiODIxYTA5ZjBhY2MzYzIwN2VhODEu
LjY0MDY0ZjVmNjgwODQ5NGNmN2FiMTBkZDAxOWMwYWFkNjk4OWNkYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAK
IAogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdodFNv
dXJjZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1l
cy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTM5LDE5ICszOCwxOSBAQCBS
ZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+
IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1
aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIEZsb2F0UG9p
bnQzRCBwb3NpdGlvbjsKLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1Vu
aXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9h
dFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotICAgICAg
ICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJl
bmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkg
KyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2Vu
dGFnZQotICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVy
ZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkg
LyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBvc2l0aW9uID0gRmxvYXRQ
b2ludDNEKHgoKSwgeSgpLCB6KCkpOworLy8gICAgaWYgKGZpbHRlci5wcmltaXRpdmVVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgeworLy8g
ICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3go
KTsKKy8vCisvLyAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICog
cmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAgIHBvc2l0aW9uLnNldFkocmVmZXJlbmNl
Qm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7CisvLworLy8gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFu
RGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhY
TWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAgIH0gZWxzZQorLy8gICAgICAg
IHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOwogICAgIAogICAgIHJldHVy
biBQb2ludExpZ2h0U291cmNlOjpjcmVhdGUocG9zaXRpb24pOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKaW5kZXggMzNhNWJkNzQ5MjA4MjhjOTk4NjQ1
YjcyMmY3MmE3NDVlNDhkYTc5ZS4uYzQ3YTYwNTZlODg3ZGEwODFhMDRmM2I5NTJiZGU0NWJjZGE5
ZDlmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCkBA
IC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVQb2ludExpZ2h0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNv
dXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFUG9pbnRMaWdodEVs
ZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0
MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQyOWE1OS4uN2RmNjYyYzY3MzgxYjAxZmE0NWFl
ZmU2ZmI1ZmI1ODAzYmU3Mjg1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtOTYsNyArOTYsNyBAQCBib29sIFNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqIGVmZmVjdAogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVu
ZGVyZXIoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICAgICAgQ29sb3IgY29sb3Ig
PSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBzcGVj
dWxhckxpZ2h0aW5nLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIHNw
ZWN1bGFyTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gc3BlY3VsYXJM
aWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKQEAgLTEwNSw3ICsxMDUs
NyBAQCBib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdAogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCiAgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5n
LT5zZXRTcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CiAKLSAgICBhdXRvJiBs
aWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5s
aWdodFNvdXJjZSgpKTsKKyAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRT
b3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVMaWdo
dEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVt
ZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNjAsMjggKzE2MCwy
NSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0g
YnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVu
dDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxl
bWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgICAgICByZXR1cm4geyB9Owor
CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoYnVpbGRl
cik7CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKICAgICBDb2xv
ciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJl
bmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8g
ZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFj
ZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxV
bml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7
Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICByZXR1cm4geyBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3Vy
ZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJu
ZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNl
KSksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2ZDFjNzlhMWQz
ZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li4yMzViYTEyOGIyNmRhZGNiZDc0NmFhYmZmZmZmZWMxNTJk
ZDIxZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0
ZWE0YWE5Y2YyZGZiZmZlZS4uNzQxMzFmOTM0ZmNjMjEyYzBjZTgyNWE2MDY2MDI2OTMxY2MzM2Fj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAg
LTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTM5LDI3ICszOCwyNyBAQCBSZWY8U1ZHRkVT
cG90TGlnaHRFbGVtZW50PiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3Bv
dExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29u
c3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShj
b25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRp
b247CiAgICAgRmxvYXRQb2ludDNEIHBvaW50c0F0OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0
aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91
bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94
LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0
WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0
WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0
c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlk
aWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5t
YXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLQotICAgICAgICBwb2ludHNBdC5z
ZXRYKHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNBdFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgp
KTsKLSAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkg
KiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAg
ICAgICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVy
ZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkg
LyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9h
dFBvaW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAgICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNE
KHBvaW50c0F0WCgpLCBwb2ludHNBdFkoKSwgcG9pbnRzQXRaKCkpOwotICAgIH0KKy8vCisvLyAg
ICBpZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJv
eCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5z
ZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAg
ICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94
LmhlaWdodCgpKTsKKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNv
cm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7
CisvLworLy8gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0
WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAgIHBvaW50c0F0LnNldFkocmVm
ZXJlbmNlQm94LnkoKSArIHBvaW50c0F0WSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8v
ICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50
TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1s
I1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50
c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCks
IHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAg
IH0gZWxzZSB7CisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHoo
KSk7CisvLyAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50
c0F0WSgpLCBwb2ludHNBdFooKSk7CisvLyAgICB9CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291
cmNlOjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0
aW5nQ29uZUFuZ2xlKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BvdExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFmNTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLjA3
NDM2Y2MwMTY2M2I1MjE1NjI0YTZlMTJkNzE2MDY4MWU5NjUyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291
cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNf
YXNzZXJ0KHNpemVvZihTVkdGRVNwb3RMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0
RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXgg
MzliZGNjNzczNTk2NjUwMzZlMWFlNzQ3NjEyZWFkNmY5YWMzNzM3MC4uOThmMzdhZjg4NmI0ZmRl
NmFkZGZjNzc4ZDc5Mzk1MTIyOWFiM2ZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmNwcApAQCAtNzAsMTYgKzcwLDEzIEBAIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAg
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7Cisg
ICAgcmV0dXJuIHsgRkVUaWxlOjpjcmVhdGUoKSwgeyAqaW5wdXQxIH0gfTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKaW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNi
Y2M4NzlhMjJkYzQyYTMzYTkxZi4uYjBjMTdjYzI2NTBiMjU5YTIzMTU0MmI4YjU1ODlmMGQzNTYy
MzllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKaW5k
ZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMWQ3MjMxMGIzZTgz
OTgyOTY2OWM2OWRjNzY0YmU3YmEyMDc4ODExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtOTIsNyArOTIsNyBAQCBib29sIFNWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCwgY29ucwogewogICAgIEZFVHVyYnVsZW5jZSogdHVyYnVsZW5jZSA9IHN0YXRpY19jYXN0
PEZFVHVyYnVsZW5jZSo+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0
eXBlQXR0cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFR5cGUodHlwZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFR1cmJ1bGVuY2VUeXBlKHR5cGUoKSk7CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpCiAgICAgICAgIHJldHVy
biB0dXJidWxlbmNlLT5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpKTsKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKQpAQCAtMTE3LDExICsxMTcsMTEg
QEAgdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgp
IDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJlcXVl
bmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGls
ZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgICAgICByZXR1cm4geyB9OworICAg
IHJldHVybiB7IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwg
YmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0g
U1ZHX1NUSVRDSFRZUEVfU1RJVENIKSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUw
YTQwZTM0MjY3NzY5ZTE5OGEuLjA4MDNjMWUyOTJiMzhkODMwMTdlZWI5MTA2MTEwODBhMjFkZWM3
NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAt
MTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBv
dmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVl
bmN5WCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAppbmRleCA1NTc4YjUxOWEzNjIyYmQ3MDZhZDI3YmZlNGM2
MDAzOTE0ODU4Y2EwLi45YzQzMTEzNGE4NzcwNGYwNjQ5ZDkyMmJhOTcxNjM2ZGQyNWUxYzk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
Y3BwCmluZGV4IGZmNTIyMzA5NDY2YjA0MGJlZjA4OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjc3MWE0
MTZlZjBlZjA1NTgyZDcyOTgxYTMwY2M5ZDYyZTY1MjlmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
Y3BwCkBAIC0yNSw5ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkz
LDIyICs5MSw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpj
aGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwog
fQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFT
U0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZp
bHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAo
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3Qt
PnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQog
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oCmluZGV4IGM5OGIxM2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcu
LjcyNWE4NzAxNTk4ZmFmZmE2ZWRiYWIwMTYxMzAwNzRhZTU0NzJmZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKQEAgLTM2LDEyICszNiw2IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxlbWVudCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMpOwogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRl
ckVmZmVjdCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8vIFJldHVybnMg
dHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KLSAg
ICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKLQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQ
cm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LCBTVkdFbGVtZW50PjsKIAogICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkgY29uc3QgeyBy
ZXR1cm4gbV94LT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtNTYsNiArNTAsMTAgQEAgcHVibGljOgog
ICAgIFNWR0FuaW1hdGVkTGVuZ3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJuIG1faGVpZ2h0
OyB9CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyByZXR1cm4gbV9y
ZXN1bHQ7IH0KIAorICAgIHZpcnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
ID0gMDsKKyAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50
IGZyb20gdGhlIG9sZCBvbmUuCisgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJp
YnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisKIHByb3RlY3RlZDoK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggMzg1YWYyOTA4NDhhM2QwYjgzZjEyYWM5NjE5
ZTZiZjk2YzlmMjM5Ni4uN2VlODljYTcyMGY4YTAwYWFiNGJmMjZhZDAwMGRiYWVjMTdlMzhhYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEzMCArMjQsODEgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGRUltYWdlLmgiCiAKLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRw
dXQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJ
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVB
c3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAg
ICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFz
cGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZShTb3VyY2VJbWFnZSYmIHNv
dXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShXVEZNb3ZlKHNv
dXJjZUltYWdlKSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1GRUltYWdlOjpGRUltYWdl
KEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVm
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1fdHJlZVNj
b3BlKCZ0cmVlU2NvcGUpCi0gICAgLCBtX2hyZWYoaHJlZikKK0ZFSW1hZ2U6OkZFSW1hZ2UoU291
cmNlSW1hZ2UmJiBzb3VyY2VJbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
JiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFSW1hZ2Up
CisgICAgLCBtX3NvdXJjZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKQogICAgICwgbV9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdl
PiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4g
aW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RS
YXRpbykKK0Zsb2F0UmVjdCBGRUltYWdlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
SW1hZ2UoZmlsdGVyLCBpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwotfQorICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotUmVmPEZFSW1hZ2U+IEZF
SW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYg
dHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUltYWdlKGZpbHRlciwgdHJlZVNjb3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7
Ci19Ci0KLXZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAg
IEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0Owot
ICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXpl
KCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJl
Y3QsIHNyY1JlY3QpOwotICAgIH0gZWxzZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBy
ZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRl
VHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50
ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1SZW5kZXJFbGVtZW50KiBGRUltYWdlOjpyZWZlcmVu
Y2VkUmVuZGVyZXIoKSBjb25zdAotewotICAgIGlmICghbV90cmVlU2NvcGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRF
bGVtZW50RnJvbUlSSVN0cmluZyhtX2hyZWYsICptX3RyZWVTY29wZSk7Ci0gICAgaWYgKCFpczxT
VkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiB0YXJnZXQuZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoYXV0byogaW1hZ2Ug
PSBXVEY6OmdldF9pZjxSZWY8SW1hZ2U+PihtX3NvdXJjZUltYWdlKSkgeworICAgICAgICBhdXRv
IHNyY1JlY3QgPSBGbG9hdFJlY3QgeyB7IH0sICgqaW1hZ2UpLT5zaXplKCkgfTsKKyAgICAgICAg
bV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZHJhd2luZ1JlY3QsIHNyY1JlY3Qp
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVn
aW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFSW1hZ2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFSW1hZ2U6OmFwcGx5U29mdHdhcmUoRmls
dGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVy
KiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdl
ICYmICFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRkVJbWFnZSByZXN1bHRz
IGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0
byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlcigp
LmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdCA9IHJl
c3VsdC5wcmltaXRpdmVTdWJyZWdpb24oKTsKICAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAgICBp
ZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwot
ICAgIGVsc2UgewotICAgICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9p
bWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJl
Y3QoZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIH0KLQotICAgIEludFBvaW50IHBhaW50TG9jYXRp
b24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgZGVzdFJlY3QubW92ZSgt
cGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7Ci0KLSAgICBhdXRvJiBjb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGlmIChyZW5kZXJlcikgewotICAg
ICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCku
YWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVU
cmFuc2Zvcm0pOwotCi0gICAgICAgIFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRvd25jYXN0PFNWR0Vs
ZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwotICAgICAgICBpZiAoY29udGV4dE5vZGUtPmhh
c1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0
aENvbnRleHQoY29udGV4dE5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgRmxvYXRTaXplIHZpZXdw
b3J0U2l6ZTsKIAotICAgICAgICAgICAgLy8gSWYgd2UncmUgcmVmZXJlbmNpbmcgYW4gZWxlbWVu
dCB3aXRoIHBlcmNlbnRhZ2UgdW5pdHMsIGVnLiA8cmVjdCB3aXRoPSIzMCUiPiB0aG9zZSB2YWx1
ZXMgd2VyZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSB2aWV3cG9ydC4KLSAgICAgICAgICAgIC8vIEJ1
aWxkIHVwIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGZyb20gdGhlIHZpZXdwb3J0IHNwYWNl
IHRvIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHN1YnJlZ2lvbi4KLSAgICAgICAgICAgIGlmIChsZW5n
dGhDb250ZXh0LmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC5jb25jYXRDVE0obWFrZU1hcEJldHdlZW5SZWN0cyhGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCB2aWV3cG9ydFNpemUpLCBkZXN0UmVjdCkpOworICAgIGF1dG8gZHJhd1NvdXJjZUlt
YWdlID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGlt
YWdlKSB7CisgICAgICAgICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6
ZSgpIH07CisgICAgICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChk
cmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBkcmF3aW5nUmVjdCA9IGdlb21ldHJ5
LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoZHJhd2luZ1JlY3QsIHJlc3VsdC5k
cmF3aW5nUmVjdCgpKTsKKyAgICAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKGltYWdlLCBkcmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAgICAgIH0sCisgICAgICAgIFsm
XShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgc3Jj
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfTsKKyAg
ICAgICAgICAgIGRyYXdpbmdSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRD
b29yZGluYXRlcyhkcmF3aW5nUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgICAgICAg
ICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWN0LCBzcmNSZWN0KTsKICAgICAgICAgfQorICAgICk7CiAKLSAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICAgICAgU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVuZGVyZXIsIGNvbnRlbnRU
cmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgV1RGOjp2aXNpdChk
cmF3U291cmNlSW1hZ2UsIG1fc291cmNlSW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCitG
aWx0ZXJSZXN1bHQqIEZFSW1hZ2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRy
eSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAoreworICAgIGlm
IChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJl
Y3QsIHNyY1JlY3QpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxs
cHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3RyZWFtJiBGRUltYWdlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
LSAgICBGbG9hdFNpemUgaW1hZ2VTaXplOwotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBpbWFn
ZVNpemUgPSBtX2ltYWdlLT5zaXplKCk7Ci0gICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBpbWFnZVNpemUgPSBlbmNsb3Np
bmdJbnRSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKS5zaXpl
KCk7CisgICAgYXV0byBzb3VyY2VJbWFnZVNpemUgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAg
ICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsgcmV0dXJuIGltYWdlLT5zaXplKCk7IH0s
CisgICAgICAgIFsmXShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeyByZXR1
cm4gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7IH0KKyAgICApOworCisgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZSA9IFdURjo6dmlzaXQoc291cmNlSW1hZ2VTaXplLCBtX3NvdXJjZUltYWdlKTsK
KwogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlSW1hZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgaW1h
Z2Utc2l6ZT1cIiIgPDwgaW1hZ2VTaXplLndpZHRoKCkgPDwgIngiIDw8IGltYWdlU2l6ZS5oZWln
aHQoKSA8PCAiXCJdXG4iOwogICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBkdW1wIGFsc28gb2Jq
ZWN0IHJldHVybmVkIGJ5IFNWR0ZFSW1hZ2U6OmltYWdlKCkgPwogICAgIHJldHVybiB0czsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRl
eCBhYzE2MGVkY2U3YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li5lYmY5MzRhNDIwYzg0
ZGM1YzljOTUwY2M4NDFhMmViNjIzMzM3MmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNywzNiArMjgsMzEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEltYWdlOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFRyZWVTY29wZTsK
IAogY2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJ
bWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBS
ZWY8RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICB1
c2luZyBTb3VyY2VJbWFnZSA9IFZhcmlhbnQ8UmVmPEltYWdlPiwgUmVmPEltYWdlQnVmZmVyPj47
CisKKyAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZShTb3VyY2VJbWFnZSYmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5G
RUltYWdlKCkgPSBkZWZhdWx0OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXIm
LCBUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUmKTsKKyAgICBGRUltYWdlKFNvdXJjZUltYWdlJiYsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJGRUltYWdlIjsgfQogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJF
ZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9
CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkKKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgUmVuZGVyRWxlbWVudCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpIGZpbmFsOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICAvLyBtX3RyZWVTY29wZSB3aWxs
IG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0gICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7IG51
bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVmOworICAgIFNvdXJjZUltYWdlIG1fc291cmNlSW1h
Z2U7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RSYXRp
bzsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcu
LjAzMmY0N2E5YzNlNTVjNWI3ZDUyNWI4YzA0NTk5MjdjMzMzOWQ1ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxMTYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUg
IkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRl
ICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJz
b2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdl
dEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwg
bV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0Zp
bHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBG
aWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRpbkVmZmVjdHM7CisgICAgaWYgKHByZXZpb3VzRWZmZWN0
KQorICAgICAgICBidWlsdGluRWZmZWN0cy5hcHBlbmQoUmVmPEZpbHRlckVmZmVjdD4oKnByZXZp
b3VzRWZmZWN0KSk7CisgICAgZWxzZQorICAgICAgICBidWlsdGluRWZmZWN0cy5hcHBlbmQoU291
cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOworICAgIGJ1aWx0aW5FZmZlY3RzLmFwcGVuZChTb3VyY2VB
bHBoYTo6Y3JlYXRlKCkpOworCisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgIGF1
dG8gW2ZpbHRlckVmZmVjdHMsIGV4cHJlc3Npb25dID0gYnVpbGRlci5idWlsZEVmZmVjdHMoZmls
dGVyRWxlbWVudCwgYnVpbHRpbkVmZmVjdHMpOworICAgIGlmIChmaWx0ZXJFZmZlY3RzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlKFdURk1v
dmUoYnVpbHRpbkVmZmVjdHMpLCBXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJl
c3Npb24pLCByZW5kZXJpbmdNb2RlKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVy
OjpjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhw
cmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKK3sKKyAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRpbkVmZmVjdHMgPSB7IFNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gY3JlYXRlKFdURk1v
dmUoYnVpbHRpbkVmZmVjdHMpLCBXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJl
c3Npb24pLCByZW5kZXJpbmdNb2RlKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVy
OjpjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVj
dFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9u
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTVkdGaWx0ZXIoV1RGTW92ZShidWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0
cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIHJlbmRlcmluZ01vZGUpKTsKK30KKworU1ZHRmlsdGVy
OjpTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVm
ZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNz
aW9uLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVyaW5n
TW9kZSwgVHlwZTo6U1ZHRmlsdGVyKQorICAgICwgbV9idWlsdGluRWZmZWN0cyhXVEZNb3ZlKGJ1
aWx0aW5FZmZlY3RzKSkKKyAgICAsIG1fZmlsdGVyRWZmZWN0cyhXVEZNb3ZlKGZpbHRlckVmZmVj
dHMpKQorICAgICwgbV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCit7CisgICAgQVNT
RVJUKG1fYnVpbHRpbkVmZmVjdHMuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVCghbV9maWx0ZXJF
ZmZlY3RzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsK
K30KKworUmVmPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0KEZpbHRlckVm
ZmVjdDo6VHlwZSB0eXBlLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBtX2Fic29sdXRl
RmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOwor
ICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykKKyAgICAg
ICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHNbMF07CisKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0
c1sxXTsKKworICAgIEFTU0VSVChpbmRleCA8IG1fZmlsdGVyRWZmZWN0cy5zaXplKCkpOworICAg
IHJldHVybiBtX2ZpbHRlckVmZmVjdHNbaW5kZXhdOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVy
OjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXI6Omxhc3RFZmZlY3QoKSBjb25zdAogewotICAgIGlmICht
X2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdC
b3guc2l6ZSgpOworICAgIGlmIChtX2V4cHJlc3Npb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdID0gbV9leHByZXNzaW9u
Lmxhc3QoKTsKKyAgICByZXR1cm4gaW5kZXhlZEVmZmVjdCh0eXBlLCBpbmRleCk7Cit9CisKK0Zp
bHRlclJlc3VsdCogU1ZHRmlsdGVyOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVy
UmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgaWYgKCFsYXN0RWZmZWN0KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFzdGFjay5pc0VtcHR5KCkpCisgICAg
ICAgIHNvdXJjZUltYWdlID0gc3RhY2sudGFrZUxhc3QoKS0+aW1hZ2VCdWZmZXIoKTsKIAotICAg
IHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1
dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9maWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIGlmIChh
dXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBtX2V4
cHJlc3Npb24pIHsKKyAgICAgICAgYXV0byBlZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5cGUsIGlu
ZGV4KTsKKyAgICAgICAgYXV0byBib3VuZGFyeVNldCA9IGdlb21ldHJ5LmJvdW5kYXJ5U2V0KHR5
cGUsIGluZGV4KTsKKworICAgICAgICBhdXRvIHJlc3VsdCA9IGVmZmVjdC0+YXBwbHkob3V0cHV0
LCBzdGFjaywgc291cmNlSW1hZ2UsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CisgICAgICAgIGlm
ICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3RhY2su
YXBwZW5kKHsgKnJlc3VsdCB9KTsKKyAgICAgICAgb3V0cHV0LnJlc3VsdHMoKS5hZGQoV1RGTW92
ZShlZmZlY3QpLCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0KSk7CisgICAgfQorCisgICAgQVNT
RVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VMYXN0
KCk7CisgICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOworICAgIHJldHVybiAmcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotUmVmPFNW
R0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
biByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdG
aWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFy
Z2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBhdXRv
IGVuZCA9IG1fZXhwcmVzc2lvbi5yZW5kKCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2V4cHJl
c3Npb24ucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRvIFt0eXBlLCBp
bmRleCwgbGV2ZWxdID0gKml0OworICAgICAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUFscGhhKQorICAgICAgICAgICAgKytpdDsKKworICAgICAgICBhdXRvIGVmZmVj
dCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOworICAgICAgICBUZXh0U3RyZWFtOjpJbmRl
bnRTY29wZSBpbmRlbnRTY29wZSh0cywgbGV2ZWwpOworICAgICAgICBlZmZlY3QtPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2Rh
NDkzMDJmNWFlYTBmYjE3MDBjZi4uOTlmYTMxMDFlNjY5Yzg0ZGNkNGZhOWYzOTdlYzZlMGVlZTA0
ODEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNDEgKzIxLDQ0
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMu
aD4KKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJF
eHByZXNzaW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyRWxl
bWVudDsKK2NsYXNzIFNWR0ZpbHRlckdlb21ldHJ5OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwg
OiBwdWJsaWMgRmlsdGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKwogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Ym9vbCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVt
ZW50JiwgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIEZpbHRl
ckVmZmVjdCogcHJldmlvdXNFZmZlY3QgPSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRl
ckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiwgUmVuZGVyaW5nTW9kZSk7CisgICAgc3Rh
dGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGlu
RWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhw
cmVzc2lvbiYmLCBSZW5kZXJpbmdNb2RlKTsKIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25J
blVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVG
aWx0ZXJSZWdpb247IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgY29u
c3Q7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSkg
Y29uc3QgZmluYWw7CisgICAgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBmaWx0ZXJFZmZlY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RzOyB9CisgICAgY29uc3QgU1ZHRmlsdGVy
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQog
Ci0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQorcHJpdmF0ZToK
KyAgICBTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRl
ckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiwgUmVu
ZGVyaW5nTW9kZSk7CiAKLSAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIFJlZjxGaWx0ZXJFZmZlY3Q+IGluZGV4ZWRFZmZlY3QoRmlsdGVyRWZm
ZWN0OjpUeXBlLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmls
dGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RC
Qm94TW9kZSk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3QgZmluYWw7CisKKyAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7
CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxv
YXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0
ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotICAgIGJvb2wgbV9lZmZl
Y3RCQm94TW9kZTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9idWlsdGluRWZmZWN0czsKKyAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9maWx0ZXJFZmZlY3RzOworICAgIFNWR0ZpbHRlckV4cHJl
c3Npb24gbV9leHByZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKLSAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRl
ci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIudHlwZSgpID09IFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi50
eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcjsgfQogU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0
Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li5hY2FkMDQ2ZDgyNzJhZmFiOWM3Njg4ZTk5
NDkzMWRlOTQyMWQ5NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw4NyArMjEsMTM1IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoUmVm
UHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKK3N0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0
VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9uPiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBidWlsdGluRWZmZWN0cykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNv
dXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CisgICAgaWYgKGZpbHRlckVsZW1l
bnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBzZXR1cEJ1aWx0aW5FZmZlY3RzKGJ1aWx0aW5FZmZlY3RzKTsKKworICAg
IEZpbHRlckVmZmVjdHNJbnB1dHMgZWZmZWN0c0lucHV0czsKKyAgICBpZiAoIWJ1aWxkRWZmZWN0
cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgcmV0dXJuIHsgV1RGTW92ZShtX2ZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKG1f
ZXhwcmVzc2lvbikgfTsKK30KKwordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5F
ZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpCit7CisgICAg
bV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBidWlsdGlu
RWZmZWN0c1swXSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVj
dE5hbWUoKSwgYnVpbHRpbkVmZmVjdHNbMV0pOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsKIH0KIAotdm9p
ZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdCkKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6
OnNvdXJjZUFscGhhKCkgY29uc3QKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fbGFzdEVmZmVjdCA9IGVmZmVjdDsKKyAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQo
U291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
YWRkTmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgUmVmPEZpbHRlckVmZmVjdD4g
ZWZmZWN0KQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBtX2xhc3RFZmZl
Y3QgPSBlZmZlY3QucHRyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9i
dWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29u
dGFpbnMobmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVj
dDsKLSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVjdCk7CisgICAgbV9sYXN0
RWZmZWN0ID0gZWZmZWN0LnB0cigpOworICAgIG1fbmFtZWRFZmZlY3RzLnNldChuYW1lLCBXVEZN
b3ZlKGVmZmVjdCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVy
OjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYg
bmFtZSkgY29uc3QKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CisgICAgaWYgKG5hbWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGlmIChtX2xhc3RFZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4g
bV9sYXN0RWZmZWN0OwogCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKCkpOworICAgICAgICByZXR1cm4gc291cmNlR3JhcGhpYygp
OwogICAgIH0KIAotICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAg
ICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KGlkKTsKKyAgICBpZiAobV9idWlsdGluRWZm
ZWN0cy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0
KG5hbWUpOwogCi0gICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCk7CisgICAgcmV0dXJu
IG1fbmFtZWRFZmZlY3RzLmdldChuYW1lKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjph
cHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBlZmZl
Y3QsIFJlbmRlck9iamVjdCogb2JqZWN0KQorYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVm
ZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgRmlsdGVyRWZmZWN0c0lucHV0
cyYgZWZmZWN0c0lucHV0cykKIHsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXdseSBj
cmVhdGVkIGZpbHRlciBlZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMuY29u
dGFpbnMoZWZmZWN0KSk7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZmZWN0UmVuZGVyZXIu
Y29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZp
bHRlckVmZmVjdFNldCgpKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0g
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBpcyBub3QgcG9zc2li
bGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAgICAgICBlZmZlY3RS
ZWZlcmVuY2VzKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3QuZ2V0KCkpOwotCi0g
ICAgLy8gSWYgb2JqZWN0IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgYXR0
YWNoZWQgZm9yIHNvbWUKLSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4gbWVhbiB0aGF0IGNl
cnRhaW4gdHlwZXMgb2YgaW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8gd29yayAodGhlIExh
eW91dE9iamVjdCAtPiBGaWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBiZSBkZWZpbmVkKS4K
LSAgICBpZiAob2JqZWN0KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChvYmplY3QsIGVm
ZmVjdC5nZXQoKSk7CisgICAgZWZmZWN0c0lucHV0cy5zZXQoKnNvdXJjZUFscGhhKCksIEZpbHRl
ckVmZmVjdFZlY3RvciB7ICpzb3VyY2VHcmFwaGljKCkgfSk7CisKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gW2VmZmVjdCwgaW5wdXRz
XSA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9T
UEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSAm
JiBlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVy
cG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAg
ICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCisgICAgCisgICAgICAgIGVmZmVjdHNJbnB1dHMu
c2V0KHsgKmVmZmVjdCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVj
dChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3QgfSk7CisKKyAgICAgICAgbV9maWx0
ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkK
K2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0IFJlZjxGaWx0ZXJF
ZmZlY3Q+JiBlZmZlY3QsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1dHMs
IEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsKQogewotICAgIG1fbGFz
dEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9uYW1lZEVmZmVjdHMuY2xlYXIoKTsKLSAgICBtX2Vm
ZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlbmRlcmVyLmNsZWFyKCk7Ci0g
ICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVmZmVjdC0+dHlwZSgpID09IEZpbHRl
ckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykKKyAgICAgICAgbV9leHByZXNzaW9uLmluc2Vy
dCgwLCB7IGVmZmVjdC0+dHlwZSgpLCAwLCBsZXZlbCB9KTsKKyAgICBlbHNlIGlmIChlZmZlY3Qt
PnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAgICAgICBtX2V4
cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCksIDEsIGxldmVsIH0pOworICAgIGVs
c2UgeworICAgICAgICBBU1NFUlQobV9maWx0ZXJFZmZlY3RzLmNvbnRhaW5zKGVmZmVjdCkpOwor
ICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCksIG1fZmlsdGVy
RWZmZWN0cy5maW5kKGVmZmVjdCksIGxldmVsIH0pOworICAgIH0KKworICAgIHN0YWNrLmFwcGVu
ZChlZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdHNJbnB1dHMu
Z2V0KGVmZmVjdCkpIHsKKyAgICAgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oaW5wdXRFZmZlY3Qs
IGVmZmVjdHNJbnB1dHMsIHN0YWNrLCBsZXZlbCArIDEpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
c3RhY2subGFzdCgpLnB0cigpID09IGVmZmVjdC5wdHIoKSk7CisKKyAgICBzdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xl
YXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQorYm9vbCBTVkdGaWx0ZXJC
dWlsZGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0
c0lucHV0cykKIHsKLSAgICBpZiAoIWVmZmVjdC0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBpZiAoIW1fbGFzdEVmZmVjdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZl
Y3RSZWZlcmVuY2VzKGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZl
cmVuY2UpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBzdGFjazsKKyAgICByZXR1cm4gYnVpbGRF
eHByZXNzaW9uKHsgKm1fbGFzdEVmZmVjdCB9LCBlZmZlY3RzSW5wdXRzLCBzdGFjaywgMCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBjNzdhZTA4YmFjNjVj
M2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li45OGU2ZTg4YmQ5YjdhYzkxNGUwNGQyMjZkNjBl
MzcwYTkxYzU0MGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29t
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjggKzIxLDQzIEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgi
CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBTVkdGaWx0ZXJFbGVtZW50
OwogCiBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hTZXQ8RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZm
ZWN0U2V0OworICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBTVkdGaWx0
ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIHN0ZDo6
dHVwbGU8RmlsdGVyRWZmZWN0VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9uPiBidWlsZEVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVm
ZmVjdHMpOwogCi0gICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3Qm
IHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Ci0gICAgCi0g
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVW5pdHM7IH0KLSAgICB2b2lkIHNldFByaW1pdGl2ZVVuaXRzKFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgdW5pdHMpIHsgbV9wcmltaXRpdmVVbml0cyA9IHVuaXRzOyB9
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYg
bmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRy
PEZpbHRlckVmZmVjdD4pOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZ2V0RWZmZWN0QnlJ
ZChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0KLSAgICB2b2lkIGFwcGVu
ZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiYmLCBSZW5kZXJP
YmplY3QqKTsKLQotICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGVmZmVjdFJlZmVyZW5jZXMo
RmlsdGVyRWZmZWN0KiBlZmZlY3QpCi0gICAgewotICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9y
IGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCi0gICAgICAgIEFTU0VSVChtX2VmZmVj
dFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJl
ZmVyZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKLSAgICB9Citwcml2YXRlOgorICAgIHVzaW5n
IEZpbHRlckVmZmVjdHNJbnB1dHMgPSBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PjsKIAotICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0
cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KLSAgICBp
bmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0
KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9CisgICAgdm9pZCBzZXR1
cEJ1aWx0aW5FZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMp
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMoKSBjb25zdDsKKyAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VBbHBoYSgpIGNvbnN0OwogCi0gICAgdm9pZCBjbGVh
ckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3Qq
KTsKKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxG
aWx0ZXJFZmZlY3Q+KTsKKyAgICBib29sIGJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jiwg
RmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi1wcml2YXRlOgotICAgIGlubGluZSB2b2lkIGFkZEJ1
aWx0aW5FZmZlY3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9idWls
dGluRWZmZWN0cy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQo
ZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0gICAgfQorICAgIGJvb2wgYnVpbGRFeHByZXNz
aW9uKGNvbnN0IFJlZjxGaWx0ZXJFZmZlY3Q+JiwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYs
IEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsKTsKKyAgICBib29sIGJ1
aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CiAKLSAgICBIYXNoTWFw
PEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOwotICAg
IEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3Rz
OwotICAgIC8vIFRoZSB2YWx1ZSBpcyBhIGxpc3QsIHdoaWNoIGNvbnRhaW5zIHRob3NlIGZpbHRl
ciBlZmZlY3RzLAotICAgIC8vIHdoaWNoIGRlcGVuZHMgb24gdGhlIGtleSBmaWx0ZXIgZWZmZWN0
LgotICAgIEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZpbHRlckVmZmVjdFNldD4gbV9l
ZmZlY3RSZWZlcmVuY2VzOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRWZmZWN0
Kj4gbV9lZmZlY3RSZW5kZXJlcjsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9maWx0ZXJFZmZl
Y3RzOworICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gbV9leHByZXNzaW9uOwogCisgICAgSGFzaE1h
cDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKKyAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKICAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7Ci0gICAgRmxvYXRSZWN0IG1fdGFy
Z2V0Qm91bmRpbmdCb3g7Ci0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2
ZVVuaXRzIHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07CiB9
OwotICAgIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmI1MDJhZGE5NjI3MGU1MDE5MzJjNmMwN2I1ZjQ3OTU2MjQwM2I0NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4
cHJlc3Npb24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIFNWR0ZpbHRlckV4cHJlc3Npb24gPSBWZWN0b3I8c3RkOjp0dXBsZTxGaWx0ZXJFZmZlY3Q6
OlR5cGUsIHVuc2lnbmVkLCB1bnNpZ25lZD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJH
ZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE3MjkxNjg3YzY5MmY1ZjgyZTE4YmI3MDk1NTMz
YzVlMjRkZmRjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyR2VvbWV0cnkuaCIKKworI2luY2x1ZGUgIkVsZW1lbnRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBo
YS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyR2VvbWV0cnk+IFNWR0ZpbHRlckdlb21ldHJ5Ojpj
cmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbikKK3sKKyAgICBhdXRvIHByaW1pdGl2ZVVu
aXRzID0gZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpOworICAgIGF1dG8gZ2VvbWV0cnkg
PSBtYWtlVW5pcXVlPFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJSZWdpb24sIHNvdXJjZUltYWdl
UmVjdCwgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZVVuaXRzLCBhYnNvbHV0ZVRyYW5zZm9y
bSwgcmVzb2x1dGlvbik7CisgICAgaWYgKCFnZW9tZXRyeSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBnZW9tZXRyeS0+YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoZmlsdGVy
RWxlbWVudCk7CisgICAgcmV0dXJuIGdlb21ldHJ5OworfQorCitTVkdGaWx0ZXJHZW9tZXRyeTo6
U1ZHRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzLCBBZmZpbmVUcmFu
c2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbikKKyAg
ICA6IEZpbHRlckdlb21ldHJ5KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0KQorICAgICwg
bV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKKyAgICAsIG1fcHJpbWl0aXZl
VW5pdHMocHJpbWl0aXZlVW5pdHMpCisgICAgLCBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRl
VHJhbnNmb3JtKQorICAgICwgbV9yZXNvbHV0aW9uKHJlc29sdXRpb24pCit7Cit9CisKK3ZvaWQg
U1ZHRmlsdGVyR2VvbWV0cnk6OmJ1aWxkRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRl
ckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihm
aWx0ZXJFbGVtZW50KSkgeworICAgICAgICBhdXRvIGJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250
ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gp
OworICAgICAgICAKKyAgICAgICAgT3B0aW9uU2V0PEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncz4g
ZmxhZ3M7CisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
eEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6
SGFzWCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp5QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdz
OjpIYXNZKTsKKworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OndpZHRoQXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6
OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmli
dXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJC
b3VuZGFyeVNldDo6RmxhZ3M6Okhhc0hlaWdodCk7CisKKyAgICAgICAgbV9GaWx0ZXJFZmZlY3RC
b3VuZGFyeVNldHMuYXBwZW5kKHsgYm91bmRhcmllcywgZmxhZ3MgfSk7CisgICAgfQorfQorCitG
aWx0ZXJCb3VuZGFyeVNldCBTVkdGaWx0ZXJHZW9tZXRyeTo6Ym91bmRhcnlTZXQoRmlsdGVyRWZm
ZWN0OjpUeXBlIHR5cGUsIHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlmICh0eXBlID09
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYyB8fCB0eXBlID09IEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlQWxwaGEpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgaWYg
KGluZGV4ID49IG1fRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzLnNpemUoKSkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIG1fRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzW2luZGV4XTsKK30KKworRmxvYXRS
ZWN0IFNWR0ZpbHRlckdlb21ldHJ5Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIGFic29sdXRlUmVjdCA9IG1fYWJz
b2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKKyAgICBhYnNvbHV0ZVJlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVSZWN0OworfQorCitGbG9hdFNpemUgU1ZH
RmlsdGVyR2VvbWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRT
aXplJiBzaXplKSBjb25zdAoreworICAgIHJldHVybiBzaXplICogbV9yZXNvbHV0aW9uICogRmxv
YXRTaXplKG1fYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIG1fYWJzb2x1dGVUcmFuc2Zvcm0u
eVNjYWxlKCkpOworfQorCitGbG9hdFNpemUgU1ZHRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0Zp
bHRlckNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAo
bV9wcmltaXRpdmVVbml0cyA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpCisgICAgICAgIHJldHVybiBzaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXpl
KCk7CisgICAgcmV0dXJuIHNpemU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21l
dHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9t
ZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNlOGVmZmE4NmQzZjQxZWYyZDhmYzlkYmI1ODA2ZjZlNGVjYTBh
MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUg
IlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKKworY2xh
c3MgU1ZHRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRmlsdGVyR2VvbWV0cnk+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbik7CisKKyAgICBTVkdGaWx0ZXJH
ZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMsIEFmZmluZVRyYW5zZm9ybSBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiByZXNvbHV0aW9uKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGJ1aWxkRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRlckVsZW1lbnQm
KTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07IH0KKyAgICBGbG9hdFNpemUgcmVzb2x1
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVzb2x1dGlvbjsgfQorCisgICAgRmls
dGVyQm91bmRhcnlTZXQgYm91bmRhcnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCBp
bmRleCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgY29udmVydFRvQWJzb2x1dGVD
b29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0
U2l6ZSBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
IG92ZXJyaWRlOworICAgIAorICAgIEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRl
cyhjb25zdCBGbG9hdFNpemUmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3Rh
cmdldEJvdW5kaW5nQm94OworCisgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1p
dGl2ZVVuaXRzOworICAgIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4gbV9GaWx0ZXJFZmZlY3RC
b3VuZGFyeVNldHM7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsK
KyAgICBGbG9hdFNpemUgbV9yZXNvbHV0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAppbmRleCAwZDQ4ODY3YTk4ZjZlNDMxMjgy
ZjMyMDRkZTUwZDZmMjA5NDAzNzQzLi5hNmQzNzYwMGY2MTZhOTMyOTRjNmYzM2UyZjQ5Mjc0MzM5
YjU4OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcApAQCAtMTk4Niw3ICsxOTg2
LDcgQEAgeXlyZWR1Y2U6CiAjbGluZSA0MTkgIldlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55Igog
ICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhw
cmVzc2lvbj4+PiBwcmVkaWNhdGVMaXN0KCh5eXZzcFsoMikgLSAoMildLmV4cHJlc3Npb25WZWN0
b3IpKTsKLSAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IEZpbHRlcihzdGQ6OnVuaXF1
ZV9wdHI8RXhwcmVzc2lvbj4oKHl5dnNwWygxKSAtICgyKV0uZXhwcmVzc2lvbikpLCBXVEZNb3Zl
KCpwcmVkaWNhdGVMaXN0KSk7CisgICAgICAgICh5eXZhbC5leHByZXNzaW9uKSA9IG5ldyBYUGF0
aDo6RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5l
eHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICA7fQogICAgIGJyZWFr
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKaW5kZXggNzc2OThmYTc2NGY3YTE1YTQ1YmM1
YzBlNWQyZDY3NzUxYjFiZTcwZi4uZGQ3OGE1YmQ5ZjgwNjczNzAyYmY0NGM2MDc2ZGQyZDJkMDBk
MTAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQpAQCAtNDE1LDcgKzQxNSw3IEBAIEZp
bHRlckV4cHI6CiAgICAgUHJpbWFyeUV4cHIgUHJlZGljYXRlTGlzdAogICAgIHsKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+PiBwcmVk
aWNhdGVMaXN0KCQyKTsKLSAgICAgICAgJCQgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxF
eHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAgICAgJCQgPSBu
ZXcgWFBhdGg6OkZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4oJDEpLCBXVEZNb3Zl
KCpwcmVkaWNhdGVMaXN0KSk7CiAgICAgfQogICAgIDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CmluZGV4IGZjY2VkN2Q1MWEyMTIyYTYwMDQ4OTllMTllMzgwY2JkNTg1NzIxZjEuLmFhOTljNjdl
NDgyNGZiNDI5YTUyNjU2YmQxMDIwZjY4ZmRkNzdlMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRl
ICJEaXNwbGF5TGlzdFJlYWRlckhhbmRsZS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBAIC01MjcsNiArNTI5LDM1IEBAIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXJXaXRo
UXVhbGlmaWVkSWRlbnRpCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsK
IH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1h
Z2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6Rmls
dGVyUmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNlLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlJiYgZ2VvbWV0cnlSZWZlcmVuY2UsCisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFy
ZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJl
bmNlLnRha2VGaWx0ZXIoKTsKKyAgICBhdXRvIGdlb21ldHJ5ID0gZ2VvbWV0cnlSZWZlcmVuY2Uu
dGFrZUdlb21ldHJ5KCk7CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
OworICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3Vy
Y2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdl
QnVmZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgICAg
ICBpZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xv
clNwYWNlKCkgfSk7CisgICAgICAgIGlmICghYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUoaGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRp
dmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAg
Ly8gSW1tZWRpYXRlbHkgdHVybiB0aGUgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyICh3aGlj
aCBpcyBlcnJvci1wcm9uZSkgdG8gYSBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCA0MTlhZTZkMTZmNzJkN2Q1OTMxNDFmZTIyOTZh
Y2ZlNjlhMWM1OTBjLi42MzQ5ZDhmMzQzMzRkOTJkYjFjNDQ3ZDY4OTQ3YWJlODJmMTcxMmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTYwLDYgKzYwLDExIEBAIGVudW0gY2xhc3MgUmVuZGVy
aW5nTW9kZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZl
cmVuY2U7CitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlOwpAQCAtMTQzLDYgKzE0OCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9y
SW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0U2hhcmVh
YmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgZ2V0RmlsdGVyZWRJbWFn
ZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgSVBD
OjpGaWx0ZXJSZWZlcmVuY2UmJiwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSYmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2
b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJl
ZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDFlZjU2ZGNjOTc2Mjc0ZTM1NmFi
MjJiNGVhNGU3MWJjZmFjMGIwZGYuLjI0YmUzNmY2MTZiYTdmM2U4MjE4MTFiNjI0M2E4NTJjMTI2
Zjg2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0zMiw2
ICszMiw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgewogICAgIEdldERh
dGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3Vz
CiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3lu
Y2hyb25vdXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCisgICAgR2V0RmlsdGVy
ZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyLCBJUEM6OkZpbHRlckdl
b21ldHJ5UmVmZXJlbmNlIGdlb21ldHJ5KSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCiAgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICBDYWNoZUZvbnQoSVBD
OjpGb250UmVmZXJlbmNlIGZvbnQpCiAgICAgRGVsZXRlQWxsRm9udHMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWY5YmVhZGUxYmEwNzkwY2NkZDY5ZmNiZjAzOGI4Y2M0Nzc3YTJiNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbHRlckdlb21ldHJ5Lmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2Uoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQorICAgICAg
ICA6IG1fZ2VvbWV0cnkoV1RGTW92ZShnZW9tZXRyeSkpCisgICAgeworICAgIH0KKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4gdGFrZUdlb21ldHJ5KCkgeyBy
ZXR1cm4gV1RGTW92ZShtX2dlb21ldHJ5KTsgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiBtX2dlb21ldHJ5OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43NTE0OGUwOWUxN2M3NjEwYmE4OTg3ZDUwZWFkYjcwZTgxNzk2YzVh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVm
ZXJlbmNlLmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXIuaCIKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTRmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU9mZnNldC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyRWZmZWN0VmVjdG9yLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TVkdGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZpbHRlckV4cHJlc3Npb24u
aD4KKworbmFtZXNwYWNlIElQQyB7CisKK0ZpbHRlclJlZmVyZW5jZTo6RmlsdGVyUmVmZXJlbmNl
KFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmlsdGVyKQorICAgIDogbV9maWx0ZXIoV1RGTW92ZShm
aWx0ZXIpKQoreworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAgQVNT
RVJUKGVmZmVjdC50eXBlKCkgPj0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1pbmlt
dW0gJiYgZWZmZWN0LnR5cGUoKSA8PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWF4
aW11bSk7CisKKyAgICBlbmNvZGVyIDw8IGVmZmVjdC50eXBlKCk7CisKKyAgICBzd2l0Y2ggKGVm
ZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUJsZW5kOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JN
YXRyaXg6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25l
bnRUcmFuc2ZlcjoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNv
bXBvc2l0ZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZv
bHZlTWF0cml4OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
RGlzcGxhY2VtZW50TWFwOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFRHJvcFNoYWRvdzoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUZsb29kOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3Np
YW5CbHVyOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2U6
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZToKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZz
ZXQ6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFT2Zmc2V0PihlZmZlY3QpLmVuY29kZShl
bmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVUaWxlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljOgorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZW5jb2RlU1ZH
RmlsdGVyKGNvbnN0IFdlYkNvcmU6OlNWR0ZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVy
KQoreworICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0Zp
bHRlcjsKKworICAgIGF1dG8mIGZpbHRlckVmZmVjdHMgPSBmaWx0ZXIuZmlsdGVyRWZmZWN0cygp
OworICAgIGVuY29kZXIgPDwgZmlsdGVyRWZmZWN0cy5zaXplKCk7CisKKyAgICBmb3IgKGF1dG8m
IGVmZmVjdCA6IGZpbHRlckVmZmVjdHMpCisgICAgICAgIGVuY29kZUZpbHRlckVmZmVjdChlZmZl
Y3QsIGVuY29kZXIpOworICAgIAorICAgIGF1dG8mIGV4cHJlc3Npb24gPSBmaWx0ZXIuZXhwcmVz
c2lvbigpOworICAgIGVuY29kZXIgPDwgZXhwcmVzc2lvbi5zaXplKCk7CisKKyAgICBmb3IgKGF1
dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBleHByZXNzaW9uKSB7CisgICAgICAgIGVuY29kZXIg
PDwgdHlwZTsKKyAgICAgICAgZW5jb2RlciA8PCBpbmRleDsKKyAgICAgICAgZW5jb2RlciA8PCBs
ZXZlbDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUNTU0ZpbHRlcihjb25zdCBXZWJD
b3JlOjpDU1NGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNvZGVy
IDw8IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7CisgICAgZW5jb2Rl
ciA8PCBmaWx0ZXIuZnVuY3Rpb25zKCkuc2l6ZSgpOworICAgIAorICAgIGZvciAoYXV0byYgZnVu
Y3Rpb24gOiBmaWx0ZXIuZnVuY3Rpb25zKCkpIHsKKyAgICAgICAgaWYgKGlzPFdlYkNvcmU6OlNW
R0ZpbHRlcj4oZnVuY3Rpb24pKQorICAgICAgICAgICAgZW5jb2RlU1ZHRmlsdGVyKGRvd25jYXN0
PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGRvd25jYXN0PFdlYkNvcmU6OkZp
bHRlckVmZmVjdD4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICB9Cit9CisKK3N0YXRp
YyBSZWZQdHI8V2ViQ29yZTo6RmlsdGVyRWZmZWN0PiBkZWNvZGVGaWx0ZXJFZmZlY3QoRGVjb2Rl
ciYgZGVjb2RlciwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKK3sKKyAgICBp
ZiAoISh0eXBlID49IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1pbmltdW0gJiYg
dHlwZSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZDoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4OgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGU6CisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeDoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZzoKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZDoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFTWVyZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVNb3JwaG9sb2d5OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBpZiAoYXV0byBlZmZl
Y3QgPSBXZWJDb3JlOjpGRU9mZnNldDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0
dXJuIHsgKCplZmZlY3QpLnB0cigpIH07CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZToKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGE6CisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhpYzoKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTVkdGaWx0ZXI+IGRlY29k
ZVNWR0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90
PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFdlYkNvcmU6OkZpbHRlckVmZmVjdFZlY3Rv
ciBmaWx0ZXJFZmZlY3RzOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7
ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgICAgICBhdXRvIGVmZmVjdCA9
IGRlY29kZUZpbHRlckVmZmVjdChkZWNvZGVyLCAqdHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgICAgIGZpbHRlckVmZmVj
dHMuYXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBkZWNvZGVy
ID4+IHNpemU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBXZWJDb3JlOjpTVkdGaWx0ZXJFeHByZXNzaW9uIGV4cHJlc3Npb247CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlPiB0eXBlOworICAgICAgICBkZWNv
ZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gaW5kZXg7Cisg
ICAgICAgIGRlY29kZXIgPj4gaW5kZXg7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsZXZl
bDsKKyAgICAgICAgZGVjb2RlciA+PiBsZXZlbDsKKyAgICAgICAgaWYgKCFsZXZlbCkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGV4cHJlc3Npb24uYXBwZW5kKHsgKnR5
cGUsICppbmRleCwgKmxldmVsIH0pOworICAgIH0KKworICAgIHJldHVybiBXZWJDb3JlOjpTVkdG
aWx0ZXI6OmNyZWF0ZShXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJlc3Npb24p
LCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKK30KKworc3RhdGljIFJl
ZlB0cjxXZWJDb3JlOjpDU1NGaWx0ZXI+IGRlY29kZUNTU0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6
ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24+PiBmdW5jdGlvbnM7CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVj
b2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OlNWR0ZpbHRlcikgeworICAgICAgICAgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2RlU1ZH
RmlsdGVyKGRlY29kZXIpKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChmaWx0
ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gZWZmZWN0ID0gZGVjb2RlRmlsdGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAgICAg
ICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisg
ICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0K
KworICAgIHJldHVybiBXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9u
cyksIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworfQorCitzdGF0aWMg
UmVmUHRyPFdlYkNvcmU6OkZpbHRlcj4gZGVjb2RlRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsK
KyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
Q1NTRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlQ1NTRmlsdGVyKGRlY29kZXIpOworCisg
ICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIp
CisgICAgICAgIHJldHVybiBkZWNvZGVTVkdGaWx0ZXIoZGVjb2Rlcik7CisgICAgCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUZpbHRlcihjb25zdCBXZWJDb3Jl
OjpGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBpZiAoaXM8V2ViQ29y
ZTo6Q1NTRmlsdGVyPihmaWx0ZXIpKQorICAgICAgICBlbmNvZGVDU1NGaWx0ZXIoZG93bmNhc3Q8
V2ViQ29yZTo6Q1NTRmlsdGVyPihmaWx0ZXIpLCBlbmNvZGVyKTsKKyAgICBlbHNlCisgICAgICAg
IGVuY29kZVNWR0ZpbHRlcihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZpbHRlciksIGVu
Y29kZXIpOworfQorCit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlRmlsdGVyKG1fZmlsdGVyLCBlbmNvZGVyKTsKK30KKwor
c3RkOjpvcHRpb25hbDxGaWx0ZXJSZWZlcmVuY2U+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2RlRmlsdGVyKGRl
Y29kZXIpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSB9OworICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGMyZmEx
NDhkNGE1Y2EwNzA5NWI3MWUyZTYzZDQ2ZmM3YTM3YTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmgKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXIu
aD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEVuY29kZXI7CitjbGFzcyBEZWNvZGVyOwor
CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2UgeworcHVibGljOgorICAgIEZpbHRlclJlZmVyZW5jZShS
ZWY8V2ViQ29yZTo6RmlsdGVyPiYmKTsKKworICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IHRha2VG
aWx0ZXIoKSB7IHJldHVybiBXVEZNb3ZlKG1fZmlsdGVyKTsgfQorCisgICAgdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5j
ZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBSZWY8V2ViQ29yZTo6RmlsdGVy
PiBtX2ZpbHRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNDFjNzZiZGI4ZGE3MTY0NWYzODUzYTMzZmFkNWRk
MjVlZDc4NDQxYy4uZTc3ODQ5YTNiMmQ4YWNhYjViMzc4YzlkZWU1MzFkZDYyMmViMzU1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yOTAsNyArMjkwLDYg
QEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAg
J1dlYkNvcmU6Ok1lZGlhS2V5U3lzdGVtUmVxdWVzdElkZW50aWZpZXInLAogICAgICAgICAnV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhU2Vz
c2lvbklkZW50aWZpZXInLAotICAgICAgICAnV2ViQ29yZTo6TmF0aXZlSW1hZ2VSZWZlcmVuY2Un
LAogICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
UGxheWJhY2tUYXJnZXRDbGllbnRDb250ZXh0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3Jl
OjpQbHVnaW5Mb2FkQ2xpZW50UG9saWN5JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGM0YTg0ZTFmYjZmNDY2
YjhmYmQ1NGU2Y2E0NmM0NzI0MjJiM2IwYzguLmQzNTNlNTJiODQ2MDJjNGQyNjFkODBhM2E3ZTM0
ZTM4NmM4NWQ0MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTYzLDYgKzE2Myw3IEBAIFBsYXRmb3JtL0lQ
Qy9BdHRhY2htZW50LmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcCBA
bm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmNwcCBAbm8tdW5pZnkKK1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuY3Bw
IEBuby11bmlmeQogUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5jcHAgQG5vLXVuaWZ5CiBQbGF0
Zm9ybS9JUEMvTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9J
UEMvTWVzc2FnZVJlY2VpdmVyTWFwLmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVkMjA0MWZhNTJkZjM2YTkxNjZm
YzcyODJlMTliNjRiOTFkNDliM2UuLmFkZGEyNDg1MzU5MmVjNjJlYWQyNGJlMmRlNGYzNWZjMTIy
YmY1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTMzMiw2ICsxMzMyLDkgQEAKIAkJNzFCQUE3MzMyNUZGRDA5ODAwRDdDRDVEIC8q
IFdLTW9kZWxWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MUJBQTczMTI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLzsgfTsKIAkJ
NzFGQjgxMEIyMjYwNjI3RTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rp
c3BhdGNoUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZl
bnRzRGlzcGF0Y2hQb2xpY3kuaCAqLzsgfTsKIAkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8q
IFdlYkNvbG9yUGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMu
aCAqLzsgfTsKKwkJNzJFRTc5QkIyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlC
ODI3MEU1QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJNzJFRTc5
QkMyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlCOTI3MEU1QUI5MDA0
Q0U0MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLzsgfTsKKwkJNzJFRTc5QkQyNzBF
NUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRl
clJlZmVyZW5jZS5oICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk3NUE4RDJENjE4
N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3RDFDMDEwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwogCQk3NjJCNzQ4RDEy
MEJDNzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDg0MTIwQkJBMkQwMDgxOTMz
OSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NzAyLDYgKzQ3MDUsOSBAQAogCQk3MjhFODZGMDE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNTMxNTcyNTNDMUU0RDAwNDkyOTVBIC8qIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI1MzE1ODI1M0MxRTRE
MDA0OTI5NUEgLyogUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkVFNzlCODI3MEU1QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRUU3OUI5MjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJH
ZW9tZXRyeVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJHZW9tZXRyeVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkVF
NzlCQTI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUg
LyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJu
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3Jl
SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjQsNiArNzMzMCw5
IEBACiAJCQkJQkMwMzJEOUUxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCAqLywKIAkJCQlC
QzAzMkQ5RjEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5jcHAgKi8sCiAJCQkJQkMwMzJEQTAx
MEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuaCAqLywKKwkJCQk3MkVFNzlCOTI3MEU1QUI5MDA0
Q0U0MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLywKKwkJCQk3MkVFNzlCODI3MEU1
QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLywKKwkJCQk3MkVFNzlCQTI3MEU1
QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8sCiAJCQkJOUJEOEFCNDkyNTgyMEU1
MjAwNTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCAqLywKIAkJCQk0MTUxRTVDMzFGQkI5MEE5MDBF
NDdFMkQgLyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdFNzhEMDBC
QzBFQzQgLyogSGFuZGxlTWVzc2FnZS5oICovLApAQCAtMTIyNzYsNiArMTIyODUsOCBAQAogCQkJ
CTkzMTJCQUQ2MjZGMzNDMjkwMEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM1QjU3OUEyNkY1MTkzMzAwOEI0OEFDIC8qIEZpbGVTeXN0ZW1T
dG9yYWdlSGFuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMTJCQUQ1MjZGMzND
MjYwMEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyRUU3OUJDMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzJFRTc5QkQyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJl
ZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBCOTY2MUExOEUyNUFFMTAwQ0UxRjg4IC8q
IEZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOTBDMUY0MTI2NEZENzEwMDNFNDRE
NCAvKiBGaW5kQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5QzRBNTkxOEI4MTE3
NDAwN0JEQ0I2IC8qIEZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMTM2NjcsNyArMTM2NzgsNiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJv
amVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRlcyA9
IHsKLQkJCQlEZWZhdWx0QnVpbGRTeXN0ZW1UeXBlRm9yV29ya3NwYWNlID0gT3JpZ2luYWw7CiAJ
CQkJTGFzdFN3aWZ0VXBkYXRlQ2hlY2sgPSAxMzAwOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAx
MTQwOwogCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7CkBAIC0xNDQ1OSw2ICsxNDQ2OSw3IEBACiAJ
CQkJMkQ5MkE3ODAyMTJCNkE3MTAwRjQ5M0ZEIC8qIEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0RDREM5OUUyNDhGRThEQTAwQTY5NTIyIC8qIEVuZG93bWVudFN0YXRlVHJhY2tlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTU3NjAyMTQ5NkI5NzkwMEE0RUUwNiAvKiBFdmVudERp
c3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzJFRTc5QkIy
NzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDREE5M0RCMTIyRjhCQ0Y0MDA0OTBBNjkgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
UGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMUExNTJENzI0RTVBMjlBMDA5NzhD
OEIgLyogSGFuZGxlWFBDRW5kcG9pbnRNZXNzYWdlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI3
NDlGNjQ0MjE0NjU2MUIwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDhjZWM5MjQyNjg3
NTE0YzZjMmM3N2I3ODk4YzBhMzRjOTA3ZDViYzQuLmVlMjUxNjM0Y2FmZmNhOGNiZWFmMjEwMWVm
OGE0NmU4NzdiYjFkOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0yMDMsNiAr
MjAzLDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KTsKICAgICB9CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29u
c3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0
ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZl
cihtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5
KSk7CisgICAgfQorCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0
UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0aW9u
Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBmaW5hbAogICAg
IHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggNzcyZmJjYTY4
ZmE3ZjAzMWFkMDQyMDFlOWZlMDE2ZGVkN2I1NzE5Yi4uYTUyNGFiMWEyZWEyYzM3NDRmODQzOGJi
OTdiMDJjYjdjODlkMzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1
ZGUgIkRpc3BsYXlMaXN0V3JpdGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNl
LmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKQEAg
LTIzNyw2ICsyMzgsMjQgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4KICAgICByZXR1cm4gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKIH0KIAorUmVmUHRyPEltYWdlPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCit7CisgICAgc2Vu
ZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSBoYW5kbGU7CisgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgeyBSZWY8RmlsdGVyPiB7IGNvbnN0X2Nh
c3Q8RmlsdGVyJj4oZmlsdGVyKSB9IH0sIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UoV1RG
TW92ZShnZW9tZXRyeSkpKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZp
bHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgMV9zKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRS
ZXN1bHQpOworCisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7
CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJu
IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhh
bmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNo
ZU5hdGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKaW5kZXggMjM5NGZmNWFkYzRkNzgzYjhhZmQyZGMxMzIxZjJmNTQ3NWEyMTI4NS4u
M2JhNWE0MjM3NDVjNmQwODc1NzgzMzM5NTc1Y2I1MDlkOWIxOWQwMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJJUENTZW1hcGhvcmUuaCIKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZp
ZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYpOwogICAgIHZv
aWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVm
PFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440769</attachid>
            <date>2021-10-11 03:04:10 -0700</date>
            <delta_ts>2021-10-12 01:22:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211011030409.patch</filename>
            <type>text/plain</type>
            <size>722342</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhMDA2NDYzZjNkOGRk
NzAxZTg2ODJlNGIzZmJiZjY5NGVkNWVkMC4uMGViZDYzZTdkOTM4ZWU3YmViYThhNGU0Y2Q5MWFj
Y2NlZTRlNTRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1MyBAQAorMjAyMS0xMC0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29j
b2EubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oLgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcklm
RXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdENvcmVJbWFnZTo6aW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpzZXRCbGVuZE1v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
dHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKGlzVHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OnNldEsxKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRL
Mik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzMpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnNldEs0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBw
bHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0T3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb21wb3NpdGVPcGVy
YXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6b3BlcmF0aW9uIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0
ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6
c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpkaWZmdXNlQ29u
c3RhbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVE
aXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNl
dFhDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnNldFlDaGFubmVsU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpyZXN1
bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1h
cDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Ynl0ZU9mZnNldE9mUGl4ZWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5k
ZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVs
SW5kZXggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVGbG9vZDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9v
ZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVz
c2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoZ2F1c3NpYW5L
ZXJuZWxGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlh
dGlvblgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0
ZERldmlhdGlvblkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OnNldEVkZ2VNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9u
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRn
ZU1vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpz
ZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3Bl
Y3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRM
ZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5n
dGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9w
Um93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFp
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VD
b25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNv
bnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhw
b25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0
KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjps
aWdodGluZ0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OmxpZ2h0U291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojp0b3BMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojp0
b3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFX
aW5kb3c6OmNlbnRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpBbHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3ApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRUb3BS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0UmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxw
aGFXaW5kb3c6OnNldEJvdHRvbVJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21w
b25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojptb3JwaG9sb2d5T3BlcmF0
b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRy
YXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OnNldER5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFy
Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5n
OjpzZXRTcGVjdWxhckV4cG9uZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVT
cGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJFeHBvbmVudCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpkcmF3aW5nUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFR1cmJ1
bGVuY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVgpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5
WSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTZWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWlu
dGluZ0RhdGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR1cmJ1bGVuY2VUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpmaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNldEZpbHRlclNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6YWJzb2x1dGVUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpzZXRSZW5kZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZp
bHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRp
cGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpw
cmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldE9wZXJhdGluZ0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzQWxwaGFJ
bWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVj
dFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpv
dXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNl
dEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNZIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzV2lkdGgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNIZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFVuY2xpcHBlZEFic29s
dXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246Om91dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6RmlsdGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZp
bHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291
cmNlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Ojph
YnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6cmVzb2x1dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNv
bnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyR2VvbWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5h
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9B
YnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21l
dHJ5OjpjbGlwVG9QcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3V0
cHV0OjpjcmVhdGVGaWx0ZXJSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3V0cHV0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6
cmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OnJlbmRlcmluZ01vZGUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVz
ZW50YXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
UmVzdWx0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHQ6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Z2V0UGl4
ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpyZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29weVBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyUmVzdWx0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlclJlc3VsdDo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJSZXN1bHQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJSZXN1bHQ6OnNldElzQWxwaGFJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHRWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2lu
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFs
cGhhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKTogRGVsZXRlZC4K
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFs
aXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOgorICAgICAgICAoV2ViQ29yZTo6YXJpdGhtZXRpY1Nv
ZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseUFyaXRobWV0aWNTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlOb25Bcml0aG1ldGlj
U29mdHdhcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNv
ZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjphcHBs
eVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFw
cGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdFNvZnR3YXJl
OjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgorICAgICAg
ICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L1NvdXJjZUFscGhhU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUFscGhhOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdy
YXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6Omlu
cHV0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9j
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9y
Pjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlw
ZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RW51bVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGw6CisgICAg
ICAgICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZCBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRmxvb2RFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29u
c3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
Pjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbDoKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAq
IHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6
YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUltYWdlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
Y3JlYXRlV2l0aEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNy
ZWF0ZVdpdGhJUklSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFn
ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmluZGV4ZWRFZmZlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpsYXN0RWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZm
ZWN0UmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWls
ZGVyOjpjbGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpz
ZXRQcmltaXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckdlb21ldHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJHZW9tZXRyeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5
OjpTVkdGaWx0ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRy
eTo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyR2VvbWV0cnk6OmJvdW5kYXJ5U2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckdlb21ldHJ5Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGlu
YXRlcyBjb25zdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2Vv
bWV0cnkuaDogQWRkZWQuCisgICAgICAgICogeG1sL1hQYXRoR3JhbW1hci5jcHA6CisgICAgICAg
ICogeG1sL1hQYXRoR3JhbW1hci55OgorCiAyMDIxLTEwLTEwICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBpdGVyYXRpbmcgRmlsZVN5
c3RlbURpcmVjdG9yeUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMDk0NDkwNTE4OGQ5Zjg4N2E1ZTU3ZjMz
Y2UxMjI4MjQ2MTdlY2UzLi43NDdkNTM2NGFjNTFiMWFhODM3NTAxOTBiOGYwNzM2NTUxZDZjZGJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIxLTEwLTExICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gRW5hYmxlIGZpbHRl
cnMgaW4gR1BVIFByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMTI1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlckdlb21ldHJ5UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZTo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6dGFrZUdlb21ldHJ5KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpG
aWx0ZXJSZWZlcmVuY2UpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoSVBDOjplbmNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVDU1NGaWx0
ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoSVBDOjpk
ZWNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjpkZWNvZGVDU1NGaWx0ZXIpOgorICAgICAg
ICAoSVBDOjpkZWNvZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjplbmNvZGVGaWx0ZXIpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChJUEM6
OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmlsdGVy
UmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OnRha2VG
aWx0ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAo
dHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCk6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKwogMjAyMS0xMC0xMCAg
U2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBm
b3IgaXRlcmF0aW5nIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
MmIwM2ZhNzE5YTAxYjlkYTkyOWY4YjU5NGFhN2IwMjA4MTNiMGMwMC4uZjk2ZjJjNjE1ZDAxNDQ3
NDA1ZjA3NDUzZGJkY2M0NDNjYTUwMWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNTQsMTQgKzIw
NTQsMzQgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0
ZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09PcmlnaW5hbEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAKQEAgLTI2NDQsNiArMjY2NCw3IEBAIHN2Zy9ncmFwaGlj
cy9TVkdJbWFnZUZvckNvbnRhaW5lci5jcHAKIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyR2VvbWV0cnkuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcAog
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5jcHAK
IHN2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZUFuaW1hdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggYTRjMGE3NjI3YzM3ODFkZmNkMDQ5MDZmYzUyMzMwOWM5MDczMGMyYy4uMGJk
ZGI5OWMyMzhhZDBlNzExZDMzOTI3MGEzZWM1MWU5MWQ2NjI1NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CkBAIC0zOTgsNyArMzk4LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRp
ZXMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZmFjYjNiZGQwMjhjZjJkMDZmMGZmMThlZTAyOTYzNzg3NjA0MzE3Mi4uZWEzNTRjNDQ3
NjgzMDg5NjY0ZjU0NTU3NzQxMzFlMjdmMjYyODBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM1LDcgKzIzNSw2IEBACiAJ
CTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JG
MDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYw
M0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNW
R1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8q
IFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0
YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJG
MzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFF
QTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFF
QTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdG
QjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1
NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBG
b250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03NzcsOCArNzc2LDYgQEAKIAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENT
U051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsK
IAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAw
MERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMw
MEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1M
TWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktp
dE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtl
eU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlh
S2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAg
Ki87IH07CkBAIC0yMjk3LDcgKzIyOTQsMTggQEAKIAkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5RDA1MzAy
NTMxNDI0MzAwNDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5RDA1MkUyNTMxM0UyNjAw
NDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQTczQkVGMjQ1QTNGOTAwMDFDOUQw
MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDMzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDgzMjcwNjY3NEMwMDND
NUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVu
Y3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJEMjcxNDMw
QjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhDNCAv
KiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDOTI3MTQz
N0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0EyNzE0
MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0
NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMwQjAwMDNFODhD
NCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2
QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNW
R0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJC
QUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQTUyM0UxNzMyODAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERp
YWdub3N0aWNMb2dnaW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dp
bmdEb21haW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTI3MDAsOCArMjcwOCw2IEBACiAJCTg0MjI0MTk0MTA3
RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcg
LyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAy
MTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhT
dHJpbmdTb3VyY2UuaCAqLzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0
NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0
ZXIuaCAqLzsgfTsKLQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQy
NjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2
MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVl
cnlMaXN0RXZlbnQuaCAqLzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3Rh
bnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICov
OyB9OwogCQk4NDczMEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTI3MTEsNyArMjcx
Nyw3IEBACiAJCTg0NzMwRDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVMaWdodGluZy5oICovOyB9OwogCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgfTsKIAkJODQ3
MzBEODUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFTW9ycGhvbG9neS5oICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVP
ZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4NzEy
NDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMw
RDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlD
OSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwogCQk4NDcz
MEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyog
RkVUdXJidWxlbmNlLmggKi87IH07CkBAIC02MTAwLDggKzYxMDYsNiBAQAogCQkwODE2NjhENzEy
NTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRM
YXlvdXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExh
eW91dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEy
MzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5
IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVB
MjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAz
NDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjI0OCw4ICs2MjUyLDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8q
IEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xs
VHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAv
KiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQz
NCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
ckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzU4LDEwICs3MzYwLDYgQEAKIAkJMkI0MjM1QTAxNTI1
MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAg
LyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRN
ZWRpYUtleU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRDA2MjE0NzFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5l
ZWRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTMyLDkgKzEw
NTMwLDUwIEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlck91dHB1dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWx0ZXJPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBG
aWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAv
KiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFB
RSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAz
REMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUy
NzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVB
QUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8q
IEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVB
QUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29s
b3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJD
OTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBG
RUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3
YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAw
M0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5k
U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2
NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2Vv
bWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAw
M0U4OEM0IC8qIEZpbHRlclJlc3VsdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1
bHRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjYyNzE0MkYz
NzAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbHRlclJlc3VsdFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QjcyNzE0MkYzODAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFNvZnR3YXJlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlclJlc3VsdFNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQUE0NkI4MjcxNDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJSZXN1bHRD
b3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI5MjcxNDJG
NzkwMDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkEyNzE0MkY3QTAwM0U4OEM0IC8qIEZpbHRl
clJlc3VsdENvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2
QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkMyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlck91dHB1dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJPdXRwdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQg
LyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJFeHBy
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkMwMjcxNDMyREYw
MDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkFBNDZDMTI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyR2VvbWV0cnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzIyNzE0MzJFMDAwM0U4OEM0IC8qIFNW
R0ZpbHRlckdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZpbHRlckdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
QTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckJvdW5kYXJ5U2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0Ux
NzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1NDYsNiArMTA1ODUsOCBAQAogCQk3
MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTQ3OCw5ICsxMTUxOSw2IEBACiAJCTg0MzAwQkQ1MTIw
QzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJEOTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0
aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1
RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcy
RjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAv
KiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTUxMiw4ICsxOTU1MCw5IEBACiAJCTJDRTExODk4MjRD
MjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQy
RjdBMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggKi8sCisJCQkJNzJBQTQ2Qjgy
NzE0MkY3OTAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFB
NDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gY29yZWltYWdlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTIzMTI5LDYgKzIzMTY4LDMyIEBACiAJCQlwYXRoID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8q
IHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk3MkE4M0Q4MjI3MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVuZFNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAq
LywKKwkJCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0MyNzA1QkQ4NjAwM0M1QUFFIC8qIEZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFF
IC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdFMjcwNjMz
NkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzgy
NzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0Iy
NzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovLAorCQkJCTcy
QTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICov
LAorCQkJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNEODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cCAqLywKKwkJCQk3MkFBNDZCNjI3MTQyRjM3MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0U29mdHdh
cmUuY3BwICovLAorCQkJCTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRT
b2Z0d2FyZS5oICovLAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBo
YVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAg
LyogU2V0dGluZ3NUZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMjUxODMsNiArMjUyNDgsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0
ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNzJBODNENkYyNzA1NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovLAogCQkJCUExRTEx
NTQzMTMwMTVDM0QwMDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0
NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
NzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCkBAIC0yNTIxOSwxNSAr
MjUyODUsMjQgQEAKIAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8s
CiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJ
CQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0
NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNE
RkQ4MDAzQzVBQUUgLyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVB
QUUgLyogRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRl
ckJvdW5kYXJ5U2V0LmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRl
ckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVm
ZmVjdC5oICovLAotCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAgKi8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRl
ckVmZmVjdFZlY3Rvci5oICovLAorCQkJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0
ZXJGdW5jdGlvbi5oICovLAorCQkJCTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJH
ZW9tZXRyeS5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJh
dGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyT3V0cHV0
LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyT3V0cHV0Lmgg
Ki8sCisJCQkJNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9u
LmggKi8sCisJCQkJNzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5jcHAg
Ki8sCisJCQkJNzJDOTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3VsdC5oICovLAor
CQkJCTcyQUE0NkI0MjcxNDJDRUIwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRWZWN0b3IuaCAqLywK
IAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
MUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJ
ODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI2
OTkwLDEwICsyNzA2NSwxMyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1NTk4RUEwRDAwRDhC
OTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRUltYWdlLmggKi8sCi0JCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5jcHAgKi8sCi0JCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5oICovLAotCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmNwcCAqLywKLQkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5oICovLAorCQkJCTcyQTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3Bw
ICovLAorCQkJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLywKKwkJ
CQk3MkFBNDZDMDI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCisJ
CQkJNzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJ
CQk3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oICovLAor
CQkJCTcyQUE0NkMyMjcxNDMyRTAwMDNFODhDNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5jcHAgKi8s
CisJCQkJNzJBQTQ2QzEyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21ldHJ5LmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMzAxMDAsOCArMzAxNzgsOCBAQAogCQkJCUNBN0U5QjQ3MjQzNjFEQzUwMDRFODlGNiAvKiBD
b250ZW50ZnVsUGFpbnRDaGVja2VyLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQxODYyMzAwNjkxQkQ0
IC8qIENvdW50ZXJOb2RlLmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyog
Q291bnRlck5vZGUuaCAqLywKLQkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmls
dGVyLmNwcCAqLywKLQkJCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmgg
Ki8sCisJCQkJNzJBODNENkMyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5jcHAgKi8sCisJ
CQkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovLAogCQkJCUUzQkJD
MjQ1MjM4MzU1MUEwMDZFQzM5RiAvKiBDU1NWYWx1ZUtleS5oICovLAogCQkJCUU0QThEMjE1MjI1
NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5jcHAgKi8sCiAJCQkJRTRBOEQyMTQyMjU3OERB
MDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggKi8sCkBAIC0zMTUyNCw2ICszMTYwMiw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENF
IC8qIEFib3J0U2lnbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0MDBB
N0QyREQgLyogQWJzdHJhY3RET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzIxODMsNiAr
MzIyNjIsNyBAQAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFn
ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyog
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZD
QUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MkFBNDZDQTI3MTQzOTAxMDAzRTg4QzQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGQkIwQzVCODE3QkJENjI5MDAzRDM2NzcgLyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZh
Y2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNjg3LDEyICszMjc2NywxNiBAQAogCQkJCTkz
MEU0NDg2MjcwQzM3MjIwMERFN0FCNyAvKiBGaWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2NSAvKiBG
aWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDgzMUZFODY1REQwMDIwMzFDQyAv
KiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzkyNzE0MzdEMTAwM0U4OEM0
IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0
IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3
QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyQzg1NjUz
NDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0IyNzE0Mzk5NzAwM0U4OEM0IC8q
IEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzYyNzE0MzVG
RDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZD
MzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVw
cmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhD
NCAvKiBGaWx0ZXJSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5Rjgw
MDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1
NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZG
QjdEMkREMjUwRkQ4MjgwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzU1OTAsOSArMzU2NzQsOSBAQAogCQkJCUIyMjI3QTAzMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QTA2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0EwOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNDMjcxNDM5RDkwMDNFODhD
NCAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBDMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDRDI3
MTQzOUU1MDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBMEYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZpdFRvVmlld0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUIwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MzU1LDcg
KzM2NDM5LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJRGVm
YXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9yaWdpbmFsOwogCQkJCUxhc3RTd2lm
dFVwZGF0ZUNoZWNrID0gMDcwMDsKIAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTE0MDsKIAkJCQlU
YXJnZXRBdHRyaWJ1dGVzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCmluZGV4IDhjZjkwOWFlOWU1MzcyNGI5MWRiNGFjZTE0YWUyODU3MWRkOTU1MjYuLjM3
MzZiNGY5MjgyMTI0ZTkxMThlMmJhNDM3ZjEyZGNlYTIzOTkxNmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKQEAgLTExNiwyNiArMTE3LDIzIEBAIFJlZlB0cjxJbWFnZT4gQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZs
b2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAv
LyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUpCiAg
ICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJlY3Qg
PSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVy
OjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVy
ZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAg
Y3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNzc0ZpbHRl
ci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZp
bHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRl
cmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVy
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBjc3NGaWx0ZXItPmFw
cGx5KCk7CiAKLSAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwotICAgIGlm
ICghb3V0cHV0KQotICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKKyAgICBhdXRv
IGdlb21ldHJ5ID0gbWFrZVVuaXF1ZTxGaWx0ZXJHZW9tZXRyeT4oaW1hZ2VSZWN0LCBpbWFnZVJl
Y3QpOworICAgIGlmIChhdXRvIGZpbHRlcmVkSW1hZ2UgPSB0ZXh0dXJlLT5maWx0ZXJlZEltYWdl
KCpmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcmVkSW1h
Z2U7CiAKLSAgICByZXR1cm4gb3V0cHV0LT5jb3B5SW1hZ2UoKTsKKyAgICByZXR1cm4gJkltYWdl
OjpudWxsSW1hZ2UoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpmaWx0ZXJJbWFn
ZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKaW5kZXggYTVkZDI4YjczN2JjODM1
ZTg2ZWEzZWYyMDJhNzRlNDZhYjIyMjE4MS4uODhhMzEwMjc3OTgyZjMyN2QyNDM5NDZlZWVmNTI2
ZTVmNzIwOTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKIApAQCAtMTM4LDYgKzEzOSwxOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIFJlZlB0cjxJbWFnZT4gZmlsdGVy
ZWRJbWFnZShjb25zdCBGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21l
dHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKworICAgICAgICBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgICAgICBzdGQ6OnRpZShpbWFnZUJ1
ZmZlciwgc3RkOjppZ25vcmUpID0gZmlsdGVyLmFwcGx5KHRoaXMsIFdURk1vdmUoZ2VvbWV0cnkp
KTsKKyAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyID8gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgp
IDogbnVsbHB0cjsKKyAgICB9CisKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggODVlM2QyNGJlYjBjMjA0YzMyNWEyNjU2ZDljYTU0MDQwODY2ZmI3Mi4uY2U4
OWY0YmQzYWRmNzhlMjI1ODkxZWQ2NzM3M2M5OWYwYzk2OTJmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYwOSw2ICs2MTEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdAogICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2Up
LCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiBmaWx0ZXIsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KQoreworICAgIGF1dG8gW2ZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0XSA9IGZpbHRlci5hcHBs
eShzb3VyY2VJbWFnZSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIGlmIChmaWx0ZXJkSW1hZ2Up
CisgICAgICAgIGRyYXdJbWFnZUJ1ZmZlcigqZmlsdGVyZEltYWdlLCBpbWFnZVJlY3QpOworfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QpCiB7CiAgICAgUGF0aCBwYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBkNmUyNTY3N2JlZjcxNWJh
NDljZjA0MWUxNGM5ZWM4MDFjNWM5N2MzLi5iNjFmNTQ0YTQ4ZGMxNDY5NWI0MDlkNzZjODQzYzc2
ZWEzNWZmZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaApAQCAtODUsNiArODUsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
VUludDg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OwogY2xhc3MgRmxvYXRSb3VuZGVkUmVj
dDsKIGNsYXNzIEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OwpAQCAtNDQyLDYgKzQ0NCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBv
aW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggMTM5NzgwMWI0ZDhlMGZmY2Q2OTQ2N2NhMTQyMjBkMDA1M2NmMTVlZS4u
YWIzNGM5NjU2M2UwYmVmZWY1NDFkZjk5ZWVhYjhkYzJkOTBlNmUwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC00Miw2ICs0Miw5IEBA
IGNsYXNzIERyYXdpbmdDb250ZXh0Owogc3RydWN0IEl0ZW1CdWZmZXJIYW5kbGU7CiB9CiAKK2Ns
YXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworCiBjbGFzcyBJbWFnZUJ1ZmZlciA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUJ1ZmZlciwgV1RGOjpEZXN0cnVjdGlv
blRocmVhZDo6TWFpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJbWFnZUJ1ZmZlcj4gewogcHVi
bGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFp
bHVyZS4KQEAgLTEwNiw2ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxO
YXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJH
ZW9tZXRyeT4mJikgPSAwOwogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4
IGQ0ZmEzYzRiZmFkMzRhYWYzMDkzYTlmMDI0ODZiYjcyN2Y5OGQ0YWEuLmQ0NWFiMzNjNDQwOGVk
NjM2MDc0NjE0ZDQ2ZjQ1OWRhNmY1MWQ2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRl
cnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NTRmlsdGVyOjpidWlsZCgp
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgorLy8gRklY
TUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6OmJ1aWxkKCkgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCiBzdGF0aWMgY29uc3Qg
ZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7IDAuMzkzLCAwLjc2OSwg
MC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZlMmMwNDRhZjcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0KLSNpbXBvcnQgIkZpbHRlckVmZmVj
dFJlbmRlcmVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCi0jaW1wb3J0IDx3
dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1MgQ0lJbWFnZTsKLU9CSkNfQ0xBU1MgQ0lGaWx0ZXI7
Ci1PQkpDX0NMQVNTIENJQ29udGV4dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
RUNvbG9yTWF0cml4OwotY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlcjsKLWNsYXNzIFNvdXJjZUdy
YXBoaWM7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlIDogcHVibGljIEZp
bHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAK
LXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0gICAgUmV0YWluUHRyPENJQ29u
dGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZm
ZWN0JikgZmluYWw7Ci0gICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X291dHB1dEltYWdlOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZpbmFsOwot
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2UoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGNvbm5l
Y3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVy
KEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwotICAgIHN0YXRpYyBib29sIGNhblJlbmRlclVzaW5n
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIAotICAgIFJldGFpblB0cjxDSUltYWdlPiBp
bWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYpOwotICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZl
Y3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdl
Rm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9y
PFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICAKLSAgICBSZWZQdHI8SU9TdXJmYWNlSW1hZ2VC
dWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IG1fb3V0
cHV0SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg2ZmM0YzIzYWY5NTQ1NTU3YTU1OGM4YzQ1MWUxOWE4YTM4
ZmI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKgotKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGRUNv
bG9yTWF0cml4LmgiCi0jaW1wb3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCi0jaW1wb3J0ICJG
aWx0ZXIuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdC5oIgotI2ltcG9ydCAiRmlsdGVyT3BlcmF0
aW9uLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgot
I2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgotI2ltcG9ydCA8Q29yZUltYWdlL0NJQ29udGV4dC5o
PgotI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+Ci0jaW1wb3J0IDxDb3JlSW1hZ2UvQ29y
ZUltYWdlLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6IEB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFj
ZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VT
UkdCKX1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0YXRpYyBib29sIGlzTnVsbE9y
TGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVy
JiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9IFtdIChjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24u
dHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAgICAgICAgICAgfHwg
ZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgIH07
Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRGdW5jdGlvbigpKSAmJiBpc051
bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAgICAgICAmJiBpc051bGxPckxp
bmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5hbHBo
YUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICAv
LyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVt
ZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgewotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1h
dHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCku
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAg
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwotCi0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0
cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxp
Z2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgbV9vdXRwdXRJbWFnZSA9IGNv
bm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKLX0KLQot
UmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0
Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAgIFZlY3RvcjxSZXRhaW5QdHI8
Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5p
bnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0
ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7Ci0gICAgfQot
ICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGVmZmVjdC5zZXRS
ZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIAotICAg
IGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVm
ZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdy
YXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291
cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9y
TWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGRvd25jYXN0PEZF
Q29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29t
cG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KSwgaW5w
dXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5n
IENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUltYWdlCi0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZl
TWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxh
ckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdy
YXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3Qu
ZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpz
b3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6
ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFjZSgpLnN1
cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6c291
cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOwotfQot
Ci1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdl
Rm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBlZmZlY3QsIGNvbnN0IFZlY3Rv
cjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsKLSAgICBhdXRvIGlucHV0SW1h
Z2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFsdWVzID0gRkVDb2xvck1hdHJp
eDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwotICAgIGZsb2F0IGNvbXBvbmVu
dHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0
ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVh
azsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywg
dmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlv
bgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byAqY29sb3JN
YXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07
Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5
OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpjb21wb25lbnRzWzFdIFo6
Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNb
M10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZvcktleTpAImlucHV0R1Zl
Y3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6Y29tcG9uZW50c1s4XSBX
OjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAg
ICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAg
ICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjBdIGZvcktleTpAImlu
cHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVlc1sxXSAgWjp2YWx1ZXNb
Ml0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzVdICBZ
OnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9yS2V5OkAiaW5wdXRHVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNbMTJdIFc6dmFsdWVzWzEz
XV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZOnZhbHVlc1sxNl0gWjp2
YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07Ci0gICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVz
WzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5XV0gZm9yS2V5OkAiaW5w
dXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gY29s
b3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNv
bnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdl
Pj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIHJlc3Qgb2Yg
RkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NFUlQoaXNOdWxsT3JMaW5lYXJD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0gICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVy
V2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAotICAgIFtmaWx0ZXIgc2V0VmFs
dWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAg
YXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvbi50eXBl
ID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0gICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5j
dGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9OwotICAgIHNldENvZWZmaWNp
ZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJlZEZ1bmN0aW9uKCkpOwotICAg
IHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVudHMiLCBlZmZlY3QuZ3JlZW5G
dW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEJsdWVDb2VmZmljaWVudHMi
LCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxw
aGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLSAgICAKLSAgICByZXR1
cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsK
LSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVmZmVjdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3Rz
KCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygqaW4pIHx8ICFj
YW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMgPDwgIiB1c2luZyBDb3JlSW1h
Z2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVyLmdldCgpOwotfQotICAgIAot
dm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCksIGxh
c3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlm
ICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVhclJlc3VsdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjog
bV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3Vy
ZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTps
YXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07Ci19Ci0g
ICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGRlc3RT
aXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6
ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UmVj
dCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKLSAgICByZXR1
cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNs
ZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBt
X291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAgICA6IEZpbHRlckVmZmVjdFJl
bmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FiZTU2MWI3MDFi
Y2EwNWIyNDRlNTI1ZTE3OGVjMjRmNmRkZDFmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2Uu
aApAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBt
ZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlclJlc3VsdC5oIgorCitPQkpD
X0NMQVNTIENJSW1hZ2U7CitPQkpDX0NMQVNTIENJQ29udGV4dDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyUmVzdWx0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsKKworICAg
IHZvaWQgc2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYpOworICAgIAorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgb3ZlcnJpZGU7Cisg
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdlKQorICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0
LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyUmVzdWx0Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNzkyYjFhYmU5NzBkOGNkZjg5YWY4
NWE1OGQ1NGQ1YWI4MDBiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisj
aW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUlt
YWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6c2V0SW1hZ2UoUmV0YWluUHRyPENJ
SW1hZ2U+JiYgaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBtX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4mIEZpbHRlclJlc3VsdENvcmVJ
bWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cygpCit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXI7
Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVyKCkK
K3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzVjNDg0OGEwMjczNTk4ZDA0NjFhZjkzZmMwMjI3YWQ2NDNiY2ZlZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCisKKyNpZiBVU0Uo
Q09SRV9JTUFHRSkKKworI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVy
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworICAgIGlmICgh
c291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDSUlt
YWdlPiBpbWFnZTsKKyAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFn
ZSkpCisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0
PElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCld
OworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNv
dXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKKwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBkb3duY2Fz
dDxGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U+KHJlc3VsdCkuc2V0SW1hZ2UoV1RGTW92ZShpbWFnZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAyNjExMGNkZmIwYmI2Y2Y0OTA0NTgz
ODc3ODdhYzEwZmExNzFjZjE4Li5iM2QyYTU5NDY5NDIyMzUzMjM0MzkzMjg2NTZlOTY0ZTljMTZl
ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMTA3LDE1ICsxMDcsMTggQEAg
cHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKEZpbHRlclJl
c3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1
dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3Qo
KTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyKCkuY3Jl
YXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCksIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVm
ZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMyLDcgQEAgdm9pZCBGRUJsZW5kOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgg
Pj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBv
bmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJh
eUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKICAgICBwbGF0Zm9ybUFw
cGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
Pihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworCisg
ICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNy
Y1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDVmMzZhOWMzYjcyZGE2MTljMjE4YmE4
MmY2ZjE4MGJkYmExNTIwOWIuLmUzNjlkMzMxNDgwYWUzMTFlYzEyMGJhOTcyMGRmYjQ1ZTk2ZjQ4
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTE4Miw2
ICsxODIsMTQgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QKICAgICByZWNvcmREcmF3UGF0dGVy
bihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
IH0KIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEZpbHRlciYsIEltYWdl
QnVmZmVyKiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKQoreworLy8gICAgaWYg
KG1fZGVsZWdhdGUpCisvLyAgICAgICAgbV9kZWxlZ2F0ZS0+cmVjb3JkSW1hZ2VCdWZmZXJVc2Uo
KnNvdXJjZUltYWdlKTsKKy8vICAgIHJlY29yZEZpbHRlclVzZShmaWx0ZXIpOworLy8gICAgYXBw
ZW5kPERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oZmlsdGVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGdlb21l
dHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVjb3JkU2F2ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggNDg2NmM4MmNhYzk0MzBk
N2MzNzRhYzNmYTViZThjMDc3Y2Q5M2E0MS4uZDAxN2U2MDJiYzg4MWQzOGVjOTYyMWUyZDc4MTNm
N2M5YWMxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0y
MzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgZmluYWw7CisKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2
N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uMTZkYTAyODBkMWE2ZjYyMGQ3Nzg0NWE2NDYxMzll
YTNlYzk1MzkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJp
Z2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiw0NCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQo
RmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgVHlwZTo6QmxlbmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5k
OjpjcmVhdGUoQmxlbmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVC
bGVuZChtb2RlKSk7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUJsZW5kKQorICAgICwgbV9tb2RlKG1vZGUpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUpKTsKIH0KIAog
Ym9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1f
bW9kZSA9PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vZGUsIG1vZGUp
ICE9IG1fbW9kZTsKIH0KIAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZF
QmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFQmxlbmQ6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwor
ICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwor
ICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQ
b2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4sIGluMiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQotI2VuZGlm
CiAKLVRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJl
YW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQi
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgbW9kZT1cIiIgPDwgKG1fbW9kZSA9PSBCbGVuZE1vZGU6Ok5v
cm1hbCA/ICJub3JtYWwiIDogY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyLCBtX21vZGUpKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4u
YjVkOGFlNmExMjVjM2VmYzA5MWM3M2I0MGU5ZjU0NDU5NDNiNmIzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTMsNiAr
Myw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDMyICsyNSwyNyBAQAogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2Rl
KTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1vZGUpOwogCiAgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgc2V0
QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6CisgICAgRkVCbGVuZChCbGVuZE1vZGUp
OworCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUJsZW5kIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4
ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBk
c3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JB
cnJheUxlbmd0aCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBw
bHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2Rl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRl
eCAzODA2NWNiOTZjN2I0YjRiMDNmYzZiMGVlZDg1YWM0YjZjOTY4YTU0Li5iZDk5MmZmNDAwNjU4
NWI3YzlhYTE1ODExZmUyYWRjY2UzMzMzY2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMs
NiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDI4ICsyNCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29s
b3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8Zmxv
YXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRy
aXgpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkK
K1JlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBl
IHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb2xvck1hdHJpeCh0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAotUmVmPEZFQ29s
b3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRy
aXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCitGRUNvbG9yTWF0cml4OjpGRUNv
bG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQor
ICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29sb3JNYXRyaXgpCisgICAgLCBtX3R5cGUodHlw
ZSkKKyAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZpbHRlciwgdHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9
CiAKIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAg
LTYzLDI1OCArNTYsNDMgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPGZsb2F0PiAmdmFsdWVzKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBt
YXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi17Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAg
ICBmbG9hdCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0gICAgZmxvYXQgYSA9IGFs
cGhhOwotCi0gICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2
YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKLSAgICBn
cmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlcyBbN10gKiBi
ICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OwotICAgIGJsdWUgICAgPSB2YWx1
ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNd
ICogYSArIHZhbHVlc1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsg
dmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVz
WzE5XSAqIDI1NTsKLX0KLQotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAgICBmbG9h
dCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0KLSAgICByZWQgICAgID0gciAqIGNv
bXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOwotICAg
IGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNv
bXBvbmVudHNbNV07Ci0gICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBv
bmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKLX0KLQotLy8gRklYTUU6IHRoaXMgc2hvdWxk
IHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KLWlu
bGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVl
LCBmbG9hdCYgYWxwaGEpCi17Ci0gICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBn
cmVlbiArIDAuMDcyMSAqIGJsdWU7Ci0gICAgcmVkID0gMDsKLSAgICBncmVlbiA9IDA7Ci0gICAg
Ymx1ZSA9IDA7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLXRlbXBsYXRlPENvbG9yTWF0cml4
VHlwZSBmaWx0ZXJUeXBlPgotYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNv
bXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKLXsKLSAgICBBU1NFUlQocGl4ZWxBcnJh
eS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAotICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUg
aW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAg
ICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAg
IGlmICh2YWx1ZXNbNF0gIT0gMCB8fCB2YWx1ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAg
fHwgdmFsdWVzWzE5XSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMu
ZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRy
aXhbNCAqIDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyA1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCi0KLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEx
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTZdICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WyA4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCi0gICAgICAgIH07Ci0gICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRz
WzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBv
bmVudHNbNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0KLSAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIGRp
dmlzb3IsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0gewotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEyNSAqIGRpdmlzb3Ip
KSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRpdmlzb3IpKSwKLQot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5v
RmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
cnVlOworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKKyAgICBj
b21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sy
XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMg
LSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2
YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAg
IGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRz
WzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4XSA9ICgwLjA3
MiArIDAuOTI4ICogdmFsdWUpOwogfQotI2VuZGlmCiAKLXRlbXBsYXRlPENvbG9yTWF0cml4VHlw
ZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFy
cmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFNpemUgYnVmZmVyU2l6ZSkKK3Zv
aWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLQotICAg
IGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZh
bHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
IGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVl
cywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCi0KLSAgICBzd2l0Y2ggKGZpbHRlclR5
cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3Jl
ZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBm
bG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAg
ICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7
Ci0gICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVl
biA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAg
ICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsK
LSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBv
bmVudHMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4p
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7
Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNl
dCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNl
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBmbG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBmbG9hdCBz
aW5IdWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBjb21wb25lbnRzWzBdID0g
MC4yMTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOworICAgIGNvbXBvbmVudHNb
MV0gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7CisgICAgY29tcG9u
ZW50c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKKyAgICBj
b21wb25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwor
ICAgIGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4x
NDA7CisgICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUg
KiAwLjI4MzsKKyAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNp
bkh1ZSAqIDAuNzg3OworICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1
ICsgc2luSHVlICogMC43MTU7CisgICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICog
MC45MjggKyBzaW5IdWUgKiAwLjA3MjsKIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUNvbG9yTWF0cml4OjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
IChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJl
c3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIXBpeGVs
QnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxC
dWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZm
ZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBF
X01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAg
ICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZh
bHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5z
aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlO
QU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwot
ICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpw
aXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQs
IHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlw
ZSYgdHlwZSkKQEAgLTMzOSwxMCArMTE3LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKICAgICByZXR1
cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8
IGluZGVudCA8PCAiW2ZlQ29sb3JNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgdHlwZT1cIiIg
PDwgbV90eXBlIDw8ICJcIiI7CiAgICAgaWYgKCFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgdHMgPDwgIiB2YWx1ZXM9XCIiOwpAQCAtMzU3LDkgKzEzNCw2IEBAIFRleHRTdHJlYW0mIEZF
Q29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uCiAgICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwot
ICAgIAotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0
ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi42ZDY1YmI1MzIxNjg2MTZkYzRmNWM3MzBmZGRh
ODg0ZDBmNTBjMThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcs
NyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+
IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAg
c3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8
ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhUeXBlKTsKQEAgLTQ2LDU0ICs0
NSwyMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2
b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0
IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxv
YXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAg
c3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB2YWx1ZXMpOwogCiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRy
aXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKICAgICBWZWN0
b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkK
LXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0gICAgY29t
cG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMl0g
PSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0g
MC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s3
XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIg
KyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17
Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxv
YXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1sw
XSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25l
bnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNv
bXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0g
ICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0
MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAq
IDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2lu
SHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMg
LSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAw
LjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1
ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXgp
Ci0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZm
ZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdlYTU4ZjVm
OWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi43OTQxYjg5OTdlZDU5ZGFlOWFhYjRmYmZl
YWU2M2ZkNmJmOTY1MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTQs
NiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUsMjAgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5j
bHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyKQorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJs
dWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOworfQorCitGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVkRnVuY3Rp
b24pCiAgICAgLCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1fYmx1ZUZ1
bmN0aW9uKGJsdWVGdW5jdGlvbikKQEAgLTQzLDExOSArNDYsMTUgQEAgRkVDb21wb25lbnRUcmFu
c2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVyLCByZWRG
dW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKLXsKLX0KLQotdm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCitG
aWx0ZXJSZXN1bHQqIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0
cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0
KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNm
ZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6
ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91
YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0g
dGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWlu
KChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsg
KGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgw
LjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkp
OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVz
OwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4gPCAxKQot
ICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChp
ICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Ci0gICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91
dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUg
KiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAg
ICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwotICAg
IExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAg
IGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxw
aGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVu
bXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxl
bmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRh
ID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtk
YXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVu
VGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCAr
IDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0gICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKLSAgICB9
Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29r
dXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYg
Ymx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0g
Z3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhhVGFibGVbaV0gPSBpOwotCi0gICAg
dXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsK
LSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAg
IC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3Jl
dGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAg
Y29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVO
R1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RI
KGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9yZWRGdW5jdGlvbi50eXBlXShyZWRU
YWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2dyZWVuRnVuY3Rpb24udHlw
ZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYmx1ZUZ1
bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3Rb
bV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1fYWxwaGFGdW5jdGlvbik7CisgICAg
cmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBi
b3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA4LDkgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29tcG9uZW50VHJhbnNmZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAgewogICAg
ICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBAIC0yMjEs
OSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsKICAgICB9
Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5w
dXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1
ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uN2QwMDY4NzIyMjBkOGIwNDcy
ZGIyNzJmMTliZTE2ODE2OTRmMjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkg
KzI0LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVu
dW0gQ29tcG9uZW50VHJhbnNmZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRy
YW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
cmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRl
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGFscGhhRnVuY3Rpb24pOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVu
Y3Rpb247IH0KQEAgLTYyLDI0ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9u
OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25l
bnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0g
c3RkOjphcnJheTx1aW50OF90LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRh
YmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9v
a3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVuY3Rpb247
CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuY3Rpb247CkBAIC04OCw3
ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3Qp
IHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2
ZGQ0MDM4ZmE0Y2IyYTguLjZjOTNjZmJlNzg5NDI2NmUwNmExNDkwOWRlZTM2ZjkwMzUyNjc5ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTcgKzI1LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZp
bHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21w
b3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsK
K30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9zaXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVy
YXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQog
ICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDYsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9z
aXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBm
bG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVD
b21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29s
IEZFQ29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jb21wb3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3Ip
ICE9IG1fY29tcG9zaXRlT3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZs
b2F0IGsxKQogewotICAgIGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9rMSA9IGsxOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1fazEsIGsxKSAhPSBtX2sxOwogfQogCiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBr
MikKIHsKLSAgICBpZiAobV9rMiA9PSBrMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
azIgPSBrMjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2sy
LCBrMikgIT0gbV9rMjsKIH0KIAogYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7
Ci0gICAgaWYgKG1fazMgPT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0g
azM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMp
ICE9IG1fazM7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAg
IGlmIChtX2s0ID09IGs0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0Owot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBt
X2s0OwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KQorRmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlICE9IEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
cmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQg
Y2hhciBjbGFtcEJ5dGUoaW50IGMpCi17Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25lZCB1YyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZm
KSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0
Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVu
Z3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9h
dCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNj
YWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0
ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGky
ID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBp
MjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEg
KiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0Owot
Ci0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAgICArK3Nv
dXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8gaXMgbm90
IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25z
IHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgot
c3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAg
ICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAg
ICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRL
NCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsg
azMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsx
ICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytzb3VyY2U7
Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWdu
ZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJy
YXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAg
IGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBr
MikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3Rk
OjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMp
ICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0
ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYm
IGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBp
ZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8
MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChr
MSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAw
Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEs
IGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFy
cmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQotfQotI2VuZGlmCisgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKKyAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBh
aW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVP
cGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9y
ID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5j
bGlwVG9QcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpLCBwcmltaXRp
dmVTdWJyZWdpb24pOwogCi1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5n
dGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOwotICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCi0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4Mykp
OwotICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24u
ZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNlbHNlCi0gICAgYXJpdGhtZXRpY1Nv
ZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7Ci0jZW5kaWYKLX0KKyAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUg
Y29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAvLyBvcHRp
bWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3Ig
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIHByaW1p
dGl2ZVN1YnJlZ2lvbjsKIAotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAg
IC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUg
cmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAg
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUg
dW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0
dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZl
U3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlclJlc3VsdCogRkVDb21wb3NpdGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0
LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBj
b25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICAg
ICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBp
eGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0g
ICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0
aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0g
ICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBz
dGFjay50YWtlTGFzdCgpOworICAgIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5
IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25S
ZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25S
ZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0
aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBh
ZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRp
b25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50
UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKS5sb2NhdGlvbigpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJl
Y3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
VE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIy
LCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUF0b3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJh
dG9yOjpYT1IpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJl
Y3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVy
YXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBp
bjIgfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRkVDb21wb3NpdGVPcGVyYXRvciYgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAg
c3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04i
OwogICAgICAgICBicmVhazsKQEAgLTMyOCwxOCArMTMwLDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiB0eXBlCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJl
cHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9zaXRlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
IG9wZXJhdGlvbj1cIiIgPDwgbV90eXBlIDw8ICJcIiI7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8
PCBtX2NvbXBvc2l0ZU9wZXJhdG9yIDw8ICJcIiI7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0
b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBr
MT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9XCIiIDw8IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2sz
IDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8PCAiXCIiOwogICAgIHRzIDw8ICJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5w
dXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1
OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi44ZjdiNTUxZGM5NmQxZmQ3N2MzYjE5ODE3ZjZlMWZmNGQ2
YjEyNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMiArMjQsOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5
cGUgeworZW51bSBGRUNvbXBvc2l0ZU9wZXJhdG9yIHsKICAgICBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9VTktOT1dOICAgID0gMCwgCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiAgICAgICA9
IDEsCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4gICAgICAgICA9IDIsCkBAIC00MSwxMCAr
MzksMTAgQEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3Np
dGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29t
cG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBj
cmVhdGUoRkVDb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpOwogCi0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRpb25UeXBlKTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQorICAgIGJvb2wgc2V0Q29tcG9z
aXRlT3BlcmF0b3IoRkVDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICBmbG9hdCBrMSgpIGNvbnN0
IHsgcmV0dXJuIG1fazE7IH0KICAgICBib29sIHNldEsxKGZsb2F0KTsKQEAgLTU4LDMwICs1Niwy
MyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAg
Ym9vbCBzZXRLNChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShG
aWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQpOworICAgIEZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lk
IGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZp
bHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Cisg
ICAgYm9vbCBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAg
ICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGht
ZXRpY05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpOwotI2VuZGlmCi0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKKyAg
ICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAgICAgZmxvYXQgbV9r
MTsKICAgICBmbG9hdCBtX2syOwogICAgIGZsb2F0IG1fazM7CkBAIC04OSw0ICs4MCwzIEBAIHBy
aXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCmluZGV4IDc1YjJlN2M2ZWExM2MyYzFjMmY4ZjY1ZDNkYjRlZDVjYzNhZmRhOGYuLjdl
OGQxZmVjMjE2YmIyMDFlOTQ3ZjcyNWNkODdiZjZkOTNmMTcxYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
IDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwx
OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIK
IAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNv
bnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRT
aXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IElu
dFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRy
aXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBo
YSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFy
Z2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBoYSwga2Vy
bmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29u
c3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbnZv
bHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlz
b3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTQgKzUxLDYgQEAgRkVDb252
b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6
ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9
CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwg
ZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJl
c2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBk
aXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAot
ICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQogdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpCiB7CiAg
ICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwpAQCAtMTIwLDMxOCArMTE0LDIwIEBA
IGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxw
aGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5n
bGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIg
fCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFp
bnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhv
dXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAg
ICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2Vy
bmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwg
eTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRl
IHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAg
Li4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBm
b2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMg
dGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHky
IGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkp
IHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVn
aW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAw
LCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6
IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAK
LSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVn
aW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBp
eGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhl
c2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJl
Z2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZh
bHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJl
IHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGlt
YWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0g
ICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNp
ZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhl
cmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVh
bGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXgg
PSAyNTUpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBt
YXg7Ci0gICAgcmV0dXJuIGNoYW5uZWw7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsK
IH0KIAotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2
b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQ
aXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCog
dG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzKQorRmlsdGVyUmVzdWx0KiBGRUNvbnZv
bHZlTWF0cml4OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICB1bnNpZ25l
ZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZh
bHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUo
dG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAocHJlc2Vy
dmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNlUGl4
ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAg
ZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQotCi0jaWYgQ09NUElMRVIoTVNW
QykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3Rh
bHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkK
LSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCi0KLS8vIE9ubHkgZm9yIHJl
Z2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFy
dCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBw
aXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRh
LndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNl
ID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0
aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVu
dHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsK
LQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRo
ZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJv
dHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGlu
dCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAo
Y2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlT
dGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsg
LS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtl
cm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtl
TGFzdCgpOwogCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxz
WzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXBy
ZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkg
ewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4
W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAg
ICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZh
bHVlcykKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5l
bFBpeGVsOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAg
aWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5l
bEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0
RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rp
dmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwg
Kz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0
YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBp
bnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0
YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJl
dHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1f
ZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVy
biAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQot
ICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndp
ZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlm
ICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50
aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7
Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAg
Y2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4
ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7
Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhl
aWdodDsKLSAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90
aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12
b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBw
aXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdo
dCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJu
ZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQ
aXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5
MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0
YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAw
IDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZv
ciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdp
ZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4
ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0g
c3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUu
d2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFs
c1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFw
cmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAg
ICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50
IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBr
ZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAg
ICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAg
ICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShwaXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwot
ICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4
ZWxYOwotICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAg
ICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZl
QWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7
Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBp
eGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5l
bFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0j
ZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xp
cEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1l
bnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8g
ZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAot
ICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0
cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsK
LSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8v
IEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlz
IGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFs
c28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZh
c3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAg
ICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4
MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1f
cHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3Vy
Y2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0g
ICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXks
Ci0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCks
Ci0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5l
bE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwot
ICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0
aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxT
aXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDAp
IHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0
aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29s
dXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAg
ICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBj
aHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAg
ICBXb3JrUXVldWU6OmNvbmN1cnJlbnRBcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4
KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAg
ICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJv
dHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xp
cFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zm
c2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwot
ICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkp
OwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRP
dXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQot
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0Lnko
KSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwg
cGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90
dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwg
Z2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCAr
MTQ5LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZF
Q29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29u
dm9sdmVNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4
ICA8PCAiXCIgIgogICAgICAgIDw8ICJkaXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIK
QEAgLTQ2NSw5ICsxNjAsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdAogICAgICAgIDw8ICJl
ZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0
TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIlwiICIKICAgICAgICA8PCAicHJl
c2VydmVBbHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4g
dHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFi
ODk1YTZlMWU1MDA1NGUxM2RiYS4uZWI5MTQ4MDNiMjVmMTdlZDFjODIyNjViY2ViNTVmYWJlOWNk
YzdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI0LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDkgKzM4LDcgQEAgZW51bSBFZGdl
TW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IElu
dFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJv
b2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRy
aXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0
IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQogICAgIHZvaWQgc2V0S2VybmVsU2l6ZShj
b25zdCBJbnRTaXplJik7CkBAIC02Nyw0MSArNjUsMTcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0
UHJlc2VydmVBbHBoYShib29sKTsKIAogcHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0
aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVj
dG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQotICAgIEZFQ29udm9sdmVNYXRyaXgo
RmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOworICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2Vy
bmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdl
dE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29udm9sdmVNYXRyaXgiOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJy
aWRlOwotCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0
YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFMV0FZ
U19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmEzOWRkZGFk
NDZmMzk5MWNhOWJiMjFiZTFlMjNmZmJmNzA2MGNhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxp
Z2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNl
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZF
RGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1
c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRURpZmZ1
c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFRGlm
ZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQot
ewotICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3RhbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAi
CiAgICAgICAgPDwgImRpZmZ1c2VDb25zdGFudD1cIiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVu
Z3RoWCA8PCAiLCAiIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIlwiXVxuIjsKLQotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVy
biB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2Ux
MTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLjk2MDA2MjA0OWEyMmZlNWE4NWNiZmViYjM0OWVjZjFh
YmQ0MTc5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjEgKzI2LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGlnaHRTb3VyY2U7Ci0KIGNsYXNzIEZFRGlmZnVzZUxp
Z2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlm
ZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RpZmZ1c2VDb25zdGFudDsgfQotICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZs
b2F0KTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKIHByaXZh
dGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VM
aWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgCisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJGRURpZmZ1c2VMaWdodGluZyI7IH0KKworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIy
ODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2M2ZhMS4uMjQ0ZWY4NTJjNWVhOWZkY2ZhMDQ5ZWZiODhl
M2I3YzcyMTY2YzBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDEzMiArMjUsNjQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRl
ciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpEaXNwbGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2Vs
ZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5l
bFNlbGVjdG9yKQotICAgICwgbV9zY2FsZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4g
RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUp
CiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxT
ZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2Vt
ZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3Bs
YWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVEaXNwbGFjZW1lbnRNYXApCisgICAgLCBtX3hDaGFubmVsU2VsZWN0b3Io
eENoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVj
dG9yKQorICAgICwgbV9zY2FsZShzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURpc3BsYWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0
b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2Vs
ZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQogewotICAg
IGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV94Q2hhbm5lbFNlbGVj
dG9yLCB4Q2hhbm5lbFNlbGVjdG9yKSAhPSBtX3hDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wg
RkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQogewotICAgIGlmIChtX3lDaGFubmVsU2VsZWN0b3Ig
PT0geUNoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feUNoYW5u
ZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV95Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yKSAh
PSBtX3lDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNj
YWxlKGZsb2F0IHNjYWxlKQogewotICAgIGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2NhbGUsIHNjYWxlKSAhPSBtX3NjYWxlOwogfQogCi12
b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpCitjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2Vt
ZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
KSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJz
JyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8v
IGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNv
dXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNl
LgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2Ug
aXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0
OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkp
OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0t
PmNvbG9yU3BhY2UoKTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCitGbG9hdFJl
Y3QgRkVEaXNwbGFjZW1lbnRNYXA6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0
aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0
ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMp
CitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShGaWx0ZXJPdXRwdXQmIG91
dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICBy
ZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9X
Tik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwot
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAg
ICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2lu
ZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9u
LXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2Ug
PSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAg
IGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+
bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUg
PSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsK
LSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBm
bG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQg
c2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworICAgIGF1dG8gaW4gPSBz
dGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKICAgICAK
LSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50
IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5
dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1
dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAg
IGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZGVz
dGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JY
ICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVt
KGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZ
KTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3Rp
bmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRT
aXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsK
LSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBp
eGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkg
KyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOwotICAgICAgICB9Ci0g
ICAgfQorICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxw
dHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpA
QCAtMTc0LDE3ICsxMDcsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBj
b25zdAorVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlRGlzcGxhY2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNj
YWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9
XCIiIDw8IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNl
bGVjdG9yPVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRT
dHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZm
ZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDcz
ZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uYzY1NTQ3ZjEyOGZkYWQwMmFiZDZlOTUzNjY5
YTJjMDIxZWY1MTMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM3LDcgKzM2LDcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3Mg
RkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBj
cmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvcjsgfQogICAgIGJvb2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0
b3JUeXBlKTsKQEAgLTQ4LDIyICs0NywyMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAg
ICB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVj
dCosIGNvbnN0IGludCkgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRN
YXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVs
U2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVu
dE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3Rv
clR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVs
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50
IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9
CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
RGlzcGxhY2VtZW50TWFwIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBGaWx0ZXJSZXN1bHQqIGFw
cGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFy
eVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFu
bmVsU2VsZWN0b3I7CiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7
CkBAIC03MSw0ICs3MSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3
ODlmNmJiZGQ4Li5kOTBjMDljNTQxZmVlZWNhMDQ1Mjk5MGJiMzYwZDk3ZmNmODQzNDhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIzLDE2ICsyNCwxOSBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXph
dGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93
KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRyb3BTaGFkb3cpCisKK1JlZjxGRURyb3BTaGFk
b3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4
LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBk
eCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6
RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRvdykKICAgICAsIG1fc3RkWChzdGRYKQogICAgICwg
bV9zdGRZKHN0ZFkpCiAgICAgLCBtX2R4KGR4KQpAQCAtNDIsMTAwICs0Niw1MSBAQCBGRURyb3BT
aGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3Rk
WSwgZmxvYXQgZHgsIGZsbwogewogfQogCi1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6
OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgs
IGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkp
CitJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBz
aGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgp
IC0gbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsg
bV9keCksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1f
ZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgp
CisgICAgfTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkKK0Zsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlciYgZmls
dGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJz
b2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zm
c2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSkpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFp
bnRSZWN0KTsKLQotICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBBU1NFUlQo
aW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5k
cmF3aW5nUmVjdCgpOwogCisgICAgZHJhd2luZ1JlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9G
aWx0ZXJDb29yZGluYXRlcyh7IG1fZHgsIG1fZHkgfSkpOworICAgIAorICAgIGRyYXdpbmdSZWN0
LnVuaXRlKGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKSk7CisgICAgCisgICAgSW50U2l6ZSBrZXJu
ZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1f
c3RkWSB9KTsKKyAgICAKICAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBt
dWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1l
cy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgp
ICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUu
aGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFi
c29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBkcmF3
aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJh
d2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3Qp
KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdS
ZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVEcm9wU2hhZG93OjphcHBseShGaWx0
ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFj
ay50YWtlTGFzdCgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0
U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBt
X3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbih7IG1fZHgsIG1fZHkgfSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3Vs
dHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRy
YXdpbmdSZWdpb24pOwotICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsK
LQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgcmVzdWx0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVz
dWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwot
ICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7Ci0KLSAgICBTaGFkb3dCbHVyIGNvbnRleHRT
aGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKLQotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBz
aGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBh
dXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hh
ZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4
dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZm
ZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAg
cmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Ci0K
LSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlSW4pOwotICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAg
ICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25PdmVyKTsKLQotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7Ci19Ci0KLUludE91dHNldHMgRkVE
cm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwot
ICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQo
KSAtIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAr
IG1fZHgpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBt
X2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4
KQotICAgIH07CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxw
dHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRv
dzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiBy
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRv
dyI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAi
IDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8
ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQo
bV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5
IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMp
OwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRl
MGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRlZTg4YTI5ZWZmMzg0Yy4uNGY4NWEzOTdlNWM4YTgyM2E3
NjZiYjBlYzBhYWJhM2MyYTQ1MWIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwxMyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBj
bGFzcyBGRURyb3BTaGFkb3cgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNo
YWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgo
KSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxv
YXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00MSwyNCArNDEsMjYgQEAgcHVibGljOgog
ICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxv
YXQgZHkpIHsgbV9keSA9IGR5OyB9CiAKLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBj
b25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9yOyB9IAorICAgIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Q29sb3I7IH0KICAgICB2b2lkIHNldFNoYWRv
d0NvbG9yKGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93
Q29sb3I7IH0KIAogICAgIGZsb2F0IHNoYWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3No
YWRvd09wYWNpdHk7IH0KICAgICB2b2lkIHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3Bh
Y2l0eSkgeyBtX3NoYWRvd09wYWNpdHkgPSBzaGFkb3dPcGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0g
ICAgRkVEcm9wU2hhZG93KEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25z
dCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3Rk
WSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAg
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BT
aGFkb3ciOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwor
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0
ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAg
IGZsb2F0IG1fc3RkWTsKQEAgLTY5LDQgKzcxLDMgQEAgcHJpdmF0ZToKIH07CiAgICAgCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0
ODYxNzk5MjM4MGYzYjZiMDEuLmNlNDRkOWViODFjNzU1YjIyZmY5MWFlZWQ5YTczMjhhYWIyNjM2
YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwyMiArMjUsMjEgQEAK
ICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwg
Y29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29s
b3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVG
bG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLVJlZjxG
RUZsb29kPiBGRUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9v
ZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9y
JiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVGbG9vZCkKKyAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9v
ZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxv
b2QoZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZsb29k
OjpzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTU4LDE3ICs1OCwyMCBAQCBi
b29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zs
b2F0UmVjdCBGRUZsb29kOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdAoreworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247Cit9CisKK0ZpbHRlclJl
c3VsdCogRkVGbG9vZDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZl
Y3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZm
ZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJl
c3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0
LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAg
IGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxv
b2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7Cisg
ICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21ldHJ5LCBi
b3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5Njlj
NmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2MTczNDhlLi40OGUwZmY4OGMyODEzMjc4OTAxZGMzOTkw
MDU5NGI1MTA4M2YxZjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxNCArMjMsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVh
dGUoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9v
ZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9v
ZENvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0zNywyNyArMzcsMjcgQEAgcHVibGljOgogICAgIGZs
b2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAgICAg
Ym9vbCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOwogCitwcml2YXRlOgorICAgIEZFRmxvb2QoY29u
c3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKKworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KKyAgICAKICNpZiAhVVNFKENHKQog
ICAgIC8vIGZlRmxvb2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFu
eSBraW5kLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNv
bG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycy4KLSAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVy
RWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2Qo
RmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9v
ZCI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAg
RmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29u
c3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdh
cmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb2xvciBtX2Zsb29kQ29s
b3I7CiAgICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmVi
YjZiYmI4YWIzNjM5NDM2NS4uOTdjMTA1YjViOTBjMDZiYzY4MzU3YWNlOWM0YjlmYzI1OTk5ZmI5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjYsNDUwICsyNiwzOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgot
Ci1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAgICByZXR1
cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCBn
TWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9p
ZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50
JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVz
c2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUp
CiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNm
ZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0
aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAg
ICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0
ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVs
dGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBk
ZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAg
ICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAg
ICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAy
OgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsr
OwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2Rl
KSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwg
ZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3Np
YW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpGRUdhdXNzaWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwg
bV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVz
c2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgs
IGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRUdhdXNzaWFuQmx1cihmaWx0ZXIsIHgsIHksIGVkZ2VNb2RlKSk7Ci19Ci0KLXZvaWQg
RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFgg
PSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkp
Ci17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1v
ZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsK
LX0KLQotLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1p
bmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25l
ZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRl
TGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4
S2VybmVsU2l6ZSkKLXsKLSAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJh
eS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwot
ICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAg
Y29uc3QgaW50IGNoYW5uZWwgPSAzOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RI
ZWlnaHQ7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAg
ICBpbnQgc3VtID0gMDsKLQotICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRy
W2NoYW5uZWxdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAg
ICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAg
ICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAg
ICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBk
eExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0g
c3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRo
KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZz
ZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNy
Y1B0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQg
Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFt
cGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGlu
dCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
LXsKLSAgICBjb25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVj
dFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJbWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBo
YU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwg
c3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVs
U2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRh
KCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAg
Ly8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3RoOiBpdCBpcyBFbGVtZW50IHNpemUg
KyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHdpbGwgYmUKLSAgICAvLyBQ
ID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVm
ZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0g
ICAgICAgIGludCBzdW1SID0gMCwgc3VtRyA9IDAsIHN1bUIgPSAwLCBzdW1BID0gMDsKLQotICAg
ICAgICBpZiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICAgICAgLy8gRmls
bCB0aGUga2VybmVsLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxT
aXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRh
ICsgb2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAg
ICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0
cisrOwotICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVP
ZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQ
dHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0
cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAgICAgICAq
ZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOwotICAgICAgICAgICAg
ICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAg
ICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYgKHggPj0g
ZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhl
bEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICBzdW1SIC09IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQ
dHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQg
KiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNy
Y0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJb
MF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBz
cmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJl
LgotICAgICAgICAgICAgLy8gR2V0IGVkZ2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRl
Jy4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsg
bGluZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0Rh
dGEgKyAobGluZSArIChlZmZlY3RXaWR0aCAtIDEpICogc3RyaWRlKTsKLQotICAgICAgICAgICAg
Ly8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0x
OyBpIDwgZHhSaWdodDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBm
b3IgbmVnYXRpdmUgdmFsdWVzIG9mICdpJz8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBz
cmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0g
ZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0
V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0
cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAg
ICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0K
LSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8g
ZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1
bUcgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAg
ICAgICAgICAgICAgICBpZiAoeCA8IGR4TGVmdCkgewotICAgICAgICAgICAgICAgICAgICBzdW1S
IC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZh
bHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNl
dCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1H
IC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgewotICAg
ICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBz
dW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVk
Z2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNy
Y1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hC
bHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwg
aW50IGVmZmVjdEhlaWdodCkKLXsKLSAgICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1
ZmZlci5kYXRhKCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQg
PD0gMCB8fCBzdHJpZGUgPD0gMCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQg
cmFkaXVzLgotICAgIGlmIChrZXJuZWxTaXplICUgMiAhPSAxKQotICAgICAgICBrZXJuZWxTaXpl
ICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdElu
QnVmZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKLSAgICBl
ZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwotICAgIGVmZmVjdEluQnVmZmVyLmhl
aWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlk
ZTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1
ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5kYXRhKCk7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLndpZHRo
ID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdo
dDsKLSAgICBlZmZlY3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRl
cm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0
aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFsIGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgotICAgIC8v
IHRoZSBzaXplIG5lZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgot
ICAgIHNpemVfdCB0bXBCdWZmZXJTaXplID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVm
ZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJu
ZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7
Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9p
ZCogdG1wQnVmZmVyID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1
ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQp
OwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZl
Y3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVj
dEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUs
IGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICBXVEY6OmZhc3RGcmVlKHRt
cEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4g
aW9CdWZmZXIuCi0gICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVu
Z3RoKCkpOwotICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBp
b0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0jZW5kaWYKLQotaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hC
bHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQotewotICAgIGludCBkeExlZnQgPSAwOwotICAgIGludCBkeFJpZ2h0ID0gMDsK
LSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAgICBpbnQgZHlSaWdodCA9IDA7Ci0gICAgCi0gICAgVWlu
dDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFtcGVk
QXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkgewotICAgICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKLSAgICAgICAgICAgIGtlcm5l
bFBvc2l0aW9uKGksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQpOwotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAg
ICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVY
LCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigq
ZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBz
dHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VN
b2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIs
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9u
KGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5U
UklOU0lDUykKLSAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAg
IGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQs
IGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgo
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZl
ciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBh
aW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKLSNl
bHNlCi0gICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUud2lkdGgoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0g
ICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7Ci0gICAgICAgIEFTU0VSVChpb0J1ZmZl
ci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweShpb0J1
ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotICAg
IH0KLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVs
QXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplKQotewotICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6
ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VN
T0RFX0RVUExJQ0FURSkpIHsKLSAgICAgICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRt
cFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWlu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBz
dGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJu
ZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsK
LX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJh
bWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0
ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJh
bWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVy
cy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQorc3RhdGljIGlubGluZSBmbG9hdCBnYXVz
c2lhbktlcm5lbEZhY3RvcigpCiB7Ci0jaWYgIVVTRShBQ0NFTEVSQVRFKQotICAgIGludCBzY2Fu
bGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLSAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICog
a2VybmVsU2l6ZVkgKiAwLjVmOwotICAgIGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50
U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5z
aW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7Ci0KLSAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1B
cHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1h
bFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVy
T2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQg
dGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9i
cyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBi
bG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQg
YnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQg
YmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29u
c3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAg
ICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsg
am9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotCi0gICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9
ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWln
aHQ7Ci0gICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50
WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tT
aXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFq
b2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZl
cjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxB
cnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZl
ci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsK
LSAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0
b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAw
OwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uT2Zmc2V0OwotICAgICAgICAgICAgICAgIGlu
dCBzaXplOwotICAgICAgICAgICAgICAgIGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwg
am9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotCi0gICAgICAg
ICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0ZWRCbG9ja0hlaWdodDsKLSAgICAgICAgICAgICAg
ICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdodCAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAg
ICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNjYW5saW5lOwotCi0gICAgICAgICAgICAg
ICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9Q
aXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNp
bmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gVGhlIHNlbGVjdGlv
biBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRm
b3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwg
a2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUpOworICAgIHJldHVybiAzIC8gNC5m
ICogc3FydGYoMiAqIHBpRmxvYXQpOwogfQogCiBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNp
emUoZmxvYXQgdmFsdWUpCiB7CiAgICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4g
QSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3Vs
dCBpbWFnZSBidXQKICAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28g
bXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3Rh
dGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0g
c3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUg
KiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxp
bnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkp
KTsKIH0KLSAgICAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2Vy
bmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRp
b24pCiB7CiAgICAgQVNTRVJUKHN0ZERldmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0
aW9uLmhlaWdodCgpID49IDApOwogICAgIEludFNpemUga2VybmVsU2l6ZTsKQEAgLTQ4MywxMiAr
NzIsMTIgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIGtlcm5lbFNpemU7CiB9CiAK
LUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewot
ICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbiAvKmZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oc3RkRGV2aWF0aW9uKSovKTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikK
IHsKICAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3Rk
RGV2aWF0aW9uKTsKIApAQCAtNDk2LDcyICs4NSw0MyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJu
IHsgMyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8g
MiB9OwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpCitJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJ
bnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNp
emUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgp
LCBvdXRzZXRTaXplLndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lk
dGgoKSB9OworfQogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZl
Y3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdAoreworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1Jl
Y3QoKTsKICAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRl
IHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RF
X05PTkUpIHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChh
YnNvbHV0ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2Vk
Z2VNb2RlICE9IEVER0VNT0RFX05PTkUpCisgICAgICAgIHJldHVybiBkcmF3aW5nUmVjdDsKIAot
ICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGgg
dGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRl
UGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBh
YnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYp
OworICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKIAotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRl
UGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2Vv
bWV0cnkuY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQorRmlsdGVyUmVzdWx0KiBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRw
dXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVy
R2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQp
IGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEFT
U0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsK
IAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0
aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25Q
aXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAg
ICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXpl
IGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9z
dGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0K
LSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAg
IHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIHRtcElt
YWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50
U2l6ZS5hcmVhKCkgKiA0KTsKLSAgICBpZiAoIXRtcEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURh
dGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsK
LX0KLQotSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAg
SW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZ
IH0pOwotICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgo
KSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgcmV0dXJu
IGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFy
eVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CitUZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMg
PDwgaW5kZW50IDw8ICJbZmVHYXVzc2lhbkJsdXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3RkRGV2
aWF0aW9uPVwiIiA8PCBtX3N0ZFggPDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiXVxuIjsKLQotICAg
IFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVj
dCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJl
dHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IDVmYjk3ZmZiMDcwYzJkYWViNmVi
MjgzYmVhYWExNzY0N2NiYjJkM2UuLjk3YzgwNDM2NjljNWY1MmUwMzMwZGEwODk5OTdlYWU0M2Ex
YzVlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNTkgKzIzLDQwIEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUdh
dXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2Rl
VHlwZSk7CisgICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKGZsb2F0LCBmbG9h
dCwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJl
dHVybiBtX3N0ZFg7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOworICAgIHZv
aWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KSB7IG1fc3RkWCA9IHg7IH0KIAogICAgIGZsb2F0
IHN0ZERldmlhdGlvblkoKSBjb25zdCB7IHJldHVybiBtX3N0ZFk7IH0KLSAgICB2b2lkIHNldFN0
ZERldmlhdGlvblkoZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KSB7
IG1fc3RkWSA9IHk7IH0KIAogICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZWRnZU1vZGU7IH0KLSAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Cisg
ICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdlTW9kZSA9
IGVkZ2VNb2RlOyB9CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNv
bnN0IEZpbHRlciYsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXpl
IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAg
ICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRT
aXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVk
S2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7
CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBF
ZGdlTW9kZVR5cGUpOworICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVU
eXBlKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVHYXVzc2lhbkJsdXIiOyB9CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJl
Y3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJh
bGxlbCBqb2JzCi0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFz
cyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgewot
ICAgICAgICBGRUdhdXNzaWFuQmx1ciogZmlsdGVyOwotICAgICAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiB0bXBQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7
Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxT
aXplWTsKLSAgICB9OwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmls
dGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQg
a2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0
ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIElu
dFNpemUmIHBhaW50U2l6ZSk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cAppbmRleCBkZjE3NmY4ZTA3MGE0MThjMjA4NTE4MDkwZWU3YTZjYTExM2U1NmY1Li5kNmQ1OTQy
ZjJmZmJhMmRjMzlmYmRkODRlNmI0MmFjY2YyYzU1MDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTEs
NyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKLSAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCw0NzAgKzI4LDc3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVMaWdodGlu
Zy5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRkVMaWdodGlu
Z05FT04uaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5n
VHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJm
YWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlw
ZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlw
ZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2Up
KQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0aW5nOjpGRUxp
Z2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIHNvdXJjZSwgRmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKKyAgICA6
IEZpbHRlckVmZmVjdCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFj
ZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25z
dGFudCkKICAgICAsIG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwg
bV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRM
ZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJu
ZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAot
Ym9vbCBGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQotewot
ICAgIGlmIChtX3N1cmZhY2VTY2FsZSA9PSBzdXJmYWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IpCitib29sIEZFTGlnaHRpbmc6OnNldENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAobV9saWdodGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCisgICAg
aWYgKG1fY29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fbGln
aHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7CisgICAgbV9jb2xvciA9IGNvbG9yOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09
IGtlcm5lbFVuaXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExl
bmd0aFkpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0
aFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBr
ZXJuZWxVbml0TGVuZ3RoWTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0ZXhw
ciBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVs
T2Zmc2V0ID0gMzsKLXN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0
aWNfY2FzdDx1aW50OF90PigweEZGKTsKLQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1h
bCBjb2VmZmljaWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMg
Y29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQg
Y0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Iy
ZGl2MyA9IC0yIC8gMy5mOwotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAt
MiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAt
MiAqIGNlbnRlciAtIHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0K
LQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0g
ICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
ICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9t
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0y
ICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAg
LWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJv
dHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAr
PSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAg
ICAtMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAg
LWxlZnQgLSAyICogY2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQot
Ci1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2Vu
dGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9w
IC0gdG9wUmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBv
ZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRB
bHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0Owot
ICAgIAotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0
QWxwaGFPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsK
LSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdo
dEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBs
ZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cu
dG9wTGVmdCgpOwotICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBi
b3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBh
bHBoYVdpbmRvdy5ib3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBz
aGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFX
aW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsy
XSA9IHJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNv
bWUgc3BvdC1jaGVja3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2lu
ZG93LnRvcCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAg
ICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21M
ZWZ0ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0
ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwo
aW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0g
ICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAt
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAq
IGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBp
bnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdo
dCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAg
IH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
Um93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Citib29sIEZFTGlnaHRpbmc6OnNldFN1cmZhY2VT
Y2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpCiB7Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50
IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9w
TGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0
IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07
CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2FsZSkg
IT0gbV9zdXJmYWNlU2NhbGU7CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdo
dGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKIHsKLSAgICBp
bnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBv
ZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAg
ICAgLXRvcExlZnQgKyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BM
ZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAyICogY2VudGVyCi0gICAgfTsKKyAgICByZXR1cm4gc3Rk
OjpleGNoYW5nZShtX2RpZmZ1c2VDb25zdGFudCwgZGlmZnVzZUNvbnN0YW50KSAhPSBtX2RpZmZ1
c2VDb25zdGFudDsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZ
LCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckNv
bnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFs
MkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3NwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFy
Q29uc3RhbnQpICE9IHNwZWN1bGFyQ29uc3RhbnQ7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBm
bG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9h
dCBhbHBoYSkKK2Jvb2wgRkVMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVj
dWxhckV4cG9uZW50KQogewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxl
OwotICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBt
X2xpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5
LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9y
LmlzWmVybygpKSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlz
IGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09
IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBtX2RpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
RmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkg
KyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkg
LyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3Iu
eigpIC8gaGFsZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0g
ICAgICAgICAgICBmYWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFj
ZVNjYWxlLAotICAgICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICog
ZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAg
IGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAg
ICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQot
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZl
Y3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICog
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
LnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0
aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAg
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9y
ICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxl
bmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9
IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3Ip
IC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFy
RXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAx
KQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDAp
Ci0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNd
ID0gewotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRp
bmdEYXRhLmNvbG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1
LjBmKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0
aW5nRGF0YS5jb2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRh
LnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKKyAgICByZXR1cm4gc3Rk
OjpleGNoYW5nZShtX3NwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQpICE9IG1fc3Bl
Y3VsYXJFeHBvbmVudDsKIH0KIAotLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3Jp
dGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEg
Y2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0
aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwg
Y29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZ
LCBpbnQgZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSBy
ZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZ
KTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZ
OyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFy
dCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNh
Y2hlIG9mIGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVt
bnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAg
ICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwg
dGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAg
ICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdo
dChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5w
aXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
ICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdp
bmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBp
eGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotCi0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7
Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyAr
K3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlm
dCgpOwotICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3Jt
YWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtl
cihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCitib29sIEZFTGln
aHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKQogewot
ICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0
ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwg
cGFyYW1ldGVycy0+eUVuZCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFgpICE9IG1fa2VybmVsVW5pdExlbmd0aFg7CiB9CiAK
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17
Ci0gICAgdW5zaWduZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUg
LSAxOwotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJl
Y3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVy
ID4gMSkgewotICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgV1RG
OjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpv
YnMoJnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQot
ICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgaW50IGpvYiA9IHBh
cmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYiA+IDEpIHsKLSAgICAg
ICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJl
IGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAg
ICAgICAgLy8geVN0ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5k
bGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3Qg
aW50IHlTdGVwID0gcm93c1RvUHJvY2VzcyAvIGpvYjsKLSAgICAgICAgICAgIGNvbnN0IGludCBq
b2JzV2l0aEV4dHJhID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKLQotICAgICAgICAgICAgaW50IHlT
dGFydCA9IDE7Ci0gICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVy
ID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OwotICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2Ig
PCBqb2JzV2l0aEV4dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLnlFbmQgPSB5U3RhcnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLQotICAgIHBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lKTsKLX0KLQotaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKK2Jvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxv
YXQga2VybmVsVW5pdExlbmd0aFkpCiB7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50
dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSNpZiBD
UFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01Q
QVRJQkxFKQotICAgIHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZWxz
ZQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZW5kaWYK
KyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2tlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0
TGVuZ3RoWSkgIT0gbV9rZXJuZWxVbml0TGVuZ3RoWTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQorRmxvYXRSZWN0IEZFTGlnaHRpbmc6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWlu
dGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29t
ZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBU
aGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0
IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZh
Y2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBo
ZWlnaHQgLSAxOwotCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBw
YWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQz
RChyLCBnLCBiKTsKLQotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMs
IHBhaW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVmdC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsK
LSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJk
aXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8v
IFRvcCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
IC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
ZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSBsZWZ0LgotICAg
IG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAw
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIHJpZ2h0Lgot
ICAgIG9mZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3Iy
ZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0g
ICAgaWYgKHdpZHRoID49IDMpIHsKLSAgICAgICAgLy8gVG9wIHJvdy4KLSAgICAgICAgb2Zmc2V0
ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFj
dG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIEJvdHRv
bSByb3cuCi0gICAgICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQ
aXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRp
djIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmIChoZWln
aHQgPj0gMykgewotICAgICAgICAvLyBMZWZ0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRD
b2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAg
ICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNp
emU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAg
ICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29s
dW1uTm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdo
dCA+PSAzKSB7Ci0gICAgICAgIC8vIEludGVyaW9yIHBpeGVscy4KLSAgICAgICAgcGxhdGZvcm1B
cHBseShkYXRhLCBwYWludGluZ0RhdGEpOwotICAgIH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0
aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBo
YUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAg
ICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFscGhhKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKSB7Ci0g
ICAgICAgICAgICB1aW50OF90IGExID0gZGF0YS5waXhlbHMtPml0ZW0oaSk7Ci0gICAgICAgICAg
ICB1aW50OF90IGEyID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDEpOwotICAgICAgICAgICAgdWlu
dDhfdCBhMyA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAyKTsKLSAgICAgICAgICAgIC8vIGFscGhh
IHNldCB0byBzZXQgdG8gbWF4KGExLCBhMiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+
c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8g
YTIgOiBhMykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXJPdXRw
dXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3Vu
ZGFyeVNldCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAg
IEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3Qo
KTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJl
bXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVu
aXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFcz
Ci0gICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJy
b3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCi0gICAgLy8gb3V0cHV0IGZvciB2YXJp
b3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJs
ZS4KLSAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBp
bXBsZW1lbnRhdGlvbgorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0
KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBJbnRTaXplIGFic29s
dXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0
aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJz
b2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1
dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4IDBmZmZjZDA2NDM5NmQ4ZjRiNjQwODIyNjlj
YzIwNzRmN2M5ZGJkYmMuLmI4OThhYzk3ODg3YmNkZmYwMWRiNTZkZjM1MDI4ODM4ZWNiYzQxNGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTM5ICszMSw1MSBAQAogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxp
Z2h0U291cmNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotCi0vLyBD
b21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdo
dGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdE
YXRhRm9yTmVvbjsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KKyAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Cisg
ICAgYm9vbCBzZXRDb2xvcihjb25zdCBDb2xvciYpOwogCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VT
Y2FsZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25z
dCBDb2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlmZnVzZUNvbnN0YW50OyB9CisgICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOwor
CisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJD
b25zdGFudDsgfQorICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CiAKKyAgICBm
bG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50
OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKKyAgICAKICAgICBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7
IH0KICAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKIAogICAgIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsgfQog
ICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQpOwogCi0gICAgY29uc3QgTGlnaHRT
b3VyY2UmIGxpZ2h0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsg
fQorICAgIGNvbnN0IExpZ2h0U291cmNlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxS
ZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFy
YWxsZWwgam9icworICAgIEZFTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIEZpbHRlckZ1bmN0aW9uOjpUeXBlKTsKIAot
ICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAg
ICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cg
ewotICAgICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGlj
ZXMgZWFzaWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7
IHJldHVybiBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAg
ICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRv
bUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAg
IHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFd
OyB9Ci0gICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJu
IGFscGhhWzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAg
ICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhf
dCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQg
c2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQot
ICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFd
ID0gdmFsdWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAg
ICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90
IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0
Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0g
ICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9
IGFscGhhWzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlz
IHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAg
ICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxl
OwotICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3
aWR0aERlY3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0K
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Owot
ICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKLSAgICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxw
aGFXaW5kb3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJv
d05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9t
UmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVj
dCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBm
aWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAg
aW50IHlFbmQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmlj
V29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lk
IHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7
Ci0KLSAgICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+
JiYsIFR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJGRUxpZ2h0aW5nIjsgfQotCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFt
cGVkQXJyYXkmLCBpbnQsIGludCk7Ci0KLSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQg
eCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVj
dG9yKTsKLSAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRp
bmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwg
ZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0
IGFscGhhKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
aW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
LCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmlj
KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsK
LQotI2lmIENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIo
R0NDX0NPTVBBVElCTEUpCi0gICAgc3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9h
dCBleHBvbmVudCk7Ci0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0K
LSAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBt
X2xpZ2h0U291cmNlOwotCi0gICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOworICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBDb2xvciBtX2NvbG9yOwogICAgIGZsb2F0
IG1fc3VyZmFjZVNjYWxlOwogICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50OwogICAgIGZsb2F0
IG1fc3BlY3VsYXJDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAg
ZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZ
OworICAgIFJlZjxMaWdodFNvdXJjZT4gbV9zb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDBhMjAwMDFiMTczYmQ4ZmRmNmJiYTYzNmNkMjNjZTQ3MDI2
ZTdiM2YuLmE2MDQyOWFjNTQ4MmRlOGY2ZWIyMmE5NmM4OWFlOTFjY2IzZGRkYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsNTEgKzIzLDQ5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5o
IgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZp
bHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitS
ZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UobnVtYmVyT2ZFZmZlY3RJbnB1
dHMpKTsKIH0KIAotUmVmPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikK
K0ZFTWVyZ2U6OkZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCisgICAgOiBG
aWx0ZXJFZmZlY3QoVHlwZTo6RkVNZXJnZSkKKyAgICAsIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMo
bnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJn
ZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZv
aWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2NvbnN0IEF0b21TdHJpbmcmIEZF
TWVyZ2U6OmVmZmVjdE5hbWUoKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVj
dElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIkZFTWVyZ2UiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFt
ZTsKK30KKworRmlsdGVyUmVzdWx0KiBGRU1lcmdlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1
dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID09IG1fbnVtYmVyT2ZFZmZlY3RJbnB1
dHMpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgVmVj
dG9yPFJlZjxGaWx0ZXJSZXN1bHQ+PiBpbnB1dHM7CisgICAgZm9yIChhdXRvIGlucHV0c1NpemUg
PSBtX251bWJlck9mRWZmZWN0SW5wdXRzOyBpbnB1dHNTaXplLS07ICkKKyAgICAgICAgaW5wdXRz
LmFwcGVuZChzdGFjay50YWtlTGFzdCgpKTsKIAorICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1
dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBpZiAoSW1hZ2VCdWZmZXIq
IGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5UGxh
dGZvcm0ob3V0cHV0LCBpbnB1dHMsIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9
CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJl
YW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2Ui
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAg
IEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8
ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRF
ZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAg
ICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwi
XVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDcz
ZTU3YjAxOTRlYmNmMThmMjYwNy4uYTFjMDc4ZTAzMGE1N2I5ZjcxYzk3OWY5YzE5MmQ0ZGJiMWRj
ODNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI4LDE2ICsyOSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZF
TWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
TWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1
bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHN0YXRpYyBjb25zdCBBdG9t
U3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNZXJnZShGaWx0ZXImKTsK
KyAgICBGRU1lcmdlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKTsKIAogICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KIAot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVz
dWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVy
Qm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShG
aWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJl
ck9mRWZmZWN0SW5wdXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLmRi
ODgwYjRmOTI2YzBiOWQwYWQ5MzNiZGNlNGNlMzEyN2JiMzUwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMjY1ICsyNSw2NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKK1JlZjxGRU1v
cnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1vcnBob2xvZ3kpCisgICAgLCBtX21vcnBob2xv
Z3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IpCisgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkK
KyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
TW9ycGhvbG9neShmaWx0ZXIsIHR5cGUsIHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAotYm9vbCBG
RU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCitib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xv
Z3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vcnBob2xvZ3lPcGVyYXRvciwgbW9y
cGhvbG9neU9wZXJhdG9yKSAhPSBtb3JwaG9sb2d5T3BlcmF0b3I7CiB9CiAKIGJvb2wgRkVNb3Jw
aG9sb2d5OjpzZXRSYWRpdXNYKGZsb2F0IHJhZGl1c1gpCiB7Ci0gICAgaWYgKG1fcmFkaXVzWCA9
PSByYWRpdXNYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNYID0gcmFkaXVz
WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3JhZGl1c1gs
IHJhZGl1c1gpICE9IG1fcmFkaXVzWDsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1
c1koZmxvYXQgcmFkaXVzWSkKIHsKLSAgICBpZiAobV9yYWRpdXNZID09IHJhZGl1c1kpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3JhZGl1c1kgPSByYWRpdXNZOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KQotewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBh
aW50UmVjdC5pbmZsYXRlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1
c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFp
bnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFp
bnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGl4
ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKQotewotICAgIHJldHVybiAoeSAq
IHdpZHRoICsgeCkgKiA0OwotfQotCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhl
bCkKLXsKLSAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOwotfQot
Ci1pbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25l
bnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKLXsKLSAg
ICByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWlu
dDhfdD4+KGNvbXBvbmVudHMpIH07Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9y
TWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+JiBiKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKLQot
ICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCkKLXsKLSAgICBhdXRv
IGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9y
OjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5
LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7Ci0KLSAgICBm
b3IgKGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkgewotICAgICAgICBhdXRvIHBp
eGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JB
IHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEo
KSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOwotICAgICAgICBleHRyZW11bSA9
IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVtLCBwaXhlbCk7Ci0gICAgfQotICAgIHJldHVybiBleHRy
ZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQot
ICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RF
PihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLQotICAgIHJldHVybiBj
b2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5
LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLX0KLQotdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZl
Y3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4sIDE2PjsKLQotdGVtcGxhdGU8TW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsKQotewot
ICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJuZWxbMF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBrZXJuZWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4o
ZXh0cmVtdW0sIGtlcm5lbFtpXSk7Ci0KLSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0
IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewot
ICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0
dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsK
LQotICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRF
PihrZXJuZWwpOwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQot
ewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVs
QXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXk7Ci0gICAgYXV0byYgZHN0UGl4ZWxB
cnJheSA9ICpwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheTsKLQotICAgIGNvbnN0IGludCByYWRp
dXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7Ci0gICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWlu
dGluZ0RhdGEucmFkaXVzWTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEud2lk
dGg7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0KLSAgICBB
U1NFUlQocmFkaXVzWCA8PSB3aWR0aCB8fCByYWRpdXNZIDw9IGhlaWdodCk7Ci0gICAgQVNTRVJU
KHN0YXJ0WSA+PSAwICYmIGVuZFkgPD0gaGVpZ2h0ICYmIHN0YXJ0WSA8IGVuZFkpOwotCi0gICAg
Q29sdW1uRXh0cmVtYSBleHRyZW1hOwotICAgIGV4dHJlbWEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgyICogcmFkaXVzWCArIDEpOwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7
ICsreSkgewotICAgICAgICBpbnQgeVJhZGl1c1N0YXJ0ID0gc3RkOjptYXgoMCwgeSAtIHJhZGl1
c1kpOwotICAgICAgICBpbnQgeVJhZGl1c0VuZCA9IHN0ZDo6bWluKGhlaWdodCwgeSArIHJhZGl1
c1kgKyAxKTsKLQotICAgICAgICBleHRyZW1hLnNocmluaygwKTsKLQotICAgICAgICAvLyBXZSBz
dGFydCBhdCB0aGUgbGVmdCBlZGdlLCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNY
IGNvbHVtbnMuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAg
ICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwg
eVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAgICAgLy8g
S2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICBpZiAoeCA8IHdpZHRo
IC0gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11
bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3
aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKLSAgICAgICAg
ICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQ
aXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSAr
IHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQaXhlbCA9
IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1h
LCBtX3R5cGUpKS52YWx1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQot
ewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRp
bmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAgcmV0dXJuIHN0ZDo6ZXhj
aGFuZ2UobV9yYWRpdXNZLCByYWRpdXNZKSAhPSBtX3JhZGl1c1k7CiB9CiAKLXZvaWQgRkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQor
RmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1
bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXpl
cyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBz
cXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsK
KyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0g
aW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogCi0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFs
QXJlYSA9ICgxNjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icwotICAgIAotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVp
Z2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5z
aWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVs
RmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRo
cmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9y
bUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLSAgICAgICAgYXV0byBudW1PZlRo
cmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChudW1PZlRo
cmVhZHMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUi
LXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5
IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8gam9iU2l6ZSAqIGpvYnMgPCB0b3RhbCBzaXpl
LiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRy
YSIuCi0gICAgICAgICAgICBpbnQgam9iU2l6ZSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyBudW1P
ZlRocmVhZHM7Ci0gICAgICAgICAgICBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5o
ZWlnaHQgJSBudW1PZlRocmVhZHM7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAg
ICAgICAgICAgZm9yIChpbnQgam9iID0gbnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9i
KSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFy
YWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtLmZpbHRlciA9
IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW0uc3RhcnRZID0gY3VycmVudFk7Ci0gICAgICAg
ICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGpvYlNpemUgKyAxIDog
am9iU2l6ZTsKLSAgICAgICAgICAgICAgICBwYXJhbS5lbmRZID0gY3VycmVudFk7Ci0gICAgICAg
ICAgICAgICAgcGFyYW0ucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2Rl
bAotICAgIH0KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRl
ckNvb3JkaW5hdGVzKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwogCi0gICAgcGxhdGZvcm1B
cHBseUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKLX0KLQot
Ym9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNY
LCBpbnQgcmFkaXVzWSkKLXsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhl
bEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNs
aXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsK
IH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJS
ZXN1bHQqIEZFTW9ycGhvbG9neTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJl
c3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEFTU0VSVCghc3RhY2su
aXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGlu
LT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LQotICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVz
WCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMu
aGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlm
ICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmFkaXVzID0gZmxv
b3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwg
bV9yYWRpdXNZIH0pKTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdS
ZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6
Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7Ci0K
LSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBl
ZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndp
ZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qu
aGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1
c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5n
RGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQot
ICAgIHBsYXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9y
bShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3JwaG9sb2d5T3BlcmF0
b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChtb3JwaG9sb2d5T3BlcmF0
b3IpIHsKICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICB0
cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk3LDE1ICs5NiwxMSBAQCBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVN
b3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRU1vcnBob2xv
Z3k6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTW9ycGhvbG9neSI7Ci0g
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7CiAgICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwg
IlwiICIKICAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRp
dXNZKCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNj
b3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXgg
NDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWExMS4uMzAwYTVlOTYyM2UwZWY4
NGI4ZjQwZDhkYzI2NDU4ODdmZjllN2RkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC0yLDYgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxMSArMjMsMTAgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmls
dGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHsKK2VudW0gTW9ycGhvbG9neU9wZXJhdG9yIHsKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfVU5LTk9XTiA9IDAsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKICAg
ICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgpAQCAtMzQsMTAgKzM0LDEwIEBAIGVu
dW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBj
cmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxv
YXQgcmFkaXVzWSk7CisgICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICBib29sIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlKTsKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7IH0KKyAgICBib29sIHNldE1vcnBob2xvZ3lP
cGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3IpOwogCiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFkaXVzWDsgfQogICAgIGJvb2wgc2V0UmFkaXVzWChmbG9hdCk7CkBAIC00
Niw0MCArNDYsMTkgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7CiAKIHBy
aXZhdGU6Ci0gICAgRkVNb3JwaG9sb2d5KEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIEZFTW9ycGhvbG9neShNb3JwaG9s
b2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9
CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwg
aW50IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVk
QXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhl
bEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAg
IGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0
IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7
Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQ
YWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxh
dGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCi0g
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgTW9ycGhvbG9neU9wZXJhdG9y
IG1fbW9ycGhvbG9neU9wZXJhdG9yOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBt
X3JhZGl1c1k7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2My
ZDY1YWE0MTQwZjY5Li5kZGE2NjVkNzUyZmI1MDBkNmIwODZiNjQ5YTdmODBhNWFjOGIwOWQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI0LDcxICsyNSw0OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYg
ZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpPZmZzZXQpCitGRU9mZnNldDo6RkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFT2Zmc2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1f
ZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZp
bHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQorUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRl
KGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNl
dChmaWx0ZXIsIGR4LCBkeSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4
LCBkeSkpOwogfQogCi12b2lkIEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkKK0Zsb2F0UmVjdCBG
RU9mZnNldDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgbV9keCA9IGR4OwotfQorICAgIEFTU0VSVChpbnB1dHMu
c2l6ZSgpID09IDEpOworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBpbnB1dHNbMF0tPmRyYXdpbmdS
ZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQotewotICAgIG1fZHkgPSBk
eTsKLX0KKyAgICBkcmF3aW5nUmVjdC5tb3ZlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3Jk
aW5hdGVzKHsgbV9keCwgbV9keSB9KSk7CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3Qo
MCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0
ZXIoKTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9u
KHsgbV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFp
bnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFp
bnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRv
UHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQog
Ci12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RU9mZnNldDo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIg
PSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCku
Z2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJh
d2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBt
X2R5IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5C
dWZmZXIsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1dCwg
eyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3RyZWFt
JiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVPZmZzZXQ6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsKLSAgICBGaWx0
ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAg
ICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4i
OwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2YWU1Yzc0
YWFiNWFhMTY3ZmIxZTY5ZS4uODFiNGFkMWFhMDkwYTZmYzVkODRmMDg3ZWY5NTA4YzAzZjkyNjk2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjIsMzQgKzIzLDY0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBm
bG9hdCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KLSAgICB2
b2lkIHNldER4KGZsb2F0KTsKKyAgICB2b2lkIHNldER4KGZsb2F0IGR4KSB7IG1fZHggPSBkeDsg
fQogCiAgICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9Ci0gICAgdm9pZCBzZXRE
eShmbG9hdCk7CisgICAgdm9pZCBzZXREeShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7IH0KKworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZz
ZXQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFT2Zmc2V0KEZpbHRlciYs
IGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsK
IAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVP
ZmZzZXQiOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
ICAgIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIGZsb2F0IG1fZHg7CiAgICAgZmxvYXQgbV9keTsKIH07CiAKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFT2Zmc2V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5Owor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+
PiBGRU9mZnNldDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxmbG9hdD4gZHg7CisgICAgZGVjb2RlciA+PiBkeDsKKyAgICBpZiAoIWR4KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHk7CisgICAg
ZGVjb2RlciA+PiBkeTsKKyAgICBpZiAoIWR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgcmV0dXJuIEZFT2Zmc2V0OjpjcmVhdGUoKmR4LCAqZHkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVPZmZzZXQpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVm
ZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRU9mZnNldDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDU5OTcyMzA2ODg2YTYzZmE0MTJiNWI3
MTQxZjc0ZjljNDg3YTE0NGMuLjY5OTI0NDMzZjkzZmU0ZjIxZmViYmFiZjQ4NDQ1ODc2NmVlZTZj
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDQ5ICsyMywyNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFU3BlY3VsYXJMaWdodGluZy5oIgogCi0jaW5jbHVk
ZSAiTGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRp
bmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJm
YWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIFNwZWN1
bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25z
dGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5n
dGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6U3BlY3VsYXJMaWdodGluZykKK1JlZjxG
RVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9y
JiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBzb3VyY2UpCiB7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRp
bmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZF
U3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwg
ZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxh
ckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJiBzb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBz
dXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpLCBUeXBlOjpG
RVNwZWN1bGFyTGlnaHRpbmcpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxh
ckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNv
bnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExl
bmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6
fkZFU3BlY3VsYXJMaWdodGluZygpID0gZGVmYXVsdDsKLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRp
bmc6OnNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKLXsKLSAgICBp
ZiAobV9zcGVjdWxhckNvbnN0YW50ID09IHNwZWN1bGFyQ29uc3RhbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3NwZWN1bGFyQ29uc3RhbnQgPSBzcGVjdWxhckNvbnN0YW50OwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJF
eHBvbmVudChmbG9hdCBzcGVjdWxhckV4cG9uZW50KQotewotICAgIGlmIChtX3NwZWN1bGFyRXhw
b25lbnQgPT0gc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
c3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1bGFyRXhwb25lbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVRleHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZVNwZWN1bGFyTGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3Vy
ZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVj
dWFsQ29uc3RhbnQ9XCIiIDw8IG1fc3BlY3VsYXJDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8
ICJzcGVjdWxhckV4cG9uZW50PVwiIiA8PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsK
LQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1
dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwog
ICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5OGE3
NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uY2FlNWI4MmZiZWJjNWFiNjM0MzU2
OTA1ZTliZTdlNmYzZjAzMmY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywyMCArMjgs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBw
dWJsaWMgRkVMaWdodGluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGln
aHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1
bGFyTGlnaHRpbmcoKTsKKyAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRl
KGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKLSAgICBmbG9hdCBzcGVj
dWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9Ci0gICAg
Ym9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKLQotICAgIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAgICBib29sIHNl
dFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworcHJpdmF0ZToKKyAgICBGRVNwZWN1bGFyTGlnaHRp
bmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiRkVTcGVjdWxhckxpZ2h0aW5nIjsgfQogCi1wcml2
YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
RmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggMzVjNTFjYmIyMjlkZWU5NjQyZGMxZTdkY2EwYzVkYjJm
Y2FjMjBhZC4uOTM2YTk4MTI0NGQ1ODM0NGNlYjc0MTkxMmNmYjIwNjEyNTdlMTE5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdz
IDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw4
MCArMjIsNDEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVRpbGUuaCIKIAot
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRlciYgZmlsdGVy
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK1JlZjxGRVRpbGU+IEZF
VGlsZTo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9
CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVUaWxlOjpG
RVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVGlsZSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRVRpbGUoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFVGlsZTo6ZHJhd2luZ1JlY3QoY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBU
aGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGlu
Y29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAg
ICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBv
ZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0
ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFu
ZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJl
Y3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2Nh
dGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0
KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJF
ZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAg
ICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxl
SW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwg
dGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJp
bmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsK
LSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCks
IC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsK
LQotICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUlt
YWdlKFdURk1vdmUodGlsZUltYWdlKSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAg
ICByZXR1cm47CisgICAgLy8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIGRyYXdpbmdSZWN0IGZvciA8
ZmVUaWxlPi4KKyAgICByZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOworfQogCi0gICAgQWZmaW5l
VHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xh
dGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAtIG1heEVmZmVjdExvY2F0aW9uKTsKK0ZpbHRlclJlc3Vs
dCogRkVUaWxlOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAg
ICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9u
TnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdElt
YWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFwcGx5UGxh
dGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9
CiAKLVRleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVh
bSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGUiOwot
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHRzIDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7Ci0KKyAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGVdXG4i
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4
YzZkZTg0MDY4NzcxNC4uYzcwZGFjMTdkOGFkYzVhM2IyODBiZDc5MmY3MjI0YjcwYjc5ZTNhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwyNyArMjMsMjUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNs
YXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0
ZSgpOwogCiBwcml2YXRlOgotICAgIEZFVGlsZShGaWx0ZXImKTsKKyAgICBGRVRpbGUoKTsKIAog
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxl
IjsgfQogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVRpbGU7IH0KKyAgICBGbG9hdFJlY3QgZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBG
aWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3Rh
Y2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25z
dCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFhOTI0YTZkNjdi
ZDVlNGI3N2RkMjI2OGYuLjRkOTk3NmNiYmQ2MDQxMWUzYzM2YTY5NDdjMzk5MWUxOTk3NWFlYjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAy
MDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8q
Ci0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29y
aXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9
IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcs
IHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAg
cC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJv
ZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVk
IG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQg
c19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0g
MjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVk
ZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50
IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAy
ODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQogCi1G
RVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkKK0ZFVHVyYnVs
ZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9h
dCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVHVy
YnVsZW5jZSkKKyAgICAsIG1fdHVyYnVsZW5jZVR5cGUodHVyYnVsZW5jZVR5cGUpCiAgICAgLCBt
X2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAgICwgbV9iYXNlRnJlcXVlbmN5WShi
YXNlRnJlcXVlbmN5WSkKICAgICAsIG1fbnVtT2N0YXZlcyhudW1PY3RhdmVzKQpAQCAtNTksNDA1
ICs0Nyw0NyBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQogewogfQogCi1SZWY8RkVUdXJidWxl
bmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFz
ZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Ci19Ci0KLWJvb2wg
RkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlIHR5cGUpCitib29sIEZFVHVyYnVs
ZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUpCiB7
Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90
eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNl
dEJhc2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotewotICAgIGlmIChtX2Jhc2VG
cmVxdWVuY3lZID09IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fdHVyYnVsZW5jZVR5cGUsIHR1cmJ1bGVuY2VUeXBlKSAh
PSBtX3R1cmJ1bGVuY2VUeXBlOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpCiB7Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVgg
PT0gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVx
dWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0
ZDo6ZXhjaGFuZ2UobV9iYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVgpICE9IG1fYmFzZUZy
ZXF1ZW5jeVg7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiti
b29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkp
CiB7Ci0gICAgaWYgKG1fc2VlZCA9PSBzZWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9zZWVkID0gc2VlZDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5n
ZShtX2Jhc2VGcmVxdWVuY3lZLCBiYXNlRnJlcXVlbmN5WSkgIT0gbV9iYXNlRnJlcXVlbmN5WTsK
IH0KIAogYm9vbCBGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpCiB7
Ci0gICAgaWYgKG1fbnVtT2N0YXZlcyA9PSBudW1PY3RhdmVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQotewotICAg
IGlmIChtX3N0aXRjaFRpbGVzID09IHN0aXRjaCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoZSB0
dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQg
YXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgotLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQotCi0vLyBDb21wdXRlIHBzZXVk
byByYW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6
OnJhbmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAl
IHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3VsdCA8
PSAwKQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVzdWx0
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9h
dCB0KQotewotICAgIHJldHVybiB0ICogdCAqICgzIC0gMiAqIHQpOwotfQotCi1pbmxpbmUgZmxv
YXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQotewotICAg
IHJldHVybiBhICsgdCAqIChiIC0gYSk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFp
bnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlv
bkZhY3RvcjsKLQotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwg
c19yYW5kTWF4aW11bSAtIDFdLgotICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAg
ICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4
aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11
bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0K
LSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0gICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwg
PCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0g
aTsKLSAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxd
W2ldOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXpl
KSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVu
dFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBz
X2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9
IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIG5vcm1h
bGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0g
ICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAg
ICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQg
aiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQo
aiA+PSAwKTsKLSAgICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3Jbal07Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBr
OwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kp
IHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGld
ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hh
bm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1baV1bMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUZFVHVyYnVsZW5jZTo6U3Rp
dGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwg
ZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3N0aXRjaFRpbGVzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgZmxvYXQg
dGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGls
ZVNpemUuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+
IDApOwotCi0gICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1
ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKLSAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMg
d2lsbCBiZSBjb250aW51b3VzLgotICAgIGlmIChiYXNlRnJlcXVlbmN5WCkgewotICAgICAgICBm
bG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8g
dGlsZVdpZHRoOwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICAvLyBCYXNlRnJlcXVlbmN5
IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICAg
ICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJh
c2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5j
eTsKLSAgICB9Ci0gICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7Ci0gICAgICAgIGZsb2F0IGxvd0Zy
ZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdo
dDsKLSAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNl
RnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBs
b3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAg
ICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5OwotICAgIH0KLQotICAgIFN0aXRjaERh
dGEgc3RpdGNoRGF0YTsKLSAgICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAq
IGJhc2VGcmVxdWVuY3lYKTsKLSAgICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSAr
IHN0aXRjaERhdGEud2lkdGg7Ci0gICAgc3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5O
b2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OwotCi0gICAgcmV0dXJuIHN0aXRjaERhdGE7Ci19Ci0K
LS8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50LgotQ29sb3JDb21wb25lbnRz
PGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQm
IG5vaXNlVmVjdG9yKSBjb25zdAotewotICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKLSAgICAg
ICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBpbnQg
bmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBmbG9hdCBm
cmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4KLQotICAgICAgICBOb2lzZVBv
c2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gIHQgPSB2
ZWNbMF0gKyBQZXJsaW5OOwotICAgICAgICAgICAgLy8gIGJ4MCA9IChpbnQpdDsKLSAgICAgICAg
ICAgIC8vICBieDEgPSBieDArMTsKLSAgICAgICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0Owot
ICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOwot
ICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKLSAgICAgICAg
ICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKLSAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRp
b24gLSBpbmRleDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzdGl0Y2goaW50
IHNpemUsIGludCB3cmFwU2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgKGJ4MCA+
PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaElu
Zm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAg
ICAgICAgICBpbmRleCAtPSBzaXplOwotCi0gICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0
Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldp
ZHRoOwotICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAg
ICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBOb2lzZVBv
c2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOwotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZ
KG5vaXNlVmVjdG9yLnkoKSk7Ci0KLSAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNl
IHBvaW50cyBhY2NvcmRpbmdseS4KLSAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICBu
b2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwotICAgICAg
ICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKLSAg
ICB9Ci0KLSAgICAvLyBieDAgJj0gQk07Ci0gICAgLy8gYngxICY9IEJNOwotICAgIC8vIGJ5MCAm
PSBCTTsKLSAgICAvLyBieTEgJj0gQk07Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxvY2tNYXNr
OwotICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLmluZGV4
ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0K
LSAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOwotICAgIC8vIGogPSB1TGF0dGljZVNl
bGVjdG9yW2J4MV07Ci0gICAgaW50IGxhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsKLSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5leHRJbmRleF07Ci0KLSAgICAvLyBzeCA9
IGRvdWJsZShzX2N1cnZlKHJ4MCkpOwotICAgIC8vIHN5ID0gZG91YmxlKHNfY3VydmUocnkwKSk7
Ci0gICAgZmxvYXQgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVguZnJhY3Rpb24pOwotICAgIGZsb2F0
IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLmZyYWN0aW9uKTsKLQotICAgIGF1dG8gbm9pc2VGb3JD
aGFubmVsID0gWyZdKGludCBjaGFubmVsKSB7Ci0gICAgICAgIC8vIGIwMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaSArIGJ5MF0KLSAgICAgICAgaW50IGIwMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFk
aWVudFtuQ29sb3JDaGFubmVsXVtiMDBdOyB1ID0gcngwICogcVswXSArIHJ5MCAqIHFbMV07Ci0g
ICAgICAgIGNvbnN0IGZsb2F0KiBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2Iw
MF07Ci0gICAgICAgIGZsb2F0IHUgPSBub2lzZVguZnJhY3Rpb24gKiBxWzBdICsgbm9pc2VZLmZy
YWN0aW9uICogcVsxXTsKLQotICAgICAgICAvLyBiMTAgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBi
eTBdOwotICAgICAgICBpbnQgYjEwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0
TGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAgICAgLy8gcngxID0gcngwIC0gMS4w
ZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTBdOyB2ID0gcngx
ICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjEwXTsKLSAgICAgICAgZmxvYXQgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAq
IHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotICAgICAgICAvLyBhID0gbGVycChzeCwg
dSwgdik7Ci0gICAgICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsK
LQotICAgICAgICAvLyBiMDEgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTFdOwotICAgICAgICBp
bnQgYjAxID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lz
ZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcnkxID0gcnkwIC0gMS4wZjsKLSAgICAgICAgLy8g
cSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDFdOyB1ID0gcngwICogcVswXSArIHJ5MSAq
IHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAxXTsK
LSAgICAgICAgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0g
MSkgKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMSA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MV07
Ci0gICAgICAgIGludCBiMTEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0
aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtu
Q29sb3JDaGFubmVsXVtiMTFdOyB2ID0gcngxICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAg
IHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjExXTsKLSAgICAgICAgdiA9IChu
b2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFd
OwotICAgICAgICAvLyBiID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGIgPSBsaW5l
YXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyByZXR1cm4gbGVycChzeSwg
YSwgYik7Ci0gICAgICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKLSAg
ICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDApLAotICAgICAg
ICBub2lzZUZvckNoYW5uZWwoMSksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgyKSwKLSAgICAg
ICAgbm9pc2VGb3JDaGFubmVsKDMpCi0gICAgfTsKLX0KLQotLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBj
b252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IGNvbG9yQ29udmVydDxTUkdCQTx1aW50OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1l
IGJlaGF2aW9yLgotc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9J
bnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBm
bG9hdENvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50
OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1swXSAqIDI1NSksIDAsIDI1NSks
Ci0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBv
bmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzJdICogMjU1KSwgMCwgMjU1KSwKLSAgICAg
ICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sz
XSAqIDI1NSksIDAsIDI1NSksCi0gICAgfTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX251
bU9jdGF2ZXMsIG51bU9jdGF2ZXMpICE9IG1fbnVtT2N0YXZlczsKIH0KIAotQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6
c2V0U2VlZChmbG9hdCBzZWVkKQogewotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0OwotICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQu
eCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0Rh
dGEuYmFzZUZyZXF1ZW5jeVkpOwotICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBv
Y3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Ci0gICAgICAgIGlm
IChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0
YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwg
bm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87Ci0KLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChu
b2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rv
ci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsKLQotICAgICAgICBpZiAobV9zdGl0Y2hU
aWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5n
IHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKLSAgICAgICAgICAg
IC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNl
LgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOwotICAgICAgICAgICAgc3RpdGNo
RGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAg
ICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndy
YXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21l
cyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZy
YWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBi
eSB0dXJidWxlbmNlLgotICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxO
b2lzZSkKLSAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7Ci0KLSAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29t
cG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOworICAgIHJldHVybiBzdGQ6OmV4Y2hh
bmdlKG1fc2VlZCwgc2VlZCkgIT0gbV9zZWVkOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6Zmls
bFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVu
ZFkpIGNvbnN0Citib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2hU
aWxlcykKIHsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBJbnRSZWN0IGZpbHRl
clJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVn
aW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkg
KiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGludmVy
c2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKS52YWx1
ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwg
ZW5kWTsgKyt5KSB7Ci0gICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7Ci0gICAgICAg
IHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgcG9pbnQuc2V0WChw
b2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVy
c2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQpOwotICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBj
YWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEs
IGxvY2FsUG9pbnQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29t
cG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOwotICAgICAgICAgICAgaW5k
ZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBzdGQ6
OmV4Y2hhbmdlKG1fc3RpdGNoVGlsZXMsIHN0aXRjaFRpbGVzKSAhPSBtX3N0aXRjaFRpbGVzOwog
fQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1l
dGVycyogcGFyYW1ldGVycykKK0Zsb2F0UmVjdCBGRVR1cmJ1bGVuY2U6OmRyYXdpbmdSZWN0KGNv
bnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgcGFyYW1ldGVycy0+Zmls
dGVyLT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFp
bnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBh
cmFtZXRlcnMtPmVuZFkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBG
RVR1cmJ1bGVuY2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgp
OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCi0gICAgaWYg
KHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56
ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6
ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0K
LSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQg
YmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNp
emUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50
aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAo
YXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBoZWlnaHQg
PSByZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhl
aWdodCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0g
ICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxK
b2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAg
Ly8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFs
bGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7Ci0gICAg
ICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmli
dXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMu
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJh
eSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50
aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERh
dGEgPSBzdGl0Y2hEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7
Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBqb2JIZWlnaHQgPSAoaSA8IGpvYnNXaXRoRXh0
cmEpID8gc3RlcFkgKyAxIDogc3RlcFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBw
YXJhbXMuc3RhcnRZICsgam9iSGVpZ2h0OwotICAgICAgICAgICAgICAgIHN0YXJ0WSArPSBqb2JI
ZWlnaHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRl
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKIAotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRo
ZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28g
c21hbGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRw
dXQsIHsgfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUp
CkBAIC00NzYsMTEgKzEwNiwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRl
eHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVh
bSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1
cmJ1bGVuY2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAi
CisgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0dXJidWxlbmNlVHlwZSgpIDw8ICJcIiAiCiAgICAg
ICAgPDwgImJhc2VGcmVxdWVuY3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBi
YXNlRnJlcXVlbmN5WSgpIDw8ICJcIiAiCiAgICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8
PCAiXCIgIgogICAgICAgIDw8ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwi
ICIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRkNTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2Vj
YjVjZmIuLjAwMzU1MzRhYTEzZTM0MWQ5NjBkMDU3ZGU4NjJjMTlkYzBlMjI0MTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxy
ZW5pQGluZi51LXN6ZWdlZC5odT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDkgKzI0LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBv
bmVudHMuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwxMCArMzYsMTAgQEAgZW51bSBjbGFzcyBU
dXJidWxlbmNlVHlwZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVy
JiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAg
c3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQg
c2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsK
KyAgICBUdXJidWxlbmNlVHlwZSB0dXJidWxlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHVy
YnVsZW5jZVR5cGU7IH0KKyAgICBib29sIHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBl
KTsKIAogICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRnJl
cXVlbmN5WDsgfQogICAgIGJvb2wgc2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQpOwpAQCAtNTksNzAg
KzU3LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmlj
YWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgewotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNp
emUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZKQotICAgICAgICAgICAgOiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmls
dGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VG
cmVxdWVuY3lYKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQg
bGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFk
aWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJT
aXplOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAg
IHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQot
ICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAg
Zm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVl
IHRvIHdyYXAuCi0gICAgICAgIGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7
IDAgfTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQg
Y2xhc3MgUGFyYWxsZWxKb2JzOwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsK
LSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAg
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBp
bnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxs
UmVnaW9uUGFyYW1ldGVycyopOwotCi0gICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVu
Y2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5j
ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVs
ZW5jZSI7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKLSAgICBTdGl0Y2hEYXRhIGNv
bXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hE
YXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKFVpbnQ4
Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpIGNvbnN0OworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKKyAgICBi
b29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKKyAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworCisgICAgVHVyYnVsZW5jZVR5cGUg
bV90dXJidWxlbmNlVHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIGZsb2F0
IG1fYmFzZUZyZXF1ZW5jeVk7CiAgICAgaW50IG1fbnVtT2N0YXZlczsKQEAgLTEzMSw0ICs3OCwz
IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZTljOTE3ZTRmYzAxY2M5YTZlYmM4NDNkMmI1YzYzNmZmNDM0MmZmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlcjo6RmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgVHlwZSB0eXBlKQorICAgIDogRmlsdGVyRnVuY3Rpb24odHlwZSkKKyAgICAsIG1f
cmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQoreworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBGaWx0ZXJSZXN1bHRWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyT3V0cHV0IG91dHB1
dChtX3JlbmRlcmluZ01vZGUpOworCisgICAgYXV0byByZXN1bHQgPSBhcHBseShvdXRwdXQsIHN0
YWNrLCBzb3VyY2VJbWFnZSwgKmdlb21ldHJ5KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIEFTU0VSVChzdGFjay5pc0VtcHR5KCkpOworICAgIHJlc3VsdC0+
dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAg
ICByZXR1cm4geyByZXN1bHQtPmltYWdlQnVmZmVyKCksIGdlb21ldHJ5LT5jb252ZXJ0VG9BYnNv
bHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC0+ZHJhd2luZ1JlY3QoKSkgfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEw
YmMxZi4uMDFhZDdkMTM2NTVmOGI2NWIwYWM3YjViYWFhYTI0NGFkMzgzMTE3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMSwyNCBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01v
ZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0
aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7
CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OwotCi0gICAgdm9p
ZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9z
b3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgRmxvYXRT
aXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247
IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJS
ZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KLQot
ICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQot
ICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNj
YWxlOyB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQotCiAgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAg
dm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3Jl
bmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdG
aWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NTU0Zp
bHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBz
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNp
emUgKiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
b3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbklu
VXNlclNwYWNlKCkgY29uc3QgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dHVwbGU8UmVm
UHRyPEltYWdlQnVmZmVyPiwgRmxvYXRSZWN0PiBhcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9u
KQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsK
LSAgICB9CisgICAgRmlsdGVyKFJlbmRlcmluZ01vZGUsIFR5cGUpOwogCi1wcml2YXRlOgotICAg
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKLSAgICBGbG9hdFNpemUgbV9maWx0
ZXJSZXNvbHV0aW9uOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwot
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCB9OwotICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CisgICAgUmVuZGVyaW5n
TW9kZSBtX3JlbmRlcmluZ01vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJv
dW5kYXJ5U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckJvdW5kYXJ5U2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg2NzAxMWM0OTQ5OTI1YjdhZWY4M2Q2NmJl
MDA3MDcxNTliNzNhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApAQCAtMCwwICsxLDgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckJvdW5kYXJ5U2V0IHsKK3B1Ymxp
YzoKKyAgICBlbnVtIGNsYXNzIEZsYWdzIHsKKyAgICAgICAgSGFzWCAgICAgID0gMSA8PCAwLAor
ICAgICAgICBIYXNZICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1dpZHRoICA9IDEgPDwgMiwK
KyAgICAgICAgSGFzSGVpZ2h0ID0gMSA8PCAzCisgICAgfTsKKworICAgIEZpbHRlckJvdW5kYXJ5
U2V0KCkgPSBkZWZhdWx0OworCisgICAgRmlsdGVyQm91bmRhcnlTZXQoY29uc3QgRmxvYXRSZWN0
JiBib3VuZGFyaWVzLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQorICAgICAgICA6IG1fYm91bmRh
cmllcyhib3VuZGFyaWVzKQorICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgeworICAgIH0K
KworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1gpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91
bmRhcmllcy54KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4geSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFn
cy5jb250YWlucyhGbGFnczo6SGFzWSkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVz
LnkoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5j
b250YWlucyhGbGFnczo6SGFzV2lkdGgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmll
cy53aWR0aCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0
ZDo6b3B0aW9uYWw8ZmxvYXQ+IGhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9m
bGFncy5jb250YWlucyhGbGFnczo6SGFzSGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBtX2Jv
dW5kYXJpZXMuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQor
Citwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5kYXJpZXM7CisgICAgT3B0aW9uU2V0PEZs
YWdzPiBtX2ZsYWdzOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2RiMTA4Li42
ZjQ3NDVjZWQ5MzM5NjM3ZDA1ODVlODljYjQ2Y2YwZjE0N2UzNjk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCkBAIC0yNCw2NjAgKzI0LDg4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFZl
Y3Rvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVv
bi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRl
L0FjY2VsZXJhdGUuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVm
ZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2Zp
bHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQot
Ci1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBh
aW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZl
Y3RzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmls
dGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVj
dDo6cHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBi
b3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1p
dGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3Vu
ZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJl
Y3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRS
ZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0
UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBv
aW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2lu
dCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwg
bV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnko
LW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9p
bnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2lu
dCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlv
bi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9j
YXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRl
ckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdAotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2Nh
bGU7Ci0gICAgSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpLCBzY2FsZSk7CisgICAgRmxvYXRSZWN0IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb247CiAK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2Fs
ZSkudHJhbnNsYXRlKC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVy
biB0cmFuc2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVj
dDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUs
IEZFVHVyYnVsZW5jZSwgRkVGbG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhl
IGZpbHRlciByZWdpb24gYXMgdW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwot
ICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNp
emUoKSkgewotICAgICAgICBzdWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJp
bWl0aXZlU3VicmVnaW9uID0gaW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOwotICAgICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZl
U3VicmVnaW9uKTsKLSAgICAgICAgfQorICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJy
ZWdpb24gZm9yIDxmZVRpbGU+LgorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkg
IT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1
dCA6IGlucHV0cykKKyAgICAgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUo
aW5wdXQtPnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVn
aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVy
IGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQg
ZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAo
ZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJy
ZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBi
b3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAg
ICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmICho
YXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdo
dCgpKTsKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRl
clJlZ2lvbigpOwogCi0gICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7
CisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgIGF1dG8gYWJzb2x1dGVT
dWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9u
KTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9u
KCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAg
Ly8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdo
dGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBz
ZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7CisgICAgcHJp
bWl0aXZlU3VicmVnaW9uLnNldFgoYm91bmRhcnlTZXQueCgpLnZhbHVlX29yKGRlZmF1bHRQcmlt
aXRpdmVTdWJyZWdpb24ueCgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFkoYm91bmRh
cnlTZXQueSgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ueSgpKSk7CisgICAg
cHJpbWl0aXZlU3VicmVnaW9uLnNldFdpZHRoKGJvdW5kYXJ5U2V0LndpZHRoKCkudmFsdWVfb3Io
ZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi53aWR0aCgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVn
aW9uLnNldEhlaWdodChib3VuZGFyeVNldC5oZWlnaHQoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0
aXZlU3VicmVnaW9uLmhlaWdodCgpKSk7CiAKLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZl
Y3QgdG8gdGhlIGZpbHRlciByZWdpb24uCi0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJl
Z2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVy
UmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmlu
dGVyc2VjdChhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7Ci0KLSAgICBzZXRNYXhFZmZlY3RS
ZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOworICAgIHByaW1p
dGl2ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoZ2VvbWV0cnkuZmlsdGVyUmVnaW9uKCkpOworICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLUZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0
OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZm
ZWN0OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3QKIHsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihudW1i
ZXIgPCBtX2lucHV0RWZmZWN0cy5zaXplKCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5h
dChudW1iZXIpLmdldCgpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29u
c3QgRmlsdGVyRWZmZWN0KmVmZmVjdCwgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxs
RWZmZWN0cykKLXsKLSAgICBhbGxFZmZlY3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNp
emUgPSBlZmZlY3QtPm51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0
LT5pbnB1dEVmZmVjdChpKTsKLSAgICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMp
OwotICAgIH0KLSAgICByZXR1cm4gYWxsRWZmZWN0cy5zaXplKCk7Ci19CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRy
YXdpbmdSZWN0LnVuaXRlKGlucHV0LT5kcmF3aW5nUmVjdCgpKTsKIAotdW5zaWduZWQgRmlsdGVy
RWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0
PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZl
Y3RzKHRoaXMsIGFsbEVmZmVjdHMpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRp
dmVTdWJyZWdpb24oZHJhd2luZ1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQg
RmlsdGVyRWZmZWN0OjphcHBseSgpCitGaWx0ZXJSZXN1bHQqIEZpbHRlckVmZmVjdDo6YXBwbHko
RmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAog
ewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNp
emUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMu
YXQoaSkuZ2V0KCk7Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNS
ZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0
IHJlc3VsdHMgdG8gdGhlIGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0Nv
bG9yU3BhY2UpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmls
dGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpc
biAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24gPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJc
biAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3Vi
cmVnaW9uIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0
IDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRl
ciBzY2FsZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1
dGlvbiAiIDw8IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICBpZiAobV9hYnNv
bHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5j
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIHBs
YXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4K
LSAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICByZXR1cm4gYXBwbHkob3V0cHV0LCBz
dGFjaywgc291cmNlSW1hZ2UsIGdlb21ldHJ5LCBGaWx0ZXJCb3VuZGFyeVNldCgpKTsKIH0KIAot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK0ZpbHRl
clJlc3VsdCogRmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlck91dHB1dCYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5
U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11
bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVs
cy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKLSAgICBp
bnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisgICAgYXV0byBwcmlt
aXRpdmVTdWJyZWdpb24gPSB0aGlzLT5wcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzLCBnZW9tZXRy
eSwgYm91bmRhcnlTZXQpOworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSB0aGlzLT5kcmF3aW5nUmVj
dChpbnB1dHMsIGdlb21ldHJ5LCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgIGF1dG8gYWJzb2x1
dGVEcmF3aW5nUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoZHJh
d2luZ1JlY3QpOworICAgIGF1dG8gcmVzdWx0Q29sb3JTcGFjZSA9IHRoaXMtPnJlc3VsdENvbG9y
U3BhY2UoaW5wdXRzKTsKIAotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhl
bCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0
KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlM
ZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsg
KHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8v
IEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNp
eHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBp
eGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVs
cy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChz
aXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAg
c2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4
dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0
ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGls
ZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9
IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3Ro
IC8gNDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBh
bmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0t
bnVtUGl4ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEg
cGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8g
Q2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxv
Y2F0aW9uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0g
ICAgICAgICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQg
Zm9yIGFscGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQotdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0
cjsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKLXsKLSAgICAvLyBDbGVhciBhbGwgcmVz
dWx0cywgcmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJl
c3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4K
LSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNp
Z25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5j
bGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6
aW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
Ci0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwg
bV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFn
ZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGRl
c3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0g
ICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQ
aXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsK
LSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFj
ZSkKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEg
PSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2Vk
QXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8g
cGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNo
ZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3Bh
Y2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0
LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRT
aXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJh
eSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVh
KTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgYXV0byByZXN1bHQgPSBvdXRwdXQuY3JlYXRl
RmlsdGVyUmVzdWx0KHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGFic29sdXRlRHJh
d2luZ1JlY3Quc2l6ZSgpLCByZXN1bHRDb2xvclNwYWNlKTsKKyAgICBpZiAoIXJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVs
QXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRS
ZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFp
bnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBk
ZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQg
YnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3Qu
eSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8
IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBt
ZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAg
ICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhl
IHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1h
eFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8
IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3Qg
PSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwot
ICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1h
eFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4
RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxl
ZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0g
ICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAg
ICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFp
bnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgp
OwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGlu
YXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNj
YW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53
aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBz
b3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9y
aWdpbikgKiA0OwogCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0
aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0g
c291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRT
aXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0
U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAg
IGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7
Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0g
c291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQg
KyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRp
b25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
LSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJj
ZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1
NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIg
IiA8PCB0aGlzIDw8ICIgYXBwbHlQbGF0Zm9ybSgpOiIKKyAgICAgICAgPDwgIlxuICBwcmltaXRp
dmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBkcmF3
aW5nUmVjdCAiIDw8IGRyYXdpbmdSZWN0CisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVEcmF3aW5n
UmVjdCAiIDw8IGFic29sdXRlRHJhd2luZ1JlY3QKKyAgICAgICAgPDwgIlxuICBmaWx0ZXIgcmVz
b2x1dGlvbiAiIDw8IGdlb21ldHJ5LnJlc29sdXRpb24oKSk7CisKKyNpZiBVU0UoQ09SRV9JTUFH
RSkKKyAgICBpZiAob3V0cHV0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCkgeworICAgICAgICBpZiAoYXBwbHlDb3JlSW1hZ2UoKnJlc3VsdCwgaW5wdXRzLCBz
b3VyY2VJbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9
CiAjZW5kaWYKLX0KIAotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAg
ICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMu
aGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVz
OwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7
Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53
aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qu
cm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3Qg
dWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVl
KCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRh
KCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxw
aGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7
Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
Ml0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxw
aGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQorICAgIGlmIChhcHBseVNvZnR3YXJlKCpy
ZXN1bHQsIGlucHV0cywgc291cmNlSW1hZ2UsIGdlb21ldHJ5KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC5sZWFrUmVmKCk7CiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVj
dDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAg
IC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFj
ZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAg
ICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkp
OwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRl
c3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBz
dG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7
Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVm
ZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBy
ZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpi
dWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZl
ciwgY29uc3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBo
YUZvcm1hdCkKK1RleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2lu
ZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFu
IEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRl
cm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAg
IGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwg
cmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFG
b3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVy
biBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0KLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGlu
IG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBj
b252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhl
bEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkK
LXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNu
J3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVs
QnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVs
QnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGlu
YXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsK
LSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVy
ICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZl
clJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNl
Q29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJ
bWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAg
ICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9Owot
ICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsK
LSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNy
ZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVu
cHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihj
b2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2Us
IHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRS
ZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1
ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1f
cmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdC
QTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsg
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXpl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVs
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29w
eUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRp
b24sIHJlY3QpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhl
aWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNp
emUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9y
ZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmls
dGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZp
bHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQi
LCBmaWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMg
YWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIElu
dFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3Vs
dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3Jt
YXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhl
bEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7
Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9h
YnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
cmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2Ug
fTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVh
dGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBk
ZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFj
ZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24g
d2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5E
IDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVz
dGluYXRpb25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25D
b2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25D
b2xvclNwYWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhh
bmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFS
QU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8
fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5u
ZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBz
cGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMu
Ci0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNv
bG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0
OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2VuZGlm
Ci19Ci0KLVRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhl
IGZpbHRlciBwcmltaXRpdmVzIGhlcmUgbGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3NzaWJs
ZSBhdCB0aGUgbW9tZW50LCBiZWNhdXNlIHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlv
bnMgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRpb25U
eXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CisgICAgaWYgKHJlcHJlc2Vu
dGF0aW9uID09IEZpbHRlclJlcHJlc2VudGF0aW9uOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4
dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImFscGhhIGltYWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJvcGVyYXRpbmcgY29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwogICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0
ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ugd2Ug
d2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJlYW0g
ZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRlclN0
cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0gICAg
Ci0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2UyY2Yw
NWI1Mjc3M2YyYjk2YjQ3MWMuLmRlOGExMzM3MDE0OGM4OTQ0YWUyYzA0ZTVhYTU2ZGQ1OWM2NzRl
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjIsMjM3ICsyMiw0OSBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJEZXN0aW5h
dGlvbkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNs
YXNzIFRleHRTdHJlYW07Ci19CisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlcjsK
LWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZpbHRl
ckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRlckVm
ZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJFZmZl
Y3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldDsKK2NsYXNzIEZp
bHRlckdlb21ldHJ5OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxG
aWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlv
biB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJs
ZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0g
ICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1
c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93
LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwK
LSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5LAot
ICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUs
Ci0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBTb3Vy
Y2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZv
aWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZv
aWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVy
T2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0K
LSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7Ci0gICAgCi0g
ICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1h
bmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
Ci0gICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0KLSAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29u
c3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwotICAgIAotICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KLSAgICBG
bG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAvLyBT
b2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgYm9vbCBp
c0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICB2b2lkIHNl
dElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFn
ZTsgfQotCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWJzb2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNv
bHV0ZVBhaW50UmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVj
dFJlY3Q7IH0gCi0KLSAgICB2b2lkIGFwcGx5KCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFueSBpbnZh
bGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJh
dGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2
YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5
IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNv
cnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0K
LSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91dHNl
dHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQotCi0gICAgZW51bSBj
bGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKLSAgICB2
aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRw
dXQpIGNvbnN0OwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVj
aWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgot
ICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQg
c2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1ko
KSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkg
eyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNX
aWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hl
aWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lk
IHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0ID0gMDsKIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1
cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNv
bnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBl
ZmZlY3RCb3VuZGFyaWVzOyB9CisgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHJlc3VsdENvbG9yU3BhY2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJikgY29uc3QgeyBy
ZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgCi0gICAgdm9pZCBzZXRVbmNsaXBw
ZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xp
cHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVz
ZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7
IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25z
dCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29s
IGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2
b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1
ZTsgfQotCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAg
ICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9y
ZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2
b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5v
cm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tp
XSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXpl
ZFZhbHVlczsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwg
VHlwZSk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
PSAwOwotCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9u
bHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAgICAvLyBh
bHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgot
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0
JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3QgPSAwOwogCi0gICAgLy8g
SWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5
IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmly
dHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB1
c2luZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CiAKLSAgICB2b2lkIGNvcHlJbWFn
ZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZl
cnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJl
Y3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgUGl4ZWxCdWZmZXImKTsKLSAgICAKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Q7CiAKLSAgICBGaWx0ZXImIG1f
ZmlsdGVyOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKKyAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Q7CiAKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJl
c3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVy
R2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKIAotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVj
dDsKLSAgICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4g
SW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRp
bmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIg
YmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVj
dFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUg
YWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRp
bmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8g
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uOworICAgIEZpbHRlclJlc3VsdCogYXBwbHlQbGF0Zm9ybShGaWx0
ZXJPdXRwdXQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5
U2V0JikgY29uc3Q7CiAKLSAgICAvLyB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1
YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9m
IHRoZQotICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0
UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CisgICAgdmlydHVhbCBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCA9IDA7CiAgICAg
Ci0gICAgLy8gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG1hcHBlZCB0byBhYnNvbHV0ZSBjb29y
ZGluYXRlcyBiZWZvcmUgY2xpcHBpbmcuCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVVbmNsaXBw
ZWRTdWJyZWdpb247Ci0KLSAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9Owot
Ci0gICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lvbiwg
b3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0gICAg
Ym9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07Ci0KLSNpZiBFTkFCTEUoREVTVElOQVRJT05f
Q09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3Bl
cmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIH07
Ci0jZWxzZQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2Ug
eyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OworI2lmIFVTRShDT1JFX0lNQUdFKQor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseUNvcmVJbWFnZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKICAgICAKLSAgICBjb25zdCBUeXBlIG1fZmls
dGVyRWZmZWN0Q2xhc3NUeXBlOworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGlu
Z0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwogfTsKIAotV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IEZpbHRlckVmZmVjdCYpOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVyRWZmZWN0KQorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsg
cmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA+PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVNaW5pbXVtICYmIGZ1bmN0aW9uLnR5cGUoKSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVNYXhpbXVtOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2ZjMzFlNWI5ZTlhOWVjNjA1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0Ogot
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdF
KQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVy
ZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUoYm9vbCBhY2NlbGVyYXRlZEZpbHRl
clJlbmRlcmluZ0VuYWJsZWQsIEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSNpZiBVU0Uo
Q09SRV9JTUFHRSkKLSAgICBpZiAoYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKQot
ICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShs
YXN0RWZmZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFjY2VsZXJhdGVkRmlsdGVyUmVu
ZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxhc3RFZmZlY3QpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQotfSAvLyBuYW1zcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUy
NDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIg
KzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2V0
dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5k
ZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gdHJ5Q3JlYXRlKGJv
b2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVy
RWZmZWN0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB+RmlsdGVy
RWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVy
RWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclRvSW1h
Z2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3RWZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzVmNGM4MzJjZTNhZTE2ZDll
YTkyMDljZjg3MmVkYjc4YzBjYjc5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJFZmZlY3Q7CisKK3VzaW5nIEZpbHRlckVmZmVjdFZlY3RvciA9
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iN2Q1NTc2NWEzOTZkOTlhYjAyMTBiM2IxODBiYThm
OWUyMGNhMmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQu
aCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyT3V0cHV0Owor
CitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9u
PiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIENT
U0ZpbHRlciwKKyAgICAgICAgU1ZHRmlsdGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKworICAg
ICAgICBGRUJsZW5kID0gRkVNaW5pbXVtLAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAgICAg
ICBGRUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAgRkVD
b252b2x2ZU1hdHJpeCwKKyAgICAgICAgRkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZFRGlz
cGxhY2VtZW50TWFwLAorICAgICAgICBGRURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2QsCisg
ICAgICAgIEZFR2F1c3NpYW5CbHVyLAorICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1lcmdl
LAorICAgICAgICBGRU1vcnBob2xvZ3ksCisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBGRVNw
ZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNlLAor
ICAgICAgICBTb3VyY2VBbHBoYSwKKyAgICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAgICBG
RU1heGltdW0gPSBTb3VyY2VHcmFwaGljCisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9uKFR5
cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkg
Y29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHko
RmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2
aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpUZXN0
T3V0cHV0KSBjb25zdCA9IDA7CisgICAgCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NG
aWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIs
CisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJi
dWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxw
aGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGlj
CisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg1YzY2MGVhNzk5ODNhMDdhMTcyYzBiMjdkYTE4YjJkY2M0YTA4YmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckdlb21ldHJ5LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckJvdW5k
YXJ5U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlckdlb21ldHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCisgICAgICAgIDogbV9maWx0ZXJSZWdp
b24oZmlsdGVyUmVnaW9uKQorICAgICAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdl
UmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RmlsdGVyR2VvbWV0cnkoKSA9IGRl
ZmF1bHQ7CisKKyAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
aWx0ZXJSZWdpb247IH0KKyAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCBG
bG9hdFNpemUgcmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwg
RmlsdGVyQm91bmRhcnlTZXQgYm91bmRhcnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25l
ZCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjb252ZXJ0
VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0
IHsgcmV0dXJuIGRyYXdpbmdSZWN0OyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgY29udmVydFRv
QWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7
IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorCisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb0Fic29sdXRl
UmVzdWx0Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiByZXN1bHRSZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3Qg
PSBkcmF3aW5nUmVjdDsKKyAgICAgICAgaW1hZ2VSZWN0Lm1vdmVCeSgtcmVzdWx0UmVjdC5sb2Nh
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1h
Z2VSZWN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJD
b29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBk
cmF3aW5nU2l6ZTsgfQorICAgIAorICAgIHZpcnR1YWwgRmxvYXRTaXplIHJlc29sdmVUb0Fic29s
dXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXplJiBkcmF3aW5nU2l6ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGF1dG8gcmVzb2x2ZWREcmF3aW5nUmVjdCA9IHJlc29sdmVUb0ZpbHRlckNvb3Jk
aW5hdGVzKGRyYXdpbmdTaXplKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29v
cmRpbmF0ZXMocmVzb2x2ZWREcmF3aW5nUmVjdCk7CisgICAgfQorCisgICAgdmlydHVhbCBGbG9h
dFJlY3QgY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAg
ICAgICAgYXV0byBjbGlwcGVkRHJhd2luZ1JlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAgY2xp
cHBlZERyYXdpbmdSZWN0LmludGVyc2VjdChwcmltaXRpdmVTdWJyZWdpb24pOworICAgICAgICBy
ZXR1cm4gY2xpcHBlZERyYXdpbmdSZWN0OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEZsb2F0
UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTRlYzgwYzI2Yzk3NWUyYTdhZmU2YzQ2NTk5ZGE4NTA2N2JjN2NkYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0
LmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQu
aCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyT3V0cHV0OjpGaWx0ZXJPdXRwdXQo
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogbV9yZW5kZXJpbmdNb2RlKHJlbmRl
cmluZ01vZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJSZXN1bHQ+IEZpbHRlck91dHB1dDo6Y3Jl
YXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEZp
bHRlclJlc3VsdDo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGxvZ2lj
YWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck91dHB1dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWEwZGYzMzI0M2ExNzA0NDAz
N2EyNmNlMTk2YzQ5YjQwNjk5OTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaApAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CitjbGFz
cyBGaWx0ZXJSZXN1bHQ7CitjbGFzcyBGaWx0ZXJGdW5jdGlvbjsKKworY2xhc3MgRmlsdGVyT3V0
cHV0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXN1bHRzID0gSGFzaE1hcDxSZWY8Y29uc3QgRmls
dGVyRnVuY3Rpb24+LCBSZWY8RmlsdGVyUmVzdWx0Pj47CisKKyAgICBGaWx0ZXJPdXRwdXQoUmVu
ZGVyaW5nTW9kZSk7CisKKyAgICBSZXN1bHRzJiByZXN1bHRzKCkgeyByZXR1cm4gbV9yZXN1bHRz
OyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJpbmdNb2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGVGaWx0ZXJS
ZXN1bHQoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYpOworCitwcml2YXRlOgorICAgIFJlc3VsdHMgbV9yZXN1bHRzOwor
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYmZmN2Q4
MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTliMjAxMWNlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9u
LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgRmlsdGVyUmVwcmVzZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBUZXN0T3V0cHV0LAorICAg
IERlYnVnZ2luZworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY0YTI1NGRhMDhmM2VjMTIxZTQ4MjhjZGE3Yjg1NmZiMDU5YThmYTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZpbHRlclJlc3VsdC5oIgorCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0U29mdHdhcmUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyNpbmNsdWRlICJG
aWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVS
QVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlclJlc3VsdD4gRmlsdGVyUmVzdWx0OjpjcmVh
dGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
ZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5pc0Vt
cHR5KCkgfHwgZHJhd2luZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXpl
KSk7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRl
clJlc3VsdENvcmVJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBsb2dpY2Fs
U2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7CisjZW5k
aWYKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJSZXN1bHRTb2Z0d2FyZShwcmltaXRp
dmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7Cit9CisKK0ZpbHRlclJlc3VsdDo6RmlsdGVyUmVz
dWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0
aXZlU3VicmVnaW9uKQorICAgICwgbV9kcmF3aW5nUmVjdChkcmF3aW5nUmVjdCkKKyAgICAsIG1f
bG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5n
TW9kZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1f
Y29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxz
ZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Cisg
ICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVh
KCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9
IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQp
IHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBd
KSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJl
bXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNp
ZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgo
KSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNy
Yy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVz
dC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdklt
YWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRh
dGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRT
aXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29t
cG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQg
PCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAg
ICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBo
YTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBd
ID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0g
NDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30K
Kworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlclJlc3VsdDo6cGl4ZWxCdWZmZXJJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVy
biBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQg
PyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBw
aXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisg
ICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFj
ZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkp
IHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCB7IEludFBvaW50KCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlm
ICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxl
ZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1h
dCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZSBp
ZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKSkKKyAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhp
c3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVs
QnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52
YWx1ZSgpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlclJlc3VsdDo6Z2V0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50
UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3Bh
Y2UpCit7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVk
U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0g
c2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFy
ZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBh
dXRvIHBpeGVsQnVmZmVyID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoY2hlY2tlZEFyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgY29weVBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQs
IHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKK30KKworYm9vbCBG
aWx0ZXJSZXN1bHQ6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNp
ZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVl
ZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ug
b25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBk
aWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1
bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2Ug
IT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29u
dmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNw
YWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6
OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAg
ICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxTaXpl
KTsKKyAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5v
dCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgp
IDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRp
b24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90
IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9
IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54
KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAg
eERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB4
RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAg
aW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlm
ICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3Jp
Z2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBp
ZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxl
ZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAq
IDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0
OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsK
KyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5
RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50
U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVu
ZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUp
OworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAg
ICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47Cisg
ICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJSZXN1bHQ6OmdldENv
bnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25D
b2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUg
YW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBD
RyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVydGVkSW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBp
bnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgor
ICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1h
dCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRl
ZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworfQorCitzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJSZXN1bHQ6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVy
KFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZv
cm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50
UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7CisgICAgcmVjdC5zY2Fs
ZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4g
SW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBy
ZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBh
bHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojpj
b3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvKiBw
aXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpID8gJnBpeGVsQnVm
ZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252
ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgICAgICAgICAgSW50UmVj
dCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9OworICAg
ICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2Up
KQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlz
LT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFG
b3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRl
ZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcnJlY3RQcmVt
dWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVs
dGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxz
LgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRh
dGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisK
KyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBw
aXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7Cisg
ICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3Ro
ICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVs
RGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxk
NHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1p
bnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAg
ICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxb
MV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFs
WzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNd
KTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAg
ICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxh
c3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAgICBp
ZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJ
dGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xv
ciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7
CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVp
bnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9u
ZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEg
PiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytwaXhl
bERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAgICAg
ICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVyUmVzdWx0Ojp0cmFuc2Zvcm1U
b0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNF
KENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxs
eS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNw
YWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdl
IGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZl
cnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9y
IHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVy
ID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybUNv
bG9yU3BhY2UobV9jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9
IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVs
bG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNl
bmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NGRkNmM5NDQwNmRhOWFhMjZjMzIxMjMxNTZhNDViOWU5MjBmMDYwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1
bHQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVs
QnVmZmVyOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJS
ZXN1bHQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlclJlc3VsdD4gY3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRy
YXdpbmdSZWN0LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisg
ICAgdmlydHVhbCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9
CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nUmVj
dDsgfQorCisgICAgRmxvYXRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsU2l6ZTsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgYm9vbCBp
c0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KKyAgICB2b2lkIHNl
dElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFn
ZTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhp
c3RzKCkgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgPSAwOwor
CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lk
IGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11
bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3Byb3RlY3RlZDoKKyAgICBGaWx0ZXJSZXN1bHQoY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2lu
Z1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBi
b29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsK
KyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQ
aXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgRmxv
YXRSZWN0IG1fZHJhd2luZ1JlY3Q7CisKKyAgICBGbG9hdFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAg
ICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25T
Y2FsZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgYm9v
bCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9OworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisKK3VzaW5nIEZpbHRlclJl
c3VsdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj47CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdFZlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MzE1MWI5ODI0
ZjYyMjlmZGI0OWZiMDU2NzJmODNjNzZmNWNhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdFZlY3Rvci5oCkBA
IC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0OworCit1c2luZyBGaWx0ZXJSZXN1bHRW
ZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlclJlc3VsdD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2
YTc1MDM4NzkxMjhmNTRiNDRiLi40YmM2YmM3MWM4NWRmYjFhZTM5MWRlYjI0M2RjODE0NTc1ZGIw
YzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDEyICszNiwxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3Zv
aWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
LCBQYWludGluZ0RhdGEmKQogewotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZm
ZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHko
KSkpOwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNw
YWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBw
ZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2Vy
U3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQ
b3NpdGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0g
bV9idWZmZXJQb3NpdGlvbi54KCkpOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0
ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlv
bi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBt
X3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQ
b2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVy
KHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91
c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFw
cGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0Rh
dGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQg
eikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2Zm
ZjkwOTBhZDZjZjNhMy4uNGM4ZDUyOGEyNGMyNDk1YmU4MWEyZTY0Mjc0ZjQzMDRiM2FkMzFkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIwLDYwICsyMSw0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKK1JlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0
ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoKSk7CiB9CiAKLWNvbnN0
IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpTb3Vy
Y2VBbHBoYSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6U291cmNlQWxwaGEpCiB7Ci0gICAg
c3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVj
dE5hbWUoIlNvdXJjZUFscGhhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKK2NvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZl
Y3ROYW1lKCkKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUFscGhhIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOworICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291
cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIFNvdXJjZUFs
cGhhOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFj
aywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZp
bHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0
SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRl
eHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0KDApLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
ICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBv
dXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0Owog
Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6
OmJsYWNrKTsKLSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIs
IEludFBvaW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKyAgICByZXR1
cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5k
YXJ5U2V0KTsKIH0KIAotVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJl
YW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3Vy
Y2VBbHBoYV1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCi1Tb3VyY2VBbHBoYTo6U291cmNlQWxw
aGEoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCi0gICAgOiBGaWx0ZXJFZmZlY3Qoc291cmNl
RWZmZWN0LmZpbHRlcigpLCBUeXBlOjpTb3VyY2VBbHBoYSkKLXsKLSAgICBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKHNvdXJjZUVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlucHV0
RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZmZWN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oCmluZGV4IDY2MjlhMzY3ZmQ0MzI0MmQxYzRhYWRlNjRjNTYxZTg2NGEz
OTQ5MGYuLjM4OWVjYjNiZmNkNjQ0NWY1NmU2N2IyNThiYzY0ZTViMWZiMjUxMDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE3LDggKzE4LDcg
QEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNl
QWxwaGFfaAotI2RlZmluZSBTb3VyY2VBbHBoYV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCkBAIC0yNiwyMSArMjYsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBTb3VyY2VBbHBoYSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAg
ICAgICAgCi0gICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlckVmZmVjdCYp
OworICAgIHN0YXRpYyBSZWY8U291cmNlQWxwaGE+IGNyZWF0ZSgpOwogCiAgICAgc3RhdGljIGNv
bnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBT
b3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmKTsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVm
ZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291cmNl
SW5wdXQ7IH0KKyAgICBTb3VyY2VBbHBoYSgpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJj
ZUFscGhhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0Nzgy
MDI3NGMxMTA3ZDc4MzkyZTkuLjg4ZjY1ZmZlM2NmMWRlZmI3MzhkNzY2OTEzNGI3ODkzNzJmNmRl
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjAsMTggKzIxLDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U291cmNlR3JhcGhpYy5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0
ZXJPdXRwdXQuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNl
R3JhcGhpYzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJj
ZUdyYXBoaWM6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3Jh
cGhpYygpKTsKK30KKworU291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYygpCisgICAgOiBGaWx0
ZXJFZmZlY3QoVHlwZTo6U291cmNlR3JhcGhpYykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTb3VyY2VHcmFwaGljKGZpbHRlcikpOwogfQogCiBjb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCkKQEAgLTQwLDI3ICs0NSwyMCBAQCBjb25zdCBBdG9tU3RyaW5n
JiBTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKICAgICByZXR1cm4gc19lZmZlY3ROYW1lOwog
fQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zs
b2F0UmVjdCBTb3VyY2VHcmFwaGljOjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0
b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJl
Y3QgcGFpbnRSZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5z
Y2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QocGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGdlb21ldHJ5LnNvdXJjZUltYWdlUmVjdCgp
OwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0
ZXJSZXN1bHQqIFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBj
b25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0
cHV0LCB7IH0sIHNvdXJjZUltYWdlLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0
U3RyZWFtJiBTb3VyY2VHcmFwaGljOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CitUZXh0U3RyZWFtJiBTb3VyY2VHcmFwaGlj
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VHcmFwaGljXVxuIjsK
ICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDMwY2Q1NGYyNDUzYmJhOGEzNzc2
MzIxMzI4ZWYyMTA2YjdmY2E1YmYuLmZhZmM2ZmVmOTdlZjM5ODIwMWEyN2Q0OTU1NzU1NzVmNGE3
OGJjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTgsNDEgKzE5LDM0IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUdyYXBoaWNfaAotI2RlZmluZSBTb3VyY2VH
cmFwaGljX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNlR3Jh
cGhpYyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAgICAgICAgCi0gICAgc3RhdGlj
IFJlZjxTb3VyY2VHcmFwaGljPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxTb3Vy
Y2VHcmFwaGljPiBjcmVhdGUoKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZl
Y3ROYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0ZXImIGZpbHRlcikK
LSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VHcmFwaGljKQotICAg
IHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsKIAogICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KIAot
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBGaWx0ZXJF
ZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0
ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KLX07CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQm
KSBjb25zdCBvdmVycmlkZTsKIAotfSAvL25hbWVzcGFjZSBXZWJDb3JlCisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNl
R3JhcGhpYykKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM7IH0KLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBib29sIGFwcGx5Q29y
ZUltYWdlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCiAKKyAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
RmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworfTsKIAotI2VuZGlmIC8vIFNv
dXJjZUdyYXBoaWNfaAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2Uu
Y3BwCmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYzNDhkMDAuLmQxYmVj
MTIwMjA2YTUzNmUxMGIxMGJmMmMxMTMwZjRmMzQyYmJhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5jcHAKQEAgLTQxLDM2ICs0MSwzNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBhY2NvcmRp
bmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwogc3RhdGljIGNvbnN0
IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwogCi12b2lkIFNwb3RMaWdodFNvdXJj
ZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKQogewotICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwotICAgIC8vIFRvIHNjYWxlIFosIG1hcCBh
IHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9u
IGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7Ci0gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwotICAgIAot
ICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3IgPSBtX3VzZXJTcGFjZVBvaW50c0F0IC0g
bV91c2VyU3BhY2VQb3NpdGlvbjsKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5v
cm1hbGl6ZSgpOwotCi0gICAgaWYgKCFtX2xpbWl0aW5nQ29uZUFuZ2xlKSB7Ci0gICAgICAgIHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSAwLjBmOwotICAgICAgICBwYWludGluZ0RhdGEu
Y29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSA9IG1fbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgICAg
IGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCi0gICAgICAgICAgICBsaW1pdGluZ0NvbmVB
bmdsZSA9IC1saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xl
ID4gOTAuMGYpCi0gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOwotICAgICAg
ICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gY29zZihkZWcycmFkKDE4MC4wZiAtIGxp
bWl0aW5nQ29uZUFuZ2xlKSk7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0g
cGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xkOwotICAgIH0K
LQotICAgIC8vIE9wdGltaXphdGlvbiBmb3IgY29tbW9uIHNwZWN1bGFyRXhwb25lbnQgdmFsdWVz
Ci0gICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVj
dWxhckV4cG9uZW50ID0gMDsKLSAgICBlbHNlIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4w
ZikKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOwotICAgIGVsc2Ug
Ly8gSXQgaXMgbmVpdGhlciAwLjBmIG5vciAxLjBmCi0gICAgICAgIHBhaW50aW5nRGF0YS5zcGVj
dWxhckV4cG9uZW50ID0gMjsKKy8vICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZm
ZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHko
KSkpOworLy8gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2Vy
U3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KKy8vICAgIEZsb2F0UG9pbnQg
bWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1f
dXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNw
YWNlUG9zaXRpb24ueSgpIH0pOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFou
eCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOworLy8KKy8vICAgIHBhaW50aW5nRGF0YS5kaXJl
Y3Rpb25WZWN0b3IgPSBtX3VzZXJTcGFjZVBvaW50c0F0IC0gbV91c2VyU3BhY2VQb3NpdGlvbjsK
Ky8vICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7CisvLworLy8g
ICAgaWYgKCFtX2xpbWl0aW5nQ29uZUFuZ2xlKSB7CisvLyAgICAgICAgcGFpbnRpbmdEYXRhLmNv
bmVDdXRPZmZMaW1pdCA9IDAuMGY7CisvLyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7CisvLyAgICB9IGVsc2UgeworLy8gICAgICAgIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKKy8vICAgICAgICBpZiAo
bGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQorLy8gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmds
ZSA9IC1saW1pdGluZ0NvbmVBbmdsZTsKKy8vICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUg
PiA5MC4wZikKKy8vICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSA5MC4wZjsKKy8vICAg
ICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gY29zZihkZWcycmFkKDE4MC4wZiAt
IGxpbWl0aW5nQ29uZUFuZ2xlKSk7CisvLyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Cisv
LyAgICB9CisvLworLy8gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBv
bmVudCB2YWx1ZXMKKy8vICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQorLy8gICAgICAgIHBh
aW50aW5nRGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMDsKKy8vICAgIGVsc2UgaWYgKG1fc3BlY3Vs
YXJFeHBvbmVudCA9PSAxLjBmKQorLy8gICAgICAgIHBhaW50aW5nRGF0YS5zcGVjdWxhckV4cG9u
ZW50ID0gMTsKKy8vICAgIGVsc2UgLy8gSXQgaXMgbmVpdGhlciAwLjBmIG5vciAxLjBmCisvLyAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOwogfQogCiBMaWdodFNvdXJj
ZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgU3BvdExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdo
dGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwg
ZmxvYXQgeikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMzE1N2EwZWQ5OThlYzM0MGYyMzEzOTMzZDhiZjYzMDFlNTBlZjkzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5j
b3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGRUJsZW5kLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQorYm9vbCBGRUJsZW5kOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW4y
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVm
ZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjIuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKy8vICAgIEdyYXBoaWNzQ29u
dGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisvLyAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworLy8gICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NDkxNjU0YzRiMWM0NjNkN2UwMmFjMWFlZTQzOTBlMTA2Y2M5ZWYwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNp
ZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSB2b2lkIG1hdHJpeChmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHZhbHVlcykKK3sKKyAgICBmbG9hdCByID0gcmVkOworICAgIGZsb2F0IGcgPSBn
cmVlbjsKKyAgICBmbG9hdCBiID0gYmx1ZTsKKyAgICBmbG9hdCBhID0gYWxwaGE7CisKKyAgICBy
ZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBi
ICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OworICAgIGdyZWVuICAgPSB2YWx1
ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzWyA3XSAqIGIgKyB2YWx1ZXNbIDhd
ICogYSArIHZhbHVlc1sgOV0gKiAyNTU7CisgICAgYmx1ZSAgICA9IHZhbHVlc1sxMF0gKiByICsg
dmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVz
WzE0XSAqIDI1NTsKKyAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICog
ZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1Owor
fQorCitpbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykKK3sKKyAgICBmbG9h
dCByID0gcmVkOworICAgIGZsb2F0IGcgPSBncmVlbjsKKyAgICBmbG9hdCBiID0gYmx1ZTsKKwor
ICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25lbnRzWzFdICsgYiAq
IGNvbXBvbmVudHNbMl07CisgICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRzWzNdICsgZyAqIGNv
bXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKKyAgICBibHVlICAgID0gciAqIGNvbXBv
bmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRzWzhdOworfQorCisv
LyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBmdW5jdGlvbiBpbiBD
b2xvckx1bWluYW5jZS5oLgoraW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0
JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKK3sKKyAgICBhbHBoYSA9IDAuMjEy
NSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKKyAgICByZWQgPSAwOwor
ICAgIGdyZWVuID0gMDsKKyAgICBibHVlID0gMDsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQor
dGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Citib29sIGVmZmVjdEFwcGx5QWNj
ZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQorewor
ICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7
CisgICAgCisgICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkg
eworICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBt
YXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRy
aXggNXg0IG1hdHJpeAorICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12
SW1hZ2UgY29kZS4KKyAgICAgICAgaWYgKHZhbHVlc1s0XSB8fCB2YWx1ZXNbOV0gfHwgdmFsdWVz
WzE0XSB8fCB2YWx1ZXNbMTldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7CisgICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBzcmMu
ZGF0YSA9IGRhdGE7CisgICAgCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OworICAg
IGRlc3QuZGF0YSA9IGRhdGE7CisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKKyAgICAgICAgY29uc3QgaW50MTZfdCBtYXRy
aXhbNCAqIDRdID0geworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgMF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyA1XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCisKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEx
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTZdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3IpKSwK
KworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10gKiBk
aXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WyA4XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCisgICAgICAgIH07CisgICAgICAgIHZJ
bWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3Is
IG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IDAsCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRz
WzFdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIDAsCisK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICog
ZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBv
bmVudHNbNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIDAsCisKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIGRp
dmlzb3IsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKKyAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0geworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEyNSAqIGRpdmlzb3Ip
KSwKKworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAqIGRpdmlzb3IpKSwK
KworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRpdmlzb3IpKSwKKwor
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5v
RmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0
cnVlOworfQorI2VuZGlmCisKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgor
dm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBmbG9hdCBjb21w
b25lbnRzWzldOworCisgICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICBlbHNlIGlmIChmaWx0ZXJUeXBlID09IEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpCisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKworICAgIHVu
c2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworCisjaWYgVVNF
KEFDQ0VMRVJBVEUpCisgICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQ8ZmlsdGVyVHlwZT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXplKSkKKyAgICAgICAgcmV0
dXJuOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7CisjZW5kaWYKKworICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVP
ZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAg
ICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAg
ICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAx
KTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSwgdmFsdWVzKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEs
IGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIs
IGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywg
YWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
OgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9m
ZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAg
ICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEp
OworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgc2F0dXJhdGVBbmRIdWVSb3RhdGUocmVkLCBn
cmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgIGZvciAodW5zaWdu
ZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0
aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBi
bHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAg
ZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAg
ICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6
ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQoreworICAgIFZlY3RvcjxmbG9h
dD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9
IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOworICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVz
OworfQorCitib29sIEZFQ29sb3JNYXRyaXg6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRz
LnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4u
aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgYXV0byBpbWFn
ZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVzKGluLmRy
YXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QpOworICAg
IH0KKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHQuY29sb3JTcGFj
ZSgpIH07CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxv
Z2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+
ZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6
ZSgpOworCisgICAgYXV0byB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKKwor
ICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgor
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVu
c2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJy
YXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICByZXN1bHQuc2V0SXNB
bHBoYUltYWdlKHRydWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXN1bHRJbWFn
ZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
NzQzMTU0MTFkMmViZDhmNzI3Nzg5ZTUyNGMwMmI0ZmUwMGI0MmJjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9u
ZW50VHJhbnNmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21w
b3NpdGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyODhmYjZk
MWZjMTY0ZGQ2YzIwNDgwNDM1OTM3MTY4YTg0NzM0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRl
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQor
eworICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihjKSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Yyk7CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEp
KV07Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBj
b21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNo
YXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsy
LCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQg
c2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOwor
ICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxl
ICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0g
KnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAg
ICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChiNCkK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRpb24g
PSBjbGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVzdGlu
YXRpb247CisgICAgfQorfQorCisvLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBp
cyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29t
bW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxl
cyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXph
dGlvbi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2ln
bmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZs
b2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAg
ZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1
LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAg
IHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBjaGFy
IGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsK
KyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlmIChi
MSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlm
IChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVzdGlu
YXRpb24gPSByZXN1bHQ7CisgICAgICAgICsrc291cmNlOworICAgICAgICArK2Rlc3RpbmF0aW9u
OworICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitzdGF0aWMgaW5s
aW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3Rk
OjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMp
ICsgazQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6
bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OworICAgIGlmICgoazQgPj0g
MC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQg
PD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7
CisgICAgICAgIGlmIChrNCkgeworICAgICAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAgICAg
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihz
b3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoazEpCisgICAgICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGs0KSB7CisgICAgICAgIGlm
IChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
PDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8
MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOworICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0
aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworICAgIEFTU0VSVChs
ZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOworICAgIC8v
IFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHku
CisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4
MykpOworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRp
b24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbHNlCisgICAgYXJpdGhtZXRp
Y1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7CisjZW5kaWYKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlBcml0aG1l
dGljU29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0
KCk7CisgICAgYXV0byYgaW4yID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gZWZmZWN0QURy
YXdpbmdSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhp
bi5kcmF3aW5nUmVjdCgpLCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgYXV0byBzb3VyY2VQ
aXhlbEFycmF5ID0gaW4uZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChlZmZlY3RBRHJhd2luZ1JlY3QpLCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBlZmZlY3RCRHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252
ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVzKGluMi5kcmF3aW5nUmVjdCgpLCByZXN1bHQu
ZHJhd2luZ1JlY3QoKSk7CisgICAgaW4yLmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0lu
dFJlY3QoZWZmZWN0QkRyYXdpbmdSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAg
IHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlv
blBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUo
KSA9PSAyKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbjIg
PSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZm
ZXIoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICgh
cmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBhdXRvIGlt
YWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4u
ZHJhd2luZ1JlY3QoKSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VSZWN0
MiA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4yLmRyYXdp
bmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29t
cG9zaXRlT3BlcmF0b3IpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKKyAgICAgICAgLy8gQXBw
bGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCisgICAgICAgIGF1dG8gZHJhd2lu
Z1JlY3QgPSBpbi5kcmF3aW5nUmVjdCgpOworICAgICAgICBhdXRvIGRyYXdpbmdSZWN0MiA9IGlu
Mi5kcmF3aW5nUmVjdCgpOworICAgICAgICBhdXRvIHJlc3VsdFJlY3QgPSByZXN1bHQuZHJhd2lu
Z1JlY3QoKTsKKworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUmVjdCA9IGRyYXdpbmdSZWN0Owor
ICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGRyYXdpbmdSZWN0Mik7CisgICAgICAg
IGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QocmVzdWx0UmVjdCk7CisgICAgICAgIGlmIChkZXN0
aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0
byBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgYWRq
dXN0ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5KC1yZXN1bHRSZWN0LmxvY2F0aW9uKCkpOworICAg
ICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRl
Q29vcmRpbmF0ZXMoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpOworCisgICAgICAgIGF1dG8gc291
cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5tb3ZlQnkoLWRy
YXdpbmdSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBzb3VyY2VSZWN0ID0gZ2VvbWV0cnkuY29u
dmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhzb3VyY2VSZWN0KTsKKworICAgICAgICBhdXRvIHNv
dXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2UyUmVjdC5tb3ZlQnko
LWRyYXdpbmdSZWN0Mi5sb2NhdGlvbigpKTsKKyAgICAgICAgc291cmNlMlJlY3QgPSBnZW9tZXRy
eS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHNvdXJjZTJSZWN0KTsKKworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBhZGp1c3RlZERlc3Rp
bmF0aW9uUmVjdCwgc291cmNlMlJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0
LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIsIElu
dFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRl
T3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIyLCBpbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQo
KSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
QXRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9S
OgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBp
bWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2lj
YWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9MSUdIVEVSOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBpbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBv
c2l0ZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWNT
b2Z0d2FyZShyZXN1bHQsIGlucHV0cywgZ2VvbWV0cnkpOworICAgIHJldHVybiBhcHBseU5vbkFy
aXRobWV0aWNTb2Z0d2FyZShyZXN1bHQsIGlucHV0cywgZ2VvbWV0cnkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZhZTg3MWE5MjhkZmJmNDg0ZjQ3NTdhMDA3
MzUwYWExZjI0NTdmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJiOTY3ZDE4MDljZDBkODlmYjM5ZWRkZjczODUyYjljZDI1MGVkNWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsOTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3QKK3sKKy8vICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKy8vICAg
IEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisvLworLy8gICAgQVNTRVJUKG1f
eENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworLy8gICAgQVNTRVJUKG1feUNo
YW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworLy8KKy8vICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKy8v
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKy8vICAgICAgICByZXR1cm47CisvLwor
Ly8gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOworLy8KKy8vICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8v
ICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3
aW5nUmVjdCk7CisvLworLy8gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8v
ICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGlu
MuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4K
Ky8vICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChl
ZmZlY3RCRHJhd2luZ1JlY3QpOworLy8gICAgCisvLyAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRp
c3BsYWNlbWVudEltYWdlKQorLy8gICAgICAgIHJldHVybjsKKy8vCisvLyAgICBBU1NFUlQoaW5w
dXRJbWFnZS0+bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKKy8vCisv
LyAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworLy8gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKKy8vICAgIHBhaW50U2l6ZS5zY2Fs
ZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisvLworLy8gICAgRmxvYXRTaXplIHNjYWxlID0gZmls
dGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7CisvLyAg
ICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKKy8vICAgIGZs
b2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKy8vICAgIGZsb2F0
IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OworLy8gICAgZmxvYXQg
c2NhbGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworLy8gICAgCisvLyAg
ICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7CisvLyAgICBpbnQg
ZGlzcGxhY2VtZW50Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7CisvLworLy8gICAgaW50IHJv
d0J5dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworLy8KKy8vICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKy8vICAgICAgICBpbnQgbGluZVN0YXJ0
T2Zmc2V0ID0geSAqIHJvd0J5dGVzOworLy8KKy8vICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKy8vICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9u
SW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKKy8vICAgICAgICAgICAgCisvLyAgICAg
ICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBk
aXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hh
bm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CisvLyAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0
YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShk
ZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7
CisvLworLy8gICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVz
dGluYXRpb25JbmRleCk7CisvLyAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBh
aW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgp
KSB7CisvLyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7CisvLyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKy8vICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAgICAg
KmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0
SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7
CisvLyAgICAgICAgfQorLy8gICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0
d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdhZmYwZGZlMTQzMzY4YWNmODcyMjMzYThiMWE0ZWJlNzE2
ZTMyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9w
U2hhZG93LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNv
ZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1
dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAy
ICogZ2VvbWV0cnkucmVzb2x2ZVRvQWJzb2x1dGVDb29yZGluYXRlcyh7IG1fc3RkWCwgbV9zdGRZ
IH0pOworICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnZW9tZXRyeS5yZXNvbHZlVG9BYnNvbHV0ZUNv
b3JkaW5hdGVzKHsgbV9keCwgbV9keSB9KTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW4uZHJh
d2luZ1JlY3QoKTsKKyAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJl
c3VsdENvb3JkaW5hdGVzKGltYWdlUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworCisgICAg
YXV0byBpbWFnZVJlY3RXaXRoT2Zmc2V0ID0gaW1hZ2VSZWN0OworICAgIGltYWdlUmVjdFdpdGhP
ZmZzZXQubW92ZShvZmZzZXQpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1f
c2hhZG93T3BhY2l0eSk7CisgICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBpbWFnZVJlY3RXaXRoT2Zmc2V0KTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhh
KDEpOworCisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwg
bV9zaGFkb3dDb2xvcik7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3Vs
dC5jb2xvclNwYWNlKCkgfTsKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVz
dWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJ
bWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVs
QXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVy
SW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBw
aXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworCisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAgICByZXN1bHRDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOworICAgIHJl
c3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVzdWx0LmxvZ2lj
YWxTaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKworICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VS
ZWN0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFRmxvb2RTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjA2MGQ0
NGNjZmMxYTM2ZmM5NjU3MmJiMmMyM2I4OWQ0M2U1NGZmMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNv
ZnR3YXJlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUZsb29kLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRmxv
b2Q6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBj
b25zdAoreworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGNv
bG9yID0gbV9mbG9vZENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZmxvb2RPcGFj
aXR5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29v
cmRpbmF0ZXMocmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSksIGNv
bG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzRmZmMwZTVmOTAzOTY1YjkyMjc5OTdkY2ZiMDdmM2NmZDhlMDVmMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFR2F1c3NpYW5CbHVyOjphcHBseVNvZnR3YXJl
KEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWEyZmE1NjQzZmVmYTk0M2NlM2ZiOWEwYTAxNTFkODA5
ZDAyNDcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmls
dGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwYmRm
N2QyODY1NzkzNGQwMzMxNDNkMzRiZGQwOTBkZjgxMjcxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VT
b2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTWVyZ2UuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21l
dHJ5LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTWVyZ2U6OmFwcGx5U29mdHdh
cmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9
IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKSB7Cisg
ICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBh
dXRvIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0
ZXMoaW5wdXQtPmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QpOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM0ZDc5MjI2NmZjNTcxZGJmYTFhZGE0YmZiYzI4MGYwYjZjOGZkOTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9y
cGhvbG9neS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5Ojph
cHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIElt
YWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RU9mZnNldFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTYxZDA5YjAzYWM0ZjBlZWRkNTUxMjY0
NmY1YzhmMzgzYzY0ZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcApAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRkVPZmZzZXQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFT2Zmc2V0OjphcHBseVNvZnR3YXJlKEZp
bHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0
KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlc3VsdElt
YWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0LnNldElzQWxwaGFJbWFnZShpbi5pc0FscGhh
SW1hZ2UoKSk7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IGluLmRyYXdpbmdSZWN0KCk7CisgICAg
aW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVzb2x2ZVRvRmlsdGVyQ29vcmRpbmF0ZXMoeyBtX2R4
LCBtX2R5IH0pKTsKKyAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJl
c3VsdENvb3JkaW5hdGVzKGltYWdlUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworCisgICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFn
ZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNDhmOTI0
N2Q4MzdkYzVmNzA1YWFiMmVlNTg5NGMzNmM2OTgxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4
IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIGlmICh0YXJnZXRSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBsb2dpY2Fs
UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGFyZ2V0UmVjdCk7CisKKyAgICBGbG9h
dFNpemUgc2NhbGU7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKGxvZ2ljYWxSZWN0LnNpemUoKSwgc2NhbGUpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIDEs
IGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OworICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJhbnNsYXRlKC1sb2dpY2FsUmVjdC5sb2Nh
dGlvbigpKS5tdWx0aXBseShhYnNvbHV0ZVRyYW5zZm9ybSk7CisKKyAgICBHcmFwaGljc0NvbnRl
eHQmIGltYWdlQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgaW1hZ2VDb250
ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOworCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQor
Citib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEp
OworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigp
OworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdC5zZXRJc0FscGhhSW1hZ2UoaW4uaXNBbHBoYUltYWdlKCkpOworCisgICAgYXV0byBpbWFn
ZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGluLmRyYXdpbmdS
ZWN0KCkpOworICAgIGF1dG8gcmVzdWx0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJz
b2x1dGVDb29yZGluYXRlcyhyZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisKKyAgICBhdXRvIHByaW1p
dGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW4u
cHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIGF1dG8gcmVzdWx0UHJpbWl0aXZlU3VicmVnaW9u
ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhyZXN1bHQucHJpbWl0aXZl
U3VicmVnaW9uKCkpOworICAgIAorICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVu
dGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQor
ICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQg
b2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4KKyAgICBGbG9hdFJlY3QgdGls
ZVJlY3QgPSBwcmltaXRpdmVTdWJyZWdpb247CisgICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExv
Y2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKyAgICBGbG9hdFBvaW50IG1heEVmZmVjdExv
Y2F0aW9uID0gcmVzdWx0UHJpbWl0aXZlU3VicmVnaW9uLmxvY2F0aW9uKCk7CisvLyAgICBpZiAo
aW4uZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dCkgewor
Ly8gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisvLyAgICAgICAgdGls
ZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7CisvLyAgICAgICAgdGlsZVJlY3Quc2NhbGUo
ZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlv
bigpLmhlaWdodCgpKTsKKy8vICAgIH0KKworICAgIGF1dG8gdGlsZUltYWdlQnVmZmVyID0gY3Jl
YXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIGdlb21ldHJ5LmFic29sdXRlVHJhbnNmb3JtKCksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKKyAgICBpZiAoIXRpbGVJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5j
b250ZXh0KCk7CisgICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9j
YXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOworICAgIHRpbGVJbWFnZUNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOwor
CisgICAgYXV0byB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShX
VEZNb3ZlKHRpbGVJbWFnZUJ1ZmZlcikpOworICAgIGlmICghdGlsZUltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKKyAg
ICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZm
ZWN0TG9jYXRpb24pOworCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJ
bWFnZS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOworICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJu
KSk7CisgICAgCisgICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCByZXN1bHRJbWFnZVJlY3Quc2l6ZSgpKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVs
ZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZThkNDA5ZDZjMWFiOGQzZGI0YWZkMmM2Yjky
ODM1OTUwMWEwNWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRh
IEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQ29weXJpZ2h0IChDKSAyMDExIEdh
Ym9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFVHVyYnVsZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVUdXJi
dWxlbmNlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJl
c3VsdFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlYWExMmQ4
YjU3MzQ0NzgyYzFlOWEzNGNhNTE5ZjkzOGFkNTRmODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3Vs
dFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZTo6
aW1hZ2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1fbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVz
b2x1dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYg
KCFtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qg
cmVjdCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfTsKKworICAg
IGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZm
ZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7
CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZl
cigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3Vs
dFNvZnR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM4YzQ1NjhmNTFjMzYyYjlmY2E5NmI0YWZiNDM1YjQz
M2U5OTEyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmls
dGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyUmVzdWx0
U29mdHdhcmUgOiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0
ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdDsKKyAgICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdl
QnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faW1hZ2VC
dWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAg
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJS
ZXN1bHRTb2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Rmls
dGVyUmVzdWx0JiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzNiNWQ3MzAwNWM3ODk3NjBhZDFhZTQwYWQ4YzcxZDFkY2E3MjI0Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKworI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgU291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUo
KSA9PSAxKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0
ZXMoaW4uZHJhd2luZ1JlY3QoKSk7CisKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxS
ZWN0KEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2VSZWN0LnNpemUoKSB9LCBDb2xvcjo6YmxhY2spOwor
ICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
SW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhp
Y1NvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTAyOGM1MjZl
ZGE5YThjZjFjZTA2ZTk5MGYyYzczZDBmOWRmYzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGlj
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3Vy
Y2VHcmFwaGljOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JikgY29uc3QKK3sKKyAgICBBU1NFUlQoc291cmNlSW1hZ2UpOworCisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJh
d0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAKaW5kZXggZjQ0YWUxMjlkMDczOGQzMGM3NmU3MTA4NWIyYWVjMDVhN2I2ZjFkYS4u
YWZkZTAyNDE1Mjk3ZTM2YmJlMTJlYjllY2ZlOGZmNTlhMWI3MWE0NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTIgKzI4LDMxNCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUg
IkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRl
ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCiAjaW5j
bHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGRU1lcmdlLmgiCi0jaW5jbHVkZSAi
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
RmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRl
ICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNvdXJj
ZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgp
CitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcik7Cisg
ICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZihuZXcgQ1NTRmlsdGVyKG9wZXJhdGlvbnMsIHJlbmRl
cmluZ01vZGUpKTsKKworICAgIGlmICghZmlsdGVyLT5idWlsZEZ1bmN0aW9ucyhyZW5kZXJlciwg
b3BlcmF0aW9ucykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGZpbHRl
cjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7
IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRo
aXMpKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoVmVjdG9yPFJlZjxGaWx0
ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIoV1RGTW92ZShmdW5jdGlvbnMpLCBy
ZW5kZXJpbmdNb2RlKSk7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVmYXVsdDsK
K0NTU0ZpbHRlcjo6Q1NTRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihyZW5kZXJpbmdNb2Rl
LCBUeXBlOjpDU1NGaWx0ZXIpCit7CisgICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBv
cGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIG1faGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7Cit9CiAKLUdyYXBoaWNz
Q29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIo
VmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVyaW5nTW9kZSwgVHlwZTo6Q1NTRmlsdGVy
KQorICAgICwgbV9mdW5jdGlvbnMoV1RGTW92ZShmdW5jdGlvbnMpKQogewotICAgIHJldHVybiBz
b3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7CiB9CiAK
LVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxTVkdG
aWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihGaWx0ZXImIGZpbHRlciwgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIEZpbHRlckVmZmVjdCAmcHJldmlvdXNFZmZlY3QsIGNvbnN0IFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQg
PSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRl
ckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAo
IWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWls
ZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwg
ZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQg
bm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0
aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5k
ZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhN
RTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVt
ZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlv
bi5mcmFnbWVudCgpLCAqZWxlbWVudCk7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jlc291cmNl
cyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBhdXRvKiBm
aWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmlsdGVyRWxl
bWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCisgICAgaWYgKCFm
aWx0ZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgCisgICAg
cmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0ZXJFbGVtZW50LCBmaWx0ZXIucmVuZGVyaW5n
TW9kZSgpLCAmcHJldmlvdXNFZmZlY3QpOworfQogCi0gICAgYXV0byBidWlsZGVyID0gbWFrZVVu
aXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotICAgIG1fc291cmNlQWxw
aGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkpOwor
c3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sK
KyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJh
dGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5v
cmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2
YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3Rv
cjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFy
YW1ldGVycykpOworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKK3N0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVTZXBpYUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWlu
dXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4w
LCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmls
ZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2
OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4
OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4x
NjggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAg
ICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAg
ICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBmb3IgKGF1dG8mIGVmZmVjdEVs
ZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM+KCpmaWx0ZXJFbGVtZW50KSkgewotICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1
aWxkKGJ1aWxkZXIuZ2V0KCksICp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAg
ICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8
IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGJ1aWxkIGVmZmVjdCBm
cm9tICIgPDwgZWZmZWN0RWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgfQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNhdHVyYXRlRWZmZWN0
KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0
aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5k
YXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5y
ZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVs
ZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZp
bHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
I2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWls
ZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJl
bmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5h
cHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVj
dDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJD
b25zdW1lciBjb25zdW1lcikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVJbnZl
cnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOwotICAgIG1faGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhh
c0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVu
Y3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQg
YW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFu
c2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQogCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7
Ci0gICAgbV9vdXRzZXRzID0geyB9Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0
ZU9wYWNpdHlFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKG51bGxGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworfQorCitz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChjb25zdCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rp
b247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJG
dW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBu
dWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RF
ZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2Vw
dCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZm
ZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24pCit7CisgICAgZmxv
YXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERl
dmlhdGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZp
YXRpb24sIHN0ZERldmlhdGlvbiwgLypjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVy
UHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDoqLyBFREdFTU9ERV9EVVBMSUNBVEUpOworfQorCitz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZs
b2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJu
IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwg
ZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7
Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1
bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
cHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBv
cGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVy
YXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiBy
ZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRl
cihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAg
ICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZWZm
ZWN0KTsKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRl
U1ZHRmlsdGVyKCp0aGlzLCByZW5kZXJlciwgKmVmZmVjdCwgZG93bmNhc3Q8UmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRy
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0g
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAg
Ly8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9p
bmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1h
dGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFy
YW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYg
KyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIg
KyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIg
KyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAg
ICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3Vi
bGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9y
Zy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50
Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAg
ICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4
OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4z
NDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsK
LSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBX
VEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTQVRVUkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAg
ICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVh
dGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5j
dGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAg
IGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9
IDEgLSAyICogYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQg
PSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1
bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRl
KCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZF
UlQ6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3It
ZmlsdGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5z
ZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rp
b24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25l
bnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0
aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZl
Y3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJh
dGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5
cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQg
YW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50
ICsgMC41OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRv
d25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6
OmNyZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZp
bHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9E
VVBMSUNBVEUpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAg
ICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0
aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8m
IGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93Ojpj
cmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09w
ZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9u
LmNvbG9yKCksIDEpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLQotICAgICAgICBpZiAoZWZmZWN0KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2Ug
U1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUg
ZmlsdGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBj
bGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgotICAgICAgICAgICAgZWZmZWN0LT5z
ZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlv
bik7CisgICAgICAgIAorICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgICAgICBlZmZlY3Qg
PSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKICAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5n
Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlv
bjo6UkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9
IHsgV1RGTW92ZShwcmV2aW91c0VmZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBtX2VmZmVjdHMu
YXBwZW5kKCplZmZlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJldmlvdXNFZmZl
Y3QgPSBXVEZNb3ZlKGVmZmVjdCk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmls
dGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIg
Y2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3NvdXJjZURyYXdpbmdSZWdpb24pOwotI2lmIFVTRShD
T1JFX0lNQUdFKQotICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKLSAgICAgICAgbV9maWx0ZXJS
ZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGlu
Z3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3Rz
Lmxhc3QoKS5nZXQoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NG
aWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0
KQotewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoZmlsdGVyUmVjdCA9PSBzb3VyY2VJbWFnZVJlY3QoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRl
ZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8gQXQgdGhp
cyBwb2ludCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0gICAgLy8g
c291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhp
YwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAgIGlmICht
X2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUg
bG9naWNhbFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAgaWYgKCFz
b3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNp
emUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVm
ZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQs
IGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsK
LSAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJ
bWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgp
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0j
ZW5kaWYKKyAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAgICB9Ci0g
ICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKLX0KIAotdm9pZCBDU1NGaWx0ZXI6
OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0byYgbGFzdEVm
ZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFz
dEVmZmVjdC5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVj
dCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMg
d2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsK
LSAgICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3Qu
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQotfQotCi12b2lkIENT
U0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCkKLXsKLSAgICBtX3NvdXJjZUdyYXBo
aWMtPmNsZWFyUmVzdWx0KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291
cmNlQWxwaGEtPmNsZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVj
dHMpCi0gICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6
OmFwcGx5KCkKLXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwot
ICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFw
cGx5RWZmZWN0cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVz
dWx0KCkpIHsKLSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0
Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91
dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24g
aXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0aGF0IG5lZWRzIHRvIGJlIHJlcGFp
bnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRpcnR5UmVjdCIuCi0gICAgYXV0byBy
ZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAoaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91dHNldHMoKTsKLSAgICByZWN0Rm9y
UmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0gICAgcmV0dXJuIHJlY3RGb3JSZXBh
aW50OwotfQogCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKSBjb25zdAorSW50T3V0
c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogewotICAgIGlmIChtX2ZpbHRlclJlbmRl
cmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbV9m
aWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7CisgICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1Bp
eGVscyB8fCAhbV9vdXRzZXRzLmlzWmVybygpKQorICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwog
ICAgIAotICAgIHJldHVybiBtX2VmZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
fQotCi12b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0KQotewotICAgIG1fc291cmNlRHJhd2luZ1JlZ2lvbiA9IHNvdXJjZUlt
YWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3VyY2VJbWFnZVJlY3QpOwotICAgIHNl
dEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRh
Y2hlZCA9IGZhbHNlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29u
c3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQotewotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9l
ZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Cisg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBtX291dHNldHMg
Kz0gZnVuY3Rpb24tPm91dHNldHMoKTsKKyAgICAKKyAgICByZXR1cm4gbV9vdXRzZXRzOwogfQog
Ci1JbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CitGaWx0ZXJSZXN1bHQqIENT
U0ZpbHRlcjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgp
LmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRl
clJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0
dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3Qg
eyBtX2ZpbHRlclJlZ2lvbiB9KTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlv
bnMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmdW5jdGlvbi0+YXBwbHkob3V0cHV0LCBzdGFj
aywgc291cmNlSW1hZ2UsIGdlb21ldHJ5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICpy
ZXN1bHQgfSk7CisgICAgICAgIG91dHB1dC5yZXN1bHRzKCkuYWRkKGZ1bmN0aW9uLCBSZWY8Rmls
dGVyUmVzdWx0PigqcmVzdWx0KSk7CisgICAgfQogICAgIAotICAgIHJldHVybiB7IH07CisgICAg
QVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VM
YXN0KCk7CisgICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOworICAgIHJldHVybiAmcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotSW50
T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAorVGV4dFN0cmVhbSYgQ1NTRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIW1faGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKCFtX291dHNldHMuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVj
dCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVjdC0+b3V0c2V0cygpOwot
ICAgIHJldHVybiBtX291dHNldHM7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rp
b25zKQorICAgICAgICBmdW5jdGlvbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOworICAgIHJldHVybiB0czsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IDAwYjkxOTE3YjgwNGM5MmQ5NDA4
Yjc1OGUzNzVjMjUyZjI5ZGIwYzUuLmUyMzk2YjNhYzQ5NzIwNDRjNDFlZWM3N2JmYjJlNTE1ZGU1
NmE2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4NiArMjYs
NDUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW50
UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVHlw
ZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyOwogY2xh
c3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBTb3VyY2VB
bHBoYTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWVudW0gY2xhc3MgRmlsdGVyQ29uc3VtZXIg
eyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAogY2xhc3MgQ1NTRmlsdGVyIGZp
bmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
ZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENTU0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQogCi0gICAg
SW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChSZW5kZXJFbGVt
ZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKLSAgICB2b2lk
IGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRlKFJlbmRlckVsZW1lbnQmLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBj
cmVhdGUoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYsIFJlbmRlcmluZ01vZGUpOwogCiAg
ICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVsczsgfQogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luOyB9CiAKLSAgICB2b2lkIGRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNv
bnN0OworICAgIGNvbnN0IFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYgZnVuY3Rpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBj
b25zdCBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFsIH5D
U1NGaWx0ZXIoKTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9h
dFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Zp
bHRlclJlZ2lvbjsgfQotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VG
aWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAgIENTU0ZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiwgUmVuZGVyaW5nTW9kZSk7CisgICAgQ1NTRmlsdGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVu
Y3Rpb24+PiYmLCBSZW5kZXJpbmdNb2RlKTsKIAotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMo
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50
JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1
dENvbnRleHQoKTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZvaWQgYWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QgZmluYWw7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKLQotICAg
IExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwotCi0g
ICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0
ZXJSZWdpb247Ci0KLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsKLSAg
ICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IG1fc291cmNlQWxwaGE7Ci0KLSAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRz
OwotCi0gICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0g
ICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJl
bmRlcmVyOworCisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOwor
ICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Q1NTRmlsdGVy
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikg
eyByZXR1cm4gZmlsdGVyLmlzQ1NTRmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci50eXBlKCkgPT0g
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcjsgfQogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRl
eCAxYmYyMmU0MmMzNTE4NjE4NzllZjVhZjBjZjFlYzBiNDcxNDliNWVhLi4wMGY2NmU4YWIyMThi
ZTRmMDFmYTcyYmNjY2FlOTFlN2U4NjNhMzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaApAQCAtNjIsNyArNjIsNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU0ZpbHRlcjsKIGNsYXNzIENsaXBSZWN0czsKIGNsYXNz
IENsaXBSZWN0c0NhY2hlOwogY2xhc3MgRXZlbnRSZWdpb25Db250ZXh0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCAyNTBhN2Q1YzBi
YWEwYWM3NDFhOTBjODE4YjYxYTA1Zjk1Yjk2NGE0Li44NzJhNjY2ZTM3NGUxOTU0NmEwZDVjNzEw
MWY0YmQ5MDkyNjg0NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmNwcApAQCAtMzEsOSArMzEsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckZpbHRlcnMuaCIKIAotI2luY2x1ZGUgIkNTU0ZpbHRlci5o
IgogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtMTE2LDM5
ICsxMTcsNTEgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OnJlbW92ZVJlZmVyZW5jZUZpbHRl
ckNsaWVudHMoKQogICAgIG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzLmNsZWFyKCk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgZmxvYXQgc2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKK3ZvaWQg
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
ZmxvYXQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICBpZiAoIW1fZmlsdGVy
KSB7Ci0gICAgICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICAgICAgbV9m
aWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPnNl
dFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7Ci0gICAgfSBlbHNlIGlmIChtX2ZpbHRlci0+
ZmlsdGVyU2NhbGUoKSAhPSBzY2FsZUZhY3RvcikgewotICAgICAgICBtX2ZpbHRlci0+c2V0Rmls
dGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+Y2xlYXJJbnRlcm1lZGlh
dGVSZXN1bHRzKCk7Ci0gICAgfQorICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVu
ZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUpOworfQorCitH
cmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6aW5wdXRDb250ZXh0KCkKK3sKKyAg
ICByZXR1cm4gbV9zb3VyY2VJbWFnZSA/ICZtX3NvdXJjZUltYWdlLT5jb250ZXh0KCkgOiBudWxs
cHRyOworfQorCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCgpCit7CisgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZUltYWdlUmVj
dC5zaXplKCkgfTsKKyAgICBtX3NvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgMSwgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAKLSAgICAvLyBJZiB0aGUgZmlsdGVy
IGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwg
YXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNv
bXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgIC8vIEZJWE1FOiB0aGlz
IHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5
bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVu
ZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkK
LSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hl
ZCA9IHRydWU7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3Qg
TGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRl
cjsKLSAgICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBmaWx0ZXIuY29tcHV0ZVNvdXJjZUltYWdl
UmVjdEZvckRpcnR5UmVjdChmaWx0ZXJCb3hSZWN0LCBkaXJ0eVJlY3QpOworICAgIAorICAgIGF1
dG8gZmlsdGVyU291cmNlUmVjdCA9IGRpcnR5UmVjdDsKKyAgICBpZiAoZmlsdGVyLmhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscygpKQorICAgICAgICBmaWx0ZXJTb3VyY2VSZWN0ICs9IGZpbHRlci5v
dXRzZXRzKCk7CisgICAgZmlsdGVyU291cmNlUmVjdC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7
CisKICAgICBpZiAoZmlsdGVyU291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYm9vbCBoYXNVcGRhdGVkQmFja2luZ1N0b3JlID0gZmlsdGVyLnVwZGF0
ZUJhY2tpbmdTdG9yZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7CisgICAgCisgICAgaWYgKGZpbHRl
clNvdXJjZVJlY3QgIT0gbV9zb3VyY2VJbWFnZVJlY3QpIHsKKyAgICAgICAgbV9zb3VyY2VJbWFn
ZVJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0OworICAgICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNo
ZWQgPSBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlKQorICAgICAgICBpZiAoIW1f
Z3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgICAgIG1fcmVwYWludFJlY3QgPSBmaWx0
ZXJTb3VyY2VSZWN0OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fcmVwYWludFJlY3Qg
PSBkaXJ0eVJlY3Q7CkBAIC0xNTksMTEgKzE3Miw5IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVy
TGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
CiAgICAgbV9wYWludE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3QubG9jYXRpb24oKTsKICAgICBy
ZXNldERpcnR5U291cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgZmlsdGVyLmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVk
ZWQoZGVzdGluYXRpb25Db250ZXh0KTsKLSAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQg
PSBmaWx0ZXIuaW5wdXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQg
fHwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUoKSkpCisgICAgYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9
IGlucHV0Q29udGV4dCgpOworICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0
IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaXMgY2FwdHVyZWQgaW4gdGhlIG9mZnNjcmVlbiBt
ZW1vcnkgYnVmZmVyLgpAQCAtMTc3LDIzICsxODgsMTUgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGlu
YXQKIAogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KQogewotICAgIEFTU0VSVChtX2ZpbHRlci0+aW5w
dXRDb250ZXh0KCkpOworICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAKICAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJcblJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRo
aXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCIpOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmls
dGVyOwotICAgIGZpbHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwotCi0gICAgZmlsdGVy
LmFwcGx5KCk7Ci0KLSAgICAvLyBHZXQgdGhlIGZpbHRlcmVkIG91dHB1dCBhbmQgZHJhdyBpdCBp
biBwbGFjZS4KLSAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsK
LSAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7
Ci0KLSAgICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1dCgpKQotICAgICAg
ICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRwdXRCdWZmZXIsIHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICBpbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwog
Ci0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworICAgIGF1dG8gZ2VvbWV0
cnkgPSBtYWtlVW5pcXVlPEZpbHRlckdlb21ldHJ5PihtX3NvdXJjZUltYWdlUmVjdCwgbV9zb3Vy
Y2VJbWFnZVJlY3QpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3RmlsdGVySW1hZ2VCdWZm
ZXIoZmlsdGVyLCBtX3NvdXJjZUltYWdlLmdldCgpLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CiAKICAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJMYXllckZpbHRlcnMg
IiA8PCB0aGlzIDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QgZG9uZVxuIik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKaW5kZXggM2RhMTQwYTVjODhm
MTU1MzE5MGI3MDAzZDdlNzg0NGM5MTk0NWJmNy4uMmFmNmZiNDdlMTg0ZjY5NDA0N2MwZTcxNTI3
M2FjMTQyYWE1YmZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaApAQCAtMzcsOCArMzcsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ2FjaGVkU1ZHRG9jdW1lbnQ7CitjbGFzcyBDU1NGaWx0ZXI7CiBjbGFzcyBFbGVtZW50Owog
Y2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKK2NsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBSZW5k
ZXJMYXllckZpbHRlcnMgZmluYWwgOiBwcml2YXRlIENhY2hlZFNWR0RvY3VtZW50Q2xpZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY5LDE0ICs3MSwxOSBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25z
dCBOZXR3b3JrTG9hZE1ldHJpY3MmKSBmaW5hbDsKICAgICB2b2lkIHJlc2V0RGlydHlTb3VyY2VS
ZWN0KCkgeyBtX2RpcnR5U291cmNlUmVjdCA9IExheW91dFJlY3QoKTsgfQorICAgIEdyYXBoaWNz
Q29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKCk7CiAKICAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKIAogICAgIFZlY3RvcjxSZWZQ
dHI8RWxlbWVudD4+IG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzOwogICAgIFZlY3RvcjxDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4+IG1fZXh0ZXJuYWxTVkdSZWZlcmVuY2Vz
OwogCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOworICAgIEZsb2F0UmVj
dCBtX3NvdXJjZUltYWdlUmVjdDsKICAgICBSZWZQdHI8Q1NTRmlsdGVyPiBtX2ZpbHRlcjsKICAg
ICBMYXlvdXRSZWN0IG1fZGlydHlTb3VyY2VSZWN0OworICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICAKICAgICAvLyBEYXRhIHVzZWQgcGVyIHBhaW50CiAg
ICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggMTk1MDlk
OTcxOGFmZjExMGY4NDFlYzQ5NzZmOTdmYjFhOTM0ZDhhNS4uNjhhZjdlZTMxNDY3NDgwNDJlOGZh
OTljN2NmMWMyNjQ2NmRkNjcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTQsNiArNCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM3LDYgKzM4LDggQEAKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
ICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIu
aCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtODIsNjIgKzg1LDI3IEBAIHZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50
JiBjbGllbnQsIGJvb2wKICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFy
a0ZvckludmFsaWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52
YWxpZGF0aW9uKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIw
MDsKLSAgICBpZiAoZmlsdGVyRWxlbWVudCgpLmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRD
aGlsZE5vZGVzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCB0YXJn
ZXRCb3VuZGluZ0JveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotCi0gICAgLy8gQWRk
IGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNW
R0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKLSAgICBidWls
ZGVyLT5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSk7
Ci0gICAgYnVpbGRlci0+c2V0VGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOwot
ICAgIAotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCgpKSkgewotICAgICAgICBh
dXRvIGVmZmVjdCA9IGVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgZmlsdGVyKTsKLSAgICAg
ICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+
YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIGVsZW1lbnQu
cmVuZGVyZXIoKSk7Ci0gICAgICAgIGVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVj
dC5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhD
b250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJnZXRC
b3VuZGluZ0JveCkpOwotICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5z
dmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRp
b246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+
c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0j
ZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWxlbWVudC5yZXN1bHQoKSwg
V1RGTW92ZShlZmZlY3QpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXI7Ci19Ci0KIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0
aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlKQogewogICAgIEFTU0VS
VChjb250ZXh0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlTW9kZSwgIXJlc291cmNlTW9k
ZSk7CiAKLSAgICBMT0coRmlsdGVycywgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICVwIGFwcGx5
UmVzb3VyY2UgcmVuZGVyZXIgJXAiLCB0aGlzLCAmcmVuZGVyZXIpOwotCi0gICAgaWYgKG1fcmVu
ZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpIHsKLSAgICAgICAgRmlsdGVy
RGF0YSogZmlsdGVyRGF0YSA9IG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmdldCgmcmVuZGVyZXIp
OwotICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6UGFpbnRpbmdT
b3VyY2UgfHwgZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6QXBwbHlpbmcpCi0gICAg
ICAgICAgICBmaWx0ZXJEYXRhLT5zdGF0ZSA9IEZpbHRlckRhdGE6OkN5Y2xlRGV0ZWN0ZWQ7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWxyZWFkeSBidWlsdCwgb3Igd2UncmUgaW4gYSBjeWNs
ZSwgb3Igd2UncmUgbWFya2VkIGZvciByZW1vdmFsLiBSZWdhcmRsZXNzLCBqdXN0IGRvIG5vdGhp
bmcgbW9yZSBub3cuCi0gICAgfQotCisgICAgLy8gQnVpbGQgdGhlIFNWR0ZpbHRlcgogICAgIGF1
dG8gZmlsdGVyRGF0YSA9IG1ha2VVbmlxdWU8RmlsdGVyRGF0YT4oKTsKLSAgICBGbG9hdFJlY3Qg
dGFyZ2V0Qm91bmRpbmdCb3ggPSByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIGF1
dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwogCi0gICAgZmlsdGVyRGF0YS0+Ym91bmRhcmllcyA9IFNWR0xlbmd0aENv
bnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQo
KSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KTsKLSAg
ICBpZiAoZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkpCisgICAgZmlsdGVyRGF0YS0+
ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxlbWVudCgpLCByZW5kZXJpbmdNb2Rl
KTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJv
dW5kaW5nQm94KCk7CisgICAgZmlsdGVyRGF0YS0+Ym91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRl
eHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwg
ZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KTsKIAotICAg
IC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4g
CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKKyAgICBmaWx0ZXJEYXRhLT5k
cmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJE
YXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKKwor
ICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGVUcmFuc2Zvcm0KICAgICBBZmZpbmVUcmFuc2Zv
cm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFu
c2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7CiAgICAgaWYg
KCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTQ1LDg2ICsxMTMsMzkgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAvLyBF
bGltaW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8g
YmUgYWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgogICAg
IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3Jt
KGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2Nh
bGUoKSwgMCwgMCk7CiAKLSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgYm91bmRhcmllcyBvZiB0
aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24uCi0gICAgZmlsdGVyRGF0YS0+ZHJhd2lu
Z1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7Ci0gICAgZmlsdGVyRGF0YS0+
ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7CisgICAgLy8g
Q2FsY3VsYXRlIHRoZSBmaWx0ZXIgcmVzb2x1dGlvbgogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURy
YXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBS
ZWN0KGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24pOworICAgIGZpbHRlckRhdGEtPnNjYWxlID0g
eyAxLCAxIH07CisgICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlRHJh
d2luZ1JlZ2lvbi5zaXplKCksIGZpbHRlckRhdGEtPnNjYWxlKTsKIAotICAgIC8vIENyZWF0ZSB0
aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9
IGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdG
aWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgYWJz
b2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyRGF0YS0+Ym91bmRh
cmllcywgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKTsKLQotICAgIC8vIENyZWF0ZSBhbGwgcmVs
ZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMuCi0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IGJ1aWxk
UHJpbWl0aXZlcygqZmlsdGVyRGF0YS0+ZmlsdGVyKTsKLSAgICBpZiAoIWZpbHRlckRhdGEtPmJ1
aWxkZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERldGVybWluZSBzY2FsZSBm
YWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBz
aG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRlclNpemUuCi0gICAgRmxvYXRSZWN0IHRl
bXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6ZSBzY2Fs
ZSgxLCAxKTsKLSAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcodGVtcFNvdXJjZVJl
Y3Quc2l6ZSgpLCBzY2FsZSk7Ci0gICAgdGVtcFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUud2lkdGgo
KSwgc2NhbGUuaGVpZ2h0KCkpOwotCi0gICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBpbiBTVkdG
aWx0ZXIuCi0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxl
KTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzID0g
MTAwOwotICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXIt
Pmxhc3RFZmZlY3QoKTsKLSAgICBpZiAoIWxhc3RFZmZlY3QgfHwgbGFzdEVmZmVjdC0+dG90YWxO
dW1iZXJPZkVmZmVjdElucHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElucHV0cykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2VcbiIgPDwgKmZpbHRlckRhdGEt
PmJ1aWxkZXItPmxhc3RFZmZlY3QoKSk7Ci0KLSAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVm
ZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3Qg
aGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAotICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qg
c2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAgICBmaWx0ZXJE
YXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZm
ZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICB9Ci0KLSAgICAv
LyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBpcyBlbXB0eSwgd2UgaGF2ZSBzb21ldGhpbmcgbGlrZSA8
ZyBmaWx0ZXI9Ii4uIi8+LgotICAgIC8vIEV2ZW4gaWYgdGhlIHRhcmdldCBvYmplY3RCb3VuZGlu
Z0JveCgpIGlzIGVtcHR5LCB3ZSBzdGlsbCBoYXZlIHRvIGRyYXcgdGhlIGxhc3QgZWZmZWN0IHJl
c3VsdCBpbWFnZSBpbiBwb3N0QXBwbHlSZXNvdXJjZS4KLSAgICBpZiAoZmlsdGVyRGF0YS0+ZHJh
d2luZ1JlZ2lvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVy
RGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKLSAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRD
b250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZy
ZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBDaGFuZ2UgdGhlIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gYXBwbGll
ZCB0byB0aGUgZmlsdGVyZWQgZWxlbWVudCB0byByZWZsZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRo
ZSBmaWx0ZXIuCisgICAgLy8gQ2FsY3VsYXRlIGVmZmVjdGl2ZVRyYW5zZm9ybQogICAgIEFmZmlu
ZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm07Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNj
YWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAgICBlZmZlY3RpdmVUcmFuc2Zv
cm0uc2NhbGUoZmlsdGVyRGF0YS0+c2NhbGUpOwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0
aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBhdXRv
IHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0Vu
YWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZDsKICNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NS
R0IpCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJT
UkdCKCk7CiAjZWxzZQogICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpOwogI2VuZGlmCisKICAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBl
ZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwog
ICAgIGlmICghc291cmNlR3JhcGhpYykgewotICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0
ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOworLy8gICAgICAgIEFTU0VSVCghbV9yZW5k
ZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRh
dGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRh
TWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUoZmlsdGVyRGF0YSkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIAotICAgIC8vIFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0
aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5n
TW9kZShyZW5kZXJpbmdNb2RlKTsKIAorICAgIC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29u
dGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNv
dXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4dCgpOwotICAKKwogICAg
IGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBXVEZNb3ZlKHNvdXJjZUdyYXBoaWMp
OwogICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAKICAgICBjb250ZXh0
ID0gJnNvdXJjZUdyYXBoaWNDb250ZXh0OwogCi0gICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVy
RGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1h
cC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLQogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0yNjksMzggKzE5MCwxOCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0
ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKLQotICAgIGlmIChsYXN0RWZmZWN0ICYmICFm
aWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVh
bCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24g
dGhlCi0gICAgICAgIC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0
aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24gYQotICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4K
LSAgICAgICAgaWYgKGZpbHRlckRhdGEuc3RhdGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCi0gICAg
ICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+c2V0U291cmNlSW1hZ2UoV1RGTW92ZShmaWx0ZXJE
YXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIpKTsKLQotICAgICAgICAvLyBBbHdheXMgdHJ1ZSBpZiBm
aWx0ZXJEYXRhIGlzIGp1c3QgYnVpbHQgKGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6
OkJ1aWx0KS4KLSAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewotICAgICAg
ICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAg
ICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAg
IH0KKyAgICBpZiAoIWZpbHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
ICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZp
bHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFm
ZmluZVRyYW5zZm9ybSgpKSk7Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8g
ZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSkpOwotICAgICAg
ICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKCpyZXN1bHRJbWFnZSwgbGFzdEVmZmVjdC0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJE
YXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpKTsKKyAgICAgICAgY29udGV4dC0+Y29uY2F0
Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVl
X29yKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSgxIC8gZmlsdGVyRGF0YS5zY2FsZS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5zY2FsZS5oZWln
aHQoKSkpOwogCi0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBnZW9tZXRy
eSA9IFNWR0ZpbHRlckdlb21ldHJ5OjpjcmVhdGUoZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJEYXRh
LmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwgcmVuZGVyZXIub2JqZWN0Qm91
bmRpbmdCb3goKSwgZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVy
RGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmls
dGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RG
TW92ZShnZW9tZXRyeSkpOworICAgIAorICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRh
LnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNC
dWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3Vy
Y2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVz
b3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwOCwyNyAr
MjA5LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3Vu
ZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0aENv
bnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQo
KSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGluZ0Jv
eCgpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmli
dXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZChSZW5kZXJPYmplY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwot
Ci0gICAgTE9HKEZpbHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVB
dHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZvciAo
Y29uc3QgYXV0byYgb2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1h
cCkgewogICAgICAgICBjb25zdCBhdXRvJiBmaWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0YVBh
aXIudmFsdWU7CiAgICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpC
dWlsdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIq
IGJ1aWxkZXIgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJFZmZl
Y3QqIGVmZmVjdCA9IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAgICAg
aWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gU2luY2UgYWxs
IGVmZmVjdHMgc2hhcmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAgIC8v
IG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0dmUt
PnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3Qp
OwotCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAg
IG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVw
YWludEludmFsaWRhdGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDhjZTBjN2FiYzE0M2Jk
YjY1Mzg1MGM5M2UzMjkyYWM5ZGE0OWJiYzcuLjcxZTRkMWYzNDZjMzI2MmQ3ZjRlMDMzYzRjM2Y4
MTljMjhjMTgxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRl
ci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdVbml0VHlw
ZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgpAQCAtNDMsOCArNDIsNyBAQCBwdWJsaWM6CiAKICAgICBGaWx0ZXJEYXRhKCkgPSBkZWZhdWx0
OwogCi0gICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxT
VkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyOworICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlcjsKICAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3ND
b250ZXh0KiBzYXZlZENvbnRleHQgeyBudWxscHRyIH07CiAgICAgQWZmaW5lVHJhbnNmb3JtIHNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOwpAQCAtNzIsOCArNzAsNiBAQCBwdWJsaWM6CiAKICAg
ICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVy
cmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1p
dGl2ZXMoU1ZHRmlsdGVyJikgY29uc3Q7Ci0KICAgICBpbmxpbmUgU1ZHVW5pdFR5cGVzOjpTVkdV
bml0VHlwZSBmaWx0ZXJVbml0cygpIGNvbnN0OwogICAgIGlubGluZSBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGRlNDkzMjgy
NjNkMDYyYTIzNWJjZDJmNDY2N2VlZjA5YzEyZWIzYjMuLjZmNzZmMjBjOWM5ZGNkYTUyMTIwNTMy
NzQwNmE4ZWM0MWE5MzBmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5o
IgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
ICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpA
QCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3hJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoRWxl
bWVudC5oIgpAQCAtNDMxLDEzICs0MzMsOSBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWlu
ZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAg
ICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci5wcmlt
aXRpdmVVbml0cygpKTsKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcg
YSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAg
ICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZH
RmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBk
dW1teVJlY3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1aWxk
UHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxGaWx0
ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQo
KSkpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRz
KTsKLQotICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXIt
Pmxhc3RFZmZlY3QoKSkKLSAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzKTsKKyAgICAgICAgICAgIGR1bW15RmlsdGVyLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VU
eXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewogICAgICAgICBjb25zdCBhdXRvJiBjbGlw
cGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyJj4ocmVzb3Vy
Y2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0
MTgwMGY3OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2NDMxZjY4Ni4uOWIxM2U2NTUzNDliNDA4ZTk4ZTA0
MDBkNzQzZTIxZDYzMDc4YTUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
QmxlbmRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCkBAIC0xMDAsMjAgKzEwMCwxNSBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBj
b25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAg
IGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjIoKSk7CiAKICAgICBpZiAoIWlu
cHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZm
ZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9kZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRF
ZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0
MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZm
ZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgRkVCbGVuZDo6Y3JlYXRl
KG1vZGUoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIx
NmUwYjk0MWZjOGIwNmRlYzY2Li5iYzk1YmM5MjVjZDAzNTcxNDc0ZWMyZjcyNTg1NDZkZmU0M2Q3
NjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjksNyArNjks
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKICAgICBi
b29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCAwNTI0ODU3OGMyNzRjOGZhMmIzZTFmMjQ0ZTQzNjc4
NjhmNDJiYTljLi5lODY4NTI3MDczODgwMjY2NTE4MzgzNmQ0OTMzMTFhMTM0ZmY5ZjI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKQEAgLTEw
MCwxMiArMTAwLDExIEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAor
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxk
ZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEo
KSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPGZsb2F0PiBmaWx0ZXJWYWx1ZXM7CiAgICAgQ29sb3JN
YXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBlKCk7CkBAIC0xMzUsMTUgKzEzNCwxMyBAQCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciogZmlsdGVyQnVpbAogICAgICAgICBpZiAoKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWCAmJiBzaXplICE9IDIwKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5
cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSAmJiBzaXplICE9IDEpCiAgICAgICAg
ICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUgJiYgc2l6
ZSAhPSAxKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgCiAgICAgICAgIGZpbHRlclZhbHVlcyA9IHZhbHVlcygpOwogICAgICAg
ICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVy
VmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAg
cmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVy
VHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMpKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9
IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3YWIxOThiMTJlNzdiZTIw
NmI5YzVjNDEwMjNmZC4uMWJlYzU0MzdhNmUwZGY1NGVlNDc1N2I5YmIwNzQzZmExOThhNjlkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKQEAgLTg2
LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmluZGV4IDkwYTU1YjdlZmZmN2EzZmU2MDZhOWUwNTc5
YTc2ZWRlOWY5NjgwMTEuLjA3NWNjYTM1YzUyNjkwOTQ3MjM1ZTg4NTc2OTgyNDc2MDJjNWZjZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmNwcApAQCAtNjMsMTIgKzYzLDExIEBAIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShu
YW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgCisgICAgYXV0byBpbnB1
dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVu
OwpAQCAtODYsOSArODUsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdAogICAgICAgICAgICAg
YWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rp
b24oKTsKICAgICB9CiAgICAgCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
LCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYw
OWVkYWM2ZThiOTkzYTRkZDU0ODYzLi43OTM3MTE2ZDM0YzdhNzViZTQzYmViMzVmMGMzMTQ5NGU1
NzJjM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9z
aXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUyMDVhYzk4MjM1Li40MzYz
ODBiMDkxMmI5YTliN2E3NzcxYjI0OGYxN2E5OTA1NDU3NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtNDAsNyArNDAsNyBAQCBpbmxpbmUg
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwg
JlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0
cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQ6Om1faW4yPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3Bl
cnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUsICZTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgRkVDb21wb3Np
dGVPcGVyYXRvciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21wb3NpdGVPcGVyYXRvcj4o
KTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6
azFBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2sxPigpOwogICAgICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0dHIsICZTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6Om1fazI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVy
UHJvcGVydHk8U1ZHTmFtZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMz4o
KTsKQEAgLTU2LDkgKzU2LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGEKIHZvaWQgU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6
b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgcHJvcGVydHlW
YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+Ojpmcm9tU3Ry
aW5nKHZhbHVlKTsKKyAgICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBwcm9wZXJ0eVZhbHVlID0g
U1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUp
OwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJh
dG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4ocHJvcGVydHlW
YWx1ZSk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJu
YWw8RkVDb21wb3NpdGVPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QKIHsKICAg
ICBGRUNvbXBvc2l0ZSogY29tcG9zaXRlID0gc3RhdGljX2Nhc3Q8RkVDb21wb3NpdGUqPihlZmZl
Y3QpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAg
ICByZXR1cm4gY29tcG9zaXRlLT5zZXRPcGVyYXRpb24oc3ZnT3BlcmF0b3IoKSk7CisgICAgICAg
IHJldHVybiBjb21wb3NpdGUtPnNldENvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9y
KCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQogICAgICAgICByZXR1
cm4gY29tcG9zaXRlLT5zZXRLMShrMSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmsyQXR0cikKQEAgLTEzMSwyMCArMTMxLDE1IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4yKCkpOwotICAgIAorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MigpKTsKKwogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRlciwgc3Zn
T3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZm
ZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEp
OwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVj
dDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IEZFQ29tcG9zaXRlOjpjcmVh
dGUoY29tcG9zaXRlT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSksIHsgeyAqaW5w
dXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgxYTc4Yzg2NTdhMGZhMzA0NGRmNWI3YzVhMDgwZDZl
Nzc5NzIyZjYuLmY1MTAwMWUyMGQ3MDRkZDg2ODMxNmI4ZDMwYjJhMjBkOTg0OTQ1YzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKQEAgLTI3LDE1ICsyNywx
NSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1pbmxpbmUgdW5zaWduZWQg
U1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEV4cG9zZWRF
bnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Citp
bmxpbmUgdW5zaWduZWQgU1ZHSURMRW51bUxpbWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6aGln
aGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklU
SE1FVElDOyB9CiAKIHRlbXBsYXRlPD4KLXN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3Np
dGVPcGVyYXRpb25UeXBlPiB7CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVP
cGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1
cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsKLSAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3Ip
IHsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfT1ZFUjoKQEAgLTU4LDcgKzU4LDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+IHsKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAg
fQogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBGRUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3ZlciIp
CiAgICAgICAgICAgICByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1LDcg
Kzg1LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4x
LT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFN0cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2lu
Mi0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09wZXJh
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdPcGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBvc2l0
ZU9wZXJhdGlvblR5cGU+KCk7IH0KKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZhbHVl
PEZFQ29tcG9zaXRlT3BlcmF0b3I+KCk7IH0KICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJu
IG1fazEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVybiBt
X2syLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9r
My0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgU1ZH
QW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBTVkdB
bmltYXRlZFN0cmluZyYgaW4yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMjsgfQotICAgIFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2Z09w
ZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0b3JB
bmltYXRlZCgpIHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRl
ZE51bWJlciYgazFBbmltYXRlZCgpIHsgcmV0dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRlZE51
bWJlciYgazJBbmltYXRlZCgpIHsgcmV0dXJuIG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51bWJl
ciYgazNBbmltYXRlZCgpIHsgcmV0dXJuIG1fazM7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMiB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdP
cGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9PVkVSKSB9OworICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2Nv
bXBvc2l0ZU9wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZF
Q09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X2sxIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmlt
YXRlZE51bWJlcj4gbV9rMiB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazMgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRl
KHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRs
CmluZGV4IDc4ZTQwMjA3ZjViMDJmNjcwZjA0MGIyOTM3NWVhZDdjMmI0NTJkZTAuLmZjNjcwYzll
YzU2YzQxYzEwOTI4NTQ4NDI3YzVmNmE4ZTE4NWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsCkBAIC0zOCw3ICszOCw3IEBACiAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBpbjE7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4yOwotICAgIFtJbXBsZW1lbnRlZEFz
PXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBv
cGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRBcz1jb21wb3NpdGVPcGVyYXRvcl0gcmVhZG9ubHkg
YXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgazE7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgazI7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkTnVtYmVyICAgICAgazM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAppbmRleCBmNzUwNTgxNWRlY2FiYjRlYTM0YjQzNWI0
N2VhNWE4MGM2YTI2ZGYxLi4zYjQ2NTQwZjdlZTFjNDEwZmI4YjczNmFlNDIzNDAwODE2NzE2ODMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHAKQEAgLTE5MSwxMiArMTkxLDExIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaW50IG9yZGVyWFZhbHVlID0gb3Jk
ZXJYKCk7CiAgICAgaW50IG9yZGVyWVZhbHVlID0gb3JkZXJZKCk7CkBAIC0yMDYsMjIgKzIwNSwy
MiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgIH0KICAgICAvLyBTcGVjIHNheXMgb3Jk
ZXIgbXVzdCBiZSA+IDAuIEJhaWwgaWYgaXQgaXMgbm90LgogICAgIGlmIChvcmRlclhWYWx1ZSA8
IDEgfHwgb3JkZXJZVmFsdWUgPCAxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICBhdXRvJiBrZXJuZWxNYXRyaXggPSB0aGlzLT5rZXJuZWxNYXRyaXgo
KTsKICAgICBpbnQga2VybmVsTWF0cml4U2l6ZSA9IGtlcm5lbE1hdHJpeC5pdGVtcygpLnNpemUo
KTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoaXMgaXMgYSByZXF1aXJlbWVudCwgYW5kIHNob3Vs
ZCBiYWlsIG91dCBpZiBmYWlscwogICAgIGlmIChvcmRlclhWYWx1ZSAqIG9yZGVyWVZhbHVlICE9
IGtlcm5lbE1hdHJpeFNpemUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgaW50IHRhcmdldFhWYWx1ZSA9IHRhcmdldFgoKTsKICAgICBpbnQgdGFy
Z2V0WVZhbHVlID0gdGFyZ2V0WSgpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRh
cmdldFhBdHRyKSAmJiAodGFyZ2V0WFZhbHVlIDwgMCB8fCB0YXJnZXRYVmFsdWUgPj0gb3JkZXJY
VmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRYID0gZmxvb3Ig
KCBvcmRlclggLyAyICkpCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhB
dHRyKSkKICAgICAgICAgdGFyZ2V0WFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob3Jk
ZXJYVmFsdWUgLyAyKSk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0
dHIpICYmICh0YXJnZXRZVmFsdWUgPCAwIHx8IHRhcmdldFlWYWx1ZSA+PSBvcmRlcllWYWx1ZSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRo
ZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXM6IHRhcmdldFkgPSBmbG9vciAoIG9yZGVy
WSAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpKQog
ICAgICAgICB0YXJnZXRZVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlcllWYWx1
ZSAvIDIpKTsKQEAgLTIzNCwxMSArMjMzLDExIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAg
ICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUgPSAxOwogICAgIH0KICAgICBpZiAoa2VybmVs
VW5pdExlbmd0aFhWYWx1ZSA8PSAwIHx8IGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUgPD0gMCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBmbG9hdCBk
aXZpc29yVmFsdWUgPSBkaXZpc29yKCk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
ZGl2aXNvckF0dHIpICYmICFkaXZpc29yVmFsdWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZp
c29yQXR0cikpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXJuZWxNYXRyaXhTaXpl
OyArK2kpCiAgICAgICAgICAgICBkaXZpc29yVmFsdWUgKz0ga2VybmVsTWF0cml4Lml0ZW1zKClb
aV0tPnZhbHVlKCk7CkBAIC0yNDYsOSArMjQ1LDE4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
CiAgICAgICAgICAgICBkaXZpc29yVmFsdWUgPSAxOwogICAgIH0KIAotICAgIGF1dG8gZWZmZWN0
ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgSW50U2l6ZShvcmRlclhWYWx1ZSwg
b3JkZXJZVmFsdWUpLCBkaXZpc29yVmFsdWUsIGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZhbHVl
LCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9kZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhY
VmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1h
dHJpeCk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0
dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geworICAgICAgICBGRUNvbnZvbHZlTWF0cml4OjpjcmVh
dGUoCisgICAgICAgICAgICBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksCisgICAg
ICAgICAgICBkaXZpc29yVmFsdWUsCisgICAgICAgICAgICBiaWFzKCksCisgICAgICAgICAgICBJ
bnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksCisgICAgICAgICAgICBlZGdlTW9k
ZSgpLAorICAgICAgICAgICAgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJu
ZWxVbml0TGVuZ3RoWVZhbHVlKSwKKyAgICAgICAgICAgIHByZXNlcnZlQWxwaGEoKSwKKyAgICAg
ICAgICAgIGtlcm5lbE1hdHJpeCksCisgICAgICAgIHsgeyAqaW5wdXQxIH0gfQorICAgIH07CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJh
OTViOGQ5MDQ5YjMzOS4uMTg3MDZkYTczNWZkMmE3NzhmN2YxODU4NzZmNzQ4Zjg0Y2ExZjBjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgK
QEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0
ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5OTU3ZTZl
MjFkNmJmMmExMGM0NTRiZGQ1Li5iOWMxYjNhMjk3NjgzZGY5ODA0ZmM2OTEyNzVlMDYwN2ZiNmM3
NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcApAQCAtODksMTQgKzg5LDE0IEBAIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsCiAg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAg
ICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHls
ZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxl
KCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0
TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNl
dENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJm
YWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJmYWNl
U2NhbGUoc3VyZmFjZVNjYWxlKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlm
ZnVzZUNvbnN0YW50QXR0cikKICAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0RGlm
ZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNl
ID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRTb3VyY2Uo
KSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oZGlm
ZnVzZUxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAgICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxp
Z2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwog
ICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwogCkBAIC0xNTEsMjggKzE1MSwyNSBAQCB2b2lkIFNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChj
b25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBj
b25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxp
Z2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0g
ICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1
aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNl
KGJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9y
QnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRp
bmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0
ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5l
bFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2Up
KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4g
ZWZmZWN0OworICAgIHJldHVybiB7IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1
cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2Vy
bmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpLCB7IHsgKmlucHV0MSB9IH0g
fTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAu
LjliMzRhYTcyMmIwNGQ1NDFhZDY0OTc4MGUzYWNmNDBkNTExMDFkNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVh
dGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5jcHAKaW5kZXggMGM1ZTgyNWJjODI1NjBmMzZhMjY5ZWE2ZDcyMmRmZDA1MTcz
ZDhjMi4uYzllZDJmNTI3MGYwMmZkNzc3ODg1MGVmZWZhN2U3MTMwYTRlMmUzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKQEAg
LTExNSwyMCArMTE1LDE1IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOCiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkp
OwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRl
ciwgeENoYW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAg
IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0
cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAot
ICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBG
RURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxl
Y3RvcigpLCBzY2FsZSgpKSwgeyB7ICppbnB1dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgK
aW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uMGU1OTNkZDBk
YTI0NjAzMDllMWVjNjgxNjFhODE3NzE0OWI0MGY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0
ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50LmNwcAppbmRleCBhNjg2YmI4ZmEzOGQ5ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZmMmY3Li45
MTZmMDNjMGY5MTU3ZWM4MjhjOTJlOTliNjNiZDYyMmU5NTI2YTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcApAQCAtMzYsNyArMzYsNyBA
QCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50PiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRT
b3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6
bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IERpc3RhbnRMaWdodFNvdXJjZTo6Y3JlYXRlKGF6aW11dGgoKSwgZWxldmF0aW9uKCkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCmluZGV4IGZi
ZGY3MWMwZWNiZDlmOTk3ZDY5ZWE2NTRiOWY1YmEwMzE3ZDcxY2MuLmJiYmZlOTQ3MzliNDQzOWMw
NjA2YmMxMzg4ZWQ4MGY3MjI3MjU4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNv
bnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0
KHNpemVvZihTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxl
bWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAKaW5kZXggMjJiY2UxZDMzMzE3Yzk1NzFmZTVkNzlmNGIzMjZhODliZmM1YjY4MS4uNjM0NzEw
OGYyNmJiOGE1MzhlYTY5M2UxMzA3ZWYxMDRmOGQ0MmE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAtOTcsMjcgKzk3LDI1IEBAIHZvaWQg
U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRl
ckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRHJvcFNoYWRvd0VsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7CisgICAgYXV0byBp
bnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBpZiAoIWlucHV0MSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3Rk
RGV2aWF0aW9uWSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpOwogICAgIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsK
ICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICBhdXRv
IGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGlmICgh
aW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVE
cm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblko
KSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVEcm9w
U2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5
KCksIGNvbG9yLCBvcGFjaXR5KSwgeyAqaW5wdXQxIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1
OGU3MTJiNjIxYjhjYmU0MmY3NDUxZC4uMWM2ZTEyMjAwYzBiMDdhNTY1OTQwMDVmZDNjNDEyNmEy
ZTZkZWM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
CkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVG
bG9vZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNw
cAppbmRleCBjMjI4ZTIyZDU2NWQwZTE2M2ZmODdkMGI0YmNhYmQyMjQ0NzU4ZmMyLi5mMmZhOGQ1
NDBhOGQxMGM5OTBlNGRlNzRiNmRkNGJhYWYwMGE4MTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUZsb29kRWxlbWVudC5jcHAKQEAgLTU4LDE4ICs1OCwxOCBAQCBib29sIFNWR0ZFRmxvb2RF
bGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNv
bnN0IFF1YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAg
cmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5z
dHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7
CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAgcmV0
dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBvcGFjaXR5KTsKKyAgICByZXR1cm4g
eyBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcy
NDhhMWI2ZjVjZjUxZmVlOTExLi40ZjAzYTc2NWM5ODcyODUzZjkzZjVhMmY4MDBkZjI2MjU1YzNl
NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAtMzYsNyArMzYs
NyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVn
aXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAogICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlS
ZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIx
OTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4uYmU4MjA2YTRiN2Q1YzhiZjU2YWJhYmRjYzE1
MDk5MDc1MjhiNzYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudC5jcHAKQEAgLTk1LDE4ICs5NSwxNiBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxk
ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkg
PCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3Jl
YXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBl
ZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25Y
KCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBk
ODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi5iNWY2MmQ0YTAzYjNjMTg4
Yjg1YzgyNjMxMzY2MDE4ZTUyM2IxMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3By
b3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9p
bjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgx
MTk1ZDNjMjdlYzRmLi4xOTM0MDg3MjIzYzk1M2MwNDUxYjRmMGM2ZmY4OGRhYzY2MDU5Zjg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSAiU1ZH
UmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3NCwxNiArMTc1LDQ0IEBAIHZvaWQgU1ZHRkVJbWFn
ZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xv
YWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRS
ZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdGRUltYWdlRWxlbWVudDo6
aW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hlZEltYWdlKQot
ICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKGZpbHRlciwgbV9jYWNoZWRJ
bWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSwgcHJlc2VydmVBc3BlY3RSYXRpbygp
KTsKLQogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJv
bUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgpKTsKKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+
KHRhcmdldC5lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBpZiAoaXNE
ZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJ
UmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRp
bygpKTsKKyAgICBhdXRvIGNvbnRleHROb2RlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdFbGVt
ZW50Pih0YXJnZXQuZWxlbWVudCk7CisgICAgYXV0byByZW5kZXJlciA9IGNvbnRleHROb2RlLT5y
ZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBzcmNSZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzcmNS
ZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBjb250ZXh0ID0gaW1h
Z2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgtc3JjUmVjdC5sb2Nh
dGlvbigpKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Cisg
ICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAq
cmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7CisKKyAgICByZXR1cm4gaW1hZ2VCdWZm
ZXI7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
Y29uc3QKK3sKKyAgICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIHsgRkVJbWFn
ZTo6Y3JlYXRlKFJlZjxJbWFnZT4geyAqbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihy
ZW5kZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpLCB7IH0gfTsKKworICAgIGlmIChh
dXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJu
IHsgRkVJbWFnZTo6Y3JlYXRlKGltYWdlQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSksIHsgfSB9OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBTVkdG
RUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVS
TD4mIHVybHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmluZGV4
IGQ5M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjA1YmVmOWFmMTM5YmQ2
MDQ2ZmRiNmU4YjhlNjJkM2FhZjUxMTM4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5oCkBAIC01NSw3ICs1NSw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlz
aEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyRm9yRWZmZWN0KCkgY29uc3Q7CisgICAgCisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBj
bGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKaW5kZXggY2QwYmZiOWVkY2Zk
N2I0ZTFhZjM5YjU1ZWRiYmJkNzg0YWFlYTg5ZC4uMWNiMjdkZjMxNTA0MDE3YzY5OWUwMTBjZWQ0
YjBkNWQ2MDBiYzYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKQEAg
LTMyLDcgKzMyLDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZFTGlnaHRF
bGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
U1ZHRkVMaWdodEVsZW1lbnQpOwogcHVibGljOgotICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNl
PiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
UmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3QgPSAwOwogICAgIHN0YXRpYyBTVkdGRUxpZ2h0RWxlbWVudCogZmluZExpZ2h0RWxlbWVudChj
b25zdCBTVkdFbGVtZW50Kik7CiAKICAgICBmbG9hdCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4g
bV9hemltdXRoLT5jdXJyZW50VmFsdWUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdl
RWxlbWVudC5jcHAKaW5kZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2Rk
Ni4uNWQ3ZDcwY2RjZTYwMWU0Mjg2YmQ3NWVhM2Y2MjIwYTQ1ZmQ5YTJmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAj
aW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVp
bGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KIApAQCAtNDUsMjQgKzQ0LDIyIEBAIFJlZjxTVkdGRU1lcmdlRWxlbWVudD4gU1ZH
RkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAor
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBh
dXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlucHV0czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2Rl
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAg
ICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VO
b2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGJ1aWxkZXIubmFtZWRFZmZl
Y3QobWVyZ2VOb2RlLmluMSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZSht
ZXJnZUVmZmVjdCkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbWVyZ2VJbnB1
dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIG1l
cmdlSW5wdXRzLnNocmlua1RvRml0KCk7Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJl
dHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVNZXJnZTo6Y3JlYXRlKG1lcmdlSW5wdXRzLnNp
emUoKSksIFdURk1vdmUobWVyZ2VJbnB1dHMpIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4MDJkMjgz
Y2Y0ZTNjMi4uNTVhNjExZjA3ODhlMDc0MmI1YjNiYjE4Y2FkYWZlMTU4MzhjNzAyMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAgcHJpdmF0
ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5
PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+
OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IGQ2ZmI5
NWM4ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQxNzk1ZDMyMWIuLjI5YmI1OWQ3MWY1N2E0NzJlMzMw
ZTFmMjhlNDUxYThmMmM3YjczZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5lIFNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmEKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9w
ZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9pbjE+KCk7
Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9w
ZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgJlNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVy
UHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yLCAmU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudDo6bV9tb3JwaG9sb2d5T3BlcmF0b3I+KCk7CiAgICAgICAgIFBy
b3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OnJhZGl1c0F0dHIsICZT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1gsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjptX3JhZGl1c1k+KCk7CiAgICAgfSk7CiB9CkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVzKGZsb2F0IHgsIGZsb2F0IHkpCiB2b2lkIFNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVz
OjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0
eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21T
dHJpbmcodmFsdWUpOworICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3IgcHJvcGVydHlWYWx1ZSA9
IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUp
OwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJh
dG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlW
YWx1ZSk7CisgICAgICAgICAgICBtX21vcnBob2xvZ3lPcGVyYXRvci0+c2V0QmFzZVZhbEludGVy
bmFsPE1vcnBob2xvZ3lPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTg1LDcgKzg1LDcgQEAgYm9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnMKIHsKICAg
ICBGRU1vcnBob2xvZ3kqIG1vcnBob2xvZ3kgPSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihl
ZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAg
ICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9y
KCkpOworICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKG1v
cnBob2xvZ3lPcGVyYXRvcigpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1
c0F0dHIpIHsKICAgICAgICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBl
dmFsdWF0ZWQgc2VwYXJhdGVseS4KICAgICAgICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9y
cGhvbG9neS0+c2V0UmFkaXVzWChyYWRpdXNYKCkpOwpAQCAtMTE0LDIxICsxMTQsMTggQEAgdm9p
ZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRv
IGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0
IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQor
ICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFp
bnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCisg
ICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKKyAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVz
WSgpOwogICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9y
cGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7
Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICByZXR1cm4geyBGRU1vcnBob2xvZ3k6OmNyZWF0ZShtb3JwaG9sb2d5T3BlcmF0
b3IoKSwgeFJhZGl1cywgeVJhZGl1cyksIHsgeyAqaW5wdXQxIH0gfSB9OwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li4zZDcy
N2EzZjUwYjYwNzViNTVjZmMwMzQzZWMzOTEzMjk5MWRhYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI2LDEyICsyNiwxMiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xv
Z3lPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyBy
ZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQogCi0gICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQogICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJh
dG9yKSB7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046CiAgICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREU6CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogICAgIH0KIAotICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIGZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yIGZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAi
ZXJvZGUiKQogICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERTsK
QEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSYWRpdXMoZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4g
bV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBzdmdP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlPigpOyB9CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xv
Z3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yLT5jdXJyZW50
VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFkaXVzWC0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCByYWRpdXNZ
KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNZLT5jdXJyZW50VmFsdWUoKTsgfQogCiAgICAgU1ZH
QW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KLSAgICBTVkdB
bmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9zdmdP
cGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIG1vcnBob2xvZ3lPcGVyYXRv
ckFuaW1hdGVkKCkgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7IH0KICAgICBTVkdBbmlt
YXRlZE51bWJlciYgcmFkaXVzWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yYWRpdXNYOyB9CiAgICAg
U1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1lBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWTsg
fQogCkBAIC04MSwxMSArODEsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
LCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdp
c3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0Fu
aW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlz
LCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+IG1fbW9ycGhvbG9neU9wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhp
cykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWSB7IFNWR0FuaW1hdGVk
TnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5pZGwKaW5kZXggYTJjMTgxZjJlNjM3Y2QzOTA5OGViZTY5ZTYwOThh
YmUzYzM4NWNkMS4uMmQyMWYyYTFkODg4ZDAyZWMxNzlkZjEwZTJkZTQzZmM2NTI5N2Q1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbApAQCAtMzMs
NyArMzMsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNWR19NT1JQSE9MT0dZX09QRVJB
VE9SX0RJTEFURSAgID0gMjsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0
cmluZyAgICAgIGluMTsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkg
YXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVu
dGVkQXM9bW9ycGhvbG9neU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRO
dW1iZXIgICAgICByYWRpdXNYOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51
bWJlciAgICAgIHJhZGl1c1k7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uODdi
YTM4N2IzNTA1ODFlZmZkNDM2ZDA1ZDNiNDBlNGM1NmVlNDc3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKQEAgLTgxLDE2ICs4MSwxMyBAQCB2b2lkIFNWR0ZF
T2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVp
bGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIu
bmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVPZmZzZXQ6
OmNyZWF0ZShmaWx0ZXIsIGR4KCksIGR5KCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkg
PSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVPZmZzZXQ6
OmNyZWF0ZShkeCgpLCBkeSgpKSwgeyB7ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJl
ZDQ2NWUzNWI1NzM3MDQ5YmVlLi5mZmExYzE2ODMzN2Y0NGM5NTIwMWI3MmU4OGMzMWZjNWJlNWYx
YTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRo
aXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAK
aW5kZXggOWZmODQ3MzM4YTFiNmE1NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uNjQwNjRmNWY2
ODA4NDk0Y2Y3YWIxMGRkMDE5YzBhYWQ2OTg5Y2RhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVk
ZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtMzksMTkgKzM4LDE5IEBAIFJlZjxTVkdGRVBv
aW50TGlnaHRFbGVtZW50PiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVBvaW50TGlnaHRFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29u
c3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2Uo
Y29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBvc2l0
aW9uOwotICAgIGlmIChidWlsZGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZl
cmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIAotICAgICAg
ICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lk
dGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJl
ZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RS
L1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cu
dzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAg
ICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1p
blhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3
b0Zsb2F0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgp
LCB5KCksIHooKSk7CisvLyAgICBpZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxv
YXRSZWN0IHJlZmVyZW5jZUJveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8v
ICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VC
b3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsg
eSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vCisvLyAgICAgICAgLy8gaHR0cHM6Ly93
d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQg
aHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJj
ZW50YWdlCisvLyAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShy
ZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVy
KCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlCisvLyAgICAgICAgcG9zaXRpb24g
PSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CiAgICAgCiAgICAgcmV0dXJuIFBvaW50TGln
aHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
UG9pbnRMaWdodEVsZW1lbnQuaAppbmRleCAzM2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0
NWU0OGRhNzllLi5jNDdhNjA1NmU4ODdkYTA4MWEwNGYzYjk1MmJkZTQ1YmNkYTlkOWY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMw
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdo
dFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0
U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVQb2ludExpZ2h0RWxlbWVudCkgPT0g
c2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCA5YjdjZTQwYWI5NzE2YWU0
ZjMzNWY1NGIyNGNkYTQ1OWE4NDI5YTU5Li43ZGY2NjJjNjczODFiMDFmYTQ1YWVmZTZmYjVmYjU4
MDNiZTcyODVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuY3BwCkBAIC05Niw3ICs5Niw3IEBAIGJvb2wgU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZm
ZWN0CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVy
LT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2
Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRp
bmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdo
dGluZy0+c2V0Q29sb3IoY29sb3IpOwogICAgIH0KICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnN1cmZhY2VTY2FsZUF0dHIpCiAgICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5z
ZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIGJvb2wg
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCogZWZmZWN0CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxh
ckV4cG9uZW50QXR0cikKICAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFNwZWN1
bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNl
ID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRpbmctPmxpZ2h0U291cmNl
KCkpOworICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNw
ZWN1bGFyTGlnaHRpbmctPnNvdXJjZSgpKTsKICAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCog
bGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7
CiAgICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7CiAKQEAgLTE2MCwyOCArMTYwLDI1IEBAIHZvaWQg
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5h
bWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGln
aHRFbGVtZW50KHRoaXMpOwogICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdo
dFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRv
IGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShidWlsZGVyKTsKIAotICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVu
ZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAogICAgIENvbG9yIGNvbG9yID0g
cmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0
eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBG
RVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwg
c3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhY
KCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAg
IHJldHVybiB7IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUo
KSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5n
dGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKSwgeyB7ICpp
bnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUxNTZkMWM3OWExZDNmZDhiMzExOGUy
YWI2M2I0N2IxNDYuLjIzNWJhMTI4YjI2ZGFkY2JkNzQ2YWFiZmZmZmZlYzE1MmRkMjFkNjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQu
aApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0
ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmNwcAppbmRleCBkNmRhMzEwNjRjYjFiMzdlOGNjOTM4NzRlYTRhYTljZjJk
ZmJmZmVlLi43NDEzMWY5MzRmY2MyMTJjMGNlODI1YTYwNjYwMjY5MzFjYzMzYWM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcApAQCAtMjEsNyArMjEs
NiBAQAogI2luY2x1ZGUgIlNWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTcG90TGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMzksMjcgKzM4LDI3IEBAIFJlZjxTVkdGRVNwb3RMaWdodEVs
ZW1lbnQ+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVTcG90TGlnaHRFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVt
ZW50OjpsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPExp
Z2h0U291cmNlPiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0Zp
bHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAg
ICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgp
OwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgp
ICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5j
ZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRl
IGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0
X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5j
ZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29y
bmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotCi0gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJl
bmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAg
ICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5j
ZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmls
dGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb2lu
dHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1p
blhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3
b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4
KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRY
KCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7Ci0gICAgfQorLy8KKy8vICAgIGlmIChmaWx0
ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVy
LnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJl
bmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkp
OworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
UG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRz
Lmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFoo
eigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJl
ZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vCisvLyAg
ICAgICAgcG9pbnRzQXQuc2V0WChyZWZlcmVuY2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZl
cmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gu
eSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBl
dWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNl
Qm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlIHsK
Ky8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAg
ICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQzRChwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBv
aW50c0F0WigpKTsKKy8vICAgIH0KIAogICAgIHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0
ZShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5n
bGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKaW5k
ZXggM2Y3NzE3YzEyNjVjNGYzMWY1MzA4ODY4ZDQ3Yzk3ODc5N2E3MzIxMS4uMDc0MzZjYzAxNjYz
YjUyMTU2MjRhNmUxMmQ3MTYwNjgxZTk2NTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwb3RMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNWR0ZFU3BvdExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3Qg
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1
OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi45OGYzN2FmODg2YjRmZGU2YWRkZmM3Nzhk
NzkzOTUxMjI5YWIzZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3Bw
CkBAIC03MCwxNiArNzAsMTMgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVU
aWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisg
ICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlu
cHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4g
eyBGRVRpbGU6OmNyZWF0ZSgpLCB7ICppbnB1dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEyMmRj
NDJhMzNhOTFmLi5iMGMxN2NjMjY1MGIyNTlhMjMxNTQyYjhiNTU4OWYwZDM1NjIzOWVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
U3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAppbmRleCAxMTU2MTEx
OWQ4M2UzZmM3ODhhNDJiMTQ4NjdjNjU2NDEyMzM0YTRkLi4xZDcyMzEwYjNlODM5ODI5NjY5YzY5
ZGM3NjRiZTdiYTIwNzg4MTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
dXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25z
CiB7CiAgICAgRkVUdXJidWxlbmNlKiB0dXJidWxlbmNlID0gc3RhdGljX2Nhc3Q8RkVUdXJidWxl
bmNlKj4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQot
ICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0VHlwZSh0eXBlKCkpOworICAgICAgICByZXR1
cm4gdHVyYnVsZW5jZS0+c2V0VHVyYnVsZW5jZVR5cGUodHlwZSgpKTsKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikKICAgICAgICAgcmV0dXJuIHR1cmJ1bGVu
Y2UtPnNldFN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpCkBAIC0xMTcsMTEgKzExNywxMSBAQCB2b2lkIFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJh
c2VGcmVxdWVuY3lZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
RkVUdXJidWxlbmNlOjpjcmVhdGUoZmlsdGVyLCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJh
c2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNW
R19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsg
RkVUdXJidWxlbmNlOjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVl
bmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENI
VFlQRV9TVElUQ0gpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3
NjllMTk4YS4uMDgwM2MxZTI5MmIzOGQ4MzAxN2VlYjkxMDYxMTA4MGEyMWRlYzc1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwot
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZH
QW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwCmluZGV4IDU1NzhiNTE5YTM2MjJiZDcwNmFkMjdiZmU0YzYwMDM5MTQ4NThj
YTAuLjljNDMxMTM0YTg3NzA0ZjA2NDlkOTIyYmE5NzE2MzZkZDI1ZTFjOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudElubGlu
ZXMuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5kZXgg
ZmY1MjIzMDk0NjZiMDQwYmVmMDg5ZDE1N2IzODZkZmZiYjA1YzYxOS4uNzcxYTQxNmVmMGVmMDU1
ODJkNzI5ODFhMzBjYzlkNjJlNjUyOWY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKQEAgLTI1
LDkgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTMsMjIgKzkxLDYg
QEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNoaWxkcmVuQ2hh
bmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2gKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzZXRTdGFuZGFyZEF0dHJpYnV0
ZXMoRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZpbHRl
ckVmZmVjdCk7Ci0gICAgaWYgKCFmaWx0ZXJFZmZlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0
LT5zZXRIYXNYKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkK
LSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNZKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzV2lk
dGgodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCi0g
ICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzSGVpZ2h0KHRydWUpOwotfQotCiBSZW5kZXJQdHI8
UmVuZGVyRWxlbWVudD4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjcmVh
dGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBv
c2l0aW9uJikKIHsKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmU+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgK
aW5kZXggYzk4YjEzZWQ5NjI3NmFmOWUxNGY2NDI4MTFhNmZkNzQ2NzcyYWNhNy4uNzI1YTg3MDE1
OThmYWZmYTZlZGJhYjAxNjEzMDA3NGFlNTQ3MmZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAt
MzYsMTIgKzM2LDYgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk7
CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0Kikg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7Ci0gICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0
aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgotICAgIHZpcnR1YWwg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3du
ZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0VsZW1l
bnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHgoKSBjb25zdCB7IHJldHVybiBtX3gt
PmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgU1ZHQW5p
bWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVkKCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICBT
VkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5pbWF0ZWQoKSB7IHJldHVybiBtX3Jlc3VsdDsgfQog
CisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAg
IC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUg
b2xkIG9uZS4KKyAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKwogcHJvdGVjdGVkOgogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYy
Mzk2Li43ZWU4OWNhNzIwZjhhMDBhYWI0YmYyNmFkMDAwZGJhZWMxN2UzOGFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAt
Myw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTMwICsyNCw4MSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFn
ZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAgLCBtX2ltYWdl
KGltYWdlKQotICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8p
CitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFNvdXJjZUltYWdlJiYgc291cmNlSW1hZ2Us
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykK
IHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2Up
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBm
aWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV90cmVlU2NvcGUoJnRyZWVT
Y29wZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJbWFnZTo6RkVJbWFnZShTb3VyY2VJbWFnZSYm
IHNvdXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZl
QXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVJbWFnZSkKKyAgICAsIG1f
c291cmNlSW1hZ2UoV1RGTW92ZShzb3VyY2VJbWFnZSkpCiAgICAgLCBtX3ByZXNlcnZlQXNwZWN0
UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6
OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorRmxv
YXRSZWN0IEZFSW1hZ2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0
ZXIsIGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7Ci19CisgICAgRmxvYXRSZWN0IGRyYXdp
bmdSZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOwogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUs
IGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2Uo
ZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKLX0KLQotdm9p
ZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0
IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKG1f
aW1hZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7Ci0gICAg
ICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVj
dCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRS
ZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0o
KS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLQot
ICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZl
Y3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7Ci19Ci0KLVJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3RyZWVTY29wZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9t
SVJJU3RyaW5nKG1faHJlZiwgKm1fdHJlZVNjb3BlKTsKLSAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+
KHRhcmdldC5lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRh
cmdldC5lbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmIChhdXRvKiBpbWFnZSA9IFdURjo6Z2V0
X2lmPFJlZjxJbWFnZT4+KG1fc291cmNlSW1hZ2UpKSB7CisgICAgICAgIGF1dG8gc3JjUmVjdCA9
IEZsb2F0UmVjdCB7IHsgfSwgKCppbWFnZSktPnNpemUoKSB9OworICAgICAgICBtX3ByZXNlcnZl
QXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkcmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oZHJhd2lu
Z1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVJbWFnZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQm
IHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5
cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdElt
YWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVU
cmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0gcmVzdWx0LnByaW1p
dGl2ZVN1YnJlZ2lvbigpOwogICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJl
cikKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVj
dChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXpl
KCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVj
dCwgc3JjUmVjdCk7Ci0gICAgfQotCi0gICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29s
dXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0
aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKLQotICAgIGF1dG8mIGNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRy
YW5zZm9ybSgpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7
Ci0KLSAgICAgICAgUmVmUHRyIGNvbnRleHROb2RlID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVu
ZGVyZXItPmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVM
ZW5ndGhzKCkpIHsKLSAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChj
b250ZXh0Tm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwog
Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSByZWZlcmVuY2luZyBhbiBlbGVtZW50IHdpdGggcGVy
Y2VudGFnZSB1bml0cywgZWcuIDxyZWN0IHdpdGg9IjMwJSI+IHRob3NlIHZhbHVlcyB3ZXJlIHJl
c29sdmVkIGFnYWluc3QgdGhlIHZpZXdwb3J0LgotICAgICAgICAgICAgLy8gQnVpbGQgdXAgYSB0
cmFuc2Zvcm1hdGlvbiB0aGF0IG1hcHMgZnJvbSB0aGUgdmlld3BvcnQgc3BhY2UgdG8gdGhlIGZp
bHRlciBwcmltaXRpdmUgc3VicmVnaW9uLgotICAgICAgICAgICAgaWYgKGxlbmd0aENvbnRleHQu
ZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmNvbmNhdENUTShtYWtlTWFwQmV0d2VlblJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHZp
ZXdwb3J0U2l6ZSksIGRlc3RSZWN0KSk7CisgICAgYXV0byBkcmF3U291cmNlSW1hZ2UgPSBXVEY6
Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAg
ICAgICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfTsKKyAg
ICAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRyYXdpbmdSZWN0
LCBzcmNSZWN0KTsKKyAgICAgICAgICAgIGRyYXdpbmdSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRv
QWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhkcmF3aW5nUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0
KCkpOworICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2UoaW1hZ2Us
IGRyYXdpbmdSZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFJl
ZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBzcmNSZWN0ID0gRmxv
YXRSZWN0IHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9OworICAgICAgICAgICAg
ZHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVz
KGRyYXdpbmdSZWN0LCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgICAgICAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3Qs
IHNyY1JlY3QpOwogICAgICAgICB9CisgICAgKTsKIAotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y29udGVudFRyYW5zZm9ybWF0aW9uOwotICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJTdWJ0cmVlVG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0
aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBXVEY6OnZpc2l0KGRyYXdTb3VyY2VJ
bWFnZSwgbV9zb3VyY2VJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZpbHRlclJlc3Vs
dCogRkVJbWFnZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
aWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIGNvbnRleHQuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVj
dCk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21l
dHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIEZsb2F0
U2l6ZSBpbWFnZVNpemU7Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIGltYWdlU2l6ZSA9IG1f
aW1hZ2UtPnNpemUoKTsKLSAgICBlbHNlIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmVm
ZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIGltYWdlU2l6ZSA9IGVuY2xvc2luZ0ludFJlY3Qo
cmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLnNpemUoKTsKKyAgICBh
dXRvIHNvdXJjZUltYWdlU2l6ZSA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25z
dCBSZWY8SW1hZ2U+JiBpbWFnZSkgeyByZXR1cm4gaW1hZ2UtPnNpemUoKTsgfSwKKyAgICAgICAg
WyZdKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7IHJldHVybiBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKTsgfQorICAgICk7CisKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXpl
ID0gV1RGOjp2aXNpdChzb3VyY2VJbWFnZVNpemUsIG1fc291cmNlSW1hZ2UpOworCiAgICAgdHMg
PDwgaW5kZW50IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBpbWFnZS1zaXplPVwi
IiA8PCBpbWFnZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1hZ2VTaXplLmhlaWdodCgpIDw8ICJc
Il1cbiI7CiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1bXAgYWxzbyBvYmplY3QgcmV0dXJu
ZWQgYnkgU1ZHRkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRj
ZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmViZjkzNGE0MjBjODRkYzVjOWM5NTBj
Yzg0MWEyZWI2MjMzMzcyZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDM2ICsy
OCwzMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3Mg
SW1hZ2U7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgVHJlZVNjb3BlOwogCiBjbGFzcyBG
RUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxGRUltYWdl
PiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHVzaW5nIFNvdXJj
ZUltYWdlID0gVmFyaWFudDxSZWY8SW1hZ2U+LCBSZWY8SW1hZ2VCdWZmZXI+PjsKKworICAgIHN0
YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlKFNvdXJjZUltYWdlJiYsIGNvbnN0IFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9
IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29w
ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwor
ICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJik7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFSW1hZ2UiOyB9CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KKyAgICAvLyBG
RUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKSBvdmVycmlkZSB7IH0KKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZW5k
ZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICBGaWx0ZXJSZXN1bHQq
IGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3Vu
ZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBmaW5hbDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBhcHBseVNv
ZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIC8vIG1fdHJlZVNjb3BlIHdpbGwgbmV2ZXIgYmUg
YSBkYW5nbGluZyByZWZlcmVuY2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTkyNDMKLSAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlIHsgbnVsbHB0ciB9Owot
ICAgIFN0cmluZyBtX2hyZWY7CisgICAgU291cmNlSW1hZ2UgbV9zb3VyY2VJbWFnZTsKICAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAK
aW5kZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNlNy4uMDMyZjQ3YTlj
M2U1NWM1YjdkNTI1YjhjMDQ1OTkyN2MzMzM5ZDVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjkgKzIzLDExNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVkZSAiRmlsdGVyT3V0
cHV0LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNvbHV0ZVRyYW5z
Zm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29sdXRlU291cmNl
RHJhd2luZ1JlZ2lvbikKLSAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdC
b3gpCi0gICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCi0gICAgLCBtX2VmZmVjdEJC
b3hNb2RlKGVmZmVjdEJCb3hNb2RlKQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVh
dGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQoreworICAgIEZpbHRlckVmZmVj
dFZlY3RvciBidWlsdGluRWZmZWN0czsKKyAgICBpZiAocHJldmlvdXNFZmZlY3QpCisgICAgICAg
IGJ1aWx0aW5FZmZlY3RzLmFwcGVuZChSZWY8RmlsdGVyRWZmZWN0PigqcHJldmlvdXNFZmZlY3Qp
KTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWx0aW5FZmZlY3RzLmFwcGVuZChTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKSk7CisgICAgYnVpbHRpbkVmZmVjdHMuYXBwZW5kKFNvdXJjZUFscGhhOjpjcmVh
dGUoKSk7CisKKyAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXV0byBbZmlsdGVy
RWZmZWN0cywgZXhwcmVzc2lvbl0gPSBidWlsZGVyLmJ1aWxkRWZmZWN0cyhmaWx0ZXJFbGVtZW50
LCBidWlsdGluRWZmZWN0cyk7CisgICAgaWYgKGZpbHRlckVmZmVjdHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZShidWlsdGlu
RWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIHJl
bmRlcmluZ01vZGUpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYg
ZXhwcmVzc2lvbiwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQoreworICAgIEZpbHRlckVm
ZmVjdFZlY3RvciBidWlsdGluRWZmZWN0cyA9IHsgU291cmNlR3JhcGhpYzo6Y3JlYXRlKCksIFNv
dXJjZUFscGhhOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZShidWlsdGlu
RWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIHJl
bmRlcmluZ01vZGUpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYg
ZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRl
cihXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92
ZShleHByZXNzaW9uKSwgcmVuZGVyaW5nTW9kZSkpOworfQorCitTVkdGaWx0ZXI6OlNWR0ZpbHRl
cihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9y
JiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihyZW5kZXJpbmdNb2RlLCBUeXBl
OjpTVkdGaWx0ZXIpCisgICAgLCBtX2J1aWx0aW5FZmZlY3RzKFdURk1vdmUoYnVpbHRpbkVmZmVj
dHMpKQorICAgICwgbV9maWx0ZXJFZmZlY3RzKFdURk1vdmUoZmlsdGVyRWZmZWN0cykpCisgICAg
LCBtX2V4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKK3sKKyAgICBBU1NFUlQobV9idWls
dGluRWZmZWN0cy5zaXplKCkgPT0gMik7CisgICAgQVNTRVJUKCFtX2ZpbHRlckVmZmVjdHMuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpOworfQorCitSZWY8
RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXI6OmluZGV4ZWRFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBl
IHR5cGUsIHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIG1fYWJzb2x1dGVGaWx0ZXJSZWdp
b24gPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlclJlZ2lvbik7CisgICAgaWYgKHR5
cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQorICAgICAgICByZXR1cm4g
bV9idWlsdGluRWZmZWN0c1swXTsKKworICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlw
ZTo6U291cmNlQWxwaGEpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzWzFdOworCisg
ICAgQVNTRVJUKGluZGV4IDwgbV9maWx0ZXJFZmZlY3RzLnNpemUoKSk7CisgICAgcmV0dXJuIG1f
ZmlsdGVyRWZmZWN0c1tpbmRleF07CiB9CiAKLUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZpbHRlcjo6bGFzdEVmZmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZWZmZWN0QkJv
eE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCk7
CisgICAgaWYgKG1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gPSBtX2V4cHJlc3Npb24ubGFzdCgpOwor
ICAgIHJldHVybiBpbmRleGVkRWZmZWN0KHR5cGUsIGluZGV4KTsKK30KKworRmlsdGVyUmVzdWx0
KiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBpZiAoIWxhc3RFZmZlY3QoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNl
SW1hZ2UgPSBzdGFjay50YWtlTGFzdCgpLT5pbWFnZUJ1ZmZlcigpOwogCi0gICAgcmV0dXJuIEZp
bHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJl
Z2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0
ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIGZvciAoYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA6IG1fZXhwcmVzc2lvbikg
eworICAgICAgICBhdXRvIGVmZmVjdCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOworICAg
ICAgICBhdXRvIGJvdW5kYXJ5U2V0ID0gZ2VvbWV0cnkuYm91bmRhcnlTZXQodHlwZSwgaW5kZXgp
OworCisgICAgICAgIGF1dG8gcmVzdWx0ID0gZWZmZWN0LT5hcHBseShvdXRwdXQsIHN0YWNrLCBz
b3VyY2VJbWFnZSwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBzdGFjay5hcHBlbmQoeyAq
cmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygpLmFkZChXVEZNb3ZlKGVmZmVjdCks
IFJlZjxGaWx0ZXJSZXN1bHQ+KCpyZXN1bHQpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoc3RhY2su
c2l6ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBy
ZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigpOwogfQogCi1SZWY8U1ZHRmlsdGVyPiBT
VkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IGJvb2wgZWZmZWN0QkJveE1vZGUpCitUZXh0U3RyZWFtJiBTVkdGaWx0ZXI6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihhYnNv
bHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGlu
Z0JveCwgZmlsdGVyUmVnaW9uLCBlZmZlY3RCQm94TW9kZSkpOworICAgIGF1dG8gZW5kID0gbV9l
eHByZXNzaW9uLnJlbmQoKTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fZXhwcmVzc2lvbi5yYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1dG8gW3R5cGUsIGluZGV4LCBsZXZl
bF0gPSAqaXQ7CisgICAgICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
QWxwaGEpCisgICAgICAgICAgICArK2l0OworCisgICAgICAgIGF1dG8gZWZmZWN0ID0gaW5kZXhl
ZEVmZmVjdCh0eXBlLCBpbmRleCk7CisgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGlu
ZGVudFNjb3BlKHRzLCBsZXZlbCk7CisgICAgICAgIGVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIH0KKworICAgIHJldHVybiB0czsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA4MDkzMTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVh
MGZiMTcwMGNmLi45OWZhMzEwMWU2NjljODRkY2Q0ZmE5ZjM5N2VjNmUwZWVlMDQ4MTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAt
MSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0MSArMjEsNDQgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1
ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworY2xh
c3MgU1ZHRmlsdGVyR2VvbWV0cnk7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBG
aWx0ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxTVkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sKTsKKyAg
ICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBSZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRmlsdGVyRWZmZWN0KiBw
cmV2aW91c0VmZmVjdCA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQ
dHI8U1ZHRmlsdGVyPiBjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywg
U1ZHRmlsdGVyRXhwcmVzc2lvbiYmLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBzdGF0aWMgUmVmUHRy
PFNWR0ZpbHRlcj4gY3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZlY3RzLCBG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYs
IFJlbmRlcmluZ01vZGUpOwogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bjsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdDsKIAotICAg
IEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplKSBjb25zdCBmaW5h
bDsKKyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGZpbHRlckVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlckVmZmVjdHM7IH0KKyAgICBjb25zdCBTVkdGaWx0ZXJFeHByZXNzaW9u
JiBleHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAKLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNv
dXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Citwcml2YXRlOgorICAgIFNWR0Zp
bHRlcihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVj
dG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmLCBSZW5kZXJpbmdNb2Rl
KTsKIAotICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CisgICAgUmVmPEZpbHRlckVmZmVjdD4gaW5kZXhlZEVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGUs
IHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsK
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3Rv
ciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBmaW5hbDsKKworICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIEZs
b2F0UmVjdCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV90
YXJnZXRCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsK
LSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Ci0gICAgYm9vbCBtX2VmZmVjdEJCb3hNb2Rl
OworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2J1aWx0aW5FZmZlY3RzOworICAgIEZpbHRlckVm
ZmVjdFZlY3RvciBtX2ZpbHRlckVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4
cHJlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQotICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmls
dGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBm
aWx0ZXIpIHsgcmV0dXJuIGZpbHRlci50eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA9PSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyOyB9CiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDk2ZjNhODA1MDQyOTU1NTgxMDM0
ZDk4YTRmZGFjNGVhZjMwODdiOTQuLmFjYWQwNDZkODI3MmFmYWI5Yzc2ODhlOTk0OTMxZGU5NDIx
ZDk2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDg3ICsyMSwxMzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNp
bmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVy
RWZmZWN0PiBzb3VyY2VHcmFwaGljKQorc3RkOjp0dXBsZTxGaWx0ZXJFZmZlY3RWZWN0b3IsIFNW
R0ZpbHRlckV4cHJlc3Npb24+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0
ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0
aW5FZmZlY3RzKQogewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVm
ZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291
cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgqc291cmNlR3JhcGhp
YykpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENo
aWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHNldHVwQnVpbHRpbkVmZmVjdHMoYnVpbHRpbkVmZmVjdHMpOworCisgICAgRmlsdGVyRWZm
ZWN0c0lucHV0cyBlZmZlY3RzSW5wdXRzOworICAgIGlmICghYnVpbGRFZmZlY3RzKGZpbHRlckVs
ZW1lbnQsIGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFi
dWlsZEV4cHJlc3Npb24oZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICByZXR1cm4geyBXVEZNb3ZlKG1fZmlsdGVyRWZmZWN0cyksIFdURk1vdmUobV9leHByZXNzaW9u
KSB9OworfQorCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cykKK3sKKyAgICBtX2J1aWx0aW5F
ZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIGJ1aWx0aW5FZmZlY3RzWzBd
KTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBi
dWlsdGluRWZmZWN0c1sxXSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1
aWxkZXI6OnNvdXJjZUdyYXBoaWMoKSBjb25zdAoreworICAgIHJldHVybiBtX2J1aWx0aW5FZmZl
Y3RzLmdldChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkpOwogfQogCi12b2lkIFNWR0ZpbHRl
ckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZWZmZWN0KQorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlQWxw
aGEoKSBjb25zdAogewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZm
ZWN0ID0gZWZmZWN0OworICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChTb3VyY2VBbHBo
YTo6ZWZmZWN0TmFtZSgpKTsKK30KKwordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVm
ZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCit7
CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVj
dC5wdHIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2J1aWx0aW5FZmZl
Y3RzLmNvbnRhaW5zKGlkKSkKKyAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhuYW1l
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0OwotICAgIG1f
bmFtZWRFZmZlY3RzLnNldChpZCwgbV9sYXN0RWZmZWN0KTsKKyAgICBtX2xhc3RFZmZlY3QgPSBl
ZmZlY3QucHRyKCk7CisgICAgbV9uYW1lZEVmZmVjdHMuc2V0KG5hbWUsIFdURk1vdmUoZWZmZWN0
KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVj
dEJ5SWQoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKSBjb25z
dAogewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZl
Y3Q7CiAKLSAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKSk7CisgICAgICAgIHJldHVybiBzb3VyY2VHcmFwaGljKCk7CiAgICAgfQog
Ci0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAgICByZXR1cm4g
bV9idWlsdGluRWZmZWN0cy5nZXQoaWQpOworICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRh
aW5zKG5hbWUpKQorICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQobmFtZSk7CiAK
LSAgICByZXR1cm4gbV9uYW1lZEVmZmVjdHMuZ2V0KGlkKTsKKyAgICByZXR1cm4gbV9uYW1lZEVm
ZmVjdHMuZ2V0KG5hbWUpOwogfQogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVj
dFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGVmZmVjdCwgUmVuZGVy
T2JqZWN0KiBvYmplY3QpCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0cyhTVkdG
aWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3Rz
SW5wdXRzKQogewotICAgIC8vIFRoZSBlZmZlY3QgbXVzdCBiZSBhIG5ld2x5IGNyZWF0ZWQgZmls
dGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZl
Y3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAhbV9lZmZlY3RSZW5kZXJlci5jb250YWlucyhv
YmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0
U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAgIC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhZGQg
dGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdpY2UuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpCi0gICAgICAgIGVmZmVjdFJlZmVyZW5jZXMo
ZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRkKGVmZmVjdC5nZXQoKSk7Ci0KLSAgICAvLyBJZiBv
YmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0aGUgZWxlbWVudCBpc24ndCBhdHRhY2hlZCBmb3Ig
c29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2ggaW4gdHVybiBtZWFuIHRoYXQgY2VydGFpbiB0eXBl
cyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QKLSAgICAvLyB3b3JrICh0aGUgTGF5b3V0T2JqZWN0
IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdpbGwgbm90IGJlIGRlZmluZWQpLgotICAgIGlmIChv
YmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVuZGVyZXIuYWRkKG9iamVjdCwgZWZmZWN0LmdldCgp
KTsKKyAgICBlZmZlY3RzSW5wdXRzLnNldCgqc291cmNlQWxwaGEoKSwgRmlsdGVyRWZmZWN0VmVj
dG9yIHsgKnNvdXJjZUdyYXBoaWMoKSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVu
dCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4o
ZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0gZWZmZWN0
RWxlbWVudC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVB
Ul9TUkdCKQorICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpICYmIGVmZmVjdEVs
ZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZp
bHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVm
ZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVh
clNSR0IoKSk7CisjZW5kaWYKKyAgICAKKyAgICAgICAgZWZmZWN0c0lucHV0cy5zZXQoeyAqZWZm
ZWN0IH0sIFdURk1vdmUoaW5wdXRzKSk7CisgICAgICAgIGFkZE5hbWVkRWZmZWN0KGVmZmVjdEVs
ZW1lbnQucmVzdWx0KCksIHsgKmVmZmVjdCB9KTsKKworICAgICAgICBtX2ZpbHRlckVmZmVjdHMu
YXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQorYm9vbCBTVkdG
aWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mIGVm
ZmVjdCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpCiB7Ci0gICAgbV9sYXN0RWZmZWN0ID0g
bnVsbHB0cjsKLSAgICBtX25hbWVkRWZmZWN0cy5jbGVhcigpOwotICAgIG1fZWZmZWN0UmVmZXJl
bmNlcy5jbGVhcigpOwotICAgIG1fZWZmZWN0UmVuZGVyZXIuY2xlYXIoKTsKLSAgICBhZGRCdWls
dGluRWZmZWN0cygpOworICAgIGlmIChzdGFjay5jb250YWlucyhlZmZlY3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWZmZWN0LT50eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VHcmFwaGljKQorICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZm
ZWN0LT50eXBlKCksIDAsIGxldmVsIH0pOworICAgIGVsc2UgaWYgKGVmZmVjdC0+dHlwZSgpID09
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEpCisgICAgICAgIG1fZXhwcmVzc2lvbi5p
bnNlcnQoMCwgeyBlZmZlY3QtPnR5cGUoKSwgMSwgbGV2ZWwgfSk7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVChtX2ZpbHRlckVmZmVjdHMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAgIG1f
ZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QtPnR5cGUoKSwgbV9maWx0ZXJFZmZlY3RzLmZp
bmQoZWZmZWN0KSwgbGV2ZWwgfSk7CisgICAgfQorCisgICAgc3RhY2suYXBwZW5kKGVmZmVjdCk7
CisKKyAgICBmb3IgKGF1dG8mIGlucHV0RWZmZWN0IDogZWZmZWN0c0lucHV0cy5nZXQoZWZmZWN0
KSkgeworICAgICAgICBpZiAoIWJ1aWxkRXhwcmVzc2lvbihpbnB1dEVmZmVjdCwgZWZmZWN0c0lu
cHV0cywgc3RhY2ssIGxldmVsICsgMSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0
KCkucHRyKCkgPT0gZWZmZWN0LnB0cigpKTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1
aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQog
ewotICAgIGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIGlmICghbV9sYXN0RWZmZWN0KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVmZmVjdFJlZmVyZW5j
ZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKHJlZmVyZW5jZSk7Cisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOworICAgIHJldHVybiBidWlsZEV4cHJlc3Npb24o
eyAqbV9sYXN0RWZmZWN0IH0sIGVmZmVjdHNJbnB1dHMsIHN0YWNrLCAwKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0
ZmEzM2U3NjQ2MGNlOTdmYTcuLjk4ZTZlODhiZDliN2FjOTE0ZTA0ZDIyNmQ2MGUzNzBhOTFjNTQw
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMCw2OCArMjEsNDMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CiAKIGNsYXNz
IFNWR0ZpbHRlckJ1aWxkZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7Cisg
ICAgU1ZHRmlsdGVyQnVpbGRlcigpID0gZGVmYXVsdDsKIAotICAgIFNWR0ZpbHRlckJ1aWxkZXIo
UmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgc3RkOjp0dXBsZTxGaWx0
ZXJFZmZlY3RWZWN0b3IsIFNWR0ZpbHRlckV4cHJlc3Npb24+IGJ1aWxkRWZmZWN0cyhTVkdGaWx0
ZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cyk7CiAK
LSAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3Rh
cmdldEJvdW5kaW5nQm94ID0gcjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAgICAKLSAgICBTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wcmlt
aXRpdmVVbml0czsgfQotICAgIHZvaWQgc2V0UHJpbWl0aXZlVW5pdHMoU1ZHVW5pdFR5cGVzOjpT
VkdVbml0VHlwZSB1bml0cykgeyBtX3ByaW1pdGl2ZVVuaXRzID0gdW5pdHM7IH0KKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBuYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKSBjb25z
dDsKIAotICAgIHZvaWQgYWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZm
ZWN0Pik7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBnZXRFZmZlY3RCeUlkKGNvbnN0IEF0
b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0KLQotICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9F
ZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYsIFJlbmRlck9iamVjdCopOwot
Ci0gICAgaW5saW5lIEZpbHRlckVmZmVjdFNldCYgZWZmZWN0UmVmZXJlbmNlcyhGaWx0ZXJFZmZl
Y3QqIGVmZmVjdCkKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBi
ZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KLSAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNl
cy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5m
aW5kKGVmZmVjdCktPnZhbHVlOwotICAgIH0KK3ByaXZhdGU6CisgICAgdXNpbmcgRmlsdGVyRWZm
ZWN0c0lucHV0cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+OwogCi0gICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9m
IGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgotICAgIGlubGluZSBGaWx0
ZXJFZmZlY3QqIGVmZmVjdEJ5UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgcmV0dXJu
IG1fZWZmZWN0UmVuZGVyZXIuZ2V0KG9iamVjdCk7IH0KKyAgICB2b2lkIHNldHVwQnVpbHRpbkVm
ZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cyk7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYygpIGNvbnN0OworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IHNvdXJjZUFscGhhKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNsZWFyRWZmZWN0cygp
OwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOworICAgIHZv
aWQgYWRkTmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgUmVmPEZpbHRlckVmZmVj
dD4pOworICAgIGJvb2wgYnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJFZmZl
Y3RzSW5wdXRzJik7CiAKLXByaXZhdGU6Ci0gICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVj
dHMoKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2J1aWx0aW5FZmZlY3Rz
LnZhbHVlcygpKQotICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZp
bHRlckVmZmVjdFNldCgpKTsKLSAgICB9CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3Qg
UmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiwgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpOworICAgIGJvb2wgYnVpbGRFeHByZXNz
aW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmKTsKIAotICAgIEhhc2hNYXA8QXRvbVN0cmlu
ZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAgSGFzaE1hcDxB
dG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7Ci0gICAgLy8g
VGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVyIGVmZmVjdHMs
Ci0gICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBlZmZlY3QuCi0gICAgSGFz
aE1hcDxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0PiBtX2VmZmVjdFJlZmVy
ZW5jZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJFZmZlY3QqPiBtX2VmZmVj
dFJlbmRlcmVyOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2ZpbHRlckVmZmVjdHM7CisgICAg
U1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Npb247CiAKKyAgICBIYXNoTWFwPEF0b21TdHJp
bmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOworICAgIEhhc2hNYXA8QXRv
bVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOwogICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKLSAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGlu
Z0JveDsKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZlVW5pdHMgeyBT
VkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UgfTsKIH07Ci0gICAgCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjUw
MmFkYTk2MjcwZTUwMTkzMmM2YzA3YjVmNDc5NTYyNDAzYjQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5o
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgU1ZHRmls
dGVyRXhwcmVzc2lvbiA9IFZlY3RvcjxzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdDo6VHlwZSwgdW5z
aWduZWQsIHVuc2lnbmVkPj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wYTcyOTE2ODdjNjkyZjVmODJlMThiYjcwOTU1MzNjNWUyNGRmZGM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTVkdGaWx0ZXJHZW9tZXRyeS5oIgorCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5j
bHVkZSAiU291cmNlR3JhcGhpYy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5p
cXVlX3B0cjxTVkdGaWx0ZXJHZW9tZXRyeT4gU1ZHRmlsdGVyR2VvbWV0cnk6OmNyZWF0ZShTVkdG
aWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0Qm91bmRpbmdCb3gsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRTaXplJiByZXNvbHV0aW9uKQoreworICAgIGF1dG8gcHJpbWl0aXZlVW5pdHMgPSBmaWx0
ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IG1ha2VVbmlx
dWU8U1ZHRmlsdGVyR2VvbWV0cnk+KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0LCB0YXJn
ZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlVW5pdHMsIGFic29sdXRlVHJhbnNmb3JtLCByZXNvbHV0
aW9uKTsKKyAgICBpZiAoIWdlb21ldHJ5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGdlb21ldHJ5LT5idWlsZEZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhmaWx0ZXJFbGVtZW50KTsK
KyAgICByZXR1cm4gZ2VvbWV0cnk7Cit9CisKK1NWR0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJH
ZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMsIEFmZmluZVRyYW5zZm9ybSBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiByZXNvbHV0aW9uKQorICAgIDogRmlsdGVy
R2VvbWV0cnkoZmlsdGVyUmVnaW9uLCBzb3VyY2VJbWFnZVJlY3QpCisgICAgLCBtX3RhcmdldEJv
dW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQorICAgICwgbV9wcmltaXRpdmVVbml0cyhwcmlt
aXRpdmVVbml0cykKKyAgICAsIG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0p
CisgICAgLCBtX3Jlc29sdXRpb24ocmVzb2x1dGlvbikKK3sKK30KKwordm9pZCBTVkdGaWx0ZXJH
ZW9tZXRyeTo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoU1ZHRmlsdGVyRWxlbWVudCYg
ZmlsdGVyRWxlbWVudCkKK3sKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJl
bk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1l
bnQpKSB7CisgICAgICAgIGF1dG8gYm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0
RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7CisgICAgICAg
IAorICAgICAgICBPcHRpb25TZXQ8RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzPiBmbGFnczsKKyAg
ICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCisg
ICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNYKTsKKwor
ICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkK
KyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1kpOwor
CisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhB
dHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhh
c1dpZHRoKTsKKworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0
OjpGbGFnczo6SGFzSGVpZ2h0KTsKKworICAgICAgICBtX0ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0
cy5hcHBlbmQoeyBib3VuZGFyaWVzLCBmbGFncyB9KTsKKyAgICB9Cit9CisKK0ZpbHRlckJvdW5k
YXJ5U2V0IFNWR0ZpbHRlckdlb21ldHJ5Ojpib3VuZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUg
dHlwZSwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VBbHBoYSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICBpZiAoaW5kZXggPj0g
bV9GaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMuc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
bV9GaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHNbaW5kZXhdOworfQorCitGbG9hdFJlY3QgU1ZHRmls
dGVyR2VvbWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0
JiByZWN0KSBjb25zdAoreworICAgIGF1dG8gYWJzb2x1dGVSZWN0ID0gbV9hYnNvbHV0ZVRyYW5z
Zm9ybS5tYXBSZWN0KHJlY3QpOworICAgIGFic29sdXRlUmVjdC5zY2FsZShtX3Jlc29sdXRpb24p
OworICAgIHJldHVybiBhYnNvbHV0ZVJlY3Q7Cit9CisKK0Zsb2F0U2l6ZSBTVkdGaWx0ZXJHZW9t
ZXRyeTo6Y29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIHNpemUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemUgKiBtX3Jlc29sdXRpb24gKiBGbG9hdFNpemUobV9h
YnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgbV9hYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7
Cit9CisKK0Zsb2F0U2l6ZSBTVkdGaWx0ZXJHZW9tZXRyeTo6cmVzb2x2ZVRvRmlsdGVyQ29vcmRp
bmF0ZXMoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChtX3ByaW1pdGl2
ZVVuaXRzID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkK
KyAgICAgICAgcmV0dXJuIHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsKKyAgICBy
ZXR1cm4gc2l6ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0cnkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2U4ZWZmYTg2ZDNmNDFlZjJkOGZjOWRiYjU4MDZmNmU0ZWNhMGEwMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckdlb21ldHJ5LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiU1ZHVW5pdFR5
cGVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCitjbGFzcyBTVkdGaWx0
ZXJHZW9tZXRyeSA6IHB1YmxpYyBGaWx0ZXJHZW9tZXRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJH
ZW9tZXRyeT4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRTaXplJiByZXNvbHV0aW9uKTsKKworICAgIFNWR0ZpbHRlckdlb21ldHJ5KGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpT
VkdVbml0VHlwZSBwcmltaXRpdmVVbml0cywgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFNpemUmIHJlc29sdXRpb24pOworCitwcml2YXRlOgorICAgIHZvaWQg
YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoU1ZHRmlsdGVyRWxlbWVudCYpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQorICAgIEZsb2F0U2l6ZSByZXNvbHV0aW9uKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXNvbHV0aW9uOyB9CisKKyAgICBGaWx0ZXJCb3VuZGFy
eVNldCBib3VuZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUsIHVuc2lnbmVkIGluZGV4KSBjb25z
dCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVz
KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRTaXplIGNvbnZl
cnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgCisgICAgRmxvYXRTaXplIHJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKGNvbnN0IEZs
b2F0U2l6ZSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRp
bmdCb3g7CisKKyAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZlVW5pdHM7
CisgICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBtX0ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0
czsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0
U2l6ZSBtX3Jlc29sdXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIuY3BwCmluZGV4IDBkNDg4NjdhOThmNmU0MzEyODJmMzIwNGRlNTBk
NmYyMDk0MDM3NDMuLmE2ZDM3NjAwZjYxNmE5MzI5NGM2ZjMzZTJmNDkyNzQzMzliNTg4ZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCkBAIC0xOTg2LDcgKzE5ODYsNyBAQCB5eXJl
ZHVjZToKICNsaW5lIDQxOSAiV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkiCiAgICAgewogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+
IHByZWRpY2F0ZUxpc3QoKHl5dnNwWygyKSAtICgyKV0uZXhwcmVzc2lvblZlY3RvcikpOwotICAg
ICAgICAoeXl2YWwuZXhwcmVzc2lvbikgPSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKKyAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0gbmV3IFhQYXRoOjpGaWx0ZXIo
c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCh5eXZzcFsoMSkgLSAoMildLmV4cHJlc3Npb24p
KSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOwogICAgIDt9CiAgICAgYnJlYWs7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIueQppbmRleCA3NzY5OGZhNzY0ZjdhMTVhNDViYzVjMGU1ZDJkNjc3
NTFiMWJlNzBmLi5kZDc4YTViZDlmODA2NzM3MDJiZjQ0YzYwNzZkZDJkMmQwMGQxMDBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLnkKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoR3JhbW1hci55CkBAIC00MTUsNyArNDE1LDcgQEAgRmlsdGVyRXhwcjoK
ICAgICBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3Qo
JDIpOwotICAgICAgICAkJCA9IG5ldyBGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
KCQxKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOworICAgICAgICAkJCA9IG5ldyBYUGF0aDo6
RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0
ZUxpc3QpKTsKICAgICB9CiAgICAgOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZmNj
ZWQ3ZDUxYTIxMjJhNjAwNDg5OWUxOWUzODBjYmQ1ODU3MjFmMS4uYWE5OWM2N2U0ODI0ZmI0Mjlh
NTI2NTZiZDEwMjBmNjhmZGQ3N2UzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjks
NiArMjksOCBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVhZGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVt
b3RlSW1hZ2VCdWZmZXIuaCIKQEAgLTUyNyw2ICs1MjksMzUgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJ
ZGVudGkKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOwogfQogCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVu
Y2UmJiBmaWx0ZXJSZWZlcmVuY2UsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UmJiBnZW9t
ZXRyeVJlZmVyZW5jZSwKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byBmaWx0ZXIgPSBmaWx0ZXJSZWZlcmVuY2UudGFrZUZp
bHRlcigpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBnZW9tZXRyeVJlZmVyZW5jZS50YWtlR2VvbWV0
cnkoKTsKKyAgICAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZd
KCkgeworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNh
Y2hlZEltYWdlQnVmZmVyKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZp
bHRlcmVkSW1hZ2UoZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIGlmICghaW1h
Z2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2Ut
PnNpemUoKTsKKyAgICAgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNo
YXJlYWJsZShJbnRTaXplKGltYWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9
KTsKKyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1
dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKCppbWFnZSwgRmxvYXRQb2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUo
aGFuZGxlKTsKKyAgICB9KCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUp
KTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBuYXRpdmVJbWFnZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICAvLyBJbW1lZGlh
dGVseSB0dXJuIHRoZSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgKHdoaWNoIGlzIGVycm9y
LXByb25lKSB0byBhIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCmluZGV4IDQxOWFlNmQxNmY3MmQ3ZDU5MzE0MWZlMjI5NmFjZmU2OWExYzU5
MGMuLjYzNDlkOGYzNDMzNGQ5MmRiMWM0NDdkNjg5NDdhYmU4MmYxNzEyYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaApAQCAtNjAsNiArNjAsMTEgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDog
Ym9vbDsKIAogfQogCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVyZW5jZTsKK2Ns
YXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU7CkBAIC0xNDMsNiArMTQ4LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNv
bHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRTaGFyZWFibGVCaXRtYXBG
b3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VC
dWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBJUEM6OkZpbHRlclJl
ZmVyZW5jZSYmLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlJiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOwogICAgIHZvaWQgY2FjaGVO
YXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6
OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZkY2M5NzYyNzRlMzU2YWIyMmI0ZWE0ZTcx
YmNmYWMwYjBkZi4uMjRiZTM2ZjYxNmJhN2YzZTgyMTgxMWI2MjQzYTg1MmMxMjZmODZiYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTMyLDYgKzMyLDcgQEAg
bWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgR2V0RGF0YVVSTEZvcklt
YWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXRE
YXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwog
ICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKKyAgICBHZXRGaWx0ZXJlZEltYWdlRm9y
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVm
ZmVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZl
cmVuY2UgZ2VvbWV0cnkpIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZSkgU3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZl
cmVuY2UgZm9udCkKICAgICBEZWxldGVBbGxGb250cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjli
ZWFkZTFiYTA3OTBjY2RkNjlmY2JmMDM4YjhjYzQ3NzdhMmI0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaApAQCAt
MCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyR2Vv
bWV0cnkuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5UmVmZXJl
bmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCisgICAgICAgIDogbV9nZW9t
ZXRyeShXVEZNb3ZlKGdlb21ldHJ5KSkKKyAgICB7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiB0YWtlR2VvbWV0cnkoKSB7IHJldHVybiBXVEZN
b3ZlKG1fZ2VvbWV0cnkpOyB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc1MTQ4ZTA5ZTE3Yzc2MTBiYTg5ODdkNTBlYWRiNzBlODE3OTZjNWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuY3Bw
CkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2Rlci5oIgor
I2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFT2Zmc2V0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GaWx0ZXJFZmZlY3RWZWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0Zp
bHRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oPgorCituYW1l
c3BhY2UgSVBDIHsKKworRmlsdGVyUmVmZXJlbmNlOjpGaWx0ZXJSZWZlcmVuY2UoUmVmPFdlYkNv
cmU6OkZpbHRlcj4mJiBmaWx0ZXIpCisgICAgOiBtX2ZpbHRlcihXVEZNb3ZlKGZpbHRlcikpCit7
Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUZpbHRlckVmZmVjdChjb25zdCBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3QmIGVmZmVjdCwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBBU1NFUlQoZWZmZWN0
LnR5cGUoKSA+PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWluaW11bSAmJiBlZmZl
Y3QudHlwZSgpIDw9IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVNYXhpbXVtKTsKKwor
ICAgIGVuY29kZXIgPDwgZWZmZWN0LnR5cGUoKTsKKworICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUo
KSkgeworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQ6Cisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1hdHJpeDoKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlOgor
ICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXg6
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXA6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEcm9wU2hh
ZG93OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2Q6Cisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXI6Cisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZToKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlOgorICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neToKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNldDoKKyAgICAg
ICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVPZmZzZXQ+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFU3BlY3VsYXJMaWdodGluZzoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRVRpbGU6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVU
dXJidWxlbmNlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBlbmNvZGVTVkdGaWx0ZXIoY29u
c3QgV2ViQ29yZTo6U1ZHRmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAg
ZW5jb2RlciA8PCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyOworCisg
ICAgYXV0byYgZmlsdGVyRWZmZWN0cyA9IGZpbHRlci5maWx0ZXJFZmZlY3RzKCk7CisgICAgZW5j
b2RlciA8PCBmaWx0ZXJFZmZlY3RzLnNpemUoKTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0IDog
ZmlsdGVyRWZmZWN0cykKKyAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGVmZmVjdCwgZW5jb2Rl
cik7CisgICAgCisgICAgYXV0byYgZXhwcmVzc2lvbiA9IGZpbHRlci5leHByZXNzaW9uKCk7Cisg
ICAgZW5jb2RlciA8PCBleHByZXNzaW9uLnNpemUoKTsKKworICAgIGZvciAoYXV0byBbdHlwZSwg
aW5kZXgsIGxldmVsXSA6IGV4cHJlc3Npb24pIHsKKyAgICAgICAgZW5jb2RlciA8PCB0eXBlOwor
ICAgICAgICBlbmNvZGVyIDw8IGluZGV4OworICAgICAgICBlbmNvZGVyIDw8IGxldmVsOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgZW5jb2RlQ1NTRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkNTU0Zp
bHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGVuY29kZXIgPDwgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcjsKKyAgICBlbmNvZGVyIDw8IGZpbHRl
ci5mdW5jdGlvbnMoKS5zaXplKCk7CisgICAgCisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZp
bHRlci5mdW5jdGlvbnMoKSkgeworICAgICAgICBpZiAoaXM8V2ViQ29yZTo6U1ZHRmlsdGVyPihm
dW5jdGlvbikpCisgICAgICAgICAgICBlbmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6
U1ZHRmlsdGVyPihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbmNvZGVGaWx0ZXJFZmZlY3QoZG93bmNhc3Q8V2ViQ29yZTo6RmlsdGVyRWZmZWN0
PihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOworICAgIH0KK30KKworc3RhdGljIFJlZlB0cjxX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+IGRlY29kZUZpbHRlckVmZmVjdChEZWNvZGVyJiBkZWNvZGVy
LCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZSB0eXBlKQoreworICAgIGlmICghKHR5cGUg
Pj0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWluaW11bSAmJiB0eXBlIDw9IFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1heGltdW0pKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXg6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwOgorICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdzoKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFSW1hZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVNZXJnZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RU1vcnBob2xvZ3k6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGlmIChhdXRvIGVmZmVjdCA9IFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4geyAoKmVm
ZmVjdCkucHRyKCkgfTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmc6CisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljOgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCitzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlNWR0ZpbHRlcj4gZGVjb2RlU1ZHRmlsdGVy
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHNpemU7Cisg
ICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgV2ViQ29yZTo6RmlsdGVyRWZmZWN0VmVjdG9yIGZpbHRlckVm
ZmVjdHM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7
CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgICAgIGF1dG8gZWZmZWN0ID0gZGVjb2RlRmls
dGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAgICAgZmlsdGVyRWZmZWN0cy5hcHBlbmQo
ZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIGRlY29kZXIgPj4gc2l6ZTsK
KyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IFdlYkNvcmU6OlNWR0ZpbHRlckV4cHJlc3Npb24gZXhwcmVzc2lvbjsKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlw
ZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIAorICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBpbmRleDsKKyAgICAgICAgZGVj
b2RlciA+PiBpbmRleDsKKyAgICAgICAgaWYgKCFpbmRleCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGxldmVsOworICAgICAg
ICBkZWNvZGVyID4+IGxldmVsOworICAgICAgICBpZiAoIWxldmVsKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgZXhwcmVzc2lvbi5hcHBlbmQoeyAqdHlwZSwgKmluZGV4
LCAqbGV2ZWwgfSk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3Jl
YXRlKFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIFdlYkNvcmU6
OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworfQorCitzdGF0aWMgUmVmUHRyPFdlYkNv
cmU6OkNTU0ZpbHRlcj4gZGVjb2RlQ1NTRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
c3RkOjpvcHRpb25hbDxzaXplX3Q+IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlm
ICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVjdG9y
PFJlZjxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbj4+IGZ1bmN0aW9uczsKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5
cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmls
dGVyKSB7CisgICAgICAgICAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVTVkdGaWx0ZXIoZGVj
b2RlcikpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBlZmZl
Y3QgPSBkZWNvZGVGaWx0ZXJFZmZlY3QoZGVjb2RlciwgKnR5cGUpOworICAgICAgICBpZiAoIWVm
ZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgZnVu
Y3Rpb25zLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb25zKSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8V2Vi
Q29yZTo6RmlsdGVyPiBkZWNvZGVGaWx0ZXIoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworICAgIGRlY29k
ZXIgPj4gdHlwZTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIp
CisgICAgICAgIHJldHVybiBkZWNvZGVDU1NGaWx0ZXIoZGVjb2Rlcik7CisKKyAgICBpZiAoKnR5
cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcikKKyAgICAgICAg
cmV0dXJuIGRlY29kZVNWR0ZpbHRlcihkZWNvZGVyKTsKKyAgICAKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYg
ZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGlmIChpczxXZWJDb3JlOjpDU1NGaWx0
ZXI+KGZpbHRlcikpCisgICAgICAgIGVuY29kZUNTU0ZpbHRlcihkb3duY2FzdDxXZWJDb3JlOjpD
U1NGaWx0ZXI+KGZpbHRlciksIGVuY29kZXIpOworICAgIGVsc2UKKyAgICAgICAgZW5jb2RlU1ZH
RmlsdGVyKGRvd25jYXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZmlsdGVyKSwgZW5jb2Rlcik7Cit9
CisKK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVGaWx0ZXIobV9maWx0ZXIsIGVuY29kZXIpOworfQorCitzdGQ6Om9wdGlv
bmFsPEZpbHRlclJlZmVyZW5jZT4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVGaWx0ZXIoZGVjb2RlcikpCisg
ICAgICAgIHJldHVybiB7IGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpIH07CisgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwYzJmYTE0OGQ0YTVjYTA3
MDk1YjcxZTJlNjNkNDZmYzdhMzdhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlci5oPgorCituYW1l
c3BhY2UgSVBDIHsKKworY2xhc3MgRW5jb2RlcjsKK2NsYXNzIERlY29kZXI7CisKK2NsYXNzIEZp
bHRlclJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3Jl
OjpGaWx0ZXI+JiYpOworCisgICAgUmVmPFdlYkNvcmU6OkZpbHRlcj4gdGFrZUZpbHRlcigpIHsg
cmV0dXJuIFdURk1vdmUobV9maWx0ZXIpOyB9CisKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVyUmVmZXJlbmNlPiBkZWNvZGUo
RGVjb2RlciYpOworCitwcml2YXRlOgorICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IG1fZmlsdGVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQppbmRleCA0MWM3NmJkYjhkYTcxNjQ1ZjM4NTNhMzNmYWQ1ZGQyNWVkNzg0NDFj
Li5lNzc4NDlhM2IyZDhhY2FiNWIzNzhjOWRlZTUzMWRkNjIyZWIzNTUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI5MCw3ICsyOTAsNiBAQCBkZWYgdHlw
ZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6
TWVkaWFLZXlTeXN0ZW1SZXF1ZXN0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRp
YVBsYXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6TWVkaWFTZXNzaW9uSWRlbnRp
ZmllcicsCi0gICAgICAgICdXZWJDb3JlOjpOYXRpdmVJbWFnZVJlZmVyZW5jZScsCiAgICAgICAg
ICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpQbGF5YmFja1Rh
cmdldENsaWVudENvbnRleHRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBsdWdpbkxv
YWRDbGllbnRQb2xpY3knLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggYzRhODRlMWZiNmY0NjZiOGZiZDU0ZTZj
YTQ2YzQ3MjQyMmIzYjBjOC4uZDM1M2U1MmI4NDYwMmM0ZDI2MWQ4MGEzYTdlMzRlMzg2Yzg1ZDQw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXMudHh0CkBAIC0xNjMsNiArMTYzLDcgQEAgUGxhdGZvcm0vSVBDL0F0dGFjaG1l
bnQuY3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwIEBuby11bmlmeQog
UGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL0VuY29kZXIu
Y3BwIEBuby11bmlmeQorUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5jcHAgQG5vLXVuaWZ5
CiBQbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9N
ZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9NZXNzYWdl
UmVjZWl2ZXJNYXAuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWQyMDQxZmE1MmRmMzZhOTE2NmZjNzI4MmUxOWI2
NGI5MWQ0OWIzZS4uYWRkYTI0ODUzNTkyZWM2MmVhZDI0YmUyZGU0ZjM1ZmMxMjJiZjU4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MzMyLDYgKzEzMzIsOSBAQAogCQk3MUJBQTczMzI1RkZEMDk4MDBEN0NENUQgLyogV0tNb2RlbFZp
ZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxQkFB
NzMxMjVGRkNDQkEwMEQ3Q0Q1RCAvKiBXS01vZGVsVmlldy5oICovOyB9OwogCQk3MUZCODEwQjIy
NjA2MjdFMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xp
Y3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRkI4
MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRj
aFBvbGljeS5oICovOyB9OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQ
aWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovOyB9Owor
CQk3MkVFNzlCQjI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRUU3OUI4MjcwRTVBQjEw
MDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwICovOyB9OworCQk3MkVFNzlCQzI3MEU1QUI5
MDA0Q0U0MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRUU3OUI5MjcwRTVBQjkwMDRDRTQwRSAvKiBG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovOyB9OworCQk3MkVFNzlCRDI3MEU1QUI5MDA0Q0U0
MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkVFNzlCQTI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNl
LmggKi87IH07CiAJCTc1QThEMkM4MTg3Q0NGQUIwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3Rv
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThE
MkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTc1QThEMkQ2MTg3RDFDMEUwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdL
V2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi87IH07CiAJCTc2MkI3NDhEMTIwQkM3NUMwMDgx
OTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJl
ZmVyZW5jZXNSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTQ3MDIsNiArNDcwNSw5IEBACiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3
ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkI1MzE1NzI1M0MxRTREMDA0OTI5NUEgLyogUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjUzMTU4MjUzQzFFNEQwMDQ5Mjk1QSAv
KiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRUU3OUI4Mjcw
RTVBQjEwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJFRTc5QjkyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5
UmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRUU3OUJBMjcwRTVB
QjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNp
dGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
S1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThE
MkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMyNCw2ICs3MzMwLDkgQEAKIAkJCQlC
QzAzMkQ5RTEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oICovLAogCQkJCUJDMDMyRDlGMTBG
NDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmNwcCAqLywKIAkJCQlCQzAzMkRBMDEwRjQzN0QxMDA1
OEMxNUEgLyogRW5jb2Rlci5oICovLAorCQkJCTcyRUU3OUI5MjcwRTVBQjkwMDRDRTQwRSAvKiBG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovLAorCQkJCTcyRUU3OUI4MjcwRTVBQjEwMDRDRTQw
RSAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwICovLAorCQkJCTcyRUU3OUJBMjcwRTVBQjkwMDRDRTQw
RSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKIAkJCQk5QkQ4QUI0OTI1ODIwRTUyMDA1Mzg2Rjgg
LyogRm9udFJlZmVyZW5jZS5oICovLAogCQkJCTQxNTFFNUMzMUZCQjkwQTkwMEU0N0UyRCAvKiBG
b3JtRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCUMwQ0U3MkFDMTI0N0U3OEQwMEJDMEVDNCAvKiBI
YW5kbGVNZXNzYWdlLmggKi8sCkBAIC0xMjI3Niw2ICsxMjI4NSw4IEBACiAJCQkJOTMxMkJBRDYy
NkYzM0MyOTAwRkRERjVGIC8qIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzVCNTc5QTI2RjUxOTMzMDA4QjQ4QUMgLyogRmlsZVN5c3RlbVN0b3JhZ2VIYW5k
bGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxMkJBRDUyNkYzM0MyNjAwRkRERjVG
IC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJFRTc5
QkMyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MkVFNzlCRDI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTlDNEE1OTE4QjgxMTc0MDA3QkRDQjYg
LyogRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzY2Nyw3
ICsxMzY3OCw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVj
dCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURl
ZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JXb3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dp
ZnRVcGRhdGVDaGVjayA9IDEzMDA7CiAJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJ
VGFyZ2V0QXR0cmlidXRlcyA9IHsKQEAgLTE0NDU5LDYgKzE0NDY5LDcgQEAKIAkJCQkyRDkyQTc4
MDIxMkI2QTcxMDBGNDkzRkQgLyogRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRENE
Qzk5RTI0OEZFOERBMDBBNjk1MjIgLyogRW5kb3dtZW50U3RhdGVUcmFja2VyLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFBNTc2MDIxNDk2Qjk3OTAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlck1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3MkVFNzlCQjI3MEU1QUI5MDA0
Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTkzREIx
MjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3OEM4QiAvKiBIYW5k
bGVYUENFbmRwb2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDQyMTQ2
NTYxQjAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggOGNlYzkyNDI2ODc1MTRjNmMyYzc3
Yjc4OThjMGEzNGM5MDdkNWJjNC4uZWUyNTE2MzRjYWZmY2E4Y2JlYWYyMTAxZWY4YTQ2ZTg3N2Ji
MWQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTIwMyw2ICsyMDMsMTQgQEAg
cHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0K
IAorICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBXZWJDb3Jl
OjpGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5
PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKG1fcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICB9
CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVzdGluYXRpb25Gb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAg
ICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCA3NzJmYmNhNjhmYTdmMDMxYWQw
NDIwMWU5ZmUwMTZkZWQ3YjU3MTliLi5hNTI0YWIxYTJlYTJjMzc0NGY4NDM4YmI5N2IwMmNiN2M4
OWQzNDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiRGlzcGxh
eUxpc3RXcml0ZXJIYW5kbGUuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNs
dWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjM3LDYgKzIz
OCwyNCBAQCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmdldFNoYXJlYWJsZUJpdG1hcChSZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZShoYW5kbGUpOwogfQogCitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5p
cXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sKKyAgICBzZW5kRGVmZXJyZWRX
YWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhh
bmRsZTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LCBJUEM6OkZpbHRlclJlZmVyZW5jZSB7IFJlZjxGaWx0ZXI+IHsgY29uc3RfY2FzdDxGaWx0ZXIm
PihmaWx0ZXIpIH0gfSwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZShXVEZNb3ZlKGdlb21l
dHJ5KSkpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJbWFn
ZUZvckltYWdlQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cigpLCAxX3MpOworICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3VsdCwgc2VuZFJlc3VsdCk7CisK
KyAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAg
IGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAo
IWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gYml0bWFwLT5j
cmVhdGVJbWFnZSgpOworfQorCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y2Fj
aGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewog
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1h
Z2UoaGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2Fp
dGluZ0ZvclN5bmNSZXBseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApp
bmRleCAyMzk0ZmY1YWRjNGQ3ODNiOGFmZDJkYzEzMjFmMmY1NDc1YTIxMjg1Li4zYmE1YTQyMzc0
NWM2ZDA4NzU3ODMzMzk1NzVjYjUwOWQ5YjE5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmls
dGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIklQQ1Nl
bWFwaG9yZS5oIgpAQCAtMTAyLDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhf
dD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBmbHVzaERp
c3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2U+IGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZpbHRlciYsIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4mJik7CiAgICAgdm9pZCBjYWNoZU5h
dGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6
Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440906</attachid>
            <date>2021-10-12 01:22:46 -0700</date>
            <delta_ts>2021-10-12 02:11:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211012012245.patch</filename>
            <type>text/plain</type>
            <size>738679</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhMDA2NDYzZjNkOGRk
NzAxZTg2ODJlNGIzZmJiZjY5NGVkNWVkMC4uYjViNGZkN2ZkMjViN2E3NmMwNTI2MTYxYWQ3YzE5
ZDNiNjJhODc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3MSBAQAorMjAyMS0xMC0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJ
bWFnZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmguCisgICAgICAgIChpc1R5cGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0Q29yZUltYWdlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6aXNBbHBoYUltYWdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omx1bWlu
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdFR5cGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29t
cG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRy
YW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUlkZW50aXR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGlu
ZWFyVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUdhbW1hVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5oOgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9z
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpzZXRLMyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXJpdGhtZXRpY1NvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNT
b2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb3NpdGU6OmNvbXBvc2l0ZU9wZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1w
UkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9uUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZhc3RT
ZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGln
aHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZm
dXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQ
aXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURy
b3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpvdXRzZXRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZHJhd2luZ1JlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjphcHBseSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURyb3BTaGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2hhZG93Q29s
b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVGbG9vZDo6RkVGbG9vZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkcmF3aW5n
UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpnYXVz
c2lhbktlcm5lbEZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcGVkVG9LZXJuZWxTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtl
cm5lbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtl
cm5lbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91dHNldHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjppc0FscGhhSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0
KToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25YKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdv
cmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZv
cm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
RkVMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBs
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
bGVmdENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3Jt
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
UmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6c2V0UGl4ZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpkaWZmdXNlQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6c3BlY3VsYXJDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNvdXJjZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRpbmdDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodFNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6bGVm
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0VG9w
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpz
ZXRDZW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFX
aW5kb3c6OnNldEJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OkZFTWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZWZmZWN0
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRN
b3JwaG9sb2d5T3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwaXhl
bEFycmF5SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhl
bFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpt
aW5Pck1heCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRyZW11bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0
OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnNldER5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgIChp
c1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6
OnNldFNwZWN1bGFyQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAo
V2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJFeHBv
bmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpk
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFR1
cmJ1bGVuY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZy
ZXF1ZW5jeVgpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVl
bmN5WSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTZWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQ
YWludGluZ0RhdGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhD
dXJ2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0
ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR1cmJ1bGVuY2VUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50Lmlk
bC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpmaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6YWJzb2x1dGVUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpzZXRSZW5kZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyQm91bmRhcnlTZXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6
OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0
Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJz
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZm
ZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11
bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpwcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252
ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGll
ZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldE9wZXJhdGluZ0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldElzQWxw
aGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFic29s
dXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzWCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzV2lkdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWlnaHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNIZWlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFVuY2xpcHBlZEFic29sdXRlU3Vi
cmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91
dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
R2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Rmls
dGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJl
Z2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjphYnNvbHV0
ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6cmVz
b2x1dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Ym91bmRh
cnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNvbnZlcnRU
b0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2Vv
bWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9BYnNvbHV0
ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck91dHB1dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6Rmls
dGVyT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVy
UmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVy
SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpwaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldFBpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpnZXRDb252
ZXJ0ZWRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6
OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVz
dWx0Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyUmVzdWx0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0OjpwcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJS
ZXN1bHQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHQ6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyUmVzdWx0VmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNvdXJj
ZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6
YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChp
c1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxl
bmQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6Om1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFu
ZEh1ZVJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVu
dFRyYW5zZmVyU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJ
ZGVudGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1l
dGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdh
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRo
bWV0aWNTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmFw
cGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNz
aWFuQmx1clNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmguCisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oLgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0
U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgu
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNlcGlhRWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVJbnZlcnRFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0eUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJs
dXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkRnVuY3Rpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjptX3NvdXJjZUdyYXBo
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjppbnB1dENvbnRleHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZp
bHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKGlzVHlw
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyR2VvbWV0cnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXJHZW9tZXRyeTo6Q1NTRmlsdGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyR2VvbWV0cnk6OmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YmVn
aW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjph
cHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBs
eVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3Jp
dGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL1NWR0ZFQmxlbmRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFQmxlbmRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWls
ZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RF
eHBvc2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZF
Q29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0
RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6aW1hZ2VCdWZmZXJGb3JFZmZlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAg
ICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1v
cnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmhpZ2hlc3RF
bnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9tU3Ry
aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGw6
CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVP
ZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2Ug
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6
CisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnNldFN0YW5kYXJkQXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RkVJbWFnZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVJbWFnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdl
OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJ
bWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJ
UmVmZXJlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6
OnJlZmVyZW5jZWRSZW5kZXJlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpj
b2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpz
ZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmltaXRpdmVVbml0cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpsYXN0RWZmZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmVm
ZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVp
bGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAgICgpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Np
b24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaWRsLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6Y2FsY3Vs
YXRlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6YnVpbGRGaWx0ZXJF
ZmZlY3RCb3VuZGFyeVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR2VvbWV0cnk6
OmJvdW5kYXJ5U2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5
Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVn
aW9uIGNvbnN0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9t
ZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKiB4bWwvWFBhdGhHcmFtbWFyLmNwcDoKKyAgICAgICAg
KiB4bWwvWFBhdGhHcmFtbWFyLnk6CisKIDIwMjEtMTAtMTAgIFNpaHVpIExpdSAgPHNpaHVpX2xp
dUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBGaWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwOTQ0OTA1MTg4ZDlmODg3YTVlNTdmMzNj
ZTEyMjgyNDYxN2VjZTMuLmQzN2FmMTg0YWM4ZTVjNjhmNDUyZGFiNWQyZjIyMDEzNjhiMjA4ZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjEtMTAtMTIgIFNhaWQgQWJvdS1IYWxsYXdh
ICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmlsdGVy
cyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZElt
YWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmls
dGVyR2VvbWV0cnlSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OkZp
bHRlckdlb21ldHJ5UmVmZXJlbmNlOjp0YWtlR2VvbWV0cnkpOgorICAgICAgICAoSVBDOjpGaWx0
ZXJHZW9tZXRyeVJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQQzo6RmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0ZpbHRl
clJlZmVyZW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OkZp
bHRlclJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OmVuY29kZUZpbHRlckVmZmVjdCk6CisgICAg
ICAgIChJUEM6OmVuY29kZVNWR0ZpbHRlcik6CisgICAgICAgIChJUEM6OmVuY29kZUNTU0ZpbHRl
cik6CisgICAgICAgIChJUEM6OmRlY29kZUZpbHRlckVmZmVjdCk6CisgICAgICAgIChJUEM6OmRl
Y29kZVNWR0ZpbHRlcik6CisgICAgICAgIChJUEM6OmRlY29kZUNTU0ZpbHRlcik6CisgICAgICAg
IChJUEM6OmRlY29kZUZpbHRlcik6CisgICAgICAgIChJUEM6OmVuY29kZUZpbHRlcik6CisgICAg
ICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQQzo6
RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6dGFrZUZp
bHRlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0
eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKToKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTEwICBT
aWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciBpdGVyYXRpbmcgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggZDdkMTVhNTk3Y2M0ZTVjOTA2ODEzYmNjYzcyYWZiN2U0ODcyOGM5OC4uMjA5Y2Y0OWUzN2Jj
NTNhODg4YTY1NDhhODU2ODg2YTQzNjM3MTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDA4
LDggKzE0MDgsMTQgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCiAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNl
bnRhdGlvbi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmgKIAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Cb3guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09PcmlnaW5hbEZvcm1hdEJveC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDJiMDNmYTcxOWEwMWI5
ZGE5MjlmOGI1OTRhYTdiMDIwODEzYjBjMDAuLmZmZjhlMjA0YjQ3MjU2YTEzOWUwYWEyYTVlZDcz
NTgwYTAxNGYxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDU0LDE0ICsyMDU0LDM0IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3RSZW5kZXJlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9p
bnRMaWdodFNvdXJjZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURy
b3BTaGFkb3dTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVGbG9vZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2lzby9JU09Cb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPT3JpZ2luYWxG
b3JtYXRCb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPUHJvdGVjdGlvblNjaGVtZUlu
Zm9Cb3guY3BwCkBAIC0yMjA4LDYgKzIyMjgsNyBAQCByZW5kZXJpbmcvQmlkaVJ1bi5jcHAKIHJl
bmRlcmluZy9Cb3JkZXJFZGdlLmNwcAogcmVuZGVyaW5nL0JyZWFrTGluZXMuY3BwCiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcAorcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmNwcAogcmVuZGVy
aW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcAogcmVuZGVyaW5nL0NsaXBSZWN0LmNwcAogcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0yNjQ0LDYgKzI2NjUsNyBAQCBz
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAogc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKK3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eS5jcHAKIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlv
bkltcGwuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IGE0YzBhNzYyN2MzNzgxZGZjZDA0OTA2ZmM1MjMzMDljOTA3
MzBjMmMuLjBiZGRiOTljMjM4YWQwZTcxMWQzMzkyNzBhM2VjNTFlOTFkNjYyNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtMzk4LDcgKzM5OCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2N2
L0NWVXRpbGl0aWVzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lv
blZULm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcAotcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCitw
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCitwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVURldmljZU1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
SWNvbklPUy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGZhY2IzYmRkMDI4Y2YyZDA2ZjBmZjE4ZWUwMjk2Mzc4NzYwNDMxNzIu
LmM5Y2YwNjBkMWY5ZDRmZGMwODdmZGFiNzc2N2RmNTU5NGNjYzA4MzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzNSw3ICsy
MzUsNiBAQAogCQkwODE2NjhENDEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4
RDIxMjU2MDNCRjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuaCAqLzsgfTsKIAkJMDgx
NjY4REExMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MTY2OEQ4MTI1NjAzRDUwMDZG
MjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggKi87IH07CiAJCTA4MUFBOERBMTExMTIzN0Uw
MDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MUFBOEQ5MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVt
ZW50UmFyZURhdGEuaCAqLzsgfTsKLQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4MUVCRjM5MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi87IH07
CiAJCTA4M0RBRUE3MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFF
QTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi87IH07
CiAJCTA4M0RBRUE5MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RB
RUE1MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAqLzsg
fTsKIAkJMDg0NTY4MDgxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQ1NjgwNzEyQjkwREE2MDA5
NjBBOUYgLyogRm9udE1ldHJpY3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNzc3LDggKzc3Niw2IEBACiAJCTJBRUY2RkREMjZFN0VDQ0YwMDMy
NkQwMiAvKiBDU1NOdW1lcmljVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkFFRjZGQ0UyNkU3MUYyRDAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBl
LmggKi87IH07CiAJCTJCMzY1Qzg0MTUyNTExOUUwMDkxRDI3QiAvKiBSZW5kZXJTVkdFbGxpcHNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQjQyMzVB
MDE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovOyB9OwogCQkyQkU4RTJD
NzEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1
NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi87IH07Ci0JCTJDODU2NTM0MjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRl
ckVmZmVjdFJlbmRlcmVyLmggKi87IH07Ci0JCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi87IH07CiAJCTJEMDYyMTQ0MURBNjM5QjYwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MjFEQTYzOTg4MDBBN0ZCMjYgLyogV2Vi
S2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDA2MjE0NTFEQTYzOUJBMDBB
N0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oICovOyB9OwogCQkyRDA2MjE0RDFEQTYzQThCMDBB
N0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQ5MURBNjNBNzkwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleXMuY3BwICovOyB9OwpAQCAtMjI5Nyw3ICsyMjk0LDIwIEBACiAJCTcyOTlCQzY4MjNENkE1
M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5n
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyOUQwNTMwMjUzMTQyNDMwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOUQwNTJF
MjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkE3M0JFRjI0NUEz
RjkwMDAxQzlEMDMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5p
bWF0aW9uRnJhbWVSYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4OEM0IC8qIEZpbHRlckdlb21ldHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q4MzI3
MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDNTI3MTQzNTIzMDAzRTg4QzQgLyog
RmlsdGVyQm91bmRhcnlTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0
NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8q
IEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJBQTQ2QzcyNzE0MzY5QTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFB
NDZCRDI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDODI3MTQzNzMz
MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJB
QTQ2QzkyNzE0MzdEMTAwM0U4OEM0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcy
QUE0NkNBMjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBD
U1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkFBNDZDQjI3MTQzOTk3MDAzRTg4QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCQjI3MTQz
MEIwMDAzRTg4QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0MyNzE0MzlEOTAwM0U4OEM0IC8q
IFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJBODNENkIyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkNEMjcxNDM5RTUwMDNF
ODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVy
RXhwcmVzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyQUE0NkQzMjcxNEUzNUQwMDNFODhDNCAvKiBDU1NGaWx0ZXJHZW9tZXRyeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQTQ2RDAyNzE0
QzhBNTAwM0U4OEM0IC8qIENTU0ZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2RDQyNzE0RjE4RTAwM0U4OEM0IC8q
IEZpbHRlclJlc3VsdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFZlY3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
QkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyRjY2N0UxMjYwQzI2QUMwMEVFMzZBRCAvKiBE
aWFnbm9zdGljTG9nZ2luZ0RvbWFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJGNjY3REYyNjBDMjY0NDAwRUUzNkFEIC8qIERpYWdub3N0aWNMb2dn
aW5nRG9tYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYx
MDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5
M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyog
TWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC0yNzAwLDggKzI3MTAsNiBAQAogCQk4NDIyNDE5NDEw
N0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3
IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCAqLzsgfTsKIAkJODQzMDBCRDYxMjBDOUFBQzAw
MjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRo
U3RyaW5nU291cmNlLmggKi87IH07CiAJCTg0MzAwQkQ4MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQ
YXRoU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDMwMEJENzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovOyB9OwotCQk4
NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggKi87IH07Ci0JCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZE
MjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLzsgfTsKIAkJODQ2NTBFN0UyMzg3QUQ3RDAw
NjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NjUwRTdDMjM4N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1
ZXJ5TGlzdEV2ZW50LmggKi87IH07CiAJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0
YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAq
LzsgfTsKIAkJODQ3MzBENzkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVDMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggKi87IH07CkBAIC0yNzExLDcgKzI3
MTksNyBAQAogCQk4NDczMEQ4MTEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjQxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEODMxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFTWVyZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDY2MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggKi87IH07CiAJCTg0
NzMwRDg1MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY4MTI0OEYwQjMwMEQzQTlDOSAv
KiBGRU1vcnBob2xvZ3kuaCAqLzsgfTsKLQkJODQ3MzBEODcxMjQ4RjBCMzAwRDNBOUM5IC8qIEZF
T2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NDczMEQ2QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCAqLzsgfTsKKwkJODQ3MzBEODcx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NDcz
MEQ4OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggKi87IH07CiAJCTg0NzMwRDhCMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLzsgfTsKIAkJODQ3
MzBEOEQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFVHVyYnVsZW5jZS5oICovOyB9OwpAQCAtNjEwMCw4ICs2MTA4LDYgQEAKIAkJMDgxNjY4RDcx
MjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MTY2OEQ4MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRM
YXlvdXRFbmdpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxQUE4RDkxMTEx
MjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdFbGVtZW50UmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMDgxRUJGMzgwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MUVCRjM5MEZEMzRGNDEwMERBNzU1
OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0ZpbHRlckJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFF
QTIwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTMwRjAxQTdGQjAw
MzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUE0MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTYyNDgsOCArNjI1NCw2IEBACiAJCTBGNDk2NkE4MURCNDBDNDMwMEEyNzRCQiAv
KiBKU0RPTVBvaW50UmVhZE9ubHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNET01Qb2ludFJlYWRPbmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0OTY2QTkxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFkT25seS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTVBvaW50UmVhZE9ubHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8qIFNjcm9s
bFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQg
LyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0I3ODY0MDBDNDBE
MzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5
ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyRmlsdGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM1OCwxMCArNzM2Miw2IEBACiAJCTJCNDIzNUEwMTUy
NTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR0VsbGlwc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUw
IC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkM4NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRBMzcyNEJFMThBMTAwOURFRTcw
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0MjFEQTYzOTg4MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0MzFEQTYzOTg4MDBBN0ZCMjYgLyogV2ViS2l0
TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQwNjIxNDcxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TWVkaWFLZXlO
ZWVkZWRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDUzMiw5ICsx
MDUzMiw1MiBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1NiAvKiBGaWx0ZXJPdXRwdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmlsdGVyT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyog
RmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkEyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVB
QUUgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZEMjcw
M0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZF
MjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzAyNzA1NzUwNDAwM0M1
QUFFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3Vy
Y2VHcmFwaGljU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3MTI3MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAv
KiBGRU1lcmdlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJnZVNvZnR3YXJl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzUyNzA1ODVCODAwM0M1
QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNv
bG9yTWF0cml4U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdCMjcwNUIy
QzkwMDNDNUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBG
RURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyogRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkE4M0Q3RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRkVUaWxlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29m
dHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MTI3MDY0NkUyMDAzQzVBQUUgLyog
RkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgyMjcwNjUxMUIw
MDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVu
ZFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODMyNzA2
Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckdl
b21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI0MjcxNDJDRUIw
MDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVz
dWx0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI2MjcxNDJG
MzcwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0
Q29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCOTI3MTQy
Rjc5MDAzRTg4QzQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmls
dGVyUmVzdWx0Q29yZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0
NkJCMjcxNDMwQjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQUE0NkJDMjcxNDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJPdXRwdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyT3V0cHV0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0
IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbHRlclJlcHJlc2VudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUE0NkJFMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkYyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4
cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZDMDI3MTQzMkRG
MDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBQTQ2QzEyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21ldHJ5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckdlb21ldHJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkMyMjcxNDMyRTAwMDNFODhDNCAvKiBT
VkdGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFBNDZEMDI3MTRDOEE1MDAzRTg4QzQgLyogQ1NTRmlsdGVyR2Vv
bWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2RDEyNzE0QzhBNTAwM0U4OEM0IC8qIENTU0ZpbHRlckdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlckdlb21ldHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU0Niw2ICsxMDU4
OSw4IEBACiAJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0FEMjNFMUU1
NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3Vs
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNDc4LDkgKzExNTIzLDYgQEAKIAkJ
ODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFN0cmluZ1NvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJENzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0
aFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MzAwQkQ5MTIwQzlBRUQwMDIxOTU0
QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdDMjM4N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5
TGlzdEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlM
aXN0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFN0YyMzg3QUQ4
QTAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0NjUwRTgwMjM4N0FEOEIwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlz
dEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTEyLDggKzE5NTU0LDkgQEAKIAkJ
MkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNvcmVpbWFnZSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8sCi0JCQkJMkNBQTRBMzcyNEJFMThB
MTAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tICovLAorCQkJCTcy
QUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLywKKwkJ
CQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tICov
LAorCQkJCTcyQUE0NkI5MjcxNDJGNzkwMDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdl
Lm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb3JlaW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjMxMjksNiArMjMxNzIsMzIgQEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVu
dCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQw
MDAzQzVBQUUgLyogc29mdHdhcmUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTcyQTgzRDgyMjcwNjUxMUIwMDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUu
Y3BwICovLAorCQkJCTcyQTgzRDc1MjcwNTg1QjgwMDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVu
dFRyYW5zZmVyU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAv
KiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVB
QUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVD
N0VGMDAzQzVBQUUgLyogRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJB
ODNEN0UyNzA2MzM2QjAwM0M1QUFFIC8qIEZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVBQUUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkJNzJBODNEODEyNzA2NDZFMjAwM0M1QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5j
cHAgKi8sCisJCQkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5j
cHAgKi8sCisJCQkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3
YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0
d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0YyNzA2M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3
YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNl
U29mdHdhcmUuY3BwICovLAorCQkJCTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBGaWx0ZXJS
ZXN1bHRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBQTQ2QjcyNzE0MkYzODAwM0U4OEM0IC8qIEZp
bHRlclJlc3VsdFNvZnR3YXJlLmggKi8sCisJCQkJNzJBODNENzEyNzA1Nzg1MjAwM0M1QUFFIC8q
IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDcwMjcwNTc1MDQwMDNDNUFB
RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBzb2Z0
d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdDMDExRjNDMjRGQUQz
NjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTE4Myw2ICsyNTI1Miw3IEBACiAJCUE3NUU4QjdGMEUx
REUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8s
CiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAg
Ki8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
ICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywKQEAg
LTI1MjE5LDE1ICsyNTI4OSwyNCBAQAogCQkJCTg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RVRpbGUuaCAqLywKIAkJCQk4NDczMEQ2RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNl
LmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmgg
Ki8sCi0JCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcy
QTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDY5Mjcw
M0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkFBNDZDNDI3MTQzNTA1MDAzRTg4
QzQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLywKIAkJCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBE
RUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJCQkwOEM5MjUxODBGQ0M3QzRBMDA0ODBERUMg
LyogRmlsdGVyRWZmZWN0LmggKi8sCi0JCQkJMkM4NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKLQkJCQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKKwkJCQk3MkFBNDZCQjI3MTQzMEIwMDAzRTg4
QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi8sCisJCQkJNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzJBODNEODMyNzA2Njc0QzAwM0M1QUFF
IC8qIEZpbHRlckdlb21ldHJ5LmggKi8sCiAJCQkJNDlFQ0VCNjMxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBG
aWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyog
RmlsdGVyT3BlcmF0aW9ucy5oICovLAorCQkJCTcyQUE0NkJDMjcxNDMwQjEwMDNFODhDNCAvKiBG
aWx0ZXJPdXRwdXQuY3BwICovLAorCQkJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1NiAvKiBGaWx0
ZXJPdXRwdXQuaCAqLywKKwkJCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVw
cmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVy
UmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVz
dWx0LmggKi8sCisJCQkJNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFZl
Y3Rvci5oICovLAogCQkJCTg0NzMwRDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5o
ICovLAogCQkJCUExRTExNTQ1MTMwMTVDNEUwMDU0QUM4QyAvKiBQb2ludExpZ2h0U291cmNlLmNw
cCAqLywKIAkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5o
ICovLApAQCAtMjY5OTAsMTAgKzI3MDY5LDEzIEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCMjU1
OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5jcHAgKi8sCiAJCQkJQjI1NTk4RUIw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLywKLQkJCQk4NDVFNzJGOTBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLywKLQkJCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdE
NzkgLyogU1ZHRmlsdGVyLmggKi8sCi0JCQkJMDgxRUJGMzgwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuY3BwICovLAotCQkJCTA4MUVCRjM5MEZEMzRGNDEwMERBNzU1OSAvKiBT
VkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBODNENkEyNzAzREE5QTAwM0M1QUFFIC8qIFNW
R0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkIyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRl
ci5oICovLAorCQkJCTcyQUE0NkMwMjcxNDMyREYwMDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmNwcCAqLywKKwkJCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRl
ci5oICovLAorCQkJCTcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNz
aW9uLmggKi8sCisJCQkJNzJBQTQ2QzIyNzE0MzJFMDAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21l
dHJ5LmNwcCAqLywKKwkJCQk3MkFBNDZDMTI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyR2Vv
bWV0cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0zMDEwMCw4ICszMDE4MiwxMCBAQAogCQkJCUNBN0U5QjQ3MjQzNjFEQzUw
MDRFODlGNiAvKiBDb250ZW50ZnVsUGFpbnRDaGVja2VyLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQx
ODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFC
MDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCAqLywKLQkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBE
MzQgLyogQ1NTRmlsdGVyLmNwcCAqLywKLQkJCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyog
Q1NTRmlsdGVyLmggKi8sCisJCQkJNzJBODNENkMyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRl
ci5jcHAgKi8sCisJCQkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICov
LAorCQkJCTcyQUE0NkQxMjcxNEM4QTUwMDNFODhDNCAvKiBDU1NGaWx0ZXJHZW9tZXRyeS5jcHAg
Ki8sCisJCQkJNzJBQTQ2RDAyNzE0QzhBNTAwM0U4OEM0IC8qIENTU0ZpbHRlckdlb21ldHJ5Lmgg
Ki8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8sCiAJ
CQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJCQlF
NEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMxNTI0LDYg
KzMxNjA4LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTcyRUJDN0REMjcxMTNEMzEw
MEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFG
ODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1
MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMjE4Myw2ICszMjI2OCw4IEBACiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8q
IENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzc5RTE0MUJCMjE1
QkIwMENBQThCRiAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NDQ3NkJEQjFERkNBQzAzMDA2OTBFMjMgLyogQ1NTRGVmZXJyZWRQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyQUE0NkNBMjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkQzMjcxNEUzNUQwMDNFODhDNCAvKiBDU1NGaWx0ZXJHZW9t
ZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJCMEM1QjgxN0JCRDYyOTAwM0QzNjc3IC8qIENT
U0ZpbHRlckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjRCNEQ2MENCNDI5OEEw
MDVGMkI2MiAvKiBDU1NGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRkQwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjY4
NywxMiArMzI3NzQsMTcgQEAKIAkJCQk5MzBFNDQ4NjI3MEMzNzIyMDBERTdBQjcgLyogRmlsZVN5
c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVF
QjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MTJCRTQ4MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyQUE0NkM5MjcxNDM3RDEwMDNFODhDNCAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
QUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyQUE0NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4OEM0IC8qIEZpbHRlckdlb21l
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3MDE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzcyNzE0
MzY5QTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkFBNDZDODI3MTQzNzMzMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkFBNDZENDI3MTRGMThFMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0VmVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRGMDkwMDBBNDIzNCAvKiBGaXhl
ZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3RDJERDI1MEZEODI4MDAwMjA3
QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTM1NTkwLDkg
KzM1NjgyLDkgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90TGln
aHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwNjBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDkwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAot
CQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVyRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNW
R0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjM1NSw3ICszNjQ0Nyw2IEBACiAJCTA4NjdE
NjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBC
WFByb2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVG
b3JXb3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7
CiAJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlh
ZTllNTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li41NTFjMjgwNTI5MzgzMDMyM2VjODFi
ZjgyZTczMWY1NjVkMDA1ODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdl
VmFsdWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5oIgogCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVyR2VvbWV0
cnkuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xMTYsMjYgKzExNywy
MyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGlu
dG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3Vs
ZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
LCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
KyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwor
ICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9k
ZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7
CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsK
IAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CiAgICAgdGV4
dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CiAKLSAgICBhdXRv
IGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3Vy
Y2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdl
UmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVnaW9uKGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlv
bnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBmaWx0ZXIgPSBD
U1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdN
b2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdl
KCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0cHV0ID0gY3NzRmls
dGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0dXJuICZJbWFnZTo6
bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IENTU0ZpbHRlckdlb21ldHJ5OjpjcmVh
dGUoaW1hZ2VSZWN0LCBpbWFnZVJlY3QpOworICAgIGlmIChhdXRvIGZpbHRlcmVkSW1hZ2UgPSB0
ZXh0dXJlLT5maWx0ZXJlZEltYWdlKCpmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKSkKKyAgICAg
ICAgcmV0dXJuIGZpbHRlcmVkSW1hZ2U7CiAKLSAgICByZXR1cm4gb3V0cHV0LT5jb3B5SW1hZ2Uo
KTsKKyAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJ
bWFnZVZhbHVlOjpmaWx0ZXJJbWFnZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgK
aW5kZXggYTVkZDI4YjczN2JjODM1ZTg2ZWEzZWYyMDJhNzRlNDZhYjIyMjE4MS4uODhhMzEwMjc3
OTgyZjMyN2QyNDM5NDZlZWVmNTI2ZTVmNzIwOTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMjUsNiAr
MjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIApAQCAtMTM4LDYgKzEz
OSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAg
IFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBGaWx0ZXImIGZpbHRlciwgc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlm
ICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAg
ICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKKworICAgICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAg
ICAgICBzdGQ6OnRpZShpbWFnZUJ1ZmZlciwgc3RkOjppZ25vcmUpID0gZmlsdGVyLmFwcGx5KHRo
aXMsIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyID8gaW1h
Z2VCdWZmZXItPmNvcHlJbWFnZSgpIDogbnVsbHB0cjsKKyAgICB9CisKICAgICB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggODVlM2QyNGJlYjBjMjA0YzMyNWEyNjU2
ZDljYTU0MDQwODY2ZmI3Mi4uY2U4OWY0YmQzYWRmNzhlMjI1ODkxZWQ2NzM3M2M5OWYwYzk2OTJm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYwOSw2ICs2
MTEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdAogICAgIEltYWdlQnVmZmVyOjpkcmF3Q29u
c3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9u
cyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmls
dGVyJiBmaWx0ZXIsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZp
bHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQoreworICAgIGF1dG8gW2ZpbHRlcmRJbWFnZSwgaW1h
Z2VSZWN0XSA9IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgV1RGTW92ZShnZW9tZXRyeSkpOwor
ICAgIGlmIChmaWx0ZXJkSW1hZ2UpCisgICAgICAgIGRyYXdJbWFnZUJ1ZmZlcigqZmlsdGVyZElt
YWdlLCBpbWFnZVJlY3QpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7CiAgICAgUGF0aCBwYXRoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApp
bmRleCBkNmUyNTY3N2JlZjcxNWJhNDljZjA0MWUxNGM5ZWM4MDFjNWM5N2MzLi5iNjFmNTQ0YTQ4
ZGMxNDY5NWI0MDlkNzZjODQzYzc2ZWEzNWZmZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtODUsNiArODUsOCBAQCB0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5Owog
Y2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOwpAQCAtNDQyLDYgKzQ0NCw4IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VC
dWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgCisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggMTM5NzgwMWI0ZDhlMGZmY2Q2OTQ2
N2NhMTQyMjBkMDA1M2NmMTVlZS4uYWIzNGM5NjU2M2UwYmVmZWY1NDFkZjk5ZWVhYjhkYzJkOTBl
NmUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCkBAIC00Miw2ICs0Miw5IEBAIGNsYXNzIERyYXdpbmdDb250ZXh0Owogc3RydWN0IEl0ZW1C
dWZmZXJIYW5kbGU7CiB9CiAKK2NsYXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5Owor
CiBjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUJ1
ZmZlciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxJbWFnZUJ1ZmZlcj4gewogcHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2lu
dGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KQEAgLTEwNiw2ICsxMDksNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYsIHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgPSAwOwogCiAgICAgLy8gQ3JlYXRlIGFu
IGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBm
cm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgogICAgIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
RmlsdGVyc0NvY29hLm1tCmluZGV4IGQ0ZmEzYzRiZmFkMzRhYWYzMDkzYTlmMDI0ODZiYjcyN2Y5
OGQ0YWEuLmQ0NWFiMzNjNDQwOGVkNjM2MDc0NjE0ZDQ2ZjQ1OWRhNmY1MWQ2MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FG
aWx0ZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdp
dGggQ1NTRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzYwMDgpLgorLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBG
aWx0ZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjAwOCkuCiBzdGF0aWMgY29uc3QgZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsK
ICAgICB7IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjgg
fSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJh
MjZlMmMwNDRhZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0K
LSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUltYWdl
QnVmZmVyLmgiCi0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1MgQ0lJbWFnZTsK
LU9CSkNfQ0xBU1MgQ0lGaWx0ZXI7Ci1PQkpDX0NMQVNTIENJQ29udGV4dDsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBGRUNvbG9yTWF0cml4OwotY2xhc3MgRkVDb21wb25lbnRUcmFu
c2ZlcjsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlIDogcHVibGljIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7
Ci0gICAgUmV0YWluUHRyPENJQ29udGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBh
cHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgYm9vbCBoYXNSZXN1bHQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX291dHB1dEltYWdlOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIG91
dHB1dCgpIGNvbnN0IGZpbmFsOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJF
ZmZlY3QmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAg
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9p
ZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwotICAgIHN0YXRp
YyBib29sIGNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIAotICAg
IFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYp
OwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVD
b2xvck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBv
bmVudFRyYW5zZmVyJiwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICAKLSAgICBS
ZWZQdHI8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IG1fb3V0cHV0SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg2ZmM0YzIzYWY5NTQ1
NTU3YTU1OGM4YzQ1MWUxOWE4YTM4ZmI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMw
OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLQotI2lmIFVTRShDT1JFX0lN
QUdFKQotCi0jaW1wb3J0ICJGRUNvbG9yTWF0cml4LmgiCi0jaW1wb3J0ICJGRUNvbXBvbmVudFRy
YW5zZmVyLmgiCi0jaW1wb3J0ICJGaWx0ZXIuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdC5oIgot
I2ltcG9ydCAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
LSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgotI2ltcG9ydCA8
Q29yZUltYWdlL0NJQ29udGV4dC5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+Ci0j
aW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlD
cmVhdGUoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2lu
Z0NJRmlsdGVycyhsYXN0RWZmZWN0KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJl
dGFpblB0cjxDSUNvbnRleHQ+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRD
SUNvbnRleHQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250
ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6IEB7IGtDSUNv
bnRleHRXb3JraW5nQ29sb3JTcGFjZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFjZUNyZWF0ZVdp
dGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKX1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0K
LXN0YXRpYyBib29sIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25z
dCBGRUNvbXBvbmVudFRyYW5zZmVyJiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVh
ciA9IFtdIChjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5L
Tk9XTgotICAgICAgICAgICAgfHwgZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgIH07Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5y
ZWRGdW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQot
ICAgICAgICAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVs
bE9yTGluZWFyKGVmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZl
Y3QmIGVmZmVjdCkKLXsKLSAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVl
IG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFw
aGljOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZF
Q29sb3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1VOS05PV046Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5D
RVRPQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FU
VVJBVEU6Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JM
aW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNm
ZXI+KGVmZmVjdCkpOwotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpE
aWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVu
dE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYg
KCFtX291dHB1dEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZl
cihsYXN0RWZmZWN0KTsKLX0KLQotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewot
ICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZv
ciAoYXV0byBpbiA6IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0
SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQo
aW5wdXRJbWFnZSk7Ci0gICAgfQotICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOwotICAgIGVmZmVjdC5zZXRSZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIAotICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0Vt
cHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3
aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJj
ZUdyYXBoaWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAg
IHJldHVybiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRU
cmFuc2Zlcj4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVy
bnMgYSB2YWxpZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNl
bWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9n
eToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJl
dGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JT
b3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNv
dXJjZUltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9T
dXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFn
ZSBpbWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3Vy
Y2VJbWFnZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdl
IGltYWdlV2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCldOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4
JiBlZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8g
dmFsdWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkp
OwotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlw
ZSgpKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1
ZXNbMF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNv
bXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0g
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAg
ICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0
byBBbHBoYSBJbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0g
ICAgCi0gICAgYXV0byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5h
bWU6QCJDSUNvbG9yTWF0cml4Il07Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlu
cHV0SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRj
aCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNb
MF0gWTpjb21wb25lbnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZl
Y3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOmNvbXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBX
OjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRz
WzddIFo6Y29tcG9uZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAg
ICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlu
cHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVj
dG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAg
ICAgICBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZ
OnZhbHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6dmFsdWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhd
XSAgZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2
YWx1ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVz
WzE1XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5w
dXRBVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFs
dWVzWzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLSAgICByZXR1cm4gY29sb3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJl
dGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVj
dG9yPFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhlIHJlc3Qgb2YgRkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBB
U1NFUlQoaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwot
Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAg
IAotICAgIFtmaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJ
bWFnZUtleV07Ci0gICAgCi0gICAgYXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5n
ICprZXksIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAg
ICAgIGlmIChmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIp
Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5j
dGlvbi5pbnRlcmNlcHQgWTpmdW5jdGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAg
ICB9OwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0
LnJlZEZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmlj
aWVudHMiLCBlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJp
bnB1dEJsdWVDb2VmZmljaWVudHMiLCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENv
ZWZmaWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlv
bigpKTsKLSAgICAKLSAgICByZXR1cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0
ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5n
KGVmZmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4g
OiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZygqaW4pIHx8ICFjYW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRo
aXMgPDwgIiB1c2luZyBDb3JlSW1hZ2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVm
ZmVyLmdldCgpOwotfQotICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRl
cigpLmZpbHRlclNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBj
bGVhclJlc3VsdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29u
dGV4dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9v
dXRwdXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFz
dEVmZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9y
bUNvbG9yU3BhY2UoKV07Ci19Ci0gICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QK
LXsKLSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNj
YWxlKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGRlc3RTaXplKTsKLSAgICByZXR1cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVm
ZmVyID0gbnVsbHB0cjsKLSAgICBtX291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkK
LSAgICA6IEZpbHRlckVmZmVjdFJlbmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2FiZTU2MWI3MDFiY2EwNWIyNDRlNTI1ZTE3OGVjMjRmNmRkZDFmOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9G
aWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaApAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZp
bHRlclJlc3VsdC5oIgorCitPQkpDX0NMQVNTIENJSW1hZ2U7CitPQkpDX0NMQVNTIENJQ29udGV4
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2Ug
OiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6
OkZpbHRlclJlc3VsdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYp
OworICAgIAorcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklm
RXhpc3RzKCkgb3ZlcnJpZGU7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJp
ZGU7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdl
KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJSZXN1bHQmIHJl
c3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcy
NzkyYjFhYmU5NzBkOGNkZjg5YWY4NWE1OGQ1NGQ1YWI4MDBiYjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0
Q29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKworI2lm
IFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1w
b3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6
c2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYgaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdl
KTsKKyAgICBtX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZl
cj4mIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cygpCit7CisgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXI7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVjNDg0OGEwMjczNTk4ZDA0NjFhZjkzZmMwMjI3YWQ2NDNi
Y2ZlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisq
CisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VyY2VH
cmFwaGljLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAiUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6
YXBwbHlDb3JlSW1hZ2UoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291
cmNlSW1hZ2UpOworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZTsKKyAgICBpZiAoaXM8SU9TdXJmYWNlSW1h
Z2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkpCisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VX
aXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2Up
LnN1cmZhY2UoKS5zdXJmYWNlKCldOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFn
ZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZv
cm1JbWFnZSgpLmdldCgpXTsKKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBkb3duY2FzdDxGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U+KHJlc3VsdCkuc2V0
SW1hZ2UoV1RGTW92ZShpbWFnZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAy
NjExMGNkZmIwYmI2Y2Y0OTA0NTgzODc3ODdhYzEwZmExNzFjZjE4Li5iM2QyYTU5NDY5NDIyMzUz
MjM0MzkzMjg2NTZlOTY0ZTljMTZlZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApA
QCAtMTA3LDE1ICsxMDcsMTggQEAgcHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8g
aW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdl
dCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
cmVzdWx0ID0gZmlsdGVyKCkuY3JlYXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCks
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5w
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMy
LDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNv
dXJjZVBpeGVsQXJyYXlMZW5ndGggPj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihz
b3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0
aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAg
Ly8gSWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBB
U1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZv
aWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgp
KVswXTsKICAgICBwbGF0Zm9ybUFwcGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihz
b3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNv
dXJjZUJBbmREZXN0WzBdOworCisgICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZv
aWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJh
eUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhl
bEFycmF5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDVm
MzZhOWMzYjcyZGE2MTljMjE4YmE4MmY2ZjE4MGJkYmExNTIwOWIuLmUzNjlkMzMxNDgwYWUzMTFl
YzEyMGJhOTcyMGRmYjQ1ZTk2ZjQ4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTE4Miw2ICsxODIsMTQgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QK
ICAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdl
QnVmZmVyKEZpbHRlciYsIEltYWdlQnVmZmVyKiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21l
dHJ5PiYmKQoreworLy8gICAgaWYgKG1fZGVsZWdhdGUpCisvLyAgICAgICAgbV9kZWxlZ2F0ZS0+
cmVjb3JkSW1hZ2VCdWZmZXJVc2UoKnNvdXJjZUltYWdlKTsKKy8vICAgIHJlY29yZEZpbHRlclVz
ZShmaWx0ZXIpOworLy8gICAgYXBwZW5kPERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oZmlsdGVyLnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGdlb21ldHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7
CiAgICAgcmVjb3JkU2F2ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggNDg2NmM4MmNhYzk0MzBkN2MzNzRhYzNmYTViZThjMDc3Y2Q5M2E0MS4uZDAxN2U2MDJi
Yzg4MWQzOGVjOTYyMWUyZDc4MTNmN2M5YWMxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0
ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9t
ZXRyeT4mJikgZmluYWw7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAK
aW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uZDU1OThmMjZj
MzNmOThjNmY0OTYwYTAxMjQxYmI4NjkyMjE2YTkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsy
Niw0NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2lu
Y2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBm
aWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6
QmxlbmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUo
QmxlbmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2Rl
KSk7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJs
ZW5kTW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpGRUJsZW5kKQorICAgICwgbV9tb2RlKG1vZGUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUpKTsKIH0KIAogYm9vbCBGRUJs
ZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1fbW9kZSA9PSBt
b2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vZGUsIG1vZGUpICE9IG1fbW9k
ZTsKIH0KIAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFQmxlbmQ6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlcios
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQm
IGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8g
aW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92
ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4sIGlu
MiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQotI2VuZGlmCiAKLVRleHRT
dHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQmxl
bmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwog
ICAgIHRzIDw8ICIgbW9kZT1cIiIgPDwgKG1fbW9kZSA9PSBCbGVuZE1vZGU6Ok5vcm1hbCA/ICJu
b3JtYWwiIDogY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBtX21vZGUpKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgK
aW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4uOGFkZTg3Yjcz
Y2I4YjFlYmU5MGUyNDUxMTMwZjY1MjM5Yjg3Yjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTMsNiArMyw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDMzICsyNCwyOSBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
RUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2RlKTsKKyAgICBzdGF0aWMgUmVmPEZFQmxl
bmQ+IGNyZWF0ZShCbGVuZE1vZGUpOwogCiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAK
IHByaXZhdGU6CisgICAgRkVCbGVuZChCbGVuZE1vZGUpOworCiAgICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5kIjsgfQogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlH
ZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQ
aXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIq
IHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CisgICAgRmlsdGVy
UmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmls
dGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQm
LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVu
ZChGaWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCAzODA2NWNiOTZjN2I0YjRiMDNmYzZi
MGVlZDg1YWM0YjZjOTY4YTU0Li5kODg2OTEwOWFhYTgyYzBjMDI3NzE0MjY3YmYyYTIyNzEzOTU1
MTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIz
LDI4ICsyNCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIs
IENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRyaXgpCi0gICAgLCBtX3R5cGUodHlwZSkK
LSAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKK1JlZjxGRUNvbG9yTWF0cml4PiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2
YWx1ZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeCh0eXBlLCBX
VEZNb3ZlKHZhbHVlcykpKTsKIH0KIAotUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9h
dD4mJiB2YWx1ZXMpCitGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlw
ZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6
OkZFQ29sb3JNYXRyaXgpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fdmFsdWVzKFdURk1v
dmUodmFsdWVzKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZp
bHRlciwgdHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKIGJvb2wgRkVDb2xvck1hdHJpeDo6
c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAgLTYzLDI1OCArNTYsNDggQEAgYm9vbCBG
RUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2
YWx1ZXMpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhm
bG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAg
ICBmbG9hdCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0gICAgZmxvYXQgYSA9IGFs
cGhhOwotCi0gICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2
YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKLSAgICBn
cmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlcyBbN10gKiBi
ICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OwotICAgIGJsdWUgICAgPSB2YWx1
ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNd
ICogYSArIHZhbHVlc1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsg
dmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVz
WzE5XSAqIDI1NTsKKyAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7
CisgICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOworICAgIGNvbXBv
bmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzNdID0g
KDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAu
Mjg1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVl
KTsKKyAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29t
cG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbOF0g
PSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRI
dWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxv
YXQqIGNvbXBvbmVudHMpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNv
bXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIGZsb2F0IHIg
PSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAg
cmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29t
cG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9u
ZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9uZW50
c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CisgICAgZmxvYXQg
Y29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0g
c2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsg
Y29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43
MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0g
PSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50
c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21w
b25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAg
IGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7
CisgICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAw
Ljc4NzsKKyAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1
ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsg
c2luSHVlICogMC4wNzI7CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWlu
YW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
KQorYm9vbCBGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJikgY29uc3QKIHsKLSAgICBhbHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVu
ICsgMC4wNzIxICogYmx1ZTsKLSAgICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVl
ID0gMDsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBl
IGZpbHRlclR5cGU+Ci1ib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJy
YXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9u
ZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxl
bmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5
cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRy
aXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0
aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAv
LyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYg
KHZhbHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2
YWx1ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Y29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFy
cmF5LmRhdGEoKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1
ZmZlclNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsK
LSAgICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRh
ID0gZGF0YTsKLSAgICAKLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9
IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVz
dC5kYXRhID0gZGF0YTsKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0
ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WyAwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sxNl0gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbIDJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sgN10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlz
b3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sxM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVs
bHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzddICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1s1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzhdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNv
ciwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNy
YywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxh
Z3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TFVNSU5BTkNFVE9BTFBIQTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0g
PSB7Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAot
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0g
ICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAw
LAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3Jj
LCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QTsKIH0KLSNlbmRpZgogCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLXZv
aWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCitGaWx0ZXJSZXN1bHQqIEZFQ29s
b3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29u
c3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIGZsb2F0IGNv
bXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
U0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9u
ZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOworICAgIEFT
U0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsK
IAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQ8Zmls
dGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXplKSkKLSAg
ICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7Ci0jZW5k
aWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBw
aXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkg
ewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBp
eGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7
Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRIdWVSb3Rh
dGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxB
cnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJl
ZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQg
Z3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAg
ICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAg
ICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsg
Myk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbWFn
ZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5C
dWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpp
bkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5s
b2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEo
KTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsK
LQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7
Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6
Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBzZXRJ
c0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwg
aW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVs
bHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKQEAg
LTMzOSwxMCArMTIyLDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAK
LVRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRT
dHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29sb3JNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgbV90eXBlIDw8
ICJcIiI7CiAgICAgaWYgKCFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgdHMgPDwgIiB2
YWx1ZXM9XCIiOwpAQCAtMzU3LDkgKzEzOSw2IEBAIFRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uCiAg
ICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwotICAgIAotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVy
biB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0
ZGI1NTI0ZWZhNGMxMjNmLi40MTE2MjAzZWE3MjUxMTFlMTg0ZWQ2NjU4ZmZlNTFjYzFiMzE1ODgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcsNyBAQCBlbnVtIENv
bG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShGaWx0
ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAgc3RhdGljIFJlZjxG
RUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwog
CiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAg
ICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhUeXBlKTsKQEAgLTQ2LDU0ICs0NSwyNSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAg
ICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBj
b21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0
ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAg
ICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVu
dHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIFZlY3Rv
cjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpOwog
CiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBW
ZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0
b3I8ZmxvYXQ+JiYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFw
cGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFy
eVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKICAg
ICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2
YWx1ZSkKLXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVu
dHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAu
MjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1
ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsK
LSAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9u
ZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAo
MC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpCi17Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0g
ICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9u
ZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBj
b21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1Owot
ICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45
Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUg
KiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNp
bkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcy
IC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICog
MC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NI
dWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiAr
IGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVj
dCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdl
YTU4ZjVmOWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi43OTQxYjg5OTdlZDU5ZGFlOWFh
YjRmYmZlYWU2M2ZkNmJmOTY1MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAK
QEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUs
MjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVy
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9y
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbXBvbmVudFRyYW5zZmVyKQorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBy
ZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlv
biwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rp
b24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOworfQorCitGRUNvbXBvbmVudFRyYW5z
ZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVk
RnVuY3Rpb24pCiAgICAgLCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1f
Ymx1ZUZ1bmN0aW9uKGJsdWVGdW5jdGlvbikKQEAgLTQzLDExOSArNDYsMTUgQEAgRkVDb21wb25l
bnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVy
LCByZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9u
KSk7Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKLXsKLX0KLQot
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCitGaWx0ZXJSZXN1bHQqIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlck91dHB1
dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5k
YXJ5U2V0KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0g
dHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1
ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25l
ZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91Ymxl
IHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0
ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICog
KHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6
Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0Vt
cHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxl
VmFsdWVzOwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4g
PCAxKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVl
cy5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KChpICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Ci0g
ICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgdmFsID0g
c3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1
cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkg
KyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25l
bnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNz
aW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJs
ZQotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1
ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0
KTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0g
ICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQot
Ci12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7
Ci0KLSAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxl
OwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJs
ZSwgYWxwaGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+
Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90
KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9
IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9m
ZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0gICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsK
LSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxl
cyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBU
YWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZFRhYmxl
W2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhhVGFibGVbaV0gPSBpOwot
Ci0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3Rb
XSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFi
bGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRl
RGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAg
ICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FS
UkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZ
X0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9yZWRGdW5jdGlvbi50eXBl
XShyZWRUYWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2dyZWVuRnVuY3Rp
b24udHlwZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21f
Ymx1ZUZ1bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rpb24pOwotICAgIGNhbGxF
ZmZlY3RbbV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1fYWxwaGFGdW5jdGlvbik7
CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21l
dHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA4
LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRT
dHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRT
dHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNmZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAg
ewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBA
IC0yMjEsOSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsK
ICAgICB9Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5k
ZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uN2QwMDY4NzIyMjBk
OGIwNDcyZGIyNzJmMTliZTE2ODE2OTRmMjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIzLDkgKzI0LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGVudW0gQ29tcG9uZW50VHJhbnNmZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVy
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBv
bmVudFRyYW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4g
Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biByZWRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dy
ZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1
bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVD
b21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRh
YmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFy
VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0g
ICAgc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVh
clRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwot
ICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVy
T3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUm
IHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJs
ZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVu
Y3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuY3Rpb247CkBA
IC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZj
YmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLjhiYmFlNzJhNmZlOWQ0MmQ5NTk2OTg4NDMyMmEwNTQwYmEx
ZTkyZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05F
T04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
Q29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5
cGUodHlwZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21w
b3NpdGVPcGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29t
cG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZF
Q29tcG9zaXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcGVyYXRvcikK
ICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykKQEAgLTQyLDI2
NCArNDcsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25z
dCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVmPEZFQ29tcG9z
aXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVP
cGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUs
IGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKQogewotICAg
IGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9
IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jb21w
b3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRlT3BlcmF0b3I7
CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAgIGlmIChtX2sx
ID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBtX2sxOwogfQog
CiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAobV9rMiA9PSBr
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsKIH0KIAogYm9v
bCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMgPT0gazMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAKIGJvb2wgRkVD
b21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lkIEZFQ29tcG9z
aXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZFQ29tcG9zaXRl
OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRI
TUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCi17
Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
KTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkp
XTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hh
ciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIs
IGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBz
Y2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0g
ICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUg
KC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAq
c291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAg
ICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAg
ICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQot
ICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9
IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5h
dGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlz
IGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21t
b24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVz
IGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0
aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBm
bG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUu
MGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAg
d2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
aTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwot
ICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIx
KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYg
KGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5h
dGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247
Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLXN0YXRpYyBpbmxp
bmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25l
ZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6
Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykg
KyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjpt
aW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAw
LjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8
PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsK
LSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlv
biwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNv
dXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBw
aXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNl
LCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYg
KGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRl
c3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8
MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczww
LCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBr
NCk7Ci0gICAgfQotfQotI2VuZGlmCisgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBl
ZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAvLyB0aGUgc2Vjb25kIGVm
ZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBl
ZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24o
aW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpLCBwcmltaXRpdmVTdWJyZWdpb24pOwogCi1pbmxpbmUg
dm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBpbnQgbGVuZ3RoID0g
c291cmNlLmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50Pihk
ZXN0aW5hdGlvbi5sZW5ndGgoKSkpOwotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVh
bGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4MykpOwotICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSNlbHNlCi0gICAgYXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRl
c3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0jZW5kaWYKLX0KKyAg
ICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZl
IHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhl
cmUuCisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1Jf
QVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotdm9pZCBG
RUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIHN3aXRjaCAo
bV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKLSAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUg
Zmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRo
ZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0
aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1
dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29t
cGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0
aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZl
Y3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2lu
Z1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVDb21w
b3NpdGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIEFT
U0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0ciwgZ2VvbWV0cnks
IGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUpCitzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRkVDb21wb3NpdGVPcGVy
YXRvciYgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dp
dGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
VU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTMy
OCwxOCArMTMxLDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlCiAgICAgcmV0dXJuIHRzOwog
fQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29tcG9zaXRlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIG9wZXJhdGlvbj1cIiIgPDwgbV90eXBl
IDw8ICJcIiI7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKQorICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX2NvbXBvc2l0ZU9wZXJhdG9yIDw8
ICJcIiI7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBrMT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9
XCIiIDw8IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2szIDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8
PCAiXCIiOwogICAgIHRzIDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi44
ZjdiNTUxZGM5NmQxZmQ3N2MzYjE5ODE3ZjZlMWZmNGQ2YjEyNWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywx
MiArMjQsOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1lbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgeworZW51bSBGRUNvbXBvc2l0ZU9w
ZXJhdG9yIHsKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOICAgID0gMCwgCiAgICAg
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiAgICAgICA9IDEsCiAgICAgRkVDT01QT1NJVEVfT1BF
UkFUT1JfSU4gICAgICAgICA9IDIsCkBAIC00MSwxMCArMzksMTAgQEAgZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRkVDb21wb3NpdGVPcGVyYXRv
ciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCi0gICAgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAg
ICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsKKyAgICBGRUNvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3Np
dGVPcGVyYXRvcjsgfQorICAgIGJvb2wgc2V0Q29tcG9zaXRlT3BlcmF0b3IoRkVDb21wb3NpdGVP
cGVyYXRvcik7CiAKICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazE7IH0KICAgICBi
b29sIHNldEsxKGZsb2F0KTsKQEAgLTU4LDMwICs1NiwyMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQg
azQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLXBy
b3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7
IH0KLQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVP
cGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIEZFQ29tcG9z
aXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZs
b2F0IGs0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5l
ZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3Vs
dFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
aW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisgICAgYm9vbCBhcHBseUFyaXRobWV0aWNT
b2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRp
Y1NvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0OworICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIHRlbXBsYXRlIDxpbnQg
YjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
c3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwg
ZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotI2VuZGlmCi0KLSAgICBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1f
Y29tcG9zaXRlT3BlcmF0b3I7CiAgICAgZmxvYXQgbV9rMTsKICAgICBmbG9hdCBtX2syOwogICAg
IGZsb2F0IG1fazM7CkBAIC04OSw0ICs4MCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDc1YjJlN2M2ZWEx
M2MyYzFjMmY4ZjY1ZDNkYjRlZDVjYzNhZmRhOGYuLjdlOGQxZmVjMjE2YmIyMDFlOTQ3ZjcyNWNk
ODdiZjZkOTNmMTcxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgot
I2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZl
TWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorUmVm
PEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXpl
JiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtl
cm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsTWF0cml4KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRy
aXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2Vy
bmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7Cit9CisKK0ZFQ29u
dm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbnZvbHZlTWF0cml4KQogICAgICwgbV9rZXJu
ZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKICAgICAsIG1fYmlh
cyhiaWFzKQpAQCAtNDksMTQgKzUxLDYgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1h
dHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBBU1NF
UlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4
PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUm
IGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9p
bnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29u
dm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZz
ZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBr
ZXJuZWxNYXRyaXgpKTsKLX0KLQogdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXpl
KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpCiB7CiAgICAgQVNTRVJUKGtlcm5lbFNpemUud2lk
dGgoKSA+IDApOwpAQCAtMTIwLDMxOCArMTE0LDIwIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6
c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29u
dm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxv
d2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAg
ICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwg
ICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAg
ICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0r
Ci0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2
YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2Yg
dGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAx
MCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6
IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dp
bmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0g
ICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBU
aGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAo
eDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIK
LSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdp
b24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8
IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6
IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAot
ICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9u
IEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwg
eTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24g
QyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAg
IGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNl
dEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVs
cyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVs
cyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtl
cm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxj
dWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVu
Y3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21t
b24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBh
cyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4K
LSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXggPSAyNTUpCitGbG9hdFJlY3QgRkVDb252
b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
Y2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7Ci0gICAgcmV0dXJuIGNoYW5uZWw7
CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotdGVtcGxhdGU8Ym9vbCBwcmVz
ZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzKQorRmlsdGVyUmVzdWx0KiBGRUNvbnZvbHZlTWF0cml4OjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBi
b3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2Vy
dmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3Ig
KyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBp
eGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJp
YXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAg
ICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAg
ICAgKytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywg
bWF4QWxwaGEpOwotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdu
b3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBo
YVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0Nzg5KQotI2VuZGlmCi0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHBy
ZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xp
cFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8g
ZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAo
bV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQu
eCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBp
bnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENv
bnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyAr
IChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5u
b3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNT
RVJUKG1fZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5
RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFz
ZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNs
aXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQot
ICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZv
ciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQg
a2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAg
ICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAg
aW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0Vt
cHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0
b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRv
dGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAg
ICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
ICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFs
c1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKysp
KTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAg
ICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVs
UGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAg
IC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAg
ICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2Vy
dmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5k
c3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFz
KTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAg
ICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3Jl
YXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewot
ICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8
IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53
aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0
OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RF
X0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAg
ICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBh
aW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkg
PSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAg
ICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBh
aW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAg
ICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsK
LSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkK
LSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWlu
dGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGgg
KyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1w
bGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQg
eTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0
YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdp
ZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0
T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVs
WDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsK
LSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0g
ICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRv
dGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZp
c29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMK
LSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAw
OyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAg
ICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUo
KSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7
Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAg
ICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAg
dG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0
b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAg
ICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxW
YWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZh
bHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAg
ICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxz
WzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwot
ICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNb
Ml0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2Fz
dDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFW
YWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10g
Kz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwot
ICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVs
VmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAg
ICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNp
emUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFs
cywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2Vy
bmVsUGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAg
ICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFy
dEtlcm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3
YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50
IHlFbmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZl
cnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQg
aW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEp
Ci0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0
b20sIHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBp
bnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24g
Y2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAv
LyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAg
IGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihw
YWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRP
dXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZv
aWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAg
c291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhl
bEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAg
IFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5
LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0
aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwK
LSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAg
Ly8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWlu
dFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9t
ID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYg
KGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1
YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFi
c29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkp
IC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJv
dHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20g
KyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRB
cHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0
YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48
aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNl
dEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3Rh
cnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQ
aXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20p
OwotCi0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJv
dHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55
KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50
U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwg
cGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwot
ICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAg
ICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNl
dC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQ
bGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsK
IH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEVkZ2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCArMTQ5LDkgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXBy
ZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29udm9sdmVNYXRyaXgiOwotICAgIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6ZSA8PCAiXCIgIgogICAgICAgIDw8ICJr
ZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4ICA8PCAiXCIgIgogICAgICAgIDw8ICJk
aXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIKQEAgLTQ2NSw5ICsxNjAsNiBAQCBUZXh0
U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdAogICAgICAgIDw8ICJlZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9k
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVu
aXRMZW5ndGggPDwgIlwiICIKICAgICAgICA8PCAicHJlc2VydmVBbHBoYT1cIiIgPDwgbV9wcmVz
ZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFiODk1YTZlMWU1MDA1NGUxM2RiYS4uZWI5
MTQ4MDNiMjVmMTdlZDFjODIyNjViY2ViNTVmYWJlOWNkYzdmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVy
Y3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI1LDYgQEAKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDkgKzM4LDcgQEAgZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNv
bnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0g
ICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBj
b25zdCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRM
ZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0
cml4KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVs
U2l6ZTsgfQogICAgIHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXplJik7CkBAIC02Nyw0
MSArNjUsMTcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UHJlc2VydmVBbHBoYShib29sKTsKIAog
cHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsK
LSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7
Ci0gICAgfTsKLQotICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYs
IGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBl
LCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgIEZF
Q29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwg
ZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29udm9sdmVNYXRyaXgiOyB9CiAKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRl
bXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBj
bGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBs
eShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlT
ZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFs
dWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICB2b2lkIGZhc3RT
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQg
eTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBC
b3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHky
KTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0cwotICAgIHN0YXRpYyBjb25zdCBpbnQg
c19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBs
aW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlz
b3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCmluZGV4IGVlYjE3MjhkYjM1ZThhYzMw
MmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmEzOWRkZGFkNDZmMzk5MWNhOWJiMjFiZTFlMjNmZmJm
NzA2MGNhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDM2ICsyOCwyMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkK
LSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3Is
IHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpEaWZmdXNlTGln
aHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUo
Y29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25z
dGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
RGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0K
IAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxl
LCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorRkVEaWZm
dXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkK
KyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNl
KSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRp
ZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxp
Z2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNl
Q29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQotewotICAgIGlmIChtX2RpZmZ1c2VDb25z
dGFudCA9PSBkaWZmdXNlQ29uc3RhbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Rp
ZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
VGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRl
bnQgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2Nh
bGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgImRpZmZ1c2VDb25z
dGFudD1cIiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVs
VW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiLCAiIDw8IG1fa2VybmVs
VW5pdExlbmd0aFkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGlu
ZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VM
aWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMu
Ljk2MDA2MjA0OWEyMmZlNWE4NWNiZmViYjM0OWVjZjFhYmQ0MTc5NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVz
ZUxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjUsMjEgKzI2LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
TGlnaHRTb3VyY2U7Ci0KIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRp
bmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShG
aWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGln
aHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsg
fQotICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKLQotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRp
bmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKIHByaXZhdGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRp
bmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7Cisg
ICAgCisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
ICJGRURpZmZ1c2VMaWdodGluZyI7IH0KKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIyODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2
M2ZhMS4uMjQ0ZWY4NTJjNWVhOWZkY2ZhMDQ5ZWZiODhlM2I3YzcyMTY2YzBiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI0LDEzMiArMjUsNjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaXNwbGFj
ZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpEaXNw
bGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikK
LSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV9zY2Fs
ZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0
ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rv
ciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1h
cDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBz
Y2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXApCisgICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKKyAgICAs
IG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV9zY2FsZShzY2Fs
ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcChmaWx0ZXIs
IHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wg
RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQogewotICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3Ig
PT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feENoYW5u
ZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV94Q2hhbm5lbFNlbGVjdG9yLCB4Q2hhbm5lbFNlbGVjdG9yKSAh
PSBtX3hDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlD
aGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
KQogewotICAgIGlmIChtX3lDaGFubmVsU2VsZWN0b3IgPT0geUNoYW5uZWxTZWxlY3RvcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2Vs
ZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV95Q2hh
bm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yKSAhPSBtX3lDaGFubmVsU2VsZWN0b3I7CiB9
CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQogewotICAg
IGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zY2Fs
ZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
c2NhbGUsIHNjYWxlKSAhPSBtX3NjYWxlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAogewogICAgIC8vIFNwZWM6
IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMg
dG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8vIGFuZCBkb2VzIG5vdCBhcHBseSB0byB0
aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBp
biBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNlLgogICAgIC8vIFRoZSByZXN1bHQgaXMg
aW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNwbGFjZW1lbnQgb2Yg
dGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlu
cHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkpOworICAgIEFTU0VSVChpbnB1dHMuc2l6
ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmNvbG9yU3BhY2UoKTsKIH0KIAotdm9p
ZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCitGbG9hdFJlY3QgRkVEaXNwbGFjZW1lbnRNYXA6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8g
RG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNw
ZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQg
eCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxh
Y2VtZW50TWFwOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBjb25zdCB1
bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwg
KyB5ICogcm93Qnl0ZXM7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwot
ICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBBU1NFUlQobV94
Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJUKG1feUNoYW5u
ZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g
4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFs
dWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlz
cGxhY2VtZW50SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChpbnB1dEltYWdl
LT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVy
JiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJS
ZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9y
WCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNj
YWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNj
YWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxl
LmhlaWdodCgpICogMC41OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1
dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKICAgICAKLSAgICBpbnQgZGlzcGxhY2VtZW50Q2hh
bm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0g
eUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5dGVzID0gcGFpbnRTaXplLndpZHRoKCkg
KiA0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMg
fSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBh
aW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5
ICogcm93Qnl0ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lk
dGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFy
dE9mZnNldCArIHggKiA0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHgg
KyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0
ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNl
dFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZv
ckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNw
bGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKLQotICAgICAgICAgICAgdW5zaWdu
ZWQqIGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVz
dGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwotICAgICAgICAg
ICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAg
fHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25QaXhlbFB0ciA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNY
LCBzcmNZLCByb3dCeXRlcykpOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBhcHBseVBs
YXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNl
dCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpAQCAtMTc0LDE3ICsxMDcsMTIgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxT
ZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRURp
c3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEaXNw
bGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRGlzcGxh
Y2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNjYWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJc
IiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feENoYW5uZWxTZWxlY3Rv
ciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3lDaGFubmVs
U2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIz
YTNhMi4uYzY1NTQ3ZjEyOGZkYWQwMmFiZDZlOTUzNjY5YTJjMDIxZWY1MTMzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDcgKzM2LDcgQEAgZW51
bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50
TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9y
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAg
ICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvcjsgfQogICAgIGJvb2wgc2V0WENo
YW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKQEAgLTQ4LDIyICs0Nywy
MyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9
CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHNldFJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkgb3ZlcnJpZGU7
Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBp
bnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7
IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxl
Y3RvciAtIDE7IH0KKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CiAgICAgQ2hhbm5l
bFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CkBAIC03MSw0ICs3MSwzIEBAIHByaXZh
dGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRl
eCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3ODlmNmJiZGQ4Li5kOTBjMDljNTQxZmVl
ZWNhMDQ1Mjk5MGJiMzYwZDk3ZmNmODQzNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDE2ICsy
NCwxOSBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQu
aCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICAKLUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBz
dGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkRyb3BTaGFkb3cpCisKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRl
KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFk
b3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgs
IGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNo
YWRvdykKICAgICAsIG1fc3RkWChzdGRYKQogICAgICwgbV9zdGRZKHN0ZFkpCiAgICAgLCBtX2R4
KGR4KQpAQCAtNDIsMTAwICs0Niw1MSBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0
ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewogfQog
Ci1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwg
ZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYg
c2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitJbnRPdXRzZXRzIEZFRHJvcFNoYWRv
dzo6b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hh
ZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0
eSkpOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVP
dXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3Rk
OjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSksCisgICAgICAgIHN0ZDo6
bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCksCisgICAgICAgIHN0ZDo6bWF4
PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAorICAgICAgICBzdGQ6Om1heDxp
bnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCisgICAgfTsKIH0KIAotdm9pZCBGRURy
b3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRURyb3BT
aGFkb3c6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0K
LSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1
dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGFic29sdXRl
UGFpbnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKLQotICAgIEludFNpemUg
a2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwg
eyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAg
ICBhdXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogCisgICAgZHJh
d2luZ1JlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyh7IG1fZHgs
IG1fZHkgfSkpOworICAgIAorICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0c1swXS0+ZHJhd2lu
Z1JlY3QoKSk7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICAKICAgICAvLyBX
ZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBi
ZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVj
dC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQ
YWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAg
IGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2Vj
dChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2Vy
bmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtl
cm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnku
Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24p
OwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRl
clJlc3VsdCogRkVEcm9wU2hhZG93OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVy
UmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgQVNTRVJUKCFzdGFj
ay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9
IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZp
bHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBi
bHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zm
c2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7Cisg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwotICAgIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKLQotICAgIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghc291cmNlSW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29udGV4dCA9
IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3No
YWRvd09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJ
bWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxw
aGEoMSk7Ci0KLSAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0
LCBtX3NoYWRvd0NvbG9yKTsKLQotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVz
dWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9
IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShz
b3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVm
ZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Ci0KLSAgICByZXN1bHRDb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3Vs
dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKLQotICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJh
d2luZ1JlZ2lvbik7Ci19Ci0KLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29u
c3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7Ci0gICAgICAgIHN0
ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAotICAgICAgICBzdGQ6
Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAotICAgICAgICBzdGQ6Om1h
eDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8
aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQotICAgIH07CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNl
dCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIi
IDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxv
b2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5l
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRz
OwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRl
ZTg4YTI5ZWZmMzg0Yy4uNGY4NWEzOTdlNWM4YTgyM2E3NjZiYjBlYzBhYWJhM2MyYTQ1MWIyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYs
IGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgs
IGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFj
aXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7
IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRY
OyB9CkBAIC00MSwyNCArNDEsMjYgQEAgcHVibGljOgogICAgIGZsb2F0IGR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CiAK
LSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0Nv
bG9yOyB9IAorICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhZG93Q29sb3I7IH0KICAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBzaGFk
b3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KIAogICAgIGZsb2F0IHNo
YWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd09wYWNpdHk7IH0KICAgICB2b2lk
IHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0eSkgeyBtX3NoYWRvd09wYWNpdHkg
PSBzaGFkb3dPcGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVEcm9wU2hhZG93KEZpbHRlciYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBG
RURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBj
b25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BTaGFkb3ciOyB9CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEludE91dHNldHMgb3V0c2V0cygp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNl
dHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1
dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKQEAgLTY5LDQg
KzcxLDMgQEAgcHJpdmF0ZToKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYzYjZiMDEuLmNlNDRk
OWViODFjNzU1YjIyZmY5MWFlZWQ5YTczMjhhYWIyNjM2YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMyw2ICsz
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNCwyMiArMjUsMjEgQEAKICNpbmNsdWRlICJGRUZsb29kLmgiCiAK
ICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3Is
IGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZs
b29kKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0
eShmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9y
JiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZs
b29kKGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLVJlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNp
dHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9v
ZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVGbG9vZCkKKyAgICAsIG1fZmxv
b2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoZmlsdGVyLCBmbG9vZENvbG9yLCBm
bG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTU4LDE3ICs1OCwyMCBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3Bh
Y2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUZsb29kOjpkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBw
cmltaXRpdmVTdWJyZWdpb247Cit9CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmls
dGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91
bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9y
KCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3Vs
dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0o
b3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRT
dHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRmxv
b2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2
MTczNDhlLi40OGUwZmY4OGMyODEzMjc4OTAxZGMzOTkwMDU5NGI1MTA4M2YxZjVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwx
NCArMjMsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBv
cGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7CkBA
IC0zNywyNyArMzcsMjcgQEAgcHVibGljOgogICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAgICAgYm9vbCBzZXRGbG9vZE9wYWNpdHkoZmxv
YXQpOwogCitwcml2YXRlOgorICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5
KTsKKworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVGbG9vZCI7IH0KKyAgICAKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3Qg
cGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlz
IGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2Yg
dGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUg
eyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0K
ICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBm
bG9hdCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KLQotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0
ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0
UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBDb2xvciBtX2Zsb29kQ29sb3I7CiAgICAgZmxvYXQgbV9mbG9vZE9w
YWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4YWIzNjM5NDM2NS4uOTQyZjI0
YTNkOTdiNDRhN2ZjNzhhMWVkNWEyODM1NWVkZWI0NWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNDUwICsyNiwzOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNp
bmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAot
I2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgot
I2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdh
dXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBw
aUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1
ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFS
aWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4
LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9y
IGRldGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAg
ICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVz
IC8gMiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0Owot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAg
ICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMg
JSAyKSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVy
OjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3Np
YW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUdhdXNz
aWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VN
b2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVy
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0
ZXIsIHgsIHksIGVkZ2VNb2RlKSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERl
dmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0K
LQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
KQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBv
bmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRB
cnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYg
ZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwg
aW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAgICBjb25z
dCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCog
ZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQg
aXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBp
bnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQotICAgICAg
ICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2Vy
bmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAq
IHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBv
ZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0
V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGlu
ZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0g
ZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4K
LSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9m
ZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXks
Ci0gICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBp
bnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBjb25zdCBpbnQgbWF4S2Vy
bmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0
UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZm
ZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50
OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0
YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkg
d2lkdGgvbGVuZ3RoOiBpdCBpcyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBu
dW1iZXIgb2YgcGl4ZWxzIHdpbGwgYmUKLSAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFu
bmVscy4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAg
ICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW1SID0gMCwgc3Vt
RyA9IDAsIHN1bUIgPSAwLCBzdW1BID0gMDsKLQotICAgICAgICBpZiAoZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSkgewotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotICAgICAgICAgICAg
ICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisr
OwotICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1
bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcu
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlk
ZTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRl
T2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1HIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBr
ZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBz
dHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0Rh
dGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0
clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4Umln
aHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9m
ZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsy
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJlLgotICAgICAgICAgICAgLy8gR2V0IGVk
Z2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRlJy4KLSAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsKLSAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAobGluZSArIChlZmZlY3RXaWR0
aCAtIDEpICogc3RyaWRlKTsKLQotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwgZHhSaWdodDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgdmFsdWVzIG9mICdp
Jz8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsK
LSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0
OwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdl
VmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
RyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdl
VmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdo
dFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdW1S
ICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA8IGR4
TGVmdCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBz
dW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRy
ID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3Jj
UHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEg
LT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4
ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1
ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zm
c2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAg
ICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKLXsKLSAg
ICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
ZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgotICAgIGlmIChrZXJuZWxT
aXplICUgMiAhPSAxKQotICAgICAgICBrZXJuZWxTaXplICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2Fz
dDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKLSAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVm
ZmVjdFdpZHRoOwotICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAg
ICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
ZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5k
YXRhKCk7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZm
ZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RPdXRCdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1w
b3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFs
IGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgotICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4g
ZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgotICAgIHNpemVfdCB0bXBCdWZmZXJTaXpl
ID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0
QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxv
Yyh0bXBCdWZmZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZl
X0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAw
LCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAg
dkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVm
ZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VF
ZGdlRXh0ZW5kKTsKLSAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUg
ZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlv
QnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1
ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0j
ZW5kaWYKLQotaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXpl
LCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGludCBk
eExlZnQgPSAwOwotICAgIGludCBkeFJpZ2h0ID0gMDsKLSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAg
ICBpbnQgZHlSaWdodCA9IDA7Ci0gICAgCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZm
ZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBC
dWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAo
a2VybmVsU2l6ZVgpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVY
LCBkeExlZnQsIGR4UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAg
ICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBr
ZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAg
ICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4
UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwg
aXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChm
cm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2VybmVsU2l6
ZVkpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQs
IGR5UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlm
ICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXpl
WSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVy
KCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0
cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgaXNBbHBoYUlt
YWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVy
LCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0
IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9t
QnVmZmVyKSB7Ci0gICAgICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVy
LT5sZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXIt
PmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQotewotICAgIGlu
dCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAg
ICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVy
cy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXks
IHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFp
bnRTaXplKQorc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7Ci0j
aWYgIVVTRShBQ0NFTEVSQVRFKQotICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lk
dGgoKTsKLSAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAg
IGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXpl
LmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWlu
dFNpemUud2lkdGgoKSk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVs
Sm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAg
ICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChq
b2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdo
dCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0
bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3Rh
bCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dp
dGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUu
aGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBw
YWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAw
OwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlz
OwotCi0gICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBl
eHRyYUhlaWdodDsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4
dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgaW50
IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWln
aHQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICog
c2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFy
YW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2Fu
bGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBw
YXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
aGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6
ZVggPSBrZXJuZWxTaXplWDsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBr
ZXJuZWxTaXplWTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4
ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhl
IGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQg
am9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAg
ICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IGRlc3Rp
bmF0aW9uT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgICAg
IGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVp
Z2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRq
dXN0ZWRCbG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhl
aWdodCAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3Vy
cmVudFkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hl
aWdodCAqIHNjYW5saW5lOwotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEo
KSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3Vy
Y2VPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAg
IH0KLSNlbmRpZgotCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxk
IGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZ
LCBwYWludFNpemUpOworICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAqIHBpRmxvYXQpOwog
fQogCiBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAg
Ly8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1h
a2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZs
YXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxl
IHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVs
U2l6ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3Rvcigp
ICsgMC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KLSAgICAKLUludFNpemUgRkVH
YXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2
aWF0aW9uKQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5l
bFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgQVNTRVJUKHN0ZERl
dmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwogICAg
IEludFNpemUga2VybmVsU2l6ZTsKQEAgLTQ4MywxMiArNzIsMTIgQEAgSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pCiAgICAgcmV0dXJuIGtlcm5lbFNpemU7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRp
b24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlv
biAvKmZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSovKTsKIH0K
IAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUg
c3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUg
PSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDcy
ICs4NSw0OCBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZs
b2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwogfQogCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIEludFNp
emUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
KyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCksIG91
dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OworfQogCi0gICAgRmxvYXRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBk
cmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVz
IG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0
LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUp
CisgICAgICAgIHJldHVybiBkcmF3aW5nUmVjdDsKIAotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBr
ZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRl
WSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIEludFNpemUga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAotICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhF
ZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUo
bWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFu
ZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0
aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICog
MC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkg
KiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3Vi
cmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUdhdXNzaWFuQmx1cjo6
aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIo
KSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJuZWxTaXplLnNjYWxlKGZpbHRlcigpLmZp
bHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0
KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9
CiAKLUludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAorRmlsdGVyUmVz
dWx0KiBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJl
c3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0g
ICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9z
dGRZIH0pOwotICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lk
dGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwor
CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1
dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3Ry
ZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlR2F1
c3NpYW5CbHVyIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRY
IDw8ICIsICIgPDwgbV9zdGRZIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRT
Y29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4M2JlYWFhMTc2NDdjYmIyZDNl
Li42YjNjY2Y5MjVlZTU1NGQzZGExMjZiNGVlNzdlMDBiMDIxYjY4ZDEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIyLDU5ICsyMyw0MiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGRUNvbnZvbHZl
TWF0cml4LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVHYXVzc2lhbkJsdXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBj
cmVhdGUoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBS
ZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CiAK
ICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9Ci0gICAg
dm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0KTsKKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblgo
ZmxvYXQgeCkgeyBtX3N0ZFggPSB4OyB9CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25ZKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0KTsK
KyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkgeyBtX3N0ZFkgPSB5OyB9CiAKICAg
ICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VNb2RlOyB9Ci0g
ICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUpOworICAgIHZvaWQgc2V0RWRnZU1vZGUo
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgfQogCi0gICAg
c3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImLCBGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtl
cm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2Fs
Y3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50
U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsK
KyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxv
YXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNl
dFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwogCiBwcml2YXRlOgotICAgIEZF
R2F1c3NpYW5CbHVyKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBG
RUdhdXNzaWFuQmx1cihmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1c3NpYW5CbHVyIjsg
fQogCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICog
MTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0g
ICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVzc2lhbkJs
dXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJy
YXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKLSAg
ICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCBr
ZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsKKyAgICBJ
bnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxw
aGFJbWFnZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0
ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMg
dm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5l
cmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmlu
ZGV4IGRmMTc2ZjhlMDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLmQ2ZDU5NDJmMmZm
YmEyZGMzOWZiZGQ4NGU2YjQyYWNjZjJjNTUwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAq
IENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3
MCArMjgsNzcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgi
CiAKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVP
Ti5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0
LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgTGlnaHRpbmdUeXBl
IGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgdHlwZSkKLSAgICAsIG1fbGlnaHRpbmdUeXBlKGxp
Z2h0aW5nVHlwZSkKLSAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCi0g
ICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKK0ZFTGlnaHRpbmc6OkZFTGlnaHRp
bmcoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYgc291cmNlLCBGaWx0ZXJGdW5jdGlvbjo6VHlwZSB0eXBlKQorICAgIDogRmls
dGVyRWZmZWN0KHR5cGUpCisgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgICwgbV9zdXJmYWNlU2Nh
bGUoc3VyZmFjZVNjYWxlKQogICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50
KQogICAgICwgbV9zcGVjdWxhckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQpCiAgICAgLCBtX3Nw
ZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0
aFgoa2VybmVsVW5pdExlbmd0aFgpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVu
aXRMZW5ndGhZKQorICAgICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2UpKQogewogfQogCi1ib29s
IEZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpCi17Ci0gICAg
aWYgKG1fc3VyZmFjZVNjYWxlID09IHN1cmZhY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcikKK2Jvb2wgRkVMaWdodGluZzo6c2V0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGlmIChtX2xpZ2h0aW5nQ29sb3IgPT0gbGlnaHRpbmdDb2xvcikKKyAgICBpZiAo
bV9jb2xvciA9PSBjb2xvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9saWdodGlu
Z0NvbG9yID0gbGlnaHRpbmdDb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2Vy
bmVsVW5pdExlbmd0aFgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5p
dExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSkKLXsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3RleHByIGlu
dCBjUGl4ZWxTaXplID0gNDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZz
ZXQgPSAzOwotc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDB4RkYpOwotCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNv
ZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25z
dGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjQgPSAtMSAvIDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYz
ID0gLTIgLyAzLmY7Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICog
Y2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICog
Y2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
b2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0
b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIgKiBs
ZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9t
UmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0y
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIg
KyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNl
dCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAotewotICAgIGludCByaWdodEFscGhh
T2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7Ci0gICAg
Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBo
YU9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotICAg
IGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxw
aGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotCi0gICAgaW50IGxlZnQg
PSBhbHBoYVdpbmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50b3BM
ZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwotCi0gICAgaW50IGJvdHRv
bUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0gICAgaW50IGJvdHRvbSA9IGFscGhh
V2luZG93LmJvdHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNoaWZ0
ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICBhbHBoYVdpbmRv
dy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzFdWzJdID0g
cmlnaHQ7Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKLSAgICAK
LSAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29tZSBz
cG90LWNoZWNrcy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cu
dG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQotICAgIHJldHVybiB7Ci0gICAgICAg
IC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQg
KyBib3R0b21SaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBi
b3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5l
IEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
ICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2Vu
dGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsg
Ym90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
LXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0
b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1
cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAot
ICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0gICAgfTsK
LX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxl
KGZsb2F0IHN1cmZhY2VTY2FsZSkKIHsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9w
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9w
UmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0
ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAy
ICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0gICAgfTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3N1cmZhY2VTY2FsZSwgc3VyZmFjZVNjYWxlKSAhPSBt
X3N1cmZhY2VTY2FsZTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQogewotICAgIGludCBs
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNl
dCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAt
dG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExlZnQg
LSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fZGlmZnVzZUNvbnN0YW50LCBkaWZmdXNlQ29uc3RhbnQpICE9IG1fZGlmZnVzZUNv
bnN0YW50OwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIElu
dFNpemUgbm9ybWFsMkRWZWN0b3IpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3Rh
bnQoZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKIHsKLSAgICBzZXRQaXhlbEludGVybmFsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBmYWN0b3JYLCBmYWN0b3JZLCBub3JtYWwyRFZl
Y3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJDb25z
dGFudCkgIT0gc3BlY3VsYXJDb25zdGFudDsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFs
cGhhKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQpCiB7Ci0gICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5zdXJmYWNlU2NhbGU7Ci0g
ICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9IG1fbGln
aHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0RhdGEsIHgsIHksIHop
OwotCi0gICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKLSAgICBpZiAobm9ybWFsMkRWZWN0b3IuaXNa
ZXJvKCkpIHsKLSAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwgMSkuIFRoaXMgaXMg
YSBxdWl0ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVM
aWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1f
ZGlmZnVzZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5n
RGF0YS5saWdodFZlY3Rvckxlbmd0aDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhh
bGZ3YXlWZWN0b3JMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGln
aHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkg
LyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKLSAgICAg
ICAgICAgIGZhY3RvclggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICogZGF0YS5zdXJmYWNlU2Nh
bGUsCi0gICAgICAgICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3IuaGVpZ2h0KCkgKiBkYXRh
LnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIDEuMGYKLSAgICAgICAgfTsKLSAgICAgICAgZmxv
YXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOwotCi0gICAgICAg
IGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAg
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9y
ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAgICAgIGxpZ2h0aW5n
RGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3Iueigp
ICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAgICB9OwotICAgICAg
ICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7
Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAgICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9z
cGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAo
bm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIG1fc3BlY3VsYXJFeHBv
bmVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGlnaHRTdHJlbmd0aCA+IDEpCi0g
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxOwotICAgIGlmIChsaWdodFN0cmVuZ3RoIDwgMCkKLSAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IDA7Ci0KLSAgICB1aW50OF90IHBpeGVsVmFsdWVbM10gPSB7
Ci0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0Rh
dGEuY29sb3JWZWN0b3IueCgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhf
dD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci55KCkgKiAyNTUuMGYp
LAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdE
YXRhLmNvbG9yVmVjdG9yLnooKSAqIDI1NS4wZikKLSAgICB9OwotICAgIAotICAgIGRhdGEucGl4
ZWxzLT5zZXRSYW5nZShwaXhlbFZhbHVlLCAzLCBvZmZzZXQpOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fc3BlY3VsYXJFeHBvbmVudCwgc3BlY3VsYXJFeHBvbmVudCkgIT0gbV9zcGVjdWxh
ckV4cG9uZW50OwogfQogCi0vLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0
byB0aGUgc2FtZSBwaXhlbCBidWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRoZSBhbHBoYSBjaGFu
bmVsLCBhbmQgd3JpdGVzIHRoZSBub24tYWxwaGEgY2hhbm5lbHMuCi12b2lkIEZFTGlnaHRpbmc6
OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25z
dCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGlu
dCBlbmRZKQotewotICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdlIHJlYWQg
ZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgotICAgIEFTU0VSVChzdGFydFkpOwot
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkg
PCBlbmRZOyArK3kpIHsKLSAgICAgICAgaW50IHJvd1N0YXJ0T2Zmc2V0ID0geSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCBwcmV2aW91c1Jvd1N0YXJ0ID0g
cm93U3RhcnRPZmZzZXQgLSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAg
ICBpbnQgbmV4dFJvd1N0YXJ0ID0gcm93U3RhcnRPZmZzZXQgKyBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotCi0gICAgICAgIC8vIGFscGhhV2luZG93IGlzIGEgbG9jYWwgY2FjaGUg
b2YgYWxwaGEgdmFsdWVzLgotICAgICAgICAvLyBGaWxsIHRoZSB0d28gcmlnaHQgY29sdW1ucyBw
dXR0aW5nIHRoZSBsZWZ0IGVkZ2UgdmFsdWUgaW4gdGhlIGNlbnRlciBjb2x1bW4uCi0gICAgICAg
IC8vIEZvciBlYWNoIHBpeGVsLCB3ZSBzaGlmdCBlYWNoIHJvdyBsZWZ0IHRoZW4gZmlsbCB0aGUg
cmlnaHQgY29sdW1uLgotICAgICAgICBBbHBoYVdpbmRvdyBhbHBoYVdpbmRvdzsKLSAgICAgICAg
YWxwaGFXaW5kb3cuc2V0VG9wKGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFRvcFJpZ2h0KGRh
dGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotCi0gICAgICAgIGFscGhhV2luZG93LnNldENlbnRlcihkYXRhLnBpeGVs
cy0+aXRlbShyb3dTdGFydE9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAg
YWxwaGFXaW5kb3cuc2V0UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAgICAgIGFscGhhV2luZG93
LnNldEJvdHRvbShkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldEJvdHRvbVJpZ2h0KGRhdGEucGl4ZWxz
LT5pdGVtKG5leHRSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0KLSAgICAgICAgaW50IG9mZnNldCA9IHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwg
b2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIGFscGhhV2luZG93LnNoaWZ0KCk7
Ci0gICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRh
LCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1hbChv
ZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBs
YXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyogcGFyYW1ldGVycykKK2Jvb2wgRkVMaWdodGlu
Zzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCiB7Ci0gICAg
cGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KHBhcmFtZXRlcnMt
PmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJh
bWV0ZXJzLT55RW5kKTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2tlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWCkgIT0gbV9rZXJuZWxVbml0TGVuZ3RoWDsKIH0KIAotdm9p
ZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAg
ICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7
Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4OwotICAgIHVu
c2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUgLSAxKSAqIHJvd3NUb1Byb2Nlc3MpIC8gc19taW5pbWFsUmVjdERp
bWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAx
KSB7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgcGFyYWxsZWwgam9icwotICAgICAgICBXVEY6OlBh
cmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygm
cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAg
ICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAgICAgICBpbnQgam9iID0gcGFyYWxs
ZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAoam9iID4gMSkgewotICAgICAgICAg
ICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJ5U3RlcCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBm
ZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAg
ICAvLyB5U3RlcCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQg
YnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQg
eVN0ZXAgPSByb3dzVG9Qcm9jZXNzIC8gam9iOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNX
aXRoRXh0cmEgPSByb3dzVG9Qcm9jZXNzICUgam9iOwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0
ID0gMTsKLSAgICAgICAgICAgIGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAg
ICAgICAgICAgIFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0
aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBh
cmFtcy55U3RhcnQgPSB5U3RhcnQ7Ci0gICAgICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpv
YnNXaXRoRXh0cmEgPyB5U3RlcCArIDEgOiB5U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
eUVuZCA9IHlTdGFydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5l
eGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFs
bGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotCi0gICAgcGxhdGZvcm1BcHBs
eUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSkKIHsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxs
eSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotI2lmIENQVShB
Uk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElC
TEUpCi0gICAgcGxhdGZvcm1BcHBseU5lb24oZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbHNlCi0g
ICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbmRpZgorICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fa2VybmVsVW5pdExlbmd0aFksIGtlcm5lbFVuaXRMZW5n
dGhZKSAhPSBtX2tlcm5lbFVuaXRMZW5ndGhZOwogfQogCi1ib29sIEZFTGlnaHRpbmc6OmRyYXdM
aWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
CitGbG9hdFJlY3QgRkVMaWdodGluZzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3QKIHsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhp
bmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBX
MyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0
dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNj
YWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdo
dCAtIDE7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9y
Q29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHBhaW50
aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIs
IGcsIGIpOwotCi0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFp
bnRpbmdEYXRhKTsKLQotICAgIC8vIFRvcCBsZWZ0LgotICAgIGludCBvZmZzZXQgPSAwOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMs
IGNGYWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gVG9w
IHJpZ2h0LgotICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRh
LnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zm
c2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRh
LmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAg
b2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYz
LCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICBp
ZiAod2lkdGggPj0gMykgewotICAgICAgICAvLyBUb3Agcm93LgotICAgICAgICBvZmZzZXQgPSBj
UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3Ix
ZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gQm90dG9tIHJv
dy4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4
ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVs
U2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2Miwg
ZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGhlaWdodCA+
PSAzKSB7Ci0gICAgICAgIC8vIExlZnQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVt
bk5vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBSaWdodCBjb2x1bW4uCi0gICAgICAgIG9m
ZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsK
LSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyAr
K3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAg
ICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5O
b3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49
IDMpIHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5
KGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0gICAgfQotCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdU
eXBlID09IERpZmZ1c2VMaWdodGluZykgewotICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hh
bm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAg
ZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpIHsKLSAgICAg
ICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKLSAgICAgICAgICAgIHVp
bnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMSk7Ci0gICAgICAgICAgICB1aW50OF90
IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIpOwotICAgICAgICAgICAgLy8gYWxwaGEgc2V0
IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQo
aSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6
IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cHJpbWl0aXZlU3VicmVnaW9uOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlck91dHB1dCYg
b3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5
U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwog
Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExl
bmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKLSAg
ICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3Nl
cnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMg
a2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgot
ICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxl
bWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAq
dGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1dGVQ
YWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRpbmco
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0
ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggMGZmZmNkMDY0Mzk2ZDhmNGI2NDA4MjI2OWNjMjA3
NGY3YzlkYmRiYy4uYjg5OGFjOTc4ODdiY2RmZjAxZGI1NmRmMzUwMjg4MzhlY2JjNDE0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMzkgKzMxLDUxIEBACiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRT
b3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1v
biBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5n
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFG
b3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQor
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBi
b29sIHNldENvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQogICAgIGJvb2wgc2V0U3VyZmFjZVNjYWxl
KGZsb2F0KTsKIAotICAgIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9saWdodGluZ0NvbG9yOyB9Ci0gICAgYm9vbCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENv
bG9yJik7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZm
dXNlQ29uc3RhbnQ7IH0KKyAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7CisKKyAg
ICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0
YW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKIAorICAgIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0K
KyAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworICAgIAogICAgIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsgfQog
ICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOwogCiAgICAgZmxvYXQga2VybmVs
VW5pdExlbmd0aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAg
Ym9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJj
ZSYgbGlnaHRTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9Cisg
ICAgY29uc3QgTGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdl
dCgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3RE
aW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxl
bCBqb2JzCisgICAgRkVMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiwgRmlsdGVyRnVuY3Rpb246OlR5cGUpOwogCi0gICAg
ZW51bSBMaWdodGluZ1R5cGUgewotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIFNw
ZWN1bGFyTGlnaHRpbmcKLSAgICB9OwotICAgIAotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0g
ICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
IGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBl
YXNpZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzBdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tTGVm
dCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9Ci0KLSAgICAgICAgdWlu
dDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0K
LSAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMV1bMV07IH0KLSAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMl1bMV07IH0KLQotICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZh
bHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRD
ZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9Ci0gICAg
ICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2
YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsg
YWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFs
dWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0
b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9Ci0KLSAgICAg
ICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKLSAgICAgICAgICAgIGFscGhhWzFdID0gYWxw
aGFbMl07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2hpZnQoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7Ci0gICAgICAgICAgICBzaGlmdFJv
dyhhbHBoYVsxXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7Ci0gICAgICAgIC8vIFRoaXMgc3Ry
dWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogcGl4ZWxzOwotICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0g
ICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRo
RGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAg
ICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Owot
ICAgICAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdp
bmRvdyYpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0gICAgc3RydWN0IFBs
YXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTGlnaHRpbmcqIGZpbHRl
cjsKLSAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0gICAgICAgIExpZ2h0U291cmNlOjpQYWlu
dGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgICAgICBpbnQgeVN0YXJ0OwotICAgICAgICBpbnQg
eUVuZDsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgcGxh
dGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb24qKTsKLQot
ICAgIEZFTGlnaHRpbmcoRmlsdGVyJiwgTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJiwg
VHlwZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFTGlnaHRpbmciOyB9Ci0KLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRB
cnJheSYsIGludCwgaW50KTsKLQotICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBp
bnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3Ip
OwotICAgIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9h
dCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxw
aGEpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGlu
dCBzdGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0j
aWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0Nf
Q09NUEFUSUJMRSkKLSAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4
cG9uZW50KTsKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGlu
Z0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0jZW5kaWYKLQotICAg
IExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGln
aHRTb3VyY2U7Ci0KLSAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9z
dXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9z
cGVjdWxhckNvbnN0YW50OwogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9h
dCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7Cisg
ICAgUmVmPExpZ2h0U291cmNlPiBtX3NvdXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2Iz
Zi4uYTYwNDI5YWM1NDgyZGU4ZjZlYjIyYTk2Yzg5YWU5MWNjYjNkZGRhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1
MSArMjMsNDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVy
JiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxG
RU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykp
OwogfQogCi1SZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVN
ZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6IEZpbHRl
ckVmZmVjdChUeXBlOjpGRU1lcmdlKQorICAgICwgbV9udW1iZXJPZkVmZmVjdElucHV0cyhudW1i
ZXJPZkVmZmVjdElucHV0cykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZp
bHRlcikpOworICAgIEFTU0VSVChtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKIH0KIAotdm9pZCBG
RU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorY29uc3QgQXRvbVN0cmluZyYgRkVNZXJn
ZTo6ZWZmZWN0TmFtZSgpCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5w
dXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiRkVNZXJnZSIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4gc19lZmZlY3ROYW1lOwor
fQorCitGaWx0ZXJSZXN1bHQqIEZFTWVyZ2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25z
dAoreworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJPZkVmZmVjdElucHV0cyk7
CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8
UmVmPEZpbHRlclJlc3VsdD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6ZSA9IG1f
bnVtYmVyT2ZFZmZlY3RJbnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1dHMuYXBw
ZW5kKHN0YWNrLnRha2VMYXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJl
c3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW5C
dWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9y
bShvdXRwdXQsIGlucHV0cywgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAot
VGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7Ci0g
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNT
RVJUKHNpemUgPiAwKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwi
XVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBpbnB1dEVmZmVj
dChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRz
IDw8ICIgbWVyZ2VOb2Rlcz1cIiIgPDwgbV9udW1iZXJPZkVmZmVjdElucHV0cyA8PCAiXCJdXG4i
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTljZWNlZDUwNzNlNTdi
MDE5NGViY2YxOGYyNjA3Li5hMWMwNzhlMDMwYTU3YjlmNzFjOTc5ZjljMTkyZDRkYmIxZGM4M2Vj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjgsMTYgKzI5LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVNZXJn
ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNZXJn
ZT4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKHVuc2ln
bmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJp
bmcmIGVmZmVjdE5hbWUoKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAg
IEZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCiAgICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQq
IGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3Vu
ZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRl
clJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZF
ZmZlY3RJbnB1dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKaW5kZXggOGE3ZTViNjY3YWI3NzNiOTBiODkwZTM4Mzg2MzkzNTYyYjlkOGRmNS4uMmI0MTU2
NzNhNTU5MzkwMmQyZjRiZmM1NDc1YTIxMDNjZmI0ZmFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApA
QCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTct
MjAxOCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIw
MTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwy
NjUgKzI1LDcwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5
LmgiCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVz
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNs
dWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVk
ZSAiRmlsdGVyUmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KEZpbHRlciYg
ZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNb3JwaG9sb2d5KQot
ICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKLSAgICAsIG1fcmFk
aXVzWShyYWRpdXNZKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9y
cGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQg
cmFkaXVzWSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xvZ3kobW9ycGhv
bG9neU9wZXJhdG9yLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKLVJlZjxGRU1vcnBob2xvZ3k+
IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitGRU1vcnBob2xvZ3k6OkZF
TW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCBy
YWRpdXNYLCBmbG9hdCByYWRpdXNZKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFTW9ycGhv
bG9neSkKKyAgICAsIG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcikKKyAg
ICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9y
KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3Jw
aG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsK
LSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5
cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
bW9ycGhvbG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBob2xvZ3lPcGVy
YXRvcjsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkK
IHsKLSAgICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwogfQogCiBib29s
IEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAgIGlmIChtX3Jh
ZGl1c1kgPT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWSA9
IHJhZGl1c1k7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9y
YWRpdXNZLCByYWRpdXNZKSAhPSBtX3JhZGl1c1k7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5Ojpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpkcmF3
aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRl
UGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBw
YWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRp
dXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBh
aW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBh
aW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3Qo
KTsKIAotc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50
IHdpZHRoKQotewotICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OwotfQorICAgIGRyYXdp
bmdSZWN0LmluZmxhdGUoZ2VvbWV0cnkucmVzb2x2ZVRvRmlsdGVyQ29vcmRpbmF0ZXMoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBp
eGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwg
cHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGNvbXBvbmVudHMpCitib29sIEZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIHJldHVybiBQYWNrZWRD
b2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50
cykgfTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdGVtcGxh
dGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCitGaWx0ZXJSZXN1
bHQqIEZFTW9ycGhvbG9neTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3Vs
dFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
cGVyQ29tcG9uZW50TWluKGEsIGIpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIHJldHVybiBwZXJDb21wb25lbnRN
YXgoYSwgYik7Ci19CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotdGVtcGxhdGU8TW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQotewotICAgIGF1dG8g
ZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6
OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXku
ZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZv
ciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4
ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEg
eyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgp
ICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0g
bWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJl
bXVtOwotfQotCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1
bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgs
IGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0g
ICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+
KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNv
bHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXks
IHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1
dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi11c2luZyBD
b2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+Owot
Ci10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRy
ZW1hJiBrZXJuZWwpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3JwaG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAg
YXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtl
cm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRy
ZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lO
TElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29s
dW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
a2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0g
ICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtl
cm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0g
ICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJh
eSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5
ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1c1gg
PSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5n
RGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsK
LSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFTU0VS
VChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQoc3Rh
cnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1
bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIg
KiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5
KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7
Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSAr
IDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0YXJ0
IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29s
dW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFk
aXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBLZXJu
ZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSBy
YWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNy
Y1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRo
LCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAg
ICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVs
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4
ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFr
ZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1f
dHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW0pCi17Ci0g
ICAgcGFyYW0tPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtLT5wYWludGluZ0Rh
dGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAg
Ly8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFz
b25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9h
dCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRh
LnJhZGl1c1kpICogMC42NTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbEFyZWEgPSAo
MTYwICogMTYwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLSAg
ICAKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIDg7
Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigo
cGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdodCAqIGtlcm5lbEZhY3Rvcikg
LyBtaW5pbWFsQXJlYSwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1i
ZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0gICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4g
MSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2Ug
ZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgotICAg
ICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRz
OwotICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUg
bnVtT2ZUaHJlYWRzOwotICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKLSAgICAgICAgICAg
IGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbS5maWx0ZXIgPSB0aGlzOwot
ICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAg
IGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7
Ci0gICAgICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAg
IHBhcmFtLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKLSAgICB9
Ci0KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0
YS5oZWlnaHQpOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJh
dGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdl
UmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQotewotICAgIGlmIChyYWRpdXNYIDwgMCB8
fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLQotICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUo
RmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1
cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9
IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6
bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAg
aW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJh
ZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAg
IHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAg
ICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0g
ICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAq
IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYo
ZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
cGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSAqIGZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLQotICAgIHBsYXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKLX0KLQot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dp
dGNoIChtb3JwaG9sb2d5T3BlcmF0b3IpIHsKICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9VTktOT1dOOgogICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAt
Mjk3LDE1ICsxMDIsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7
CiB9CiAKLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwgIltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1v
cnBob2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFk
aXVzWCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5
YzVhMTEuLjUwMDUyOTIwY2Y0Yjk0NDk4NTRhN2UwZDcxY2U5NzkxNmQ1YmY1MjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjIsMTEgKzIzLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVu
dW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAg
ICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSA9IDEsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIK
QEAgLTM0LDEwICszNCwxMCBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFz
cyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3Jw
aG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9y
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0
b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9Cisg
ICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAg
IGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNl
dFJhZGl1c1goZmxvYXQpOwpAQCAtNDYsNDAgKzQ2LDIxIEBAIHB1YmxpYzoKICAgICBib29sIHNl
dFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAg
ICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVNb3JwaG9sb2d5IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHko
RmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3Qs
IGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRl
clJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkq
IHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5
OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCBy
YWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMgewotICAgICAgICBGRU1vcnBob2xvZ3kqIGZpbHRlcjsKLSAgICAgICAgaW50IHN0YXJ0
WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRp
bmdEYXRhOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3Qg
UGFpbnRpbmdEYXRhJik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0KLSAgICBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIG1fdHlwZTsKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbV9tb3JwaG9sb2d5T3BlcmF0
b3I7CiAgICAgZmxvYXQgbV9yYWRpdXNYOwogICAgIGZsb2F0IG1fcmFkaXVzWTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCmluZGV4IDAyNzBkYjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLmIxNmQy
NzVlM2Q3NmI3YWZhOTI5OGM5ODM3ZGU4ZDY1MDg5ZjIyMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC00LDYg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNzEgKzI1LDUzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIKIAotI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBm
bG9hdCBkeSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok9mZnNldCkKK0ZFT2Zm
c2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVPZmZzZXQpCiAgICAgLCBtX2R4KGR4KQogICAgICwgbV9keShkeSkKIHsKIH0KIAotUmVm
PEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxv
YXQgZHkpCitSZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGZpbHRlciwgZHgsIGR5KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZHgsIGR5KSk7CiB9CiAKLXZvaWQg
RkVPZmZzZXQ6OnNldER4KGZsb2F0IGR4KQorRmxvYXRSZWN0IEZFT2Zmc2V0OjpkcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsK
LSAgICBtX2R4ID0gZHg7Ci19CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byBkcmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKIAotdm9pZCBGRU9m
ZnNldDo6c2V0RHkoZmxvYXQgZHkpCi17Ci0gICAgbV9keSA9IGR5OworICAgIGRyYXdpbmdSZWN0
Lm1vdmUoZ2VvbWV0cnkucmVzb2x2ZVRvRmlsdGVyQ29vcmRpbmF0ZXMoeyBtX2R4LCBtX2R5IH0p
KTsKKworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oZHJhd2lu
Z1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKK2Jvb2wgRkVPZmZzZXQ6OmlzQWxwaGFJbWFnZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRS
ZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3Vu
ZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1
cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVPZmZzZXQ6OmFwcGx5KEZpbHRlck91
dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJv
dW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRh
a2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhp
cyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOwotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0
cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgo
KSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06Oklu
ZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oCmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmUyMTgx
OTJmYzg1NTdkODQ3ZWQwNzkwN2E5N2EwM2E2MzI0MDIyYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2NiBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgZmxvYXQg
ZHgoKSBjb25zdCB7IHJldHVybiBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAg
dm9pZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZsb2F0IGR5KCkgY29u
c3QgeyByZXR1cm4gbV9keTsgfQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOworICAgIHZvaWQgc2V0
RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsK
IAogcHJpdmF0ZToKLSAgICBGRU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOwor
ICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBj
b25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0Jiwg
RmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9OwogCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwgbV9keTsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gRkVP
ZmZzZXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5OworICAgIGRlY29k
ZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFT2Zm
c2V0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LnR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVPZmZzZXQ7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3
NGY5YzQ4N2ExNDRjLi42OTkyNDQzM2Y5M2ZlNGYyMWZlYmJhYmY0ODQ0NTg3NjZlZWU2Yzk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIkxp
Z2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKEZp
bHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxhckxp
Z2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQs
IHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
V1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVTcGVj
dWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNv
bnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExl
bmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBG
RVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNwZWN1
bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBv
bmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3VyZmFj
ZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVTcGVj
dWxhckxpZ2h0aW5nKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdo
dGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFu
dCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNw
ZWN1bGFyTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpz
ZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1f
c3BlY3VsYXJDb25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9zcGVjdWxhckNvbnN0YW50ID0gc3BlY3VsYXJDb25zdGFudDsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKLXsKLSAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50
ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1
bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVTcGVjdWxhckxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VT
Y2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAic3BlY3VhbENv
bnN0YW50PVwiIiA8PCBtX3NwZWN1bGFyQ29uc3RhbnQgPDwgIlwiICIKICAgICAgICA8PCAic3Bl
Y3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJcIl1cbiI7Ci0KLSAg
ICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZl
Y3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQx
ZTQ3MzVkOWY0OTc5OGQzOTgxOGJmM2IyNDk1OGEuLmNhZTViODJmYmViYzVhYjYzNDM1NjkwNWU5
YmU3ZTZmM2YwMzJmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMjAgKzI4LDE0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGlj
IEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5n
PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVTcGVjdWxhckxp
Z2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25z
dCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCi0gICAgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQotICAgIGJvb2wg
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50
KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9Ci0gICAgYm9vbCBzZXRTcGVj
dWxhckV4cG9uZW50KGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVTcGVjdWxhckxpZ2h0aW5nKGNv
bnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gIkZFU3BlY3VsYXJMaWdodGluZyI7IH0KIAotcHJpdmF0ZToK
LSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNhMGM1ZGIyZmNhYzIw
YWQuLjgwYzI3NzlkZGFmYzQ4ODVkYjI0OGJjODhjNzE1MzgyOTk0OWZmYTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9z
c2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsODAgKzIy
LDQ2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUaWxlLmgiCiAKLSNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikKLSAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitSZWY8RkVUaWxlPiBGRVRpbGU6
OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKCkpOwogfQogCi1S
ZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZFVGlsZTo6RkVUaWxl
KCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRVRpbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOwogfQogCi12b2lkIEZFVGlsZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRVRpbGU6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBp
cyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJl
Y3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8g
U291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhl
IGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7
Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24o
KTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxv
Y2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0
VHlwZVNvdXJjZUlucHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0
aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdl
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVS
ZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9k
ZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAg
dGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5N
YXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7CisgICAg
Ly8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIGRyYXdpbmdSZWN0IGZvciA8ZmVUaWxlPi4KKyAgICBy
ZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOworfQogCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0g
SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAg
ICBpZiAoIXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybjsKK2Jvb2wgRkVUaWxlOjppc0Fs
cGhhSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7Cit9CiAKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1h
eEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworRmlsdGVyUmVzdWx0KiBGRVRp
bGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmls
dGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2su
aXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8g
cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCks
IHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKLSAgICBmaWx0ZXJDb250ZXh0LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVy
bikpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotVGV4
dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVRp
bGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29w
ZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKLQorICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZV1cbiI7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaAppbmRleCA0OWJkOTlmMDk0NDdkYWUxY2YwOWFmMTIzNThjNmRlODQw
Njg3NzE0Li43MzExYjUxOWNhZTkxMmQwYmYzODljYmQ4ZDkzZTc0ZGNlMjQwYmU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI3
ICsyMywyNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVU
aWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVRp
bGU+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAK
IHByaXZhdGU6Ci0gICAgRkVUaWxlKEZpbHRlciYpOworICAgIEZFVGlsZSgpOwogCiAgICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CiAK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVGlsZTsgfQorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNB
bHBoYUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3Rv
ciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZp
bHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYWMyMzQ2ZThhNGJhNThh
YWE5MjRhNmQ2N2JkNWU0Yjc3ZGQyMjY4Zi4uNGQ5OTc2Y2JiZDYwNDExZTNjMzZhNjk0N2MzOTkx
ZTE5OTc1YWViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwzMSArMjYsMTkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0
cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEg
LSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5k
QW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0g
MjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wu
IDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGht
IHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0
aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGlj
IGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFu
ZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19y
YW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRp
YyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQg
c19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6
OmNyZWF0ZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRp
bGVzKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNl
RnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVz
KSk7Cit9CiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJi
dWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKLSAgICAsIG1fdHlwZSh0eXBl
KQorRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5
cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9j
dGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVUdXJidWxlbmNlKQorICAgICwgbV90dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlw
ZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VG
cmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMp
CkBAIC01OSw0MDUgKzQ3LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYg
ZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAKLVJl
ZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBUdXJi
dWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsK
LX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKK2Jv
b2wgRkVUdXJidWxlbmNlOjpzZXRUdXJidWxlbmNlVHlwZShUdXJidWxlbmNlVHlwZSB0dXJidWxl
bmNlVHlwZSkKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVy
YnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0gICAg
aWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV90dXJidWxlbmNlVHlwZSwgdHVyYnVs
ZW5jZVR5cGUpICE9IG1fdHVyYnVsZW5jZVR5cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNl
RnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkg
IT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxv
YXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNl
RnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9zZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VG
cmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVt
T2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1PY3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0
Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGlsZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNp
b24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENv
bXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVk
ZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBp
ZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0K
LWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0
IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVk
IDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBz
X3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhp
bXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0g
MDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGll
bnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICog
c19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAg
ICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRp
ZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7
Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0t
aSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0g
ICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAg
ICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSAr
IDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxv
Y2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBm
b3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJi
dWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0
aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRp
bGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkg
LyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNo
RGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRp
b24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0g
ICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAg
ICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAg
ICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0
OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQg
LSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVy
bGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24p
OwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rp
b24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lk
IHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXpl
KQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChi
eDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0
Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQot
ICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3Np
dGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRq
dXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFw
WCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEu
d3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0g
ICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0g
c19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Js
b2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9
IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUlu
ZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQot
ICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19j
dXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7
Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0
byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0g
dUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQotICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAv
LyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkw
ICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEg
PSByeDAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwotICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFj
dGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07
Ci0gICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwot
ICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBx
WzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVku
ZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3Rv
cltqICsgYnkxXTsKLSAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsx
XTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAg
ICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24g
LSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxv
YXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVy
biBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ks
IGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDIpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2Ny
aWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6
OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1
KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8
dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAy
NTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1D
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZl
Y3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAq
IHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAg
IGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsK
LSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZl
Y3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZ
KG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlm
IChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4g
U3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAot
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1
KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlw
ZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVkKSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhi
b29sIHN0aXRjaFRpbGVzKQogewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIElu
dFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgw
LCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5l
bCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52
ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBz
dGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBw
b2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRv
IHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdl
KHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAg
ICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3Rp
dGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBwYXJh
bWV0ZXJzLT5maWx0ZXItPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJh
bWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMt
PnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lv
bjsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0
ZXJSZXN1bHQqIEZFVHVyYnVsZW5jZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRl
clJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25Q
aXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRT
aXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCku
c2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsK
LSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9z
ZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0
UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgp
OwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1U
aHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0g
c3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1U
aHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RG
OjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsK
LQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0byBudW1K
b2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVtSm9icyA+
IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpv
YnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhF
eHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9i
czsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2Jz
OwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxS
ZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAg
ICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBw
YXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJh
bXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0
WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwg
am9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJh
bXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3Rh
cnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxK
b2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVk
IG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBh
cmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIHJldHVybiBhcHBseVBs
YXRmb3JtKG91dHB1dCwgeyB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5j
ZVR5cGUgdHlwZSkKQEAgLTQ3NiwxMSArMTA2LDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0
CitUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0eXBl
KCkgPDwgIlwiICIKKyAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IHR1cmJ1bGVuY2VUeXBlKCkgPDwg
IlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8
PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAgICA8PCAic2VlZD1cIiIg
PDwgc2VlZCgpIDw8ICJcIiAiCiAgICAgICAgPDwgIm51bU9jdGF2ZXM9XCIiIDw8IG51bU9jdGF2
ZXMoKSA8PCAiXCIgIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKaW5kZXggNGQ1MzZiMzdhODBhYWRmOTExZWJmY2U4
OTc3NGNkM2NjZWNiNWNmYi4uMDAzNTUzNGFhMTNlMzQxZDk2MGQwNTdkZTg2MmMxOWRjMGUyMjQx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRh
IEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsOSArMjQsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDEwICszNiwxMCBAQCBl
bnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNy
ZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBi
b29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGVuY2VUeXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIFR1cmJ1bGVuY2VUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldFR5cGUoVHVyYnVs
ZW5jZVR5cGUpOworICAgIFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90dXJidWxlbmNlVHlwZTsgfQorICAgIGJvb2wgc2V0VHVyYnVsZW5jZVR5cGUoVHVy
YnVsZW5jZVR5cGUpOwogCiAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVgoKSBjb25zdCB7IHJldHVy
biBtX2Jhc2VGcmVxdWVuY3lYOyB9CiAgICAgYm9vbCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7
CkBAIC01OSw3MCArNTcsMTkgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3RpdGNoVGlsZXMoYm9v
bCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsK
LSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0g
ICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0
IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwg
Y29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAg
ICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1
ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0g
ICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAg
IGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRT
aXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBm
bG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAg
ICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBk
ZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJh
Y3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1p
bmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAg
aW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgot
ICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBh
cmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKLSAgICAgICAgVWludDhD
bGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdE
YXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgICAgIGludCBzdGFydFk7
Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9u
V29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVy
JiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAg
RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRp
bGVzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVUdXJidWxlbmNlIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUg
eyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkp
OyB9Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0
aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERh
dGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0
YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxS
ZWdpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9p
ZCopOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgVHVyYnVsZW5jZVR5cGUgbV90eXBl
OworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUdXJi
dWxlbmNlVHlwZSBtX3R1cmJ1bGVuY2VUeXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7
CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WTsKICAgICBpbnQgbV9udW1PY3RhdmVzOwpAQCAt
MTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdlOWM5MTdlNGZjMDFjYzlhNmViYzg0M2QyYjVjNjM2ZmY0MzQyZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5cGUpCisgICAgOiBGaWx0ZXJGdW5jdGlvbih0eXBl
KQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK3N0ZDo6dHVw
bGU8UmVmUHRyPEltYWdlQnVmZmVyPiwgRmxvYXRSZWN0PiBGaWx0ZXI6OmFwcGx5KEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIEZpbHRlclJlc3VsdFZlY3RvciBzdGFjazsKKyAgICBGaWx0ZXJP
dXRwdXQgb3V0cHV0KG1fcmVuZGVyaW5nTW9kZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGFwcGx5
KG91dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlLCAqZ2VvbWV0cnkpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIHJldHVybiB7IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKSwgZ2VvbWV0cnktPmNv
bnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzdWx0LT5kcmF3aW5nUmVjdCgpKSB9OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCBhMmQ5OTc5M2IwZGIyMjU4YmM0NzZkZGNj
MjljMGNlMjYxMTBiYzFmLi4wMWFkN2QxMzY1NWY4YjY1YjBhYzdiNWJhYWFhMjQ0YWQzODMxMTcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNTkgKzIxLDI0
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlICJG
aWx0ZXJGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAi
UmVuZGVyaW5nTW9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlckVm
ZmVjdDsKK2NsYXNzIEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CisgICAgdXNpbmcg
RmlsdGVyRnVuY3Rpb246OmFwcGx5OwogCi1jbGFzcyBGaWx0ZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWx0ZXI+IHsKIHB1YmxpYzoKLSAgICBGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
YnNvbHV0ZVRyYW5zZm9ybSwgZmxvYXQgZmlsdGVyU2NhbGUgPSAxKQotICAgICAgICA6IG1fYWJz
b2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgICAgICwgbV9maWx0ZXJTY2Fs
ZShmaWx0ZXJTY2FsZSkKLSAgICB7IH0KLSAgICB2aXJ0dWFsIH5GaWx0ZXIoKSA9IGRlZmF1bHQ7
Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJ
bWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KLSAgICBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9Ci0K
LSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVy
UmVzb2x1dGlvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNp
emUmIGZpbHRlclJlc29sdXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1
dGlvbjsgfQotCi0gICAgZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
clNjYWxlOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRl
clNjYWxlID0gc2NhbGU7IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Ci0KICAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KLSAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwg
RmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3Qg
eyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rk
Ojp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSBjb25zdDsK
IAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRl
clJlc29sdXRpb24pCi0gICAgICAgIDogbV9maWx0ZXJSZXNvbHV0aW9uKGZpbHRlclJlc29sdXRp
b24pCi0gICAgewotICAgIH0KKyAgICBGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgVHlwZSk7CiAKLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwotICAgIEZsb2F0
U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVU
cmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkIH07Ci0gICAgZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKKyAg
ICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyQm91bmRhcnlTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODY3MDExYzQ5NDk5MjVi
N2FlZjgzZDY2YmUwMDcwNzE1OWI3M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCkBAIC0wLDAg
KzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyQm91bmRhcnlT
ZXQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgRmxhZ3MgeworICAgICAgICBIYXNYICAgICAg
PSAxIDw8IDAsCisgICAgICAgIEhhc1kgICAgICA9IDEgPDwgMSwKKyAgICAgICAgSGFzV2lkdGgg
ID0gMSA8PCAyLAorICAgICAgICBIYXNIZWlnaHQgPSAxIDw8IDMKKyAgICB9OworCisgICAgRmls
dGVyQm91bmRhcnlTZXQoKSA9IGRlZmF1bHQ7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldChjb25z
dCBGbG9hdFJlY3QmIGJvdW5kYXJpZXMsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgICAg
IDogbV9ib3VuZGFyaWVzKGJvdW5kYXJpZXMpCisgICAgICAgICwgbV9mbGFncyhmbGFncykKKyAg
ICB7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9ib3VuZGFyaWVzLngoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNZKSkKKyAgICAgICAgICAgIHJldHVybiBt
X2JvdW5kYXJpZXMueSgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4g
bV9ib3VuZGFyaWVzLndpZHRoKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gaGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNIZWlnaHQpKQorICAgICAgICAgICAg
cmV0dXJuIG1fYm91bmRhcmllcy5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fYm91bmRhcmllczsKKyAgICBP
cHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1MWMzNDhlYzdmNjNlNGNj
OTI3ZGIxMDguLjg4ZThmY2YyZDYzZmIwMDFkNmQ3MmM1NzI5ZDA3NDhmOTYzNjgyOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI0LDY2MCArMjQsOTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmls
dGVyUmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgPGFy
bV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2Vs
ZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmls
dGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIsIFR5cGUgdHlwZSkKLSAgICA6
IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKHR5cGUpCi17
Ci19Ci0KLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBtX2Fic29s
dXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1
dEVmZmVjdHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZWZmZWN0LT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLX0KLQotdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgLy8gRmlsdGVy
cyBpbiBTVkcgY2xpcCB0byBwcmltaXRpdmUgc3VicmVnaW9uLCB3aGlsZSBDU1MgZG9lc24ndC4K
LSAgICBpZiAobV9jbGlwc1RvQm91bmRzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0Lmlu
dGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZm
ZWN0UmVjdCkpOwotfQotCi1GbG9hdFBvaW50IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCB1c2VyU3BhY2VQb2ludCkgY29uc3QKLXsKLSAgICBG
bG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQb2ludCh1c2VyU3BhY2VQb2ludCwgbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24pOwotICAg
IGFic29sdXRlUG9pbnQubW92ZUJ5KC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwot
ICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OwotfQotCi1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3Qp
IGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFpbnRSZWN0Lmxv
Y2F0aW9uKCk7Ci0gICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwot
ICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OnBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRh
cnlTZXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICBGbG9hdFJlY3Qg
ZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIHNjYWxl
KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnNjYWxl
KHNjYWxlKS50cmFuc2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAg
cmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIC8vIEZF
VGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFr
ZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVjdCBzdWJyZWdp
b247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3Rz
KCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gaW5w
dXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmlt
aXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9CisgICAgLy8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdz
IHN1YnJlZ2lvbiBmb3IgPGZlVGlsZT4uCisgICAgaWYgKCFpbnB1dHMuaXNFbXB0eSgpICYmIHR5
cGUoKSAhPSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkgeworICAgICAgICBmb3IgKGF1dG8m
IGlucHV0IDogaW5wdXRzKQorICAgICAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi51
bml0ZShpbnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOwogICAgIH0gZWxzZQotICAgICAgICBz
dWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgLy8g
QWZ0ZXIgY2FsbGluZyBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gb24gdGhlIHRh
cmdldCBlZmZlY3QsIHJlc2V0IHRoZSBzdWJyZWdpb24gYWdhaW4gZm9yIDxmZVRpbGU+LgotICAg
IGlmIChmaWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAg
IHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICBh
dXRvIGJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzKCk7Ci0gICAgaWYgKGhhc1goKSkKLSAg
ICAgICAgc3VicmVnaW9uLnNldFgoYm91bmRhcmllcy54KCkpOwotICAgIGlmIChoYXNZKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRZKGJvdW5kYXJpZXMueSgpKTsKLSAgICBpZiAoaGFzV2lkdGgo
KSkKLSAgICAgICAgc3VicmVnaW9uLnNldFdpZHRoKGJvdW5kYXJpZXMud2lkdGgoKSk7Ci0gICAg
aWYgKGhhc0hlaWdodCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJpZXMu
aGVpZ2h0KCkpOwotCi0gICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7
Ci0KLSAgICBhdXRvIGFic29sdXRlU3VicmVnaW9uID0gbV9maWx0ZXIuYWJzb2x1dGVUcmFuc2Zv
cm0oKS5tYXBSZWN0KHN1YnJlZ2lvbik7Ci0gICAgYXV0byBmaWx0ZXJSZXNvbHV0aW9uID0gbV9m
aWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpOwotICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZp
bHRlclJlc29sdXRpb24pOwotICAgIC8vIFNhdmUgdGhpcyBiZWZvcmUgY2xpcHBpbmcgc28gd2Ug
Y2FuIHVzZSBpdCB0byBtYXAgbGlnaHRpbmcgcG9pbnRzIGZyb20gdXNlciBzcGFjZSB0byBidWZm
ZXIgY29vcmRpbmF0ZXMuCi0gICAgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oYWJzb2x1
dGVTdWJyZWdpb24pOwotCi0gICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBm
aWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2Zp
bHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2Fs
ZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJz
b2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwotCi0gICAgc2V0TWF4RWZmZWN0UmVjdChhYnNvbHV0
ZVN1YnJlZ2lvbik7Ci0gICAgcmV0dXJuIHN1YnJlZ2lvbjsKLX0KLQotRmlsdGVyRWZmZWN0KiBG
aWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKLXsKLSAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihudW1iZXIgPCBtX2lucHV0RWZmZWN0cy5z
aXplKCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwotfQot
Ci1zdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KmVmZmVj
dCwgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKLXsKLSAgICBhbGxF
ZmZlY3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPm51bWJlck9m
RWZmZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKLSAg
ICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0KLSAgICByZXR1cm4g
YWxsRWZmZWN0cy5zaXplKCk7Ci19Ci0KLXVuc2lnbmVkIEZpbHRlckVmZmVjdDo6dG90YWxOdW1i
ZXJPZkVmZmVjdElucHV0cygpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZl
Y3QqPiBhbGxFZmZlY3RzOwotICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZl
Y3RzKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKLXsKLSAgICBpZiAoaGFzUmVz
dWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVj
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpOwotICAg
ICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRvIHRoZSBj
dXJyZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKGluLCBpKTsKLSAgICB9CisgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24g
PSBnZW9tZXRyeS5maWx0ZXJSZWdpb24oKTsKIAotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwor
ICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb247CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBt
X2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBt
X2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8
IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAi
IDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhF
ZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9uICIgPDwgbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlv
bigpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WChib3VuZGFyeVNldC54KCkudmFsdWVf
b3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi54KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdp
b24uc2V0WShib3VuZGFyeVNldC55KCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lv
bi55KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcnlTZXQud2lk
dGgoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLndpZHRoKCkpKTsKKyAgICBw
cmltaXRpdmVTdWJyZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJ5U2V0LmhlaWdodCgpLnZhbHVlX29y
KGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24uaGVpZ2h0KCkpKTsKIAotICAgIGlmIChtX2Fic29s
dXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNv
cnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAgIH0KLSAgICAKLSAgICAvLyBBZGQgcGxh
dGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgot
ICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5pbnRl
cnNlY3QoZ2VvbWV0cnkuZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJy
ZWdpb247CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICAvLyBNdXN0IG9w
ZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2
ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7
Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYg
aW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0LT5kcmF3aW5n
UmVjdCgpKTsKIAotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0
ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9y
IGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsK
LSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWlu
dDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25l
bnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+
IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVs
RGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAg
ICsrcGl4ZWxEYXRhOwotICAgIH0KKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZl
U3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQorRmlsdGVyUmVzdWx0KiBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBhcHBseShvdXRwdXQsIHN0YWNrLCBz
b3VyY2VJbWFnZSwgZ2VvbWV0cnksIEZpbHRlckJvdW5kYXJ5U2V0KCkpOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKK0ZpbHRlclJlc3VsdCogRmlsdGVy
RWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlck91dHB1dCYgb3V0cHV0LCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRo
ZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4g
ZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0g
ICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVj
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsK
LX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQotewot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4
aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOworICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gdGhpcy0+
cHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cywgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKKyAgICBh
dXRvIGRyYXdpbmdSZWN0ID0gdGhpcy0+ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJp
bWl0aXZlU3VicmVnaW9uKTsKKyAgICBhdXRvIGFic29sdXRlRHJhd2luZ1JlY3QgPSBnZW9tZXRy
eS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGRyYXdpbmdSZWN0KTsKIAotICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCks
IG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1faW1h
Z2VCdWZmZXJSZXN1bHQpCisgICAgaWYgKGFic29sdXRlRHJhd2luZ1JlY3QuaXNFbXB0eSgpIHx8
IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZURyYXdpbmdSZWN0LnNpemUo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJl
Y3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0
UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Qp
OwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIo
Km1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAg
SW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZSht
X2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6
ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkg
PSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7
Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICBy
ZXR1cm4gcGl4ZWxBcnJheTsKLX0KKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMtPmlzQWxw
aGFJbWFnZShpbnB1dHMpOworICAgIGF1dG8gcmVzdWx0Q29sb3JTcGFjZSA9IHRoaXMtPnJlc3Vs
dENvbG9yU3BhY2UoaW5wdXRzKTsKIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJF
ZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBz
Y2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJl
Y29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYg
KCFwaXhlbEFycmF5KQorICAgIGF1dG8gcmVzdWx0ID0gb3V0cHV0LmNyZWF0ZUZpbHRlclJlc3Vs
dChwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBpc0FscGhhSW1hZ2UsIGFic29sdXRl
RHJhd2luZ1JlY3Quc2l6ZSgpLCByZXN1bHRDb2xvclNwYWNlKTsKKyAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBp
eGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2Fs
ZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVk
UGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRo
ZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVy
ZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJl
Y3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
IHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAg
ICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0K
LSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGgg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0
Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
IHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERl
c3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2lu
OwotICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0
Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAg
ICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNj
YWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7
Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0K
LSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVk
UGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdo
dCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVz
dGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJj
ZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVj
dC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwg
PSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsg
eE9yaWdpbikgKiA0OwogCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1l
bWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwg
Kz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5w
dXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlu
cHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53
aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVp
Z2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwot
ICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEo
KSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50
ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25l
bnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGlu
YXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNl
Q29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFsz
XTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRp
YyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBp
bnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0g
aW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3Jj
LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5o
ZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZl
ciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0Lmhl
aWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7
Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0
YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBv
bmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29t
cG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxlIChzb3Vy
Y2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50
WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
MDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VD
b21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICBM
T0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3Qg
IiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseVBsYXRmb3JtKCk6Igor
ICAgICAgICA8PCAiXG4gIHByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IHByaW1pdGl2ZVN1YnJlZ2lv
bgorICAgICAgICA8PCAiXG4gIGRyYXdpbmdSZWN0ICIgPDwgZHJhd2luZ1JlY3QKKyAgICAgICAg
PDwgIlxuICBhYnNvbHV0ZURyYXdpbmdSZWN0ICIgPDwgYWJzb2x1dGVEcmF3aW5nUmVjdAorICAg
ICAgICA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9uICIgPDwgZ2VvbWV0cnkucmVzb2x1dGlvbigp
KTsKKworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChvdXRwdXQucmVuZGVyaW5nTW9kZSgp
ID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7CisgICAgICAgIGlmIChhcHBseUNvcmVJ
bWFnZSgqcmVzdWx0LCBpbnB1dHMsIHNvdXJjZUltYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQubGVha1JlZigpOwogICAgIH0KICNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVy
Zm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRv
IGl0IGRpcmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwg
cGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUg
YW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0
YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZv
cm1hdCgpLmFscGhhRm9ybWF0KTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmls
dGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIs
IGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFG
b3JtYXQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1
c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRl
IGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUg
Q0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBp
bnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgot
ICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZl
ciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxw
aGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJl
dHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0K
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9u
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVk
IGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShj
b2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4
ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIg
aXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBp
eGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
LXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAg
aWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBh
IGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoYXBwbHlTb2Z0d2FyZSgqcmVzdWx0
LCBpbnB1dHMsIHNvdXJjZUltYWdlLCBnZW9tZXRyeSkpCisgICAgICAgIHJldHVybiByZXN1bHQu
bGVha1JlZigpOwogCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29s
b3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0p
OwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5w
dXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAg
aW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNv
bG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwg
aW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWlu
Z0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRp
b24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorVGV4dFN0cmVhbSYgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxp
ZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdl
IGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAg
IGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkp
IHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09
IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNj
YWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3Vs
dENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRT
aXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBp
eGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHJlY3QpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAg
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
LmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0g
ICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBl
ZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwg
bV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYg
RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9H
KEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUg
aXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAg
IEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJl
c3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6
ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8v
IE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQo
KSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAo
bV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3Bh
Y2UgfTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRl
c3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlv
biBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBz
cGFjZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNp
b24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8g
QU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4g
ZGVzdGluYXRpb25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRp
b25Db2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b25Db2xvclNwYWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0
ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENH
IGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURf
UEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQo
KSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkg
dW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xv
ciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJh
eXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlv
bkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxs
b3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2Vu
ZGlmCi19Ci0KLVRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2Yg
dGhlIGZpbHRlciBwcmltaXRpdmVzIGhlcmUgbGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3Nz
aWJsZSBhdCB0aGUgbW9tZW50LCBiZWNhdXNlIHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1h
dGlvbnMgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRp
b25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CisgICAgaWYgKHJlcHJl
c2VudGF0aW9uID09IEZpbHRlclJlcHJlc2VudGF0aW9uOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImFscGhhIGltYWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9y
U3BhY2UpOwogICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJu
IHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBG
aWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ug
d2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJl
YW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRl
clN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0g
ICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2Uy
Y2YwNWI1Mjc3M2YyYjk2YjQ3MWMuLjVlNGFmZDJjNjFlNGZiZWFiZWFhY2ZkZTlhYzUxMzc0Yzk4
ZDA0YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjIsMjM3ICsyMiw1MyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEZXN0
aW5hdGlvbkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRl
cjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZp
bHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRl
ckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJF
ZmZlY3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldDsKK2NsYXNz
IEZpbHRlckdlb21ldHJ5OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5j
dGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAg
IEJsZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIs
Ci0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERp
ZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hh
ZG93LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFn
ZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5
LAotICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRp
bGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBT
b3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAg
IHZvaWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAg
IHZvaWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
PSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmls
dGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVt
YmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7
IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7Ci0gICAg
Ci0gICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRo
aXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5
IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0Ci0gICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0K
LSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29u
c3QgSW50UmVjdCYpIGNvbnN0OwotICAgIAotICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KLSAg
ICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAv
LyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgYm9v
bCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICB2b2lk
IHNldElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJ
bWFnZTsgfQotCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fYWJzb2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBh
YnNvbHV0ZVBhaW50UmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVm
ZmVjdFJlY3Q7IH0gCi0KLSAgICB2b2lkIGFwcGx5KCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFueSBp
bnZhbGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9w
ZXJhdGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhl
bCB2YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBP
bmx5IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3Jt
IGNvcnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7
Ci0KLSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91
dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQotCi0gICAgZW51
bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKLSAg
ICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RP
dXRwdXQpIGNvbnN0OwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBz
cGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LgotICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZv
aWQgc2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhh
c1koKSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1
ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9o
YXNXaWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hh
c0hlaWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2
b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0ID0gMDsKIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVz
KGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMg
PSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNvbHV0
ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJl
Z2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIAotICAgIFR5cGUgZmls
dGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5
cGU7IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBj
b25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBi
b29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAg
ICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2
YWx1ZTsgfQotCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xv
clNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0K
LSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVz
dWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsg
bV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGlu
LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAg
ICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+
IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVl
c1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFs
aXplZFZhbHVlczsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVy
JiwgVHlwZSk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgPSAwOwogCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIHZpcnR1YWwgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJP
dXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCA9IDA7CiAKLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICAvLyBJZiBhIHByZS1t
dWx0aXBsaWVkIGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJl
Y3QgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMo
KTsKLQotICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Citwcm90ZWN0ZWQ6CisgICAg
dXNpbmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0OwogCi0gICAg
dm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2
b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rl
c3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZm
ZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXIm
LCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0gICAgCisgICAgdmlydHVhbCBG
bG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0OwogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3Ig
bV9pbnB1dEVmZmVjdHM7CisgICAgdmlydHVhbCBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgRmlsdGVyUmVzdWx0KiBh
cHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmluYWw7CiAKLSAg
ICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIG1heGltdW0g
c2l6ZSBvZiBhIGZpbHRlciBwcmltaXRpdmUuIEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUg
c3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgLy8gVGhlIGFic29s
dXRlIHBhaW50IHJlY3Qgc2hvdWxkIG5ldmVyIGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVj
dC4KLSAgICBGbG9hdFJlY3QgbV9tYXhFZmZlY3RSZWN0OwotICAgIAotICAgIC8vIFRoZSBzdWJy
ZWdpb24gb2YgYSBmaWx0ZXIgcHJpbWl0aXZlIGFjY29yZGluZyB0byB0aGUgU1ZHIEZpbHRlciBz
cGVjaWZpY2F0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaXMgU1ZHIHNw
ZWNpZmljIGFuZCBuZWVkcyB0byBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLgotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGaWx0
ZXJSZXN1bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0OwogCi0gICAgLy8geCwgeSwg
d2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0
byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZl
IG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAg
IHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3QgPSAwOwogICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbiBtYXBwZWQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgotICAg
IEZsb2F0UmVjdCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uOwotCi0gICAgYm9vbCBtX2Fs
cGhhSW1hZ2UgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNYIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzWSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1dpZHRoIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faGFzSGVpZ2h0IHsgZmFsc2UgfTsKLQotICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNs
aXAgdG8gaXRzIHByaW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVk
IHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgotICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9
OwotCi0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKLSAgICBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkgfTsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlDb3JlSW1h
Z2UoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIq
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCi0gICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07
CiAgICAgCi0gICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsKKyAgICBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkgfTsKIH07CiAKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkZpbHRlckVmZmVjdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi50eXBlKCkgPj0gV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWluaW11bSAmJiBmdW5jdGlvbi50eXBlKCkg
PD0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWF4aW11bTsgfQorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhODU1Y2RiOTYzMTdiODJkZTM1NjdmYzMxZTVi
OWU5YTllYzYwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0qIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRl
cmVyLmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5
Q3JlYXRlKGJvb2wgYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkLCBGaWx0ZXJFZmZl
Y3QmIGxhc3RFZmZlY3QpCi17Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAgaWYgKGFjY2VsZXJh
dGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUobGFzdEVmZmVjdCk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpOwotICAgIFVOVVNFRF9Q
QVJBTShsYXN0RWZmZWN0KTsKLSNlbmRpZgotICAgIHJldHVybiBudWxscHRyOwotfQotCi0KLX0g
Ly8gbmFtc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3
M2U5Y2M0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXI+IHRyeUNyZWF0ZShib29sLCBGaWx0ZXJFZmZlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzUmVzdWx0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIG91dHB1
dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0
ZXJFZmZlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgPSAw
OwotICAgIAotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0Owot
ICAgIAotcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0Owot
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc1ZjRjODMyY2UzYWUxNmQ5ZWE5MjA5Y2Y4NzJlZGI3OGMwY2I3OTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdFZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRWZmZWN0Owor
Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI3
OTc0NDQ2NWQxZWM5YWNlNjQyN2RmOTk4ZDZjYzY0OTYzM2I2MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24u
aApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlclJlcHJlc2VudGF0aW9u
LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCisjaW5jbHVkZSAiSW50UmVjdEV4
dGVudC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Y2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0
ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlck91dHB1dDsKK2NsYXNzIEltYWdlQnVmZmVyOworCitj
bGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7
CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIENTU0Zp
bHRlciwKKyAgICAgICAgU1ZHRmlsdGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKworICAgICAg
ICBGRUJsZW5kID0gRkVNaW5pbXVtLAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAgICAgICBG
RUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAgRkVDb252
b2x2ZU1hdHJpeCwKKyAgICAgICAgRkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZFRGlzcGxh
Y2VtZW50TWFwLAorICAgICAgICBGRURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2QsCisgICAg
ICAgIEZFR2F1c3NpYW5CbHVyLAorICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1lcmdlLAor
ICAgICAgICBGRU1vcnBob2xvZ3ksCisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBGRVNwZWN1
bGFyTGlnaHRpbmcsCisgICAgICAgIEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNlLAorICAg
ICAgICBTb3VyY2VBbHBoYSwKKyAgICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAgICBGRU1h
eGltdW0gPSBTb3VyY2VHcmFwaGljCisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9uKFR5cGUg
dHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29u
c3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHkoRmls
dGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0
dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpUZXN0T3V0
cHV0KSBjb25zdCA9IDA7CisgICAgCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0
ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAg
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVT
cGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxl
bmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE2YTQ0ZTY0YTFkZjJmZDc3MmUzY2Y2MTdkM2M0MDA2NDc4Nzg1YTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdl
b21ldHJ5LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeShjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QpCisgICAgICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICAgICAsIG1f
c291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB+RmlsdGVyR2VvbWV0cnkoKSA9IGRlZmF1bHQ7CisKKyAgICBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICBGbG9hdFJlY3Qg
c291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgcmVzb2x1dGlvbigpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgRmlsdGVyQm91bmRhcnlTZXQgYm91bmRhcnlTZXQo
RmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZs
b2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0IHsgcmV0dXJuIGRyYXdpbmdSZWN0OyB9CisgICAg
dmlydHVhbCBGbG9hdFNpemUgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9h
dFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorCisgICAg
RmxvYXRSZWN0IGNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRS
ZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxvYXRSZWN0JiByZXN1bHRSZWN0KSBjb25zdAorICAg
IHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAgaW1hZ2VS
ZWN0Lm1vdmVCeSgtcmVzdWx0UmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1hZ2VSZWN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIGRy
YXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorICAgIAorICAgIHZpcnR1
YWwgRmxvYXRTaXplIHJlc29sdmVUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXpl
JiBkcmF3aW5nU2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x2ZWREcmF3aW5n
UmVjdCA9IHJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKGRyYXdpbmdTaXplKTsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzb2x2ZWREcmF3aW5nUmVjdCk7
CisgICAgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9u
KGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBGbG9hdFJlY3QgbV9maWx0
ZXJSZWdpb247CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlZmRhOGNkNjVj
YzA4MzU4YTg3MGY5ZWNmNTQzMjA3YTVmMTBhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisKKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlck91dHB1dDo6RmlsdGVyT3V0cHV0KFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQor
eworfQorCitSZWZQdHI8RmlsdGVyUmVzdWx0PiBGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJl
c3VsdChjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBkcmF3aW5nUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBy
ZXR1cm4gRmlsdGVyUmVzdWx0OjpjcmVhdGUocHJpbWl0aXZlU3VicmVnaW9uLCBkcmF3aW5nUmVj
dCwgaXNBbHBoYUltYWdlLCBsb2dpY2FsU2l6ZSwgbV9yZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNw
YWNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjNjOGZiMWU2ZDNhM2NkYzEzOGQ5Yjg5MDk4MWZiZDRjYjc0MGYyMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0
cHV0LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyUmVzdWx0OworY2xhc3MgRmlsdGVyRnVuY3Rp
b247CisKK2NsYXNzIEZpbHRlck91dHB1dCB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzdWx0cyA9
IEhhc2hNYXA8UmVmPGNvbnN0IEZpbHRlckZ1bmN0aW9uPiwgUmVmPEZpbHRlclJlc3VsdD4+Owor
CisgICAgRmlsdGVyT3V0cHV0KFJlbmRlcmluZ01vZGUpOworCisgICAgUmVzdWx0cyYgcmVzdWx0
cygpIHsgcmV0dXJuIG1fcmVzdWx0czsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQorCisgICAgUmVmUHRyPEZpbHRl
clJlc3VsdD4gY3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jik7CisKK3ByaXZhdGU6CisgICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJl
c2VudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlclJlcHJlc2VudGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRiZmY3ZDgwNDdjZWY5ZWY2M2EzNmVj
YzM1ZTVlOWIyMDExY2VlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaApAQCAtMCwwICsxLDM1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBGaWx0ZXJSZXByZXNl
bnRhdGlvbiA6IHVpbnQ4X3QgeworICAgIFRlc3RPdXRwdXQsCisgICAgRGVidWdnaW5nCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmUx
NzRiYTg1N2FiMDZkODU3ZTg0ZDk4MTAwN2M0ZWY4M2FlMjM1MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNw
cApAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorI2luY2x1ZGUgIkZpbHRlclJlc3VsdENvcmVJ
bWFnZS5oIgorI2VuZGlmCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVk
ZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWZQdHI8RmlsdGVyUmVzdWx0PiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgYm9v
bCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5p
c0VtcHR5KCkgfHwgZHJhd2luZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxT
aXplKSk7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bHRlclJlc3VsdENvcmVJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBpc0Fs
cGhhSW1hZ2UsIGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UpKTsKKyNlbmRpZgorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3Vs
dFNvZnR3YXJlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGlzQWxwaGFJbWFnZSwg
bG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkp
OworfQorCitGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdChjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgYm9vbCBpc0FscGhh
SW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UpCisgICAgOiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJy
ZWdpb24pCisgICAgLCBtX2RyYXdpbmdSZWN0KGRyYXdpbmdSZWN0KQorICAgICwgbV9pc0FscGhh
SW1hZ2UoaXNBbHBoYUltYWdlKQorICAgICwgbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAg
ICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9
CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dC
eXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOwor
ICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1
dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRh
dGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAg
ZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJv
d0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0
aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNl
Q29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3Vy
Y2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisgICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRp
ZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVf
dCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIg
c3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAg
c3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRl
cyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRl
c3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7
CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7
CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEg
PSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSAwOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyUmVzdWx0OjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRl
clJlc3VsdDo6cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkK
K3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3Jt
YXQpOworICAgIGlmIChwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52
YWx1ZSgpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9jb2xvclNwYWNlIH07CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICBwaXhlbEJ1ZmZlciA9IGlt
YWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgSW50U2l6ZSht
X2xvZ2ljYWxTaXplKSB9KTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cisg
ICAgfQorICAgIAorICAgIEludFNpemUgc2NhbGVkU2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAg
c2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9
IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAg
ICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBzY2FsZWRTaXplKTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7
CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gRmlsdGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZs
b3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVy
c2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAv
LyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVy
biBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAg
Ly8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9u
LUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsK
KyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUg
c2NhbGVkUGFpbnRTaXplKG1fbG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
KyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAg
IGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAg
aW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2Fu
bGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4
ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0
OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwg
Kz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nh
bmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QK
K3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3Jy
ZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVy
dGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29s
b3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20g
b25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJl
c3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWlu
ZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25T
Y2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4
aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFs
dWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVy
LgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKG1fbG9naWNhbFNpemUpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVy
dGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFs
cGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJ
bWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNS
ZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsK
KyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAg
ICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdl
Qnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2
b2lkIEZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7Cisg
ICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1h
dHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGlt
YWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4
X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVu
Z3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5
dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJy
YXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYg
KHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0g
cGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWlu
dDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAg
ICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwg
c2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0g
PSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwor
ICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxz
LnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4
ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAg
ICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFy
cmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhl
bEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVj
a2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Cisg
ICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0
aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsK
KyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQg
dGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7
CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVs
RGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAv
LyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwor
dm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xv
ciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNw
YWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkg
dW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xv
ciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJh
eXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAg
ICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UsIGNvbG9y
U3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBp
eGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2ZDg1NzZlNTU1YjEzMjVhYzRkODg5OWNm
ZGFhOTI1MDkxMDE2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlQnVmZmVyOworY2xhc3MgUGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlclJlc3Vs
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlclJlc3VsdD4geworcHVibGljOgorICAgIHN0YXRp
YyBSZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGJvb2wgaXNBbHBoYUltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgdmlydHVh
bCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1
YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nUmVjdDsgfQorICAg
IGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KKwor
ICAgIEZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7
IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
bmRlcmluZ01vZGU7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgUmVmUHRy
PEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpID0gMDsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAg
IFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKKyAgICAKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAg
ICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitw
cm90ZWN0ZWQ6CisgICAgRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wgcmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBn
ZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVm
ZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25z
dDsKKworICAgIEZsb2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFJlY3Qg
bV9kcmF3aW5nUmVjdDsKKyAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsKKworICAg
IEZsb2F0U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdN
b2RlOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBtX2NvbG9yU3BhY2U7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3Vu
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJSZXN1bHRWZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgzMTUxYjk4MjRmNjIyOWZk
YjQ5ZmIwNTY3MmY4M2M3NmY1Y2FmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmgKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHQ7CisKK3VzaW5nIEZpbHRlclJlc3VsdFZlY3RvciA9
IFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3
OTEyOGY1NGI0NGIuLjRiYzZiYzcxYzg1ZGZiMWFlMzkxZGViMjQzZGM4MTQ1NzVkYjBjMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApAQCAtMzYsMTIgKzM2LDEyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNv
bnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2lu
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0g
ICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3Np
dGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBv
c2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9u
LnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZl
clBvc2l0aW9uLngoKSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVj
dC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkp
KTsKKy8vICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNw
YWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCisvLyAgICBGbG9hdFBvaW50IG1h
cHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnkoKSB9KTsKKy8vICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngo
KSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKIH0KIAogTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGln
aHRpbmdEYXRhIFBvaW50TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFk
NmNmM2EzLi40YzhkNTI4YTI0YzI0OTViZTgxYTJlNjQyNzRmNDMwNGIzYWQzMWRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjAg
KzIxLDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIK
IAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYg
c291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYSgpKTsKIH0KIAotY29uc3QgQXRvbVN0
cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhh
KCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMg
TWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgi
U291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0
dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQorY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUo
KQogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBo
YTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogU291cmNlQWxwaGE6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJl
c3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyID0gaW5wdXRFZmZlY3QoMCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5y
ZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBG
bG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2sp
OwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9p
bnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworICAgIHJldHVybiBhcHBs
eVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQp
OwogfQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291
cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhh
XVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0
ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3Qu
ZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3Rz
KCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4u
Mzg5ZWNiM2JmY2Q2NDQ1ZjU2ZTY3YjI1OGJjNjRlNWIxZmIyNTEwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9o
Ci0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAK
LSAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAg
c3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRv
bVN0cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFs
cGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsg
fQorICAgIFNvdXJjZUFscGhhKCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wg
YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlk
ZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzEx
MDdkNzgzOTJlOS4uODhmNjVmZmUzY2YxZGVmYjczOGQ3NjY5MTM0Yjc4OTM3MmY2ZGUzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMCwxOCArMjEsMjIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VH
cmFwaGljLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1
dC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitSZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhp
Yzo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKCkp
OworfQorCitTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVj
dChUeXBlOjpTb3VyY2VHcmFwaGljKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJj
ZUdyYXBoaWMoZmlsdGVyKSk7CiB9CiAKIGNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKQpAQCAtNDAsMjcgKzQ1LDIwIEBAIGNvbnN0IEF0b21TdHJpbmcmIFNvdXJj
ZUdyYXBoaWM6OmVmZmVjdE5hbWUoKQogICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZv
aWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0
IFNvdXJjZUdyYXBoaWM6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsK
LSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIEZsb2F0UmVjdCBwYWlu
dFJlY3QgPSBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7Ci0gICAgcGFpbnRSZWN0LnNjYWxlKGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChw
YWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuc291cmNlSW1hZ2VSZWN0KCk7CiB9CiAK
LXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3Vs
dCogU291cmNlR3JhcGhpYzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7
Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLQotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJ
bWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJj
ZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
fSwgc291cmNlSW1hZ2UsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0m
IFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdyYXBoaWNdXG4iOwogICAgIHJl
dHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhl
ZjIxMDZiN2ZjYTViZi4uZmFmYzZmZWY5N2VmMzk4MjAxYTI3ZDQ5NTU3NTU3NWY0YTc4YmNmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xOCw0MSArMTksMzQgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLSNpZm5kZWYgU291cmNlR3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNv
dXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBo
aWM+IGNyZWF0ZSgpOwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUo
KTsKIAogcHJpdmF0ZToKLSAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQotICAgICAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCi0gICAgewotICAg
ICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKLSAgICB9CisgICAgU291cmNlR3JhcGhpYygpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VHcmFwaGljIjsgfQogCi0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5
cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVj
dFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0
IG92ZXJyaWRlOwogCi19IC8vbmFtZXNwYWNlIFdlYkNvcmUKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2Uo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3Jh
cGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5k
ZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZh
NTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApA
QCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0
aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQg
YW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3Np
dGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91
c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQg
b2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4K
LSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRp
b24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFp
bnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJT
cGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXpl
KCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxp
bWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0g
LWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4w
ZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdD
b25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGlu
Z0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAg
Ly8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBp
ZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAg
ICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBp
cyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Cisv
LyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBv
c2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRa
ID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3Np
dGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBt
X2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZl
Y3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAg
cGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAo
IW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1h
bnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRp
bmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGlu
Z0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxp
bWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBm
KQorLy8gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRp
bmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0K
Ky8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZh
bHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdE
YXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOworLy8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9u
ZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAx
OworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBw
YWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0
YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhlZDdkN2Q5NjJlNmJhODg0NDIwNjM1NGQ5MmE0ODU0MTBmZmY3OWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZF
QmxlbmQuaCIKKworI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5
U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5n
ZXQoKTsKKyAgICBhdXRvJiBpbjIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdl
QnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFn
ZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworLy8gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
CisvLyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zl
ciwgbV9tb2RlIH0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29m
dHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNzg3MGE3MzQ5ZWFlODE3MWM0N2NmZDZiOTM2ZTNiYjMx
YWQxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwz
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNv
bG9yTWF0cml4LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZp
bHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NF
TEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0
JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
dmFsdWVzKQoreworICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAg
IGZsb2F0IGIgPSBibHVlOworICAgIGZsb2F0IGEgPSBhbHBoYTsKKworICAgIHJlZCAgICAgPSB2
YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNb
IDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7CisgICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiBy
ICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXNbIDddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFs
dWVzWyA5XSAqIDI1NTsKKyAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFd
ICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1
OworICAgIGFscGhhICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVz
WzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Cit9CisKK2lubGlu
ZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxv
YXQmIGJsdWUsIGNvbnN0IGZsb2F0KiBjb21wb25lbnRzKQoreworICAgIGZsb2F0IHIgPSByZWQ7
CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVlOworCisgICAgcmVkICAg
ICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50
c1syXTsKKyAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0
XSArIGIgKiBjb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSAr
IGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07Cit9CisKKy8vIEZJWE1FOiB0
aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5h
bmNlLmguCitpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBm
bG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQoreworICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsg
MC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOworICAgIHJlZCA9IDA7CisgICAgZ3JlZW4g
PSAwOworICAgIGJsdWUgPSAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCit0ZW1wbGF0ZTxD
b2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK2Jvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChV
aW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVz
LCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgQVNTRVJU
KHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKKyAgICAKKyAg
ICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7CisgICAgICAg
IC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYg
YW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0
cml4CisgICAgICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFnZSBjb2Rl
LgorICAgICAgICBpZiAodmFsdWVzWzRdIHx8IHZhbHVlc1s5XSB8fCB2YWx1ZXNbMTRdIHx8IHZh
bHVlc1sxOV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qg
aW50MzJfdCBkaXZpc29yID0gMjU2OworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRh
dGEoKTsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNp
emUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBz
cmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIHNyYy5kYXRhID0gZGF0
YTsKKyAgICAKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGJ1ZmZl
clNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Cisg
ICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgZGVzdC5kYXRh
ID0gZGF0YTsKKworICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0g
PSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbIDVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0g
KiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAorCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
M10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4
TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwg
bnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6IHsKKyAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0g
eworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1szXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1s0XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzddICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzhdICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgZGl2aXNvciwKKyAg
ICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRl
c3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Cisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAorCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAorCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAorCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAg
ICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVz
dCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9Cisj
ZW5kaWYKKwordGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Cit2b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQoreworICAgIGZsb2F0IGNvbXBvbmVudHNbOV07
CisKKyAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisg
ICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25l
bnRzLCB2YWx1ZXNbMF0pOworICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJ
WF9UWVBFX0hVRVJPVEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90
YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOworCisgICAgdW5zaWduZWQgcGl4
ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFU
RSkKKyAgICBpZiAoZWZmZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBlPihwaXhlbEFycmF5
LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm47CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShidWZmZXJTaXplKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChm
aWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBp
eGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9h
dCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZs
b2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAg
ICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsK
KyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDMpOworICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1
ZXMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Cisg
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAg
IGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4
ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0
IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxv
YXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAg
ICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwor
ICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMyk7CisgICAgICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVl
LCBjb21wb25lbnRzKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEs
IGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIs
IGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywg
YWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5
dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5
dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBo
YSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIGx1
bWluYW5jZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxp
emVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFs
dWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXpl
ZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisKK2Jv
b2wgRkVDb2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVy
R2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09
IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byByZXN1bHRJ
bWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZl
cigpOworICAgIGlmIChpbWFnZUJ1ZmZlcikgeworICAgICAgICBhdXRvIGltYWdlUmVjdCA9IGdl
b21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4uZHJhd2luZ1JlY3Qo
KSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgfQorCisgICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdC5jb2xvclNwYWNlKCkgfTsKKyAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUo
KSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Cisg
ICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7CisKKyAg
ICBhdXRvIHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworCisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBw
aXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5
LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVz
LCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOTE2NTQ3YzFiYTFmM2JiZGQ5OTFlMzNmNjU1OWU4ZmEzNjM1MmQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
RUNvbXBvbmVudFRyYW5zZmVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNs
dWRlICJGaWx0ZXJSZXN1bHRWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKworc3RhdGljIHZvaWQg
Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJikKK3sKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29r
dXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2Zl
ckZ1bmN0aW9uKQoreworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJh
bnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKKyAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMu
c2l6ZSgpOworICAgIGlmIChuIDwgMSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGMgPSBp
IC8gMjU1LjA7CisgICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyAq
IChuIC0gMSkpOworICAgICAgICBkb3VibGUgdjEgPSB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAg
ZG91YmxlIHYyID0gdGFibGVWYWx1ZXNbc3RkOjptaW4oKGsgKyAxKSwgKG4gLSAxKSldOworICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodjEgKyAoYyAqIChuIC0gMSkgLSBrKSAqICh2MiAt
IHYxKSk7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkp
OworICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVl
cywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sK
KyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24u
dGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAgICBp
ZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKKyAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAx
KTsKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2tdOworICAgICAgICB2
YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFsdWVz
W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgKiBpICsgMjU1ICogdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQ7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOwor
ICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRv
dWJsZSBleHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24uZXhwb25lbnQ7IC8vIFJDVlQgZG9lc24n
dCBsaWtlIHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxvYXQgdG8gcG93LCBzbyBwcm9tb3RlIHRo
aXMgdG8gZG91YmxlCisgICAgICAgIGRvdWJsZSB2YWwgPSAyNTUuMCAqICh0cmFuc2ZlckZ1bmN0
aW9uLmFtcGxpdHVkZSAqIHBvdygoaSAvIDI1NS4wKSwgZXhwb25lbnQpICsgdHJhbnNmZXJGdW5j
dGlvbi5vZmZzZXQpOworICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4w
LCB2YWwpKTsKKyAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBMb29rdXBUYWJsZSBjb21wdXRlTG9va3VwVGFibGUoY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgTG9va3VwVGFibGUg
dGFibGU7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLnNpemUoKTsg
KytpKQorICAgICAgICB0YWJsZVtpXSA9IGk7CisKKyAgICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2
b2lkICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
KyAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0geworICAgICAgICBjb21wdXRlSWRlbnRp
dHlUYWJsZSwKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisgICAgICAgIGNvbXB1dGVU
YWJ1bGFyVGFibGUsCisgICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLAorICAgICAgICBjb21w
dXRlTGluZWFyVGFibGUsCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlCisgICAgfTsKKworICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7CisgICAgY2FsbEVmZmVjdFtmdW5jdGlvbi50eXBlXSh0YWJsZSwg
ZnVuY3Rpb24pOworCisgICAgcmV0dXJuIHRhYmxlOworfQorCitib29sIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBn
ZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBh
dXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHJlc3VsdC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwor
ICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENv
b3JkaW5hdGVzKGluLmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAg
IGluLmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChkcmF3aW5nUmVjdCks
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBMb29rdXBUYWJsZSByZWRUYWJsZSA9IGNv
bXB1dGVMb29rdXBUYWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBncmVlblRh
YmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZ3JlZW5GdW5jdGlvbik7CisgICAgTG9va3VwVGFi
bGUgYmx1ZVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1ZUZ1bmN0aW9uKTsKKyAgICBM
b29rdXBUYWJsZSBhbHBoYVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYWxwaGFGdW5jdGlv
bik7CisKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5h
dGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCogZGF0YSA9IGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0XV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDFdXTsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAz
XSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyODhmYjZkMWZj
MTY0ZGQ2YzIwNDgwNDM1OTM3MTY4YTg0NzM0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQorewor
ICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihj
KSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7
CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07
Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIq
IGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2Nh
bGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAg
IGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgt
LXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNv
dXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAg
ZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAg
ICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSBj
bGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRp
b247CisgICAgfQorfQorCisvLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBh
IGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9u
IGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBh
Z2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlv
bi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVk
IGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxv
YXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBm
OworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdo
aWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkx
ID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAg
ICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChi
NCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRp
b24gPSByZXN1bHQ7CisgICAgICAgICsrc291cmNlOworICAgICAgICArK2Rlc3RpbmF0aW9uOwor
ICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitzdGF0aWMgaW5saW5l
IHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3RkOjpt
YXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMpICsg
azQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6bWlu
KDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OworICAgIGlmICgoazQgPj0gMC4w
ZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQgPD0g
MS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7Cisg
ICAgICAgIGlmIChrNCkgeworICAgICAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAgICAgIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoazEpCisgICAgICAgICAgICAgICAgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4
ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGs0KSB7CisgICAgICAgIGlmIChr
MSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwgZGVz
dGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBkZXN0
aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEs
IDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwg
MD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQp
OworICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworICAgIEFTU0VSVChsZW5n
dGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOworICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCisj
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4Mykp
OworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24u
ZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbHNlCisgICAgYXJpdGhtZXRpY1Nv
ZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7CisjZW5kaWYKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlBcml0aG1ldGlj
U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7
CisgICAgYXV0byYgaW4yID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gcmVzdWx0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gZWZmZWN0QURyYXdp
bmdSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhpbi5k
cmF3aW5nUmVjdCgpLCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgYXV0byBzb3VyY2VQaXhl
bEFycmF5ID0gaW4uZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChlZmZlY3RBRHJhd2luZ1JlY3QpLCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBlZmZlY3RCRHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0
VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVzKGluMi5kcmF3aW5nUmVjdCgpLCByZXN1bHQuZHJh
d2luZ1JlY3QoKSk7CisgICAgaW4yLmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVsQXJy
YXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0ludFJl
Y3QoZWZmZWN0QkRyYXdpbmdSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIHBs
YXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBp
eGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAyKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbjIgPSBp
bnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIo
KTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICgh
aW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVz
dWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBhdXRvIGltYWdl
UmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4uZHJh
d2luZ1JlY3QoKSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VSZWN0MiA9
IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4yLmRyYXdpbmdS
ZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29tcG9z
aXRlT3BlcmF0b3IpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKKyAgICAgICAgLy8gQXBwbGll
cyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCisgICAgICAgIGF1dG8gZHJhd2luZ1Jl
Y3QgPSBpbi5kcmF3aW5nUmVjdCgpOworICAgICAgICBhdXRvIGRyYXdpbmdSZWN0MiA9IGluMi5k
cmF3aW5nUmVjdCgpOworICAgICAgICBhdXRvIHJlc3VsdFJlY3QgPSByZXN1bHQuZHJhd2luZ1Jl
Y3QoKTsKKworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUmVjdCA9IGRyYXdpbmdSZWN0OworICAg
ICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGRyYXdpbmdSZWN0Mik7CisgICAgICAgIGRl
c3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QocmVzdWx0UmVjdCk7CisgICAgICAgIGlmIChkZXN0aW5h
dGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byBh
ZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgYWRqdXN0
ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5KC1yZXN1bHRSZWN0LmxvY2F0aW9uKCkpOworICAgICAg
ICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29v
cmRpbmF0ZXMoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNl
UmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5tb3ZlQnkoLWRyYXdp
bmdSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBzb3VyY2VSZWN0ID0gZ2VvbWV0cnkuY29udmVy
dFRvQWJzb2x1dGVDb29yZGluYXRlcyhzb3VyY2VSZWN0KTsKKworICAgICAgICBhdXRvIHNvdXJj
ZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2UyUmVjdC5tb3ZlQnkoLWRy
YXdpbmdSZWN0Mi5sb2NhdGlvbigpKTsKKyAgICAgICAgc291cmNlMlJlY3QgPSBnZW9tZXRyeS5j
b252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHNvdXJjZTJSZWN0KTsKKworICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCwgc291cmNlMlJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCB7
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIsIEludFJl
Y3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBpbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRv
cCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBpbWFn
ZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxT
aXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9M
SUdIVEVSOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBpbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIt
PmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBvc2l0
ZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWNTb2Z0
d2FyZShyZXN1bHQsIGlucHV0cywgZ2VvbWV0cnkpOworICAgIHJldHVybiBhcHBseU5vbkFyaXRo
bWV0aWNTb2Z0d2FyZShyZXN1bHQsIGlucHV0cywgZ2VvbWV0cnkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZhZTg3MWE5MjhkZmJmNDg0ZjQ3NTdhMDA3MzUw
YWExZjI0NTdmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0
YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
RkVDb252b2x2ZU1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJiOTY3ZDE4MDljZDBkODlmYjM5ZWRkZjczODUyYjljZDI1MGVkNWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKy8vICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKy8vICAgIEZp
bHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisvLworLy8gICAgQVNTRVJUKG1feENo
YW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworLy8gICAgQVNTRVJUKG1feUNoYW5u
ZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworLy8KKy8vICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKy8vICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKy8vICAgICAgICByZXR1cm47CisvLworLy8g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOworLy8KKy8vICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5n
UmVjdCk7CisvLworLy8gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KKy8v
ICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZl
Y3RCRHJhd2luZ1JlY3QpOworLy8gICAgCisvLyAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3Bs
YWNlbWVudEltYWdlKQorLy8gICAgICAgIHJldHVybjsKKy8vCisvLyAgICBBU1NFUlQoaW5wdXRJ
bWFnZS0+bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKKy8vCisvLyAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworLy8gICAgSW50U2l6ZSBwYWludFNp
emUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKKy8vICAgIHBhaW50U2l6ZS5zY2FsZShm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisvLworLy8gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7CisvLyAgICBm
bG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKKy8vICAgIGZsb2F0
IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKy8vICAgIGZsb2F0IHNj
YWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OworLy8gICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworLy8gICAgCisvLyAgICBp
bnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7CisvLyAgICBpbnQgZGlz
cGxhY2VtZW50Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7CisvLworLy8gICAgaW50IHJvd0J5
dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworLy8KKy8vICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKy8vICAgICAgICBpbnQgbGluZVN0YXJ0T2Zm
c2V0ID0geSAqIHJvd0J5dGVzOworLy8KKy8vICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBh
aW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKy8vICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5k
ZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKKy8vICAgICAgICAgICAgCisvLyAgICAgICAg
ICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNw
bGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5l
bFgpICsgc2NhbGVkT2Zmc2V0WCk7CisvLyAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRp
Y19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0
aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Cisv
LworLy8gICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGlu
YXRpb25JbmRleCk7CisvLyAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50
U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7
CisvLyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7CisvLyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKy8vICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAgICAgKmRl
c3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1h
Z2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7Cisv
LyAgICAgICAgfQorLy8gICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2Fy
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzdhZmYwZGZlMTQzMzY4YWNmODcyMjMzYThiMWE0ZWJlNzE2ZTMy
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hh
ZG93LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNvZnR3
YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNb
MF0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJl
c3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICog
Z2VvbWV0cnkucmVzb2x2ZVRvQWJzb2x1dGVDb29yZGluYXRlcyh7IG1fc3RkWCwgbV9zdGRZIH0p
OworICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnZW9tZXRyeS5yZXNvbHZlVG9BYnNvbHV0ZUNvb3Jk
aW5hdGVzKHsgbV9keCwgbV9keSB9KTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW4uZHJhd2lu
Z1JlY3QoKTsKKyAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3Vs
dENvb3JkaW5hdGVzKGltYWdlUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworCisgICAgYXV0
byBpbWFnZVJlY3RXaXRoT2Zmc2V0ID0gaW1hZ2VSZWN0OworICAgIGltYWdlUmVjdFdpdGhPZmZz
ZXQubW92ZShvZmZzZXQpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hh
ZG93T3BhY2l0eSk7CisgICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBpbWFnZVJlY3RXaXRoT2Zmc2V0KTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEp
OworCisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9z
aGFkb3dDb2xvcik7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdC5j
b2xvclNwYWNlKCkgfTsKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0
SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJy
YXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1h
Z2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworCisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAgICByZXN1bHRDb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOworICAgIHJlc3Vs
dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVzdWx0LmxvZ2ljYWxT
aXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKworICAgIHJlc3Vs
dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRmxvb2RTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU3OGViNjQ3
MjAwYzMwN2FjYWUyYTg0MTk5YjNmMGE0YTYwMjZhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRUZsb29kLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUg
IkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBy
ZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIGNvbG9yID0gbV9mbG9vZENvbG9yLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KG1fZmxvb2RPcGFjaXR5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGdlb21l
dHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzdWx0LmRyYXdpbmdSZWN0KCkpOwor
ICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgaW1hZ2VSZWN0LnNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRmZmMwZTVmOTAzOTY1YjkyMjc5OTdkY2Zi
MDdmM2NmZDhlMDVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFR2F1
c3NpYW5CbHVyOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWEyZmE1NjQz
ZmVmYTk0M2NlM2ZiOWEwYTAxNTFkODA5ZDAyNDcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1Nv
ZnR3YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcK
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdh
cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjEyMTI1ODViOTgwMGNlNzI2YWMzZDM4OTE1NTU3NjEwMjMwZjFk
OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTWVyZ2UuaCIK
KworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTWVyZ2U6OmFwcGx5U29mdHdhcmUoRmls
dGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3Vs
dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKSB7CisgICAgICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIGlt
YWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW5w
dXQtPmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZDc5MjI2NmZjNTcxZGJmYTFhZGE0YmZiYzI4MGYwYjZjOGZkOTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9y
cGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9n
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjphcHBseVNv
ZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVm
ZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNl
dFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NThmYjgwNzU3YTFmYjk5OGM0OWE4YTk3OGVkYWMw
MDMzMWFiOTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVPZmZzZXQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5j
bHVkZSAiRmlsdGVyUmVzdWx0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFT2Zm
c2V0OjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0
byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbWFnZVJl
Y3QgPSBpbi5kcmF3aW5nUmVjdCgpOworICAgIGltYWdlUmVjdC5tb3ZlKGdlb21ldHJ5LnJlc29s
dmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9keCwgbV9keSB9KSk7CisgICAgaW1hZ2VSZWN0ID0g
Z2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhpbWFnZVJlY3QsIHJl
c3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZjI0OGRhZmQyMGIwODBjZjc1NTM5NDI5YWMyNDBlZTAxOGY2
OWRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwxMTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9i
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxlLmgiCisKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAodGFyZ2V0UmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gbG9naWNhbFJl
Y3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOworCisgICAgRmxvYXRT
aXplIHNjYWxlOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsb2dpY2FsUmVjdC5zaXplKCksIHNjYWxlKTsKKworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCAxLCBj
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsK
KyAgICB0cmFuc2Zvcm0uc2NhbGUoc2NhbGUpLnRyYW5zbGF0ZSgtbG9naWNhbFJlY3QubG9jYXRp
b24oKSkubXVsdGlwbHkoYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiBpbWFnZUNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIGltYWdlQ29udGV4
dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKwor
Ym9vbCBGRVRpbGU6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsK
KyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW4uZHJh
d2luZ1JlY3QoKSk7CisgICAgYXV0byByZXN1bHRJbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0
VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAgIGF1dG8g
cHJpbWl0aXZlU3VicmVnaW9uID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRl
cyhpbi5wcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgYXV0byByZXN1bHRQcmltaXRpdmVTdWJy
ZWdpb24gPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5wcmlt
aXRpdmVTdWJyZWdpb24oKSk7CisgICAgCisgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUg
YXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMg
dGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMg
cGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorICAgIEZsb2F0UmVj
dCB0aWxlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFBvaW50IGluTWF4RWZm
ZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgbWF4RWZm
ZWN0TG9jYXRpb24gPSByZXN1bHRQcmltaXRpdmVTdWJyZWdpb24ubG9jYXRpb24oKTsKKy8vICAg
IGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0
KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAgICAg
ICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVjdC5z
Y2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorCisgICAgYXV0byB0aWxlSW1hZ2VCdWZmZXIg
PSBjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgZ2VvbWV0cnkuYWJzb2x1dGVUcmFuc2Zvcm0o
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIGlmICghdGlsZUltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2VCdWZm
ZXItPmNvbnRleHQoKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZl
Y3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7CisgICAgdGlsZUltYWdl
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QubG9jYXRpb24o
KSk7CisKKyAgICBhdXRvIHRpbGVJbWFnZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUlt
YWdlKFdURk1vdmUodGlsZUltYWdlQnVmZmVyKSk7CisgICAgaWYgKCF0aWxlSW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3Jt
OworICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBt
YXhFZmZlY3RMb2NhdGlvbik7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUo
dGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9y
bSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CisgICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBh
dHRlcm4pKTsKKyAgICAKKyAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHJlc3VsdEltYWdlUmVjdC5zaXplKCkpKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVU
dXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllOGQ0MDlkNmMxYWI4ZDNkYjRhZmQy
YzZiOTI4MzU5NTAxYTA1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJ
bmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmls
dGVyUmVzdWx0U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmVh
YTEyZDhiNTczNDQ3ODJjMWU5YTM0Y2E1MTlmOTM4YWQ1NGY4MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
UmVzdWx0U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFNvZnR3YXJlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXIqIEZpbHRlclJlc3VsdFNvZnR3
YXJlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworCisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUobV9sb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwg
bV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50
UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9Owor
CisgICAgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhl
bEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpLCBy
ZWN0KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCksIHJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
UmVzdWx0U29mdHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMzhjNDU2OGY1MWMzNjJiOWZjYTk2YjRhZmI0
MzViNDMzZTk5MTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJS
ZXN1bHRTb2Z0d2FyZSA6IHB1YmxpYyBGaWx0ZXJSZXN1bHQgeworcHVibGljOgorICAgIHVzaW5n
IEZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0OworICAgIAorcHJpdmF0ZToKKyAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9p
bWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpIG92ZXJyaWRlOwor
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdFNvZnR3YXJlKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9
PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jM2I1ZDczMDA1Yzc4OTc2MGFkMWFlNDBhZDhjNzFkMWRjYTcy
MjRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJl
c3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMu
c2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29y
ZGluYXRlcyhpbi5kcmF3aW5nUmVjdCgpKTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCku
ZmlsbFJlY3QoRmxvYXRSZWN0IHsgeyB9LCBpbWFnZVJlY3Quc2l6ZSgpIH0sIENvbG9yOjpibGFj
ayk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VH
cmFwaGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlMDI4
YzUyNmVkYTlhOGNmMWNlMDZlOTkwZjJjNzNkMGY5ZGZjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdy
YXBoaWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IFNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIEFTU0VSVChzb3VyY2VJbWFnZSk7CisKKyAgICBh
dXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcAppbmRleCBmNDRhZTEyOWQwNzM4ZDMwYzc2ZTcxMDg1YjJhZWMwNWE3YjZm
MWRhLi5mZWY1NzVmMDY2M2ExZGRlODZlNjU1MjM0ZTczNDY1ZTI2ZWI5MWNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQxMiArMjgsMzI1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTVkdE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCi0jaW5j
bHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogI2lu
Y2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIK
ICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgotI2luY2x1ZGUgIkZFTWVyZ2UuaCIKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1
ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1
ZGUgIlJlZmVyZW5jZWRTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgot
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJE
KQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
ZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0Zp
bHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIENTU0ZpbHRlckdl
b21ldHJ5OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NG
aWx0ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1
aWxkRnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25zLCBjbGlwT3BlcmF0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZmlsdGVyOwogfQogCi1DU1NGaWx0ZXI6
OkNTU0ZpbHRlcigpCi0gICAgOiBGaWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9z
b3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgqdGhpcykpCitSZWZQdHI8Q1NTRmls
dGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiBmdW5j
dGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENTU0ZpbHRlcihXVEZNb3ZlKGZ1bmN0aW9ucyksIHJlbmRlcmluZ01vZGUpKTsKIH0K
IAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0OworQ1NTRmlsdGVyOjpDU1NGaWx0
ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6OkNTU0ZpbHRlcikK
K3sKKyAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKK30KIAotR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6
OmlucHV0Q29udGV4dCgpCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1
bmN0aW9uPj4mJiBmdW5jdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6
IEZpbHRlcihyZW5kZXJpbmdNb2RlLCBUeXBlOjpDU1NGaWx0ZXIpCisgICAgLCBtX2Z1bmN0aW9u
cyhXVEZNb3ZlKGZ1bmN0aW9ucykpCiB7Ci0gICAgcmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291
cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
JiBmaWx0ZXJPcGVyYXRpb24pCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmls
dGVyKEZpbHRlciYgZmlsdGVyLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0
ICZwcmV2aW91c0VmZmVjdCwgY29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJP
cGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5k
b2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOwotICAgIGlmICghZmlsdGVyRWxlbWVudCkgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8
PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciBy
ZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJh
Z21lbnQoKSk7Ci0gICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJl
bmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRwczov
L3dlYmtpdC5vcmcvYi8xMzEwODU+Ci0gICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlmIHRoaXMg
ZG9lcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSByZW5kZXJlci5lbGVt
ZW50KCkpCi0gICAgICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCksICplbGVt
ZW50KTsKKyAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJl
UmVmZXJlbmNlZFNWR1Jlc291cmNlcygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3Vt
ZW50KCksIGZpbHRlck9wZXJhdGlvbik7CisKKyAgICBpZiAoIWZpbHRlckVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICAKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpj
cmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0Vm
ZmVjdCk7Cit9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxk
ZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51
c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAs
IDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxl
L3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBp
bmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFt
ZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIg
LSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAg
ICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAr
IDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0g
MC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAg
ICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+PiByZWZlcmVuY2VFZmZlY3RzOworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0
ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9y
TWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8o
MSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBT
ZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4
Lmh0bWwjc2VwaWFFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRl
cnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0
cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZU
eXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQp
KSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwg
KnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVm
ZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVt
ZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworfQogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVj
dC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBF
TkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5z
dHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50
ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdC
KCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAg
ZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVt
ZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgq
ZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3Zl
KHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0Oworc3RhdGljIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8Zmxv
YXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwog
fQogCi1ib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQor
c3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbikKIHsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0
cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKLSAgICBtX291dHNldHMgPSB7
IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0eUVmZmVjdChjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKwor
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51
bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1
bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9
IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICBy
ZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRp
YyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0g
YW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCAr
IDAuNTsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAg
IHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3Rh
dGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRl
ck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRp
b24gY2xpcE9wZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBG
RUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjbGlwT3Bl
cmF0aW9uID09IENTU0ZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSA/IEVER0VN
T0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlv
bi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmls
dGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24g
Y2xpcE9wZXJhdGlvbikKK3sKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3Vy
Y2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0p
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdy
YXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAg
IGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmls
dGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2Fz
dDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0
LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZWZmZWN0KTsKKyAgICAgICAgc3dpdGNoIChvcGVy
YXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
OgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKCp0aGlzLCByZW5kZXJlciwg
KmVmZmVjdCwgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAg
ICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91Ymxl
IG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50
KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxl
bnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAg
ICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAw
LAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIx
MjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5
U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRv
KDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAg
ICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0
ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3Jt
YXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMg
KyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVh
dGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigq
b3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQo
KSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywg
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwor
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8Zmxv
YXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4
OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5w
dXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0
aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0
ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNT
IGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBh
dXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwot
ICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25l
bnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0
aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rp
b247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5T
RkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAg
ICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAg
IGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsK
KworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAg
IGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAg
ICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
KTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAg
ICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAg
ICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9u
LCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0
eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVm
ZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJh
dGlvbik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dP
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMs
IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCks
IGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEp
OworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAg
ICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0Zp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoZWZmZWN0KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMg
YW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAg
ICAgICAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWly
IHByaW1pdGl2ZSBzdWJyZWdpb25zLgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91
bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7Ci0gICAgICAg
ICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9u
LnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0g
ICAgICAgICAgICAgICAgbV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICBp
ZiAoZmlsdGVyKSB7CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsK
KyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIElmIHdl
IGRpZG4ndCBtYWtlIGFueSBlZmZlY3RzLCB0ZWxsIG91ciBjYWxsZXIgd2UgYXJlIG5vdCB2YWxp
ZC4KLSAgICBpZiAobV9lZmZlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1f
ZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZm
ZWN0IH0pOworICAgIH0KIAotICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1Jl
Z2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQot
ICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0
ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5h
YmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKLSNlbmRpZgogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlY3QpCi17Ci0gICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChmaWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVy
UmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCkK
K0ludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICAvLyBBdCB0aGlz
IHBvaW50IHRoZSBlZmZlY3QgY2hhaW4gaGFzIGJlZW4gYnVpbHQsIGFuZCB0aGUKLSAgICAvLyBz
b3VyY2UgaW1hZ2Ugc2l6ZXMgc2V0LiBXZSBqdXN0IG5lZWQgdG8gYXR0YWNoIHRoZSBncmFwaGlj
Ci0gICAgLy8gYnVmZmVyIGlmIHdlIGhhdmUgbm90IHlldCBkb25lIHNvLgotCi0gICAgaWYgKG1f
Z3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBs
b2dpY2FsU2l6ZSB7IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCkgfTsKLSAgICBpZiAoIXNv
dXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6
ZSkgewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwg
ZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwot
ICAgICAgICBSZW5kZXJpbmdNb2RlIG1vZGUgPSBtX2ZpbHRlclJlbmRlcmVyID8gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQgOiByZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgIHNldFNvdXJjZUlt
YWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIGZpbHRlclNjYWxlKCks
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNl
bmRpZgotICAgIH0KLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOworICAgIGlm
ICghbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgfHwgIW1fb3V0c2V0cy5pc1plcm8oKSkKKyAg
ICAgICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDog
bV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOwor
ICAgIAorICAgIHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorRmlsdGVyUmVzdWx0KiBDU1NGaWx0ZXI6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAg
ICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZs
b2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKLSAgICAvLyBB
dCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwgcmVjYWxj
dWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIEZsb2F0
U2l6ZSBzY2FsZTsKLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJl
Z2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAgICBzZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxl
KTsKLSAgICAgICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
KTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBmdW5jdGlvbi0+YXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UsIGdl
b21ldHJ5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICpyZXN1bHQgfSk7CisgICAgICAg
IG91dHB1dC5yZXN1bHRzKCkuYWRkKGZ1bmN0aW9uLCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0
KSk7CiAgICAgfQorICAgIAorICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gMSk7CisgICAgYXV0
byByZXN1bHQgPSBzdGFjay50YWtlTGFzdCgpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJlc3Vs
dC5sZWFrUmVmKCk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3Vs
dHMoKQotewotICAgIG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9z
b3VyY2VBbHBoYSkKLSAgICAgICAgbV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3Vs
dCgpOwotfQotCi12b2lkIENTU0ZpbHRlcjo6YXBwbHkoKQorVGV4dFN0cmVhbSYgQ1NTRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVj
dHMubGFzdCgpLmdldCgpOwotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1f
ZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0
ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBhdXRvIGVuZCA9IG1fZnVuY3Rpb25zLnJlbmQoKTsKKyAgICB1bnNp
Z25lZCBsZXZlbCA9IDA7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2Z1bmN0aW9ucy5yYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1dG8gZnVuY3Rpb24gPSAqaXQ7CisgICAg
ICAgIGlmIChmdW5jdGlvbi0+dHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxw
aGEpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdCAhPSBlbmQpOworICAgICAgICAgICAgKytpdDsK
ICAgICAgICAgfQorICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cywgbGV2ZWwrKyk7CisgICAgICAgIGZ1bmN0aW9uLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVj
dC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKLX0KLQotTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JE
aXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0KQotewotICAgIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0
aGUgYXJlYSBpbiB0aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVk
LCBzbyB0aGF0IHdlIGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0Ii4KLSAgICBhdXRvIHJlY3RG
b3JSZXBhaW50ID0gZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMo
KSkKLSAgICAgICAgcmVjdEZvclJlcGFpbnQgKz0gb3V0c2V0cygpOwotICAgIHJlY3RGb3JSZXBh
aW50LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKLSAgICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7
Ci19Ci0KLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCi0gICAg
ICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKTsKLSAgICAKLSAgICByZXR1cm4g
bV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLX0KIAotdm9pZCBDU1NGaWx0
ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkK
LXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2V0
TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJSZWdpb24oc291
cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKLX0K
LQotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZm
ZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAg
ZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOwotfQotCi1JbnRSZWN0IENTU0Zp
bHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZm
ZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkg
fHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQot
ICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOwotICAgIAotICAgIHJldHVybiB7IH07Ci19
Ci0KLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYg
KCFtX291dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7Ci0KLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVj
dC0+b3V0c2V0cygpOwotICAgIHJldHVybiBtX291dHNldHM7CisgICAgcmV0dXJuIHRzOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgK
aW5kZXggMDBiOTE5MTdiODA0YzkyZDk0MDhiNzU4ZTM3NWMyNTJmMjlkYjBjNS4uMWU3NTVmMDM4
ODBjMjA4MzdiYjI4YjkzNmZiNGNmNDY3ZTNhYWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI1LDg3ICsyNSw0NyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIkNTU0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
SW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYv
VHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyOwog
Y2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBTb3Vy
Y2VBbHBoYTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWVudW0gY2xhc3MgRmlsdGVyQ29uc3Vt
ZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAogY2xhc3MgQ1NTRmlsdGVy
IGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQogCi0g
ICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKLSAgICB2
b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRlKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIENTU0ZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uID0gQ1NTRmlsdGVy
R2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9u
Pj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKICAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzOyB9CiAgICAgYm9v
bCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW47IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0g
ICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPFJlZjxGaWx0
ZXJGdW5jdGlvbj4+JiBmdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQor
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIENT
U0ZpbHRlcigpOwotICAgIHZpcnR1YWwgfkNTU0ZpbHRlcigpOwotCi0gICAgYm9vbCBpc0NTU0Zp
bHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247
IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZm
ZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgQ1NT
RmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBDU1NG
aWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYsIFJlbmRlcmluZ01vZGUpOwogCi0g
ICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBib29sIGJ1
aWxkRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgQ1NT
RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBp
bnB1dENvbnRleHQoKTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0
b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZvaWQgYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QgZmluYWw7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKLQot
ICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwot
Ci0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9m
aWx0ZXJSZWdpb247Ci0KLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsK
LSAgICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IG1fc291cmNlQWxwaGE7Ci0KLSAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRz
ZXRzOwotCi0gICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9o
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07
Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRl
clJlbmRlcmVyOworCisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25z
OworICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Q1NTRmls
dGVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRl
cikgeyByZXR1cm4gZmlsdGVyLmlzQ1NTRmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci50eXBlKCkg
PT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcjsgfQogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlckdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXJHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRhNGUzN2Q2Y2I0ZWQwNmZkODIzOGJlZjkyNTIy
MzZjNmYzYWYwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXJHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ1NTRmlsdGVyR2VvbWV0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVu
aXF1ZV9wdHI8Q1NTRmlsdGVyR2VvbWV0cnk+IENTU0ZpbHRlckdlb21ldHJ5OjpjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8Q1NTRmlsdGVyR2VvbWV0cnk+KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0LCBjbGlw
T3BlcmF0aW9uKTsKK30KKworQ1NTRmlsdGVyR2VvbWV0cnk6OkNTU0ZpbHRlckdlb21ldHJ5KGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDogRmlsdGVyR2VvbWV0cnko
ZmlsdGVyUmVnaW9uLCBzb3VyY2VJbWFnZVJlY3QpCisgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xp
cE9wZXJhdGlvbikKK3sKK30KKworRmxvYXRSZWN0IENTU0ZpbHRlckdlb21ldHJ5OjpjbGlwVG9Q
cmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgYXV0byBjbGlwcGVkRHJh
d2luZ1JlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICBpZiAobV9jbGlwT3BlcmF0aW9uID09IENsaXBP
cGVyYXRpb246OkludGVyc2VjdCkKKyAgICAgICAgY2xpcHBlZERyYXdpbmdSZWN0LmludGVyc2Vj
dChwcmltaXRpdmVTdWJyZWdpb24pOworICAgIGVsc2UKKyAgICAgICAgY2xpcHBlZERyYXdpbmdS
ZWN0LnVuaXRlKHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgcmV0dXJuIGNsaXBwZWREcmF3aW5n
UmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjRjZjU0NGIxNmNmYTk5N2E4
ODE3ZmJjNzgxNDZhOGM0OTQ1ZDljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q1NTRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7
IEludGVyc2VjdCwgVW5pdGUgfTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENT
U0ZpbHRlckdlb21ldHJ5PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9wZXJh
dGlvbjo6SW50ZXJzZWN0KTsKKworICAgIENTU0ZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVj
dCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgQ2xpcE9w
ZXJhdGlvbik7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBDbGlwT3BlcmF0aW9uIG1fY2xp
cE9wZXJhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggMWJmMjJlNDJjMzUxODYxODc5ZWY1YWYwY2YxZWMw
YjQ3MTQ5YjVlYS4uMDBmNjZlOGFiMjE4YmU0ZjAxZmE3MmJjY2NhZTkxZTdlODYzYTM1NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xh
c3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NGaWx0ZXI7
CiBjbGFzcyBDbGlwUmVjdHM7CiBjbGFzcyBDbGlwUmVjdHNDYWNoZTsKIGNsYXNzIEV2ZW50UmVn
aW9uQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAKaW5kZXggMjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4u
ZWQ2OGYxOTZhZmY3NTg1MTc5MjhlMmYzODhhNjM5MTc4NWE1YTVkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllckZpbHRlcnMuaCIKIAogI2luY2x1ZGUgIkNTU0ZpbHRl
ci5oIgorI2luY2x1ZGUgIkNTU0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZH
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTExNiwzOSArMTE3LDUxIEBAIHZvaWQgUmVuZGVyTGF5ZXJG
aWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKICAgICBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlcy5jbGVhcigpOwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRG
aWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUpCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0
ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikgewotICAgICAgICBtX2ZpbHRlciA9IENTU0Zp
bHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZh
Y3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUp
OwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZpbHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3Ip
IHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAg
ICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIH0KKyAgICBtX2Zp
bHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRl
cigpLCByZW5kZXJpbmdNb2RlLCBDU1NGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5p
dGUpOworfQorCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6aW5wdXRDb250
ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9zb3VyY2VJbWFnZSA/ICZtX3NvdXJjZUltYWdlLT5jb250
ZXh0KCkgOiBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3Nv
dXJjZUltYWdlUmVjdC5zaXplKCkgfTsKKyAgICBtX3NvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgMSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAKLSAgICAvLyBJ
ZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0
IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNz
aW5nIChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgIC8v
IEZJWE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRo
ZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChy
ZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRl
clByb3BlcnR5KSkKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJG
aWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBp
ZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8mIGZpbHRl
ciA9ICptX2ZpbHRlcjsKLSAgICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBmaWx0ZXIuY29tcHV0
ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChmaWx0ZXJCb3hSZWN0LCBkaXJ0eVJlY3QpOwor
ICAgIAorICAgIGF1dG8gZmlsdGVyU291cmNlUmVjdCA9IGRpcnR5UmVjdDsKKyAgICBpZiAoZmls
dGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQorICAgICAgICBmaWx0ZXJTb3VyY2VSZWN0
ICs9IGZpbHRlci5vdXRzZXRzKCk7CisgICAgZmlsdGVyU291cmNlUmVjdC5pbnRlcnNlY3QoZmls
dGVyQm94UmVjdCk7CisKICAgICBpZiAoZmlsdGVyU291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYm9vbCBoYXNVcGRhdGVkQmFja2luZ1N0b3JlID0g
ZmlsdGVyLnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7CisgICAgCisg
ICAgaWYgKGZpbHRlclNvdXJjZVJlY3QgIT0gbV9zb3VyY2VJbWFnZVJlY3QpIHsKKyAgICAgICAg
bV9zb3VyY2VJbWFnZVJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0OworICAgICAgICBtX2dyYXBoaWNz
QnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJl
Y3Q7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlKQorICAg
ICAgICBpZiAoIW1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgICAgIG1fcmVwYWlu
dFJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1f
cmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CkBAIC0xNTksMTEgKzE3Miw5IEBAIEdyYXBoaWNzQ29u
dGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0CiAgICAgbV9wYWludE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3QubG9jYXRp
b24oKTsKICAgICByZXNldERpcnR5U291cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgZmlsdGVyLmFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoZGVzdGluYXRpb25Db250ZXh0KTsKLSAgICBhdXRvKiBzb3VyY2VHcmFw
aGljc0NvbnRleHQgPSBmaWx0ZXIuaW5wdXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFw
aGljc0NvbnRleHQgfHwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUoKSkpCisg
ICAgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIGF1dG8qIHNvdXJjZUdyYXBo
aWNzQ29udGV4dCA9IGlucHV0Q29udGV4dCgpOworICAgIGlmICghc291cmNlR3JhcGhpY3NDb250
ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29u
dGV4dCBzbyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaXMgY2FwdHVyZWQgaW4gdGhl
IG9mZnNjcmVlbiBtZW1vcnkgYnVmZmVyLgpAQCAtMTc3LDIzICsxODgsMTUgQEAgR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXQKIAogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZm
ZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KQogewotICAgIEFTU0VSVCht
X2ZpbHRlci0+aW5wdXRDb250ZXh0KCkpOworICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAK
ICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJcblJlbmRlckxheWVyRmls
dGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCIpOwogCiAgICAgYXV0byYgZmls
dGVyID0gKm1fZmlsdGVyOwotICAgIGZpbHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwot
Ci0gICAgZmlsdGVyLmFwcGx5KCk7Ci0KLSAgICAvLyBHZXQgdGhlIGZpbHRlcmVkIG91dHB1dCBh
bmQgZHJhdyBpdCBpbiBwbGFjZS4KLSAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91
dHB1dFJlY3QoKTsKLSAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50
T2Zmc2V0LnkoKSk7Ci0KLSAgICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1
dCgpKQotICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRwdXRC
dWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIucmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICBpbnB1dENvbnRleHQoKS0+
cmVzdG9yZSgpOwogCi0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworICAg
IGF1dG8gZ2VvbWV0cnkgPSBDU1NGaWx0ZXJHZW9tZXRyeTo6Y3JlYXRlKG1fc291cmNlSW1hZ2VS
ZWN0LCBtX3NvdXJjZUltYWdlUmVjdCwgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246
OlVuaXRlKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZp
bHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOwogCiAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwg
dGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMx
OTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNhYzE0
MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENh
Y2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNz
IEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5
ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0
d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgp
IHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRl
eHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRl
ZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVs
ZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAor
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9z
b3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5
b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRh
Y2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAgIExh
eW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDE5NTA5ZDk3MThh
ZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjlhZWNkNTM4YjA1ZGRjMjZiMDIyMmQwMmVi
MzI3Yjc4OWUzN2I5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNyw2ICszOCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisj
aW5jbHVkZSAiU1ZHRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKQEAgLTgyLDE0OSArODUsNjUgQEAgdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNs
aWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9y
SW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlk
YXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QK
LXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwot
ICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxk
Tm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJv
dW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZm
ZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmls
dGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXIt
PnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAg
ICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAg
Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8g
ZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBp
ZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBl
bmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5k
ZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0Lmdl
dCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRl
eHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5k
aW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUo
REVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3Qt
PnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0
eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6
TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRp
ZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZN
b3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25T
ZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsK
IAotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgYXBwbHlSZXNv
dXJjZSByZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KLSAgICBpZiAobV9yZW5kZXJl
ckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkgewotICAgICAgICBGaWx0ZXJEYXRh
KiBmaWx0ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZyZW5kZXJlcik7Ci0g
ICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQYWludGluZ1NvdXJj
ZSB8fCBmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWluZykKLSAgICAgICAg
ICAgIGZpbHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6Q3ljbGVEZXRlY3RlZDsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdyZSBpbiBhIGN5Y2xlLCBv
ciB3ZSdyZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1c3QgZG8gbm90aGluZyBt
b3JlIG5vdy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUgU1ZHRmlsdGVyCiAgICAgYXV0byBm
aWx0ZXJEYXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigpOwotICAgIEZsb2F0UmVjdCB0YXJn
ZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7Ci0KLSAgICBmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxT
VkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVy
VW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVuZGVyaW5n
TW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3Ig
ZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0
ZVN5c3RlbShyZW5kZXJlcik7Ci0gICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJF
bGVtZW50KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byB0YXJnZXRCb3VuZGluZ0JveCA9
IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgZmlsdGVyRGF0YS0+Ym91bmRhcmll
cyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4o
JmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCksIHRhcmdldEJv
dW5kaW5nQm94KTsKIAotICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUg
aW1hZ2VzIGZvciBmZVRpbGUuCi0gICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAs
IGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKLQotICAgIC8vIERldGVybWluZSBh
YnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4K
KyAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZUltYWdlUmVjdAogICAgIGZpbHRlckRhdGEtPmRy
YXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwogICAgIGZpbHRlckRh
dGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwotICAg
IEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24pOwotCi0g
ICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91
bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEt
PmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8g
Q3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5i
dWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICgh
ZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0
ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUg
SW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAg
ICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAg
RmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
Zyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2Fs
ZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAKLSAgICAvLyBTZXQgdGhlIHNjYWxl
IGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJl
c29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZF
ZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVy
RGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0
RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5w
dXRzKQorICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGVUcmFuc2Zvcm0KKyAgICBhdXRvIGFi
c29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3Jt
YXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOworICAgIGlmICghYWJz
b2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZm
ZWN0KCkpOwotCi0gICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJl
Y3QoKTsKLSAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1h
Z2Ugc2l6ZSwKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNj
YWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJS
ZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRG
aWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBv
ZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1
Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCisgICAgZmlsdGVyRGF0YS0+c2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAot
ICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBs
aWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJv
dW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZl
Y3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlmIChmaWx0ZXJEYXRh
LT5kcmF3aW5nUmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJG
aWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBmaWx0ZXJEYXRhLT5z
YXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5z
ZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbHRlciByZXNvbHV0aW9uCisgICAgZmls
dGVyRGF0YS0+c2NhbGUgPSBTVkdGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRlUmVzb2x1dGlvbihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBmaWx0ZXJE
YXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICAvLyBDaGFuZ2UgdGhlIGNv
b3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB0byB0aGUgZmlsdGVyZWQgZWxlbWVudCB0
byByZWZsZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBmaWx0ZXIuCisgICAgLy8gQ2FsY3VsYXRl
IGVmZmVjdGl2ZVRyYW5zZm9ybQogICAgIEFmZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zv
cm07Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKKyAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoZmlsdGVyRGF0YS0+c2NhbGUp
OwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgYXV0byBjb2xvclNwYWNlID0g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCk7CiAjZWxzZQogICAgIGF1dG8gY29s
b3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogI2VuZGlmCisKICAgICBh
dXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAgIGlmICghc291cmNlR3JhcGhpYykgewot
ICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJl
cikpOworLy8gICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMo
JnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7
CiAgICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUo
ZmlsdGVyRGF0YSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIC8v
IFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZp
bHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKIAorICAg
IC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdy
YXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNl
R3JhcGhpYy0+Y29udGV4dCgpOwotICAKKwogICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNC
dWZmZXIgPSBXVEZNb3ZlKHNvdXJjZUdyYXBoaWMpOwogICAgIGZpbHRlckRhdGEtPnNhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7CiAKICAgICBjb250ZXh0ID0gJnNvdXJjZUdyYXBoaWNDb250ZXh0Owog
Ci0gICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIp
KTsKICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZp
bHRlckRhdGEpKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjksMzggKzE4OCwxOCBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBG
aWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3Qo
KTsKLQotICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0
eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4g
SXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCi0gICAgICAgIC8vIGluaXRpYWwgZmls
dGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24g
YQotICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4KLSAgICAgICAgaWYgKGZpbHRlckRhdGEuc3Rh
dGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCi0gICAgICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+
c2V0U291cmNlSW1hZ2UoV1RGTW92ZShmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIpKTsK
LQotICAgICAgICAvLyBBbHdheXMgdHJ1ZSBpZiBmaWx0ZXJEYXRhIGlzIGp1c3QgYnVpbHQgKGZp
bHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkJ1aWx0KS4KLSAgICAgICAgaWYgKCFsYXN0
RWZmZWN0LT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZp
bHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAg
ICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWZpbHRlckRhdGEuYm91
bmRhcmllcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRh
dGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZl
Y3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAg
ICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgICAg
IGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3Jt
LmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRl
ckRhdGEuc2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCks
IDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoKnJlc3VsdEltYWdlLCBsYXN0RWZm
ZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZp
bHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgICAgICAgICBjb250
ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgYXV0byBnZW9tZXRyeSA9IFNWR0ZpbHRlckdlb21ldHJ5OjpjcmVh
dGUoZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJEYXRhLmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJh
d2luZ1JlZ2lvbiwgcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKSwgZmlsdGVyRGF0YS5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRl
eHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEu
c291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIAorICAg
ICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+
Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0K
LSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIg
IiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVj
dCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwOCwyNyArMjA3LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZH
RmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVu
aXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGluZ0JveCgpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9i
amVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQordm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBjb25z
dCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCi0gICAgTE9HKEZpbHRlcnMsICJSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVyICVw
IiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZvciAoY29uc3QgYXV0byYgb2JqZWN0RmlsdGVyRGF0
YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewogICAgICAgICBjb25zdCBhdXRvJiBm
aWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0YVBhaXIudmFsdWU7CiAgICAgICAgIGlmIChmaWx0
ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIqIGJ1aWxkZXIgPSBmaWx0ZXJEYXRhLT5idWls
ZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJFZmZlY3QqIGVmZmVjdCA9IGJ1aWxkZXItPmVmZmVj
dEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAgICAgaWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgLy8gU2luY2UgYWxsIGVmZmVjdHMgc2hhcmVzIHRoZSBzYW1lIGF0
dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAgIC8vIG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNo
YW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0dmUtPnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShl
ZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXIt
PmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3QpOwotCiAgICAgICAgIC8vIFJlcGFpbnQgdGhl
IGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24o
Km9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oCmluZGV4IDhjZTBjN2FiYzE0M2JkYjY1Mzg1MGM5M2UzMjkyYWM5ZGE0OWJiYzcu
LjcxZTRkMWYzNDZjMzI2MmQ3ZjRlMDMzYzRjM2Y4MTljMjhjMTgxZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgK
QEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1
aWxkZXIuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsOCArNDIsNyBAQCBwdWJsaWM6
CiAKICAgICBGaWx0ZXJEYXRhKCkgPSBkZWZhdWx0OwogCi0gICAgUmVmUHRyPFNWR0ZpbHRlcj4g
ZmlsdGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyOwor
ICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlcjsKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNvdXJj
ZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQgeyBudWxs
cHRyIH07CiAgICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOwpA
QCAtNzIsOCArNzAsNiBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJikgY29uc3Q7Ci0K
ICAgICBpbmxpbmUgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0ZXJVbml0cygpIGNvbnN0
OwogICAgIGlubGluZSBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCmluZGV4IGRlNDkzMjgyNjNkMDYyYTIzNWJjZDJmNDY2N2VlZjA5YzEy
ZWIzYjMuLjZmNzZmMjBjOWM5ZGNkYTUyMTIwNTMyNzQwNmE4ZWM0MWE5MzBmY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUg
IlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIK
ICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgog
I2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgpAQCAtNDMxLDEzICs0MzMsOSBA
QCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMs
ICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci5wcmltaXRpdmVVbml0cygpKTsKICAgICAgICAgdHMg
PDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2gg
aXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0Owot
ICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNm
b3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBp
ZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQo
KSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVy
OjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIFRleHRTdHJl
YW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLQotICAgICAgICAgICAgaWYgKEZpbHRl
ckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKLSAgICAgICAgICAg
ICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICAgICAgICAg
IGR1bW15RmlsdGVyLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlw
ZSkgewogICAgICAgICBjb25zdCBhdXRvJiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyJj4ocmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUJsZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2
NDMxZjY4Ni4uOWIxM2U2NTUzNDliNDA4ZTk4ZTA0MDBkNzQzZTIxZDYzMDc4YTUwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCkBAIC0xMDAsMjAgKzEwMCwxNSBA
QCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRl
ciwgbW9kZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVu
ZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9Owor
CisgICAgcmV0dXJuIHsgRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSksIHsgeyAqaW5wdXQxIH0sIHsg
KmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
aAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2Li5iYzk1YmM5
MjVjZDAzNTcxNDc0ZWMyZjcyNTg1NDZkZmU0M2Q3NjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFy
c2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVy
cmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCAw
NTI0ODU3OGMyNzRjOGZhMmIzZTFmMjQ0ZTQzNjc4NjhmNDJiYTljLi5lODY4NTI3MDczODgwMjY2
NTE4MzgzNmQ0OTMzMTFhMTM0ZmY5ZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbG9yTWF0cml4RWxlbWVudC5jcHAKQEAgLTEwMCwxMiArMTAwLDExIEBAIHZvaWQgU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5w
dXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPGZs
b2F0PiBmaWx0ZXJWYWx1ZXM7CiAgICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBl
KCk7CkBAIC0xMzUsMTUgKzEzNCwxMyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAgICAg
ICBpZiAoKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiBzaXplICE9
IDIwKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURSAmJiBzaXplICE9IDEpCiAgICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUgJiYgc2l6ZSAhPSAxKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIGZp
bHRlclZhbHVlcyA9IHZhbHVlcygpOwogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQo
KTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0
ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4g
eyBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMp
KSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5k
ZXggN2FiNGFhNDE4MWU3YWIxOThiMTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uMWJlYzU0MzdhNmUw
ZGY1NGVlNDc1N2I5YmIwNzQzZmExOThhNjlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lz
dHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmlu
ZGV4IDkwYTU1YjdlZmZmN2EzZmU2MDZhOWUwNTc5YTc2ZWRlOWY5NjgwMTEuLjA3NWNjYTM1YzUy
NjkwOTQ3MjM1ZTg4NTc2OTgyNDc2MDJjNWZjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtNjMsMTIgKzYzLDEx
IEBAIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVw
bGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
KSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7Ci0gICAgCisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAgICBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuOwpAQCAtODYsOSArODUsNyBAQCBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdAogICAgICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNB
RWxlbWVudD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0gICAgYXV0
byBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07
Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThiOTkzYTRkZDU0ODYzLi43OTM3
MTE2ZDM0YzdhNzViZTQzYmViMzVmMGMzMTQ5NGU1NzJjM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMs
NyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3Npbmcu
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4
YTZiYWY2NTNkYzA2ZmUyMDVhYzk4MjM1Li40MzYzODBiMDkxMmI5YTliN2E3NzcxYjI0OGYxN2E5
OTA1NDU3NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcApAQCAtNDAsNyArNDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lz
dGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9p
bjE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFt
ZXM6OmluMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigpOwotICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIs
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fc3ZnT3Bl
cmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZH
TmFtZXM6Om9wZXJhdG9yQXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9jb21wb3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3Ry
eTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjptX2sxPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5
PFNWR05hbWVzOjprMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazI+KCk7CiAgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmszQXR0ciwg
JlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2LDkgQEAgUmVmPFNW
R0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENv
bXBvc2l0ZU9wZXJhdGlvblR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgRkVDb21w
b3NpdGVPcGVyYXRvciBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3Np
dGVPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1
ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8Q29t
cG9zaXRlT3BlcmF0aW9uVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX2NvbXBv
c2l0ZU9wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4ocHJv
cGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk5LDcgKzk5LDcgQEAg
Ym9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QKIHsKICAgICBGRUNvbXBvc2l0ZSogY29tcG9zaXRlID0g
c3RhdGljX2Nhc3Q8RkVDb21wb3NpdGUqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRPcGVy
YXRpb24oc3ZnT3BlcmF0b3IoKSk7CisgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldENvbXBv
c2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9yKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6azFBdHRyKQogICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLMShrMSgpKTsK
ICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKQEAgLTEzMSwyMCArMTMxLDE1
IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBh
dXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwotICAgIAor
ICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBp
bnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMigpKTsKKwogICAgIGlmICghaW5wdXQxIHx8
ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBG
RUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMo
KSwgazQoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0g
ICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQo
aW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiB7IEZFQ29tcG9zaXRlOjpjcmVhdGUoY29tcG9zaXRlT3BlcmF0b3IoKSwgazEo
KSwgazIoKSwgazMoKSwgazQoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgx
YTc4Yzg2NTdhMGZhMzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLmY1MTAwMWUyMGQ3MDRkZDg2
ODMxNmI4ZDMwYjJhMjBkOTg0OTQ1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgKQEAgLTI3LDE1ICsyNywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB0ZW1wbGF0ZTw+Ci1pbmxpbmUgdW5zaWduZWQgU1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVP
cGVyYXRpb25UeXBlPjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CitpbmxpbmUgdW5zaWduZWQgU1ZHSURMRW51bUxp
bWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJl
dHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKIHRlbXBsYXRlPD4KLXN0
cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CitzdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNp
Z25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfTElH
SFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhDb21wb3NpdGVPcGVyYXRpb25U
eXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3IpIHsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKQEAgLTU4LDcgKzU4LDcgQEAg
c3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3ZlciIpCiAgICAgICAgICAgICByZXR1cm4gRkVDT01Q
T1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFN0
cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2luMi0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdP
cGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+KCk7IH0KKyAgICBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZhbHVlPEZFQ29tcG9zaXRlT3BlcmF0b3I+KCk7IH0K
ICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAg
ICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVybiBtX2syLT5jdXJyZW50VmFsdWUoKTsgfQogICAg
IGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMy0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTkz
LDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVk
KCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4yQW5pbWF0ZWQo
KSB7IHJldHVybiBtX2luMjsgfQotICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJh
dG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fY29tcG9z
aXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazFBbmltYXRlZCgpIHsgcmV0
dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazJBbmltYXRlZCgpIHsgcmV0dXJu
IG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazNBbmltYXRlZCgpIHsgcmV0dXJuIG1f
azM7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5
UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBT
VkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMiB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVy
YXRpb246OmNyZWF0ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OworICAgIFJl
ZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2NvbXBvc2l0ZU9wZXJhdG9yIHsgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07
CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2sxIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNy
ZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMiB7IFNWR0FuaW1h
dGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1f
azMgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsCmluZGV4IDc4ZTQwMjA3ZjViMDJmNjcwZjA0
MGIyOTM3NWVhZDdjMmI0NTJkZTAuLmZjNjcwYzllYzU2YzQxYzEwOTI4NTQ4NDI3YzVmNmE4ZTE4
NWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRs
CkBAIC0zOCw3ICszOCw3IEBACiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRT
dHJpbmcgICAgICBpbjE7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5n
ICAgICAgaW4yOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRB
cz1jb21wb3NpdGVPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gb3BlcmF0b3I7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVy
ICAgICAgazE7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAg
azI7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgazM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApp
bmRleCBmNzUwNTgxNWRlY2FiYjRlYTM0YjQzNWI0N2VhNWE4MGM2YTI2ZGYxLi4zYjQ2NTQwZjdl
ZTFjNDEwZmI4YjczNmFlNDIzNDAwODE2NzE2ODMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKQEAgLTE5MSwxMiArMTkxLDExIEBA
IHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0
CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAg
aWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgaW50IG9yZGVyWFZhbHVlID0gb3JkZXJYKCk7CiAgICAgaW50IG9yZGVyWVZhbHVl
ID0gb3JkZXJZKCk7CkBAIC0yMDYsMjIgKzIwNSwyMiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVy
QgogICAgIH0KICAgICAvLyBTcGVjIHNheXMgb3JkZXIgbXVzdCBiZSA+IDAuIEJhaWwgaWYgaXQg
aXMgbm90LgogICAgIGlmIChvcmRlclhWYWx1ZSA8IDEgfHwgb3JkZXJZVmFsdWUgPCAxKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvJiBrZXJu
ZWxNYXRyaXggPSB0aGlzLT5rZXJuZWxNYXRyaXgoKTsKICAgICBpbnQga2VybmVsTWF0cml4U2l6
ZSA9IGtlcm5lbE1hdHJpeC5pdGVtcygpLnNpemUoKTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRo
aXMgaXMgYSByZXF1aXJlbWVudCwgYW5kIHNob3VsZCBiYWlsIG91dCBpZiBmYWlscwogICAgIGlm
IChvcmRlclhWYWx1ZSAqIG9yZGVyWVZhbHVlICE9IGtlcm5lbE1hdHJpeFNpemUpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaW50IHRhcmdldFhW
YWx1ZSA9IHRhcmdldFgoKTsKICAgICBpbnQgdGFyZ2V0WVZhbHVlID0gdGFyZ2V0WSgpOwogICAg
IGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSAmJiAodGFyZ2V0WFZhbHVl
IDwgMCB8fCB0YXJnZXRYVmFsdWUgPj0gb3JkZXJYVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZh
dWx0IHZhbHVlIGlzOiB0YXJnZXRYID0gZmxvb3IgKCBvcmRlclggLyAyICkpCiAgICAgaWYgKCFo
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSkKICAgICAgICAgdGFyZ2V0WFZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob3JkZXJYVmFsdWUgLyAyKSk7CiAgICAgaWYgKGhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpICYmICh0YXJnZXRZVmFsdWUgPCAwIHx8
IHRhcmdldFlWYWx1ZSA+PSBvcmRlcllWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFs
dWUgaXM6IHRhcmdldFkgPSBmbG9vciAoIG9yZGVyWSAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpKQogICAgICAgICB0YXJnZXRZVmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlcllWYWx1ZSAvIDIpKTsKQEAgLTIzNCwxMSArMjMzLDEx
IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZVmFs
dWUgPSAxOwogICAgIH0KICAgICBpZiAoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSA8PSAwIHx8IGtl
cm5lbFVuaXRMZW5ndGhZVmFsdWUgPD0gMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBmbG9hdCBkaXZpc29yVmFsdWUgPSBkaXZpc29yKCk7CiAg
ICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZGl2aXNvckF0dHIpICYmICFkaXZpc29yVmFs
dWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIGlm
ICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29yQXR0cikpIHsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBrZXJuZWxNYXRyaXhTaXplOyArK2kpCiAgICAgICAgICAgICBkaXZpc29y
VmFsdWUgKz0ga2VybmVsTWF0cml4Lml0ZW1zKClbaV0tPnZhbHVlKCk7CkBAIC0yNDYsOSArMjQ1
LDE4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgICAgICBkaXZpc29yVmFsdWUg
PSAxOwogICAgIH0KIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRl
KGZpbHRlciwgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUpLCBkaXZpc29yVmFsdWUs
IGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9kZSgp
LCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFs
dWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJpeCk7Ci0gICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4gewor
ICAgICAgICBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoCisgICAgICAgICAgICBJbnRTaXplKG9y
ZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksCisgICAgICAgICAgICBkaXZpc29yVmFsdWUsCisgICAg
ICAgICAgICBiaWFzKCksCisgICAgICAgICAgICBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdl
dFlWYWx1ZSksCisgICAgICAgICAgICBlZGdlTW9kZSgpLAorICAgICAgICAgICAgRmxvYXRQb2lu
dChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwKKyAgICAg
ICAgICAgIHByZXNlcnZlQWxwaGEoKSwKKyAgICAgICAgICAgIGtlcm5lbE1hdHJpeCksCisgICAg
ICAgIHsgeyAqaW5wdXQxIH0gfQorICAgIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKaW5k
ZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5MDQ5YjMzOS4uMTg3MDZkYTczNWZk
MmE3NzhmN2YxODU4NzZmNzQ4Zjg0Y2ExZjBjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li5iOWMxYjNh
Mjk3NjgzZGY5ODA0ZmM2OTEyNzVlMDYwN2ZiNmM3NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtODksMTQgKzg5LDE0
IEBAIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAg
ICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmls
dGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAg
ICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAg
ICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1
cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwogICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKICAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFu
dCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+
KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2Ug
PSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAg
ICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVt
ZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwog
CkBAIC0xNTEsMjggKzE1MSwyNSBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAg
ICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5w
dXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVu
dCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0
RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3Vy
Y2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb2xvciBj
b2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2Nh
bGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRM
ZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFRGlm
ZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3Rh
bnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShs
aWdodFNvdXJjZSkpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRi
NmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLjliMzRhYTcyMmIwNGQ1NDFhZDY0OTc4MGUz
YWNmNDBkNTExMDFkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5kZXggMGM1ZTgy
NWJjODI1NjBmMzZhMjY5ZWE2ZDcyMmRmZDA1MTczZDhjMi4uYzllZDJmNTI3MGYwMmZkNzc3ODg1
MGVmZWZhN2U3MTMwYTRlMmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKQEAgLTExNSwyMCArMTE1LDE1IEBAIHZvaWQgU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAg
IGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAg
YXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0
MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8
ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBG
RURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvcigpLCB5Q2hh
bm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2
ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1
dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhD
aGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKSwgeyB7ICppbnB1
dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0
MTFjNGQwYWU1ZWNkNTg2NjVkMy4uMGU1OTNkZDBkYTI0NjAzMDllMWVjNjgxNjFhODE3NzE0OWI0
MGY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZp
bHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAppbmRleCBhNjg2YmI4ZmEzOGQ5
ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZmMmY3Li45MTZmMDNjMGY5MTU3ZWM4MjhjOTJlOTliNjNi
ZDYyMmU5NTI2YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmNwcApAQCAtMzYsNyArMzYsNyBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50PiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYQog
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CitSZWY8TGlnaHRTb3Vy
Y2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIERpc3RhbnRMaWdodFNvdXJjZTo6Y3JlYXRl
KGF6aW11dGgoKSwgZWxldmF0aW9uKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudC5oCmluZGV4IGZiZGY3MWMwZWNiZDlmOTk3ZDY5ZWE2NTRiOWY1
YmEwMzE3ZDcxY2MuLmJiYmZlOTQ3MzliNDQzOWMwNjA2YmMxMzg4ZWQ4MGY3MjI3MjU4NGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKQEAgLTMw
LDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRURpc3RhbnRMaWdodEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3Vy
Y2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBS
ZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggMjJiY2UxZDMzMzE3Yzk1NzFm
ZTVkNzlmNGIzMjZhODliZmM1YjY4MS4uNjM0NzEwOGYyNmJiOGE1MzhlYTY5M2UxMzA3ZWYxMDRm
OGQ0MmE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50
LmNwcApAQCAtOTcsMjcgKzk3LDI1IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIpIGNvbnN0CiB7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0
KGluMSgpKTsKKyAgICBpZiAoIWlucHV0MSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
aWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogICAgIAog
ICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5
bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBz
dGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNp
dHkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVy
biBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9u
WCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KSwgeyAqaW5w
dXQxIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVt
ZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0MmY3NDUxZC4uMWM2
ZTEyMjAwYzBiMDdhNTY1OTQwMDVmZDNjNDEyNmEyZTZkZWM4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAppbmRleCBjMjI4ZTIyZDU2NWQwZTE2M2Zm
ODdkMGI0YmNhYmQyMjQ0NzU4ZmMyLi5mMmZhOGQ1NDBhOGQxMGM5OTBlNGRlNzRiNmRkNGJhYWYw
MGE4MTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKQEAgLTU4
LDE4ICs1OCwxOCBAQCBib29sIFNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRmxvb2RFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAK
ICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9y
RmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0
eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIs
IGNvbG9yLCBvcGFjaXR5KTsKKyAgICByZXR1cm4geyBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9w
YWNpdHkpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
aAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcyNDhhMWI2ZjVjZjUxZmVlOTExLi40ZjAzYTc2
NWM5ODcyODUzZjkzZjVhMmY4MDBkZjI2MjU1YzNlNjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuaApAQCAtMzYsNyArMzYsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNW
R1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlk
ZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5
ZC4uYmU4MjA2YTRiN2Q1YzhiZjU2YWJhYmRjYzE1MDk5MDc1MjhiNzYwMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTk1LDE4ICs5
NSwxNiBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAg
IGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgp
LCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVHYXVz
c2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1v
ZGUoKSksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBkODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQx
MDAxY2U0OGVlMGIyLi5iNWY2MmQ0YTAzYjNjMTg4Yjg1YzgyNjMxMzY2MDE4ZTUyM2IxMTQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01
Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRl
eCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi4xOTM0MDg3MjIzYzk1
M2MwNDUxYjRmMGM2ZmY4OGRhYzY2MDU5Zjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3
NCwxNiArMTc1LDQ0IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50
UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPElt
YWdlQnVmZmVyPiBTVkdGRUltYWdlRWxlbWVudDo6aW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSBjb25z
dAogewotICAgIGlmIChtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aEltYWdlKGZpbHRlciwgbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcigpKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKLQogICAgIGF1dG8gdGFyZ2V0ID0gU1ZH
VVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29w
ZSgpKTsKKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKICAgICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50
T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3Bl
KCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICBhdXRvIGNvbnRleHROb2Rl
ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCk7CisgICAg
YXV0byByZW5kZXJlciA9IGNvbnRleHROb2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzcmNSZWN0ID0gcmVuZGVy
ZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvJiBjb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBj
b250ZXh0LnRyYW5zbGF0ZSgtc3JjUmVjdC5sb2NhdGlvbigpKTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVu
ZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1h
dGlvbik7CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFSW1hZ2VFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKK3sKKyAgICBpZiAobV9jYWNoZWRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIHsgRkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4geyAqbV9j
YWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpLCB7IH0gfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZm
ZXJGb3JFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgRkVJbWFnZTo6Y3JlYXRlKGltYWdlQnVm
ZmVyLnJlbGVhc2VOb25OdWxsKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsgfSB9OworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmluZGV4IGQ5M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVh
MjU2YmFkYTE1NGM1YzcuLjA1YmVmOWFmMTM5YmQ2MDQ2ZmRiNmU4YjhlNjJkM2FhZjUxMTM4MGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCkBAIC01NSw3ICs1NSw5IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
Rm9yRWZmZWN0KCkgY29uc3Q7CisgICAgCisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwog
ICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGln
aHRFbGVtZW50LmgKaW5kZXggY2QwYmZiOWVkY2ZkN2I0ZTFhZjM5YjU1ZWRiYmJkNzg0YWFlYTg5
ZC4uMWNiMjdkZjMxNTA0MDE3YzY5OWUwMTBjZWQ0YjBkNWQ2MDBiYzYzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgU1ZHRmls
dGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQg
ewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRkVMaWdodEVsZW1lbnQpOwogcHVibGlj
OgotICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJj
ZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOwogICAgIHN0YXRpYyBTVkdGRUxp
Z2h0RWxlbWVudCogZmluZExpZ2h0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7CiAKICAgICBm
bG9hdCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoLT5jdXJyZW50VmFsdWUoKTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5kZXggYmUyZjZlMDMw
N2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uNWQ3ZDcwY2RjZTYwMWU0Mjg2YmQ3NWVh
M2Y2MjIwYTQ1ZmQ5YTJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
Y3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDUsMjQgKzQ0LDIy
IEBAIFJlZjxTVkdGRU1lcmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZH
RkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBlZmZlY3QgPSBG
RU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlucHV0
czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJn
ZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBt
ZXJnZUVmZmVjdCA9IGJ1aWxkZXIubmFtZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsKICAgICAg
ICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOworICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJlbGVh
c2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0KCk7Ci0K
ICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsg
RkVNZXJnZTo6Y3JlYXRlKG1lcmdlSW5wdXRzLnNpemUoKSksIFdURk1vdmUobWVyZ2VJbnB1dHMp
IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1
MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4MDJkMjgzY2Y0ZTNjMi4uNTVhNjExZjA3ODhlMDc0MmI1
YjNiYjE4Y2FkYWZlMTU4MzhjNzAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVt
ZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lz
dHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVn
aXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5
UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IGQ2ZmI5NWM4ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQx
Nzk1ZDMyMWIuLjI5YmI1OWQ3MWY1N2E0NzJlMzMwZTFmMjhlNDUxYThmMmM3YjczZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKQEAgLTM5LDcg
KzM5LDcgQEAgaW5saW5lIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmEKICAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAg
UHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudDo6bV9pbjE+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6
OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9tb3Jw
aG9sb2d5T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OnJhZGl1c0F0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3Jh
ZGl1c1gsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1k+KCk7CiAgICAgfSk7CiB9
CkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVz
KGZsb2F0IHgsIGZsb2F0IHkpCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVl
KQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBNb3Jw
aG9sb2d5T3BlcmF0b3IgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xv
Z3lPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1
ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX21vcnBo
b2xvZ3lPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvcj4ocHJv
cGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg1LDcgKzg1LDcgQEAg
Ym9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiBlZmZlY3QsIGNvbnMKIHsKICAgICBGRU1vcnBob2xvZ3kqIG1vcnBob2xvZ3kg
PSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0
TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOworICAgICAgICByZXR1cm4gbW9ycGhv
bG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcigpKTsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKICAgICAgICAgLy8gQm90aCBz
ZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJhdGVseS4KICAgICAg
ICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWChyYWRpdXNY
KCkpOwpAQCAtMTE0LDIxICsxMTQsMTggQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAg
ZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5u
YW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCisgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1go
KTsKKyAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOwogICAgIGlmICh4UmFkaXVzIDwgMCB8
fCB5UmFkaXVzIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3Zn
T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU1vcnBo
b2xvZ3k6OmNyZWF0ZShtb3JwaG9sb2d5T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyksIHsg
eyAqaW5wdXQxIH0gfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVh
ZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li4zZDcyN2EzZjUwYjYwNzViNTVjZmMwMzQzZWMzOTEz
Mjk5MWRhYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50
LmgKQEAgLTI2LDEyICsyNiwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4geworc3Ry
dWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1
bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0RJTEFURTsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0
b3IgbW9ycGhvbG9neU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU6CkBAIC00NCw3ICs0
NCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBz
dGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZXJvZGUiKQogICAgICAgICAgICAgcmV0dXJu
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERTsKQEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRSYWRpdXMoZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKICAg
ICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9Ci0g
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPigpOyB9Cisg
ICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fbW9ycGhvbG9neU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yPigp
OyB9CiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWC0+Y3VycmVu
dFZhbHVlKCk7IH0KICAgICBmbG9hdCByYWRpdXNZKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNZ
LT5jdXJyZW50VmFsdWUoKTsgfQogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVk
KCkgeyByZXR1cm4gbV9pbjE7IH0KLSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVy
YXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVk
RW51bWVyYXRpb24mIG1vcnBob2xvZ3lPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9tb3Jw
aG9sb2d5T3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgcmFkaXVzWEFuaW1hdGVk
KCkgeyByZXR1cm4gbV9yYWRpdXNYOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1lB
bmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWTsgfQogCkBAIC04MSwxMSArODEsMTEgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
KyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVm
ZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0Fu
aW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fbW9ycGhvbG9neU9wZXJh
dG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7
IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fcmFkaXVzWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKaW5kZXgg
YTJjMTgxZjJlNjM3Y2QzOTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4uMmQyMWYyYTFkODg4ZDAy
ZWMxNzlkZjEwZTJkZTQzZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAogICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFNWR19NT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAgID0gMjsKIAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKLSAgICBbSW1wbGVt
ZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhvbG9neU9wZXJhdG9yXSBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICByYWRpdXNYOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJhZGl1c1k7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlm
OWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uODdiYTM4N2IzNTA1ODFlZmZkNDM2ZDA1ZDNiNDBl
NGM1NmVlNDc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAK
QEAgLTgxLDE2ICs4MSwxMyBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlm
ICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGF1dG8gZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShmaWx0ZXIsIGR4KCksIGR5KCkp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBl
ZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVPZmZzZXQ6OmNyZWF0ZShkeCgpLCBkeSgpKSwgeyB7ICpp
bnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
aAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUzNWI1NzM3MDQ5YmVlLi5mZmExYzE2
ODMzN2Y0NGM5NTIwMWI3MmU4OGMzMWZjNWJlNWYxYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKaW5kZXggOWZmODQ3MzM4YTFiNmE1NWZjZGI4
MjFhMDlmMGFjYzNjMjA3ZWE4MS4uNjQwNjRmNWY2ODA4NDk0Y2Y3YWIxMGRkMDE5YzBhYWQ2OTg5
Y2RhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNw
cApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApA
QCAtMzksMTkgKzM4LDE5IEBAIFJlZjxTVkdGRVBvaW50TGlnaHRFbGVtZW50PiBTVkdGRVBvaW50
TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdGRVBvaW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9
CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2Uo
U1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVyLnByaW1p
dGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJv
dW5kaW5nQm94KCk7Ci0gICAgICAgIAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJv
eC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNl
dFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0KLSAg
ICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExp
Z2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNV
bml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVj
bGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJv
eC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICBpZiAoZmls
dGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGZpbHRl
ci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVy
ZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9z
aXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgp
KTsKKy8vCisvLyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0
bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9j
b29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9zaXRpb24u
c2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIo
KSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8g
ICAgfSBlbHNlCisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHoo
KSk7CiAgICAgCiAgICAgcmV0dXJuIFBvaW50TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaAppbmRleCAz
M2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0NWU0OGRhNzllLi5jNDdhNjA1NmU4ODdkYTA4
MWEwNGYzYjk1MmJkZTQ1YmNkYTlkOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBv
aW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYp
OwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBT
VkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXpl
b2YoU1ZHRkVQb2ludExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50LmNwcAppbmRleCA5YjdjZTQwYWI5NzE2YWU0ZjMzNWY1NGIyNGNkYTQ1OWE4NDI5YTU5Li43
ZGY2NjJjNjczODFiMDFmYTQ1YWVmZTZmYjVmYjU4MDNiZTcyODVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC05Niw3
ICs5Niw3IEBAIGJvb2wgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZm
ZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0CiAgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwog
ICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsK
LSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3Ip
OworICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0Q29sb3IoY29sb3IpOwogICAg
IH0KICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCiAgICAg
ICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxl
KCkpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIGJvb2wgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0CiAgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKICAgICAgICAgcmV0
dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFNwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVu
dCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+
KHNwZWN1bGFyTGlnaHRpbmctPmxpZ2h0U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291cmNl
ID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRpbmctPnNvdXJjZSgpKTsK
ICAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVs
ZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CiAgICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7
CiAKQEAgLTE2MCwyOCArMTYwLDI1IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJp
bWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAgICBpZiAo
IXJlbmRlcmVyKQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVmUHRyIGxpZ2h0RWxlbWVu
dCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIGlmICgh
bGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBhdXRvIGxp
Z2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7Cisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50
LT5saWdodFNvdXJjZShidWlsZGVyKTsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFw
cGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0Nv
bG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShm
aWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxh
ckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1
dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVj
dWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCks
IFdURk1vdmUobGlnaHRTb3VyY2UpKSwgeyB7ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4
IDg5N2I4ZGUxNTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0N2IxNDYuLjIzNWJhMTI4YjI2ZGFk
Y2JkNzQ2YWFiZmZmZmZlYzE1MmRkMjFkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAppbmRleCBkNmRh
MzEwNjRjYjFiMzdlOGNjOTM4NzRlYTRhYTljZjJkZmJmZmVlLi43NDEzMWY5MzRmY2MyMTJjMGNl
ODI1YTYwNjYwMjY5MzFjYzMzYWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVTcG90TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmNwcApAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgIlNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
cG90TGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMzksMjcg
KzM4LDI3IEBAIFJlZjxTVkdGRVNwb3RMaWdodEVsZW1lbnQ+IFNWR0ZFU3BvdExpZ2h0RWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU1ZHRkVTcG90TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxM
aWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdGaWx0ZXJC
dWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPExpZ2h0U291cmNlPiBTVkdGRVNwb3RMaWdodEVs
ZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAg
IEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKICAgICBGbG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAg
ICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94
ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRp
b24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwot
ICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VC
b3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRp
b24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3Ju
ZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwot
Ci0gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgpICog
cmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJv
eC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVj
bGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJv
eC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9p
bnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFoo
KSk7Ci0gICAgfQorLy8KKy8vICAgIGlmIChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdV
bml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBG
bG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLwor
Ly8gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5j
ZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkg
KyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2Vu
dGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVm
ZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigp
KSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vCisvLyAgICAgICAgcG9pbnRzQXQuc2V0WChyZWZlcmVu
Y2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVu
Y2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcv
ZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAg
IHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VC
b3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3Fy
dE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0
UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAgICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQz
RChwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKy8vICAgIH0KIAogICAg
IHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1
bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5nbGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKaW5kZXggM2Y3NzE3YzEyNjVjNGYzMWY1MzA4ODY4
ZDQ3Yzk3ODc5N2E3MzIxMS4uMDc0MzZjYzAxNjYzYjUyMTU2MjRhNmUxMmQ3MTYwNjgxZTk2NTI1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaApAQCAtMzAs
NyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFU3BvdExpZ2h0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4g
bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkg
PT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3
MzcwLi45OGYzN2FmODg2YjRmZGU2YWRkZmM3NzhkNzkzOTUxMjI5YWIzZmNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBAIC03MCwxNiArNzAsMTMgQEAgdm9pZCBT
VkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5h
bWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3Jl
YXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRVRpbGU6OmNyZWF0ZSgpLCB7ICppbnB1
dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0
NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEyMmRjNDJhMzNhOTFmLi5iMGMxN2NjMjY1MGIyNTlh
MjMxNTQyYjhiNTU4OWYwZDM1NjIzOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVt
ZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVk
U3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmNwcAppbmRleCAxMTU2MTExOWQ4M2UzZmM3ODhhNDJiMTQ4NjdjNjU2NDEy
MzM0YTRkLi4xZDcyMzEwYjNlODM5ODI5NjY5YzY5ZGM3NjRiZTdiYTIwNzg4MTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIGJvb2wgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zCiB7CiAgICAgRkVUdXJidWxlbmNlKiB0dXJi
dWxlbmNlID0gc3RhdGljX2Nhc3Q8RkVUdXJidWxlbmNlKj4oZWZmZWN0KTsKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+
c2V0VHlwZSh0eXBlKCkpOworICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0VHVyYnVsZW5j
ZVR5cGUodHlwZSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVz
QXR0cikKICAgICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFN0aXRjaFRpbGVzKHN0aXRjaFRp
bGVzKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIp
CkBAIC0xMTcsMTEgKzExNywxMSBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAg
aWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VGcmVxdWVuY3lZKCkgPCAwKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoZmlsdGVy
LCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMo
KSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgRkVUdXJidWxlbmNlOjpjcmVhdGUodHlwZSgp
LCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQo
KSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpLCB7IH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKaW5kZXggYmY5
ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3NjllMTk4YS4uMDgwM2MxZTI5MmIzOGQ4MzAx
N2VlYjkxMDYxMTA4MGEyMWRlYzc1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlz
KSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCmluZGV4IDU1NzhiNTE5
YTM2MjJiZDcwNmFkMjdiZmU0YzYwMDM5MTQ4NThjYTAuLjljNDMxMTM0YTg3NzA0ZjA2NDlkOTIy
YmE5NzE2MzZkZDI1ZTFjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5j
cHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudElubGluZXMuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5kZXggZmY1MjIzMDk0NjZiMDQwYmVmMDg5ZDE1N2Iz
ODZkZmZiYjA1YzYxOS4uNzcxYTQxNmVmMGVmMDU1ODJkNzI5ODFhMzBjYzlkNjJlNjUyOWY0NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKQEAgLTI1LDkgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTMsMjIgKzkxLDYgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2gK
ICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZl
Y3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZpbHRlckVmZmVjdCk7Ci0gICAgaWYgKCFmaWx0ZXJF
ZmZlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNYKHRydWUpOwotICAgIGlmICho
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRI
YXNZKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCi0g
ICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzV2lkdGgodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFz
SGVpZ2h0KHRydWUpOwotfQotCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5
bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKIHsKICAgICByZXR1cm4gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU+KCp0aGlzLCBXVEZN
b3ZlKHN0eWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKaW5kZXggYzk4YjEzZWQ5NjI3NmFmOWUxNGY2
NDI4MTFhNmZkNzQ2NzcyYWNhNy4uNzI1YTg3MDE1OThmYWZmYTZlZGJhYjAxNjEzMDA3NGFlNTQ3
MmZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAtMzYsMTIgKzM2LDYgQEAgY2xhc3MgU1ZHRmls
dGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6
IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9
IDA7Ci0gICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBm
cm9tIHRoZSBvbGQgb25lLgotICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJv
cGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0VsZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3Ro
VmFsdWUmIHgoKSBjb25zdCB7IHJldHVybiBtX3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2
ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVk
KCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5p
bWF0ZWQoKSB7IHJldHVybiBtX3Jlc3VsdDsgfQogCisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5l
dyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KKyAgICB2aXJ0dWFsIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKKwogcHJvdGVjdGVkOgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcyhjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5
MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li42MTUxYjhkZDdiZWM2MWVjYzQ3ODBi
NjhiNTY3YTcxNDViN2QzZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
MTMwICsyNCw4MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFSW1hZ2Uu
aCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFn
ZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAgLCBtX2ltYWdl
KGltYWdlKQotICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8p
CitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFNvdXJjZUltYWdlJiYgc291cmNlSW1hZ2Us
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykK
IHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2Up
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBm
aWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV90cmVlU2NvcGUoJnRyZWVT
Y29wZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJbWFnZTo6RkVJbWFnZShTb3VyY2VJbWFnZSYm
IHNvdXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZl
QXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVJbWFnZSkKKyAgICAsIG1f
c291cmNlSW1hZ2UoV1RGTW92ZShzb3VyY2VJbWFnZSkpCiAgICAgLCBtX3ByZXNlcnZlQXNwZWN0
UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6
OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorRmxv
YXRSZWN0IEZFSW1hZ2U6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0
ZXIsIGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7Ci19CisgICAgRmxvYXRSZWN0IGRyYXdp
bmdSZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOwogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUs
IGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2Uo
ZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKLX0KLQotdm9p
ZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmxvYXRSZWN0
IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKG1f
aW1hZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7Ci0gICAg
ICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVj
dCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRS
ZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0o
KS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLQot
ICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZl
Y3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7Ci19Ci0KLVJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJl
cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3RyZWVTY29wZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9t
SVJJU3RyaW5nKG1faHJlZiwgKm1fdHJlZVNjb3BlKTsKLSAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+
KHRhcmdldC5lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRh
cmdldC5lbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmIChhdXRvKiBpbWFnZSA9IFdURjo6Z2V0
X2lmPFJlZjxJbWFnZT4+KG1fc291cmNlSW1hZ2UpKSB7CisgICAgICAgIGF1dG8gc3JjUmVjdCA9
IEZsb2F0UmVjdCB7IHsgfSwgKCppbWFnZSktPnNpemUoKSB9OworICAgICAgICBtX3ByZXNlcnZl
QXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkcmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oZHJhd2lu
Z1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVJbWFnZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQm
IHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5
cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdElt
YWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVU
cmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0ID0gcmVzdWx0LnByaW1p
dGl2ZVN1YnJlZ2lvbigpOwogICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJl
cikKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVj
dChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXpl
KCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVj
dCwgc3JjUmVjdCk7Ci0gICAgfQotCi0gICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29s
dXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0
aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKLQotICAgIGF1dG8mIGNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRy
YW5zZm9ybSgpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7
Ci0KLSAgICAgICAgUmVmUHRyIGNvbnRleHROb2RlID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVu
ZGVyZXItPmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVM
ZW5ndGhzKCkpIHsKLSAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChj
b250ZXh0Tm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwog
Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSByZWZlcmVuY2luZyBhbiBlbGVtZW50IHdpdGggcGVy
Y2VudGFnZSB1bml0cywgZWcuIDxyZWN0IHdpdGg9IjMwJSI+IHRob3NlIHZhbHVlcyB3ZXJlIHJl
c29sdmVkIGFnYWluc3QgdGhlIHZpZXdwb3J0LgotICAgICAgICAgICAgLy8gQnVpbGQgdXAgYSB0
cmFuc2Zvcm1hdGlvbiB0aGF0IG1hcHMgZnJvbSB0aGUgdmlld3BvcnQgc3BhY2UgdG8gdGhlIGZp
bHRlciBwcmltaXRpdmUgc3VicmVnaW9uLgotICAgICAgICAgICAgaWYgKGxlbmd0aENvbnRleHQu
ZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmNvbmNhdENUTShtYWtlTWFwQmV0d2VlblJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHZp
ZXdwb3J0U2l6ZSksIGRlc3RSZWN0KSk7CisgICAgYXV0byBkcmF3U291cmNlSW1hZ2UgPSBXVEY6
Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAg
ICAgICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfTsKKyAg
ICAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRyYXdpbmdSZWN0
LCBzcmNSZWN0KTsKKyAgICAgICAgICAgIGRyYXdpbmdSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRv
QWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhkcmF3aW5nUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0
KCkpOworICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2UoaW1hZ2Us
IGRyYXdpbmdSZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFJl
ZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBzcmNSZWN0ID0gRmxv
YXRSZWN0IHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9OworICAgICAgICAgICAg
ZHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVz
KGRyYXdpbmdSZWN0LCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgICAgICAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZHJhd2luZ1JlY3Qs
IHNyY1JlY3QpOwogICAgICAgICB9CisgICAgKTsKIAotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y29udGVudFRyYW5zZm9ybWF0aW9uOwotICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJTdWJ0cmVlVG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0
aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBXVEY6OnZpc2l0KGRyYXdTb3VyY2VJ
bWFnZSwgbV9zb3VyY2VJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZpbHRlclJlc3Vs
dCogRkVJbWFnZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3Rv
ciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
aWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKIAotICAgIGNvbnRleHQuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVj
dCk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21l
dHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIEZsb2F0
U2l6ZSBpbWFnZVNpemU7Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIGltYWdlU2l6ZSA9IG1f
aW1hZ2UtPnNpemUoKTsKLSAgICBlbHNlIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmVm
ZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIGltYWdlU2l6ZSA9IGVuY2xvc2luZ0ludFJlY3Qo
cmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLnNpemUoKTsKKyAgICBh
dXRvIHNvdXJjZUltYWdlU2l6ZSA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25z
dCBSZWY8SW1hZ2U+JiBpbWFnZSkgeyByZXR1cm4gaW1hZ2UtPnNpemUoKTsgfSwKKyAgICAgICAg
WyZdKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7IHJldHVybiBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKTsgfQorICAgICk7CisKKyAgICBGbG9hdFNpemUgaW1hZ2VTaXpl
ID0gV1RGOjp2aXNpdChzb3VyY2VJbWFnZVNpemUsIG1fc291cmNlSW1hZ2UpOworCiAgICAgdHMg
PDwgaW5kZW50IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBpbWFnZS1zaXplPVwi
IiA8PCBpbWFnZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1hZ2VTaXplLmhlaWdodCgpIDw8ICJc
Il1cbiI7CiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1bXAgYWxzbyBvYmplY3QgcmV0dXJu
ZWQgYnkgU1ZHRkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRj
ZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmViZjkzNGE0MjBjODRkYzVjOWM5NTBj
Yzg0MWEyZWI2MjMzMzcyZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDM2ICsy
OCwzMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3Mg
SW1hZ2U7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgVHJlZVNjb3BlOwogCiBjbGFzcyBG
RUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxGRUltYWdl
PiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHVzaW5nIFNvdXJj
ZUltYWdlID0gVmFyaWFudDxSZWY8SW1hZ2U+LCBSZWY8SW1hZ2VCdWZmZXI+PjsKKworICAgIHN0
YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlKFNvdXJjZUltYWdlJiYsIGNvbnN0IFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9
IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29w
ZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwor
ICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJik7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFSW1hZ2UiOyB9CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KKyAgICAvLyBG
RUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKSBvdmVycmlkZSB7IH0KKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZW5k
ZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICBGaWx0ZXJSZXN1bHQq
IGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3Vu
ZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBmaW5hbDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBhcHBseVNv
ZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIC8vIG1fdHJlZVNjb3BlIHdpbGwgbmV2ZXIgYmUg
YSBkYW5nbGluZyByZWZlcmVuY2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTkyNDMKLSAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlIHsgbnVsbHB0ciB9Owot
ICAgIFN0cmluZyBtX2hyZWY7CisgICAgU291cmNlSW1hZ2UgbV9zb3VyY2VJbWFnZTsKICAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAK
aW5kZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNlNy4uMDMyZjQ3YTlj
M2U1NWM1YjdkNTI1YjhjMDQ1OTkyN2MzMzM5ZDVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjkgKzIzLDExNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVkZSAiRmlsdGVyT3V0
cHV0LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNvbHV0ZVRyYW5z
Zm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29sdXRlU291cmNl
RHJhd2luZ1JlZ2lvbikKLSAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdC
b3gpCi0gICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCi0gICAgLCBtX2VmZmVjdEJC
b3hNb2RlKGVmZmVjdEJCb3hNb2RlKQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVh
dGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQoreworICAgIEZpbHRlckVmZmVj
dFZlY3RvciBidWlsdGluRWZmZWN0czsKKyAgICBpZiAocHJldmlvdXNFZmZlY3QpCisgICAgICAg
IGJ1aWx0aW5FZmZlY3RzLmFwcGVuZChSZWY8RmlsdGVyRWZmZWN0PigqcHJldmlvdXNFZmZlY3Qp
KTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWx0aW5FZmZlY3RzLmFwcGVuZChTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKSk7CisgICAgYnVpbHRpbkVmZmVjdHMuYXBwZW5kKFNvdXJjZUFscGhhOjpjcmVh
dGUoKSk7CisKKyAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXV0byBbZmlsdGVy
RWZmZWN0cywgZXhwcmVzc2lvbl0gPSBidWlsZGVyLmJ1aWxkRWZmZWN0cyhmaWx0ZXJFbGVtZW50
LCBidWlsdGluRWZmZWN0cyk7CisgICAgaWYgKGZpbHRlckVmZmVjdHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZShidWlsdGlu
RWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIHJl
bmRlcmluZ01vZGUpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYg
ZXhwcmVzc2lvbiwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQoreworICAgIEZpbHRlckVm
ZmVjdFZlY3RvciBidWlsdGluRWZmZWN0cyA9IHsgU291cmNlR3JhcGhpYzo6Y3JlYXRlKCksIFNv
dXJjZUFscGhhOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZShidWlsdGlu
RWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIHJl
bmRlcmluZ01vZGUpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYg
ZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRl
cihXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92
ZShleHByZXNzaW9uKSwgcmVuZGVyaW5nTW9kZSkpOworfQorCitTVkdGaWx0ZXI6OlNWR0ZpbHRl
cihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9y
JiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IEZpbHRlcihyZW5kZXJpbmdNb2RlLCBUeXBl
OjpTVkdGaWx0ZXIpCisgICAgLCBtX2J1aWx0aW5FZmZlY3RzKFdURk1vdmUoYnVpbHRpbkVmZmVj
dHMpKQorICAgICwgbV9maWx0ZXJFZmZlY3RzKFdURk1vdmUoZmlsdGVyRWZmZWN0cykpCisgICAg
LCBtX2V4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKK3sKKyAgICBBU1NFUlQobV9idWls
dGluRWZmZWN0cy5zaXplKCkgPT0gMik7CisgICAgQVNTRVJUKCFtX2ZpbHRlckVmZmVjdHMuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpOworfQorCitSZWY8
RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXI6OmluZGV4ZWRFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBl
IHR5cGUsIHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIG1fYWJzb2x1dGVGaWx0ZXJSZWdp
b24gPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlclJlZ2lvbik7CisgICAgaWYgKHR5
cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQorICAgICAgICByZXR1cm4g
bV9idWlsdGluRWZmZWN0c1swXTsKKworICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlw
ZTo6U291cmNlQWxwaGEpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzWzFdOworCisg
ICAgQVNTRVJUKGluZGV4IDwgbV9maWx0ZXJFZmZlY3RzLnNpemUoKSk7CisgICAgcmV0dXJuIG1f
ZmlsdGVyRWZmZWN0c1tpbmRleF07CiB9CiAKLUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZpbHRlcjo6bGFzdEVmZmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZWZmZWN0QkJv
eE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCk7
CisgICAgaWYgKG1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gPSBtX2V4cHJlc3Npb24ubGFzdCgpOwor
ICAgIHJldHVybiBpbmRleGVkRWZmZWN0KHR5cGUsIGluZGV4KTsKK30KKworRmlsdGVyUmVzdWx0
KiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBpZiAoIWxhc3RFZmZlY3QoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNl
SW1hZ2UgPSBzdGFjay50YWtlTGFzdCgpLT5pbWFnZUJ1ZmZlcigpOwogCi0gICAgcmV0dXJuIEZp
bHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJl
Z2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0
ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIGZvciAoYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA6IG1fZXhwcmVzc2lvbikg
eworICAgICAgICBhdXRvIGVmZmVjdCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOworICAg
ICAgICBhdXRvIGJvdW5kYXJ5U2V0ID0gZ2VvbWV0cnkuYm91bmRhcnlTZXQodHlwZSwgaW5kZXgp
OworCisgICAgICAgIGF1dG8gcmVzdWx0ID0gZWZmZWN0LT5hcHBseShvdXRwdXQsIHN0YWNrLCBz
b3VyY2VJbWFnZSwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBzdGFjay5hcHBlbmQoeyAq
cmVzdWx0IH0pOworICAgICAgICBvdXRwdXQucmVzdWx0cygpLmFkZChXVEZNb3ZlKGVmZmVjdCks
IFJlZjxGaWx0ZXJSZXN1bHQ+KCpyZXN1bHQpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoc3RhY2su
c2l6ZSgpID09IDEpOworICAgIGF1dG8gcmVzdWx0ID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBy
ZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CisgICAgcmV0dXJuICZyZXN1bHQubGVha1JlZigpOwogfQogCi1SZWY8U1ZHRmlsdGVyPiBT
VkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IGJvb2wgZWZmZWN0QkJveE1vZGUpCitUZXh0U3RyZWFtJiBTVkdGaWx0ZXI6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihhYnNv
bHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGlu
Z0JveCwgZmlsdGVyUmVnaW9uLCBlZmZlY3RCQm94TW9kZSkpOworICAgIGF1dG8gZW5kID0gbV9l
eHByZXNzaW9uLnJlbmQoKTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fZXhwcmVzc2lvbi5yYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1dG8gW3R5cGUsIGluZGV4LCBsZXZl
bF0gPSAqaXQ7CisgICAgICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
QWxwaGEpCisgICAgICAgICAgICArK2l0OworCisgICAgICAgIGF1dG8gZWZmZWN0ID0gaW5kZXhl
ZEVmZmVjdCh0eXBlLCBpbmRleCk7CisgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGlu
ZGVudFNjb3BlKHRzLCBsZXZlbCk7CisgICAgICAgIGVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIH0KKworICAgIHJldHVybiB0czsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA4MDkzMTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVh
MGZiMTcwMGNmLi45OWZhMzEwMWU2NjljODRkY2Q0ZmE5ZjM5N2VjNmUwZWVlMDQ4MTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAt
MSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0MSArMjEsNDQgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1
ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworY2xh
c3MgU1ZHRmlsdGVyR2VvbWV0cnk7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBG
aWx0ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxTVkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sKTsKKyAg
ICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBSZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRmlsdGVyRWZmZWN0KiBw
cmV2aW91c0VmZmVjdCA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQ
dHI8U1ZHRmlsdGVyPiBjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywg
U1ZHRmlsdGVyRXhwcmVzc2lvbiYmLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBzdGF0aWMgUmVmUHRy
PFNWR0ZpbHRlcj4gY3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZlY3RzLCBG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYs
IFJlbmRlcmluZ01vZGUpOwogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bjsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdDsKIAotICAg
IEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplKSBjb25zdCBmaW5h
bDsKKyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGZpbHRlckVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlckVmZmVjdHM7IH0KKyAgICBjb25zdCBTVkdGaWx0ZXJFeHByZXNzaW9u
JiBleHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAKLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNv
dXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9Citwcml2YXRlOgorICAgIFNWR0Zp
bHRlcihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVj
dG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmLCBSZW5kZXJpbmdNb2Rl
KTsKIAotICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CisgICAgUmVmPEZpbHRlckVmZmVjdD4gaW5kZXhlZEVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGUs
IHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsK
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3Rv
ciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBmaW5hbDsKKworICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIEZs
b2F0UmVjdCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV90
YXJnZXRCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsK
LSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Ci0gICAgYm9vbCBtX2VmZmVjdEJCb3hNb2Rl
OworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2J1aWx0aW5FZmZlY3RzOworICAgIEZpbHRlckVm
ZmVjdFZlY3RvciBtX2ZpbHRlckVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4
cHJlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQotICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmls
dGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBm
aWx0ZXIpIHsgcmV0dXJuIGZpbHRlci50eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLnR5cGUoKSA9PSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyOyB9CiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDk2ZjNhODA1MDQyOTU1NTgxMDM0
ZDk4YTRmZGFjNGVhZjMwODdiOTQuLjIzZDNlNzA5MjNlOTQyODUwMjBkYjFjNzlkYWQ1YmM2MjM0
M2VhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDg3ICsyMSwxNTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNp
bmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisKKyNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
IgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZH
RmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQorc3RkOjp0
dXBsZTxGaWx0ZXJFZmZlY3RWZWN0b3IsIFNWR0ZpbHRlckV4cHJlc3Npb24+IFNWR0ZpbHRlckJ1
aWxkZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKQoreworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CisgICAgaWYgKGZpbHRlckVsZW1l
bnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBzZXR1cEJ1aWx0aW5FZmZlY3RzKGJ1aWx0aW5FZmZlY3RzKTsKKworICAg
IEZpbHRlckVmZmVjdHNJbnB1dHMgZWZmZWN0c0lucHV0czsKKyAgICBpZiAoIWJ1aWxkRWZmZWN0
cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgcmV0dXJuIHsgV1RGTW92ZShtX2ZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKG1f
ZXhwcmVzc2lvbikgfTsKK30KKwordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5F
ZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpCit7CisgICAg
bV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBidWlsdGlu
RWZmZWN0c1swXSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVj
dE5hbWUoKSwgYnVpbHRpbkVmZmVjdHNbMV0pOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsKK30KKworUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlQWxwaGEoKSBjb25zdAog
ewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwg
c291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVm
ZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgqc291cmNlR3JhcGhpYykpOwotICAgIGFk
ZEJ1aWx0aW5FZmZlY3RzKCk7CisgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJj
ZUFscGhhOjplZmZlY3ROYW1lKCkpOwogfQogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChj
b25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KQordm9pZCBT
VkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBS
ZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCiB7Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAg
ICAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3Q7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKKyAgICBpZiAobV9i
dWlsdGluRWZmZWN0cy5jb250YWlucyhuYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9s
YXN0RWZmZWN0ID0gZWZmZWN0OwotICAgIG1fbmFtZWRFZmZlY3RzLnNldChpZCwgbV9sYXN0RWZm
ZWN0KTsKKyAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3QucHRyKCk7CisgICAgbV9uYW1lZEVmZmVj
dHMuc2V0KG5hbWUsIFdURk1vdmUoZWZmZWN0KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNv
bnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdChj
b25zdCBBdG9tU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsK
KyAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKICAg
ICAgICAgICAgIHJldHVybiBtX2xhc3RFZmZlY3Q7CiAKLSAgICAgICAgcmV0dXJuIG1fYnVpbHRp
bkVmZmVjdHMuZ2V0KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAgICAgIHJldHVy
biBzb3VyY2VHcmFwaGljKCk7CiAgICAgfQogCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29u
dGFpbnMoaWQpKQotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoaWQpOworICAg
IGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQobmFtZSk7CiAKLSAgICByZXR1cm4gbV9uYW1lZEVmZmVjdHMuZ2V0
KGlkKTsKKyAgICByZXR1cm4gbV9uYW1lZEVmZmVjdHMuZ2V0KG5hbWUpOwogfQogCi12b2lkIFNW
R0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8Rmls
dGVyRWZmZWN0PiYmIGVmZmVjdCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCisjaWYgRU5BQkxFKERF
U1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xh
dGlvbiBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgLy8gVGhlIGVmZmVjdCBtdXN0IGJlIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXIgZWZmZWN0
LgotICAgIEFTU0VSVCghbV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOwotICAg
IEFTU0VSVCghb2JqZWN0IHx8ICFtX2VmZmVjdFJlbmRlcmVyLmNvbnRhaW5zKG9iamVjdCkpOwot
ICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0K
LSAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkuc2l6ZSgpOwotCi0gICAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFkZCB0aGUgc2FtZSB2
YWx1ZSB0byBhIHNldCB0d2ljZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVy
T2ZJbnB1dEVmZmVjdHM7ICsraSkKLSAgICAgICAgZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QtPmlu
cHV0RWZmZWN0KGkpKS5hZGQoZWZmZWN0LmdldCgpKTsKLQotICAgIC8vIElmIG9iamVjdCBpcyBu
dWxsLCB0aGF0IG1lYW5zIHRoZSBlbGVtZW50IGlzbid0IGF0dGFjaGVkIGZvciBzb21lCi0gICAg
Ly8gcmVhc29uLCB3aGljaCBpbiB0dXJuIG1lYW4gdGhhdCBjZXJ0YWluIHR5cGVzIG9mIGludmFs
aWRhdGlvbiB3aWxsIG5vdAotICAgIC8vIHdvcmsgKHRoZSBMYXlvdXRPYmplY3QgLT4gRmlsdGVy
RWZmZWN0IG1hcHBpbmcgd2lsbCBub3QgYmUgZGVmaW5lZCkuCi0gICAgaWYgKG9iamVjdCkKLSAg
ICAgICAgbV9lZmZlY3RSZW5kZXJlci5hZGQob2JqZWN0LCBlZmZlY3QuZ2V0KCkpOworICAgIGlm
IChhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVu
ZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCk7CisK
KyAgICBpZiAoYXV0byB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IoJmVsZW1lbnQpLnBy
b3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzKSkgeworICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1
cm4gQ29sb3JJbnRlcnBvbGF0aW9uOjpBdXRvOwogfQorI2VuZGlmCiAKLXZvaWQgU1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZl
Y3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIEZpbHRlckVmZmVjdHNJbnB1dHMm
IGVmZmVjdHNJbnB1dHMpCiB7Ci0gICAgbV9sYXN0RWZmZWN0ID0gbnVsbHB0cjsKLSAgICBtX25h
bWVkRWZmZWN0cy5jbGVhcigpOwotICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5jbGVhcigpOwotICAg
IG1fZWZmZWN0UmVuZGVyZXIuY2xlYXIoKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOworICAg
IGVmZmVjdHNJbnB1dHMuc2V0KCpzb3VyY2VBbHBoYSgpLCBGaWx0ZXJFZmZlY3RWZWN0b3IgeyAq
c291cmNlR3JhcGhpYygpIH0pOworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hp
bGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJF
bGVtZW50KSkgeworICAgICAgICBhdXRvIFtlZmZlY3QsIGlucHV0c10gPSBlZmZlY3RFbGVtZW50
LmJ1aWxkKCp0aGlzKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
CisgICAgICAgIGlmIChjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQp
ID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCKQorICAgICAgICAgICAgZWZmZWN0LT5z
ZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigp
KTsKKyNlbmRpZgorICAgIAorICAgICAgICBlZmZlY3RzSW5wdXRzLnNldCh7ICplZmZlY3QgfSwg
V1RGTW92ZShpbnB1dHMpKTsKKyAgICAgICAgYWRkTmFtZWRFZmZlY3QoZWZmZWN0RWxlbWVudC5y
ZXN1bHQoKSwgeyAqZWZmZWN0IH0pOworCisgICAgICAgIG1fZmlsdGVyRWZmZWN0cy5hcHBlbmQo
ZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZl
Y3QqIGVmZmVjdCkKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0
IFJlZjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVm
ZmVjdHNJbnB1dHMsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsKQog
ewotICAgIGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChzdGFjay5jb250YWlucyhlZmZlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoZWZmZWN0LT50eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQor
ICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCksIDAsIGxldmVs
IH0pOworICAgIGVsc2UgaWYgKGVmZmVjdC0+dHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6
U291cmNlQWxwaGEpCisgICAgICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QtPnR5
cGUoKSwgMSwgbGV2ZWwgfSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2ZpbHRlckVm
ZmVjdHMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwg
eyBlZmZlY3QtPnR5cGUoKSwgbV9maWx0ZXJFZmZlY3RzLmZpbmQoZWZmZWN0KSwgbGV2ZWwgfSk7
CisgICAgfQogCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIHN0YWNrLmFwcGVuZChl
ZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdHNJbnB1dHMuZ2V0
KGVmZmVjdCkpIHsKKyAgICAgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oaW5wdXRFZmZlY3QsIGVm
ZmVjdHNJbnB1dHMsIHN0YWNrLCBsZXZlbCArIDEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoc3Rh
Y2subGFzdCgpLnB0cigpID09IGVmZmVjdC5wdHIoKSk7CisKKyAgICBzdGFjay5yZW1vdmVMYXN0
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRF
eHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1dHMpCit7Cisg
ICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAo
YXV0byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpKQotICAgICAgICBjbGVh
clJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3Rh
Y2s7CisgICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0
c0lucHV0cywgc3RhY2ssIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uOThlNmU4
OGJkOWI3YWM5MTRlMDRkMjI2ZDYwZTM3MGE5MWM1NDBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNz
ZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDY4ICsy
MSw0MyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgor
I2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKIAogY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEZp
bHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyKCkgPSBk
ZWZhdWx0OwogCi0gICAgU1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3Vy
Y2VHcmFwaGljKTsKKyAgICBzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdFZlY3RvciwgU1ZHRmlsdGVy
RXhwcmVzc2lvbj4gYnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsKIAotICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRp
bmdCb3goY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9Ci0g
ICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRC
b3VuZGluZ0JveDsgfQotICAgIAotICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0
aXZlVW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzOyB9Ci0gICAgdm9pZCBz
ZXRQcmltaXRpdmVVbml0cyhTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHVuaXRzKSB7IG1fcHJp
bWl0aXZlVW5pdHMgPSB1bml0czsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG5hbWVkRWZm
ZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpIGNvbnN0OwogCi0gICAgdm9pZCBhZGQoY29uc3Qg
QXRvbVN0cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKLQotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwotICAgIEZp
bHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdC5nZXQo
KTsgfQotCi0gICAgdm9pZCBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZp
bHRlckVmZmVjdD4mJiwgUmVuZGVyT2JqZWN0Kik7Ci0KLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0
U2V0JiBlZmZlY3RSZWZlcmVuY2VzKEZpbHRlckVmZmVjdCogZWZmZWN0KQotICAgIHsKLSAgICAg
ICAgLy8gT25seSBhbGxvd2VkIGZvciBlZmZlY3RzIGJlbG9uZ3MgdG8gdGhpcyBidWlsZGVyLgot
ICAgICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOwotICAg
ICAgICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+dmFsdWU7Ci0gICAg
fQorcHJpdmF0ZToKKyAgICB1c2luZyBGaWx0ZXJFZmZlY3RzSW5wdXRzID0gSGFzaE1hcDxSZWY8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj47CiAKLSAgICAvLyBSZXF1
aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5nIGFuIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQuCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJl
cihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2Jq
ZWN0KTsgfQorICAgIHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VH
cmFwaGljKCkgY29uc3Q7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlQWxwaGEoKSBj
b25zdDsKIAotICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CisgICAgdm9pZCBhZGROYW1lZEVmZmVjdChjb25zdCBB
dG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7CisgICAgYm9vbCBidWlsZEVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdHNJbnB1dHMmKTsKIAotcHJpdmF0ZToK
LSAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCi0gICAgewotICAgICAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkpCi0gICAgICAgICAgICBt
X2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotICAgIH0K
KyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVyRWZmZWN0PiYsIGNvbnN0
IEZpbHRlckVmZmVjdHNJbnB1dHMmLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCB1bnNpZ25l
ZCBsZXZlbCk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lu
cHV0cyYpOwogCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4g
bV9idWlsdGluRWZmZWN0czsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKLSAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGlj
aCBjb250YWlucyB0aG9zZSBmaWx0ZXIgZWZmZWN0cywKLSAgICAvLyB3aGljaCBkZXBlbmRzIG9u
IHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KLSAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZmZWN0UmVmZXJlbmNlczsKLSAgICBIYXNoTWFwPFJlbmRl
ck9iamVjdCosIEZpbHRlckVmZmVjdCo+IG1fZWZmZWN0UmVuZGVyZXI7CisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIG1fZmlsdGVyRWZmZWN0czsKKyAgICBTVkdGaWx0ZXJFeHByZXNzaW9uIG1fZXhw
cmVzc2lvbjsKIAorICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1f
YnVpbHRpbkVmZmVjdHM7CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0
Pj4gbV9uYW1lZEVmZmVjdHM7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0
OwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQ
RV9VU0VSU1BBQ0VPTlVTRSB9OwogfTsKLSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNTAyYWRhOTYyNzBlNTAxOTMyYzZjMDdiNWY0
Nzk1NjI0MDNiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBTVkdGaWx0ZXJFeHByZXNzaW9uID0gVmVjdG9yPHN0
ZDo6dHVwbGU8RmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCwgdW5zaWduZWQ+PjsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlMDc1ZDUw
MGRiOTUxMDE3NDU3MTkyMzFiMTEwOTkwZjJiZTNmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5jcHAKQEAg
LTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdlb21ldHJ5Lmgi
CisKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgi
CisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRTaXplIFNWR0ZpbHRlckdlb21ldHJ5OjpjYWxj
dWxhdGVSZXNvbHV0aW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRy
YW5zZm9ybSkKK3sKKyAgICBhdXRvIGFic29sdXRlU291cmNlSW1hZ2VSZWN0ID0gYWJzb2x1dGVU
cmFuc2Zvcm0ubWFwUmVjdChzb3VyY2VJbWFnZVJlY3QpOworICAgIGF1dG8gc2NhbGUgPSBGbG9h
dFNpemUgeyAxLCAxIH07CisgICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29s
dXRlU291cmNlSW1hZ2VSZWN0LnNpemUoKSwgc2NhbGUpOworCisgICAgYXV0byBlZmZlY3RpdmVU
cmFuc2Zvcm0gPSBhYnNvbHV0ZVRyYW5zZm9ybTsKKyAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2Nh
bGUoc2NhbGUpOworCisgICAgYXV0byBhYnNvbHV0ZUZpbHRlclJlZ2lvbiA9IGVmZmVjdGl2ZVRy
YW5zZm9ybS5tYXBSZWN0KGZpbHRlclJlZ2lvbik7CisgICAgYXV0byByZXNvbHV0aW9uID0gRmxv
YXRTaXplIHsgMSwgMSB9OworICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNv
bHV0ZUZpbHRlclJlZ2lvbi5zaXplKCksIHJlc29sdXRpb24pOworCisgICAgcmV0dXJuIHJlc29s
dXRpb24gKiBzY2FsZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckdlb21ldHJ5PiBT
VkdGaWx0ZXJHZW9tZXRyeTo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJiByZXNvbHV0aW9u
KQoreworICAgIGF1dG8gcHJpbWl0aXZlVW5pdHMgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVu
aXRzKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyR2VvbWV0cnk+
KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0LCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0
aXZlVW5pdHMsIGFic29sdXRlVHJhbnNmb3JtLCByZXNvbHV0aW9uKTsKKyAgICBpZiAoIWdlb21l
dHJ5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGdlb21ldHJ5LT5idWlsZEZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0cyhmaWx0ZXJFbGVtZW50KTsKKyAgICByZXR1cm4gZ2VvbWV0cnk7
Cit9CisKK1NWR0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUg
cHJpbWl0aXZlVW5pdHMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbikKKyAgICA6IEZpbHRlckdlb21ldHJ5KGZpbHRl
clJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0KQorICAgICwgbV90YXJnZXRCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCkKKyAgICAsIG1fcHJpbWl0aXZlVW5pdHMocHJpbWl0aXZlVW5pdHMpCisg
ICAgLCBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQorICAgICwgbV9yZXNv
bHV0aW9uKHJlc29sdXRpb24pCit7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyR2VvbWV0cnk6OmJ1aWxk
RmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQp
Cit7CisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAgICAg
ICBhdXRvIGJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJp
bWl0aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAKKyAgICAgICAgT3B0
aW9uU2V0PEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncz4gZmxhZ3M7CisgICAgICAgIGlmIChlZmZl
Y3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQorICAgICAgICAgICAgZmxh
Z3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWCk7CisKKyAgICAgICAgaWYgKGVm
ZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCisgICAgICAgICAgICBm
bGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNZKTsKKworICAgICAgICBpZiAo
ZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCisgICAgICAg
ICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAg
ICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRy
KSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc0hl
aWdodCk7CisKKyAgICAgICAgbV9GaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMuYXBwZW5kKHsgYm91
bmRhcmllcywgZmxhZ3MgfSk7CisgICAgfQorfQorCitGaWx0ZXJCb3VuZGFyeVNldCBTVkdGaWx0
ZXJHZW9tZXRyeTo6Ym91bmRhcnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlIHR5cGUsIHVuc2lnbmVk
IGluZGV4KSBjb25zdAoreworICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291
cmNlR3JhcGhpYyB8fCB0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEpCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgaWYgKGluZGV4ID49IG1fRmlsdGVyRWZmZWN0
Qm91bmRhcnlTZXRzLnNpemUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1fRmlsdGVyRWZmZWN0
Qm91bmRhcnlTZXRzW2luZGV4XTsKK30KKworRmxvYXRSZWN0IFNWR0ZpbHRlckdlb21ldHJ5Ojpj
b252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QK
K3sKKyAgICBhdXRvIGFic29sdXRlUmVjdCA9IG1fYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChy
ZWN0KTsKKyAgICBhYnNvbHV0ZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uKTsKKyAgICByZXR1cm4g
YWJzb2x1dGVSZWN0OworfQorCitGbG9hdFNpemUgU1ZHRmlsdGVyR2VvbWV0cnk6OmNvbnZlcnRU
b0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAoreworICAg
IHJldHVybiBzaXplICogbV9yZXNvbHV0aW9uICogRmxvYXRTaXplKG1fYWJzb2x1dGVUcmFuc2Zv
cm0ueFNjYWxlKCksIG1fYWJzb2x1dGVUcmFuc2Zvcm0ueVNjYWxlKCkpOworfQorCitGbG9hdFNp
emUgU1ZHRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAobV9wcmltaXRpdmVVbml0cyA9PSBTVkdV
bml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgICAgIHJldHVy
biBzaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCk7CisgICAgcmV0dXJuIHNpemU7Cit9
CisKK0Zsb2F0UmVjdCBTVkdGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9u
KGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAoreworICAgIGF1dG8gY2xpcHBlZERyYXdpbmdSZWN0ID0gZHJhd2lu
Z1JlY3Q7CisgICAgY2xpcHBlZERyYXdpbmdSZWN0LmludGVyc2VjdChwcmltaXRpdmVTdWJyZWdp
b24pOworICAgIHJldHVybiBjbGlwcGVkRHJhd2luZ1JlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxOWQxMGE1YjRiYjQzZTM0NDczN2Uy
ZDM0MzA2Y2M3YmE5MzYyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRmlsdGVy
RWxlbWVudDsKKworY2xhc3MgU1ZHRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0
cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBG
bG9hdFNpemUgY2FsY3VsYXRlUmVzb2x1dGlvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdG
aWx0ZXJHZW9tZXRyeT4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbik7CisKKyAgICBTVkdGaWx0
ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBidWlsZEZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhTVkdGaWx0
ZXJFbGVtZW50Jik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9CisgICAgRmxvYXRT
aXplIHJlc29sdXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jlc29sdXRpb247IH0K
KworICAgIEZpbHRlckJvdW5kYXJ5U2V0IGJvdW5kYXJ5U2V0KEZpbHRlckVmZmVjdDo6VHlwZSwg
dW5zaWduZWQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IGNvbnZlcnRU
b0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBGbG9hdFNpemUgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFNp
emUmKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBGbG9hdFNpemUgcmVzb2x2ZVRvRmlsdGVy
Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAg
RmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGRyYXdp
bmdSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKKworICAgIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0czsKKyAgICBWZWN0b3I8RmlsdGVyQm91
bmRhcnlTZXQ+IG1fRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzOworCisgICAgQWZmaW5lVHJhbnNm
b3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07CisgICAgRmxvYXRTaXplIG1fcmVzb2x1dGlvbjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aEdyYW1tYXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci5jcHAK
aW5kZXggMGQ0ODg2N2E5OGY2ZTQzMTI4MmYzMjA0ZGU1MGQ2ZjIwOTQwMzc0My4uYTZkMzc2MDBm
NjE2YTkzMjk0YzZmMzNlMmY0OTI3NDMzOWI1ODhkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoR3JhbW1hci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3Jh
bW1hci5jcHAKQEAgLTE5ODYsNyArMTk4Niw3IEBAIHl5cmVkdWNlOgogI2xpbmUgNDE5ICJXZWJD
b3JlL3htbC9YUGF0aEdyYW1tYXIueSIKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+Pj4gcHJlZGljYXRlTGlzdCgoeXl2c3Bb
KDIpIC0gKDIpXS5leHByZXNzaW9uVmVjdG9yKSk7Ci0gICAgICAgICh5eXZhbC5leHByZXNzaW9u
KSA9IG5ldyBGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCh5eXZzcFsoMSkgLSAo
MildLmV4cHJlc3Npb24pKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOworICAgICAgICAoeXl2
YWwuZXhwcmVzc2lvbikgPSBuZXcgWFBhdGg6OkZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4oKHl5dnNwWygxKSAtICgyKV0uZXhwcmVzc2lvbikpLCBXVEZNb3ZlKCpwcmVkaWNhdGVM
aXN0KSk7CiAgICAgO30KICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55Cmlu
ZGV4IDc3Njk4ZmE3NjRmN2ExNWE0NWJjNWMwZTVkMmQ2Nzc1MWIxYmU3MGYuLmRkNzhhNWJkOWY4
MDY3MzcwMmJmNDRjNjA3NmRkMmQyZDAwZDEwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFy
LnkKQEAgLTQxNSw3ICs0MTUsNyBAQCBGaWx0ZXJFeHByOgogICAgIFByaW1hcnlFeHByIFByZWRp
Y2F0ZUxpc3QKICAgICB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEV4cHJlc3Npb24+Pj4gcHJlZGljYXRlTGlzdCgkMik7Ci0gICAgICAgICQkID0gbmV3
IEZpbHRlcihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4oJDEpLCBXVEZNb3ZlKCpwcmVkaWNh
dGVMaXN0KSk7CisgICAgICAgICQkID0gbmV3IFhQYXRoOjpGaWx0ZXIoc3RkOjp1bmlxdWVfcHRy
PEV4cHJlc3Npb24+KCQxKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOwogICAgIH0KICAgICA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAppbmRleCBmY2NlZDdkNTFhMjEyMmE2MDA0ODk5ZTE5
ZTM4MGNiZDU4NTcyMWYxLi5hYTk5YzY3ZTQ4MjRmYjQyOWE1MjY1NmJkMTAyMGY2OGZkZDc3ZTMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUuaCIKKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkZpbHRlclJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oIgpAQCAt
NTI3LDYgKzUyOSwzNSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldFNoYXJlYWJs
ZUJpdG1hcEZvckltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aQogICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpZGVudGlmaWVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSYmIGZpbHRlclJlZmVyZW5jZSwg
SVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSYmIGdlb21ldHJ5UmVmZXJlbmNlLAorICAgIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIGZpbHRlciA9IGZpbHRlclJlZmVyZW5jZS50YWtlRmlsdGVyKCk7CisgICAgYXV0byBnZW9t
ZXRyeSA9IGdlb21ldHJ5UmVmZXJlbmNlLnRha2VHZW9tZXRyeSgpOworICAgIAorICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBbJl0oKSB7CisgICAgICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoaWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGF1dG8gaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+ZmlsdGVyZWRJbWFnZShmaWx0ZXIsIFdU
Rk1vdmUoZ2VvbWV0cnkpKTsKKyAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZS0+c2l6ZSgpOworICAgICAgICBhdXRv
IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKEludFNpemUoaW1hZ2VT
aXplKSwgeyBpbWFnZUJ1ZmZlci0+Y29sb3JTcGFjZSgpIH0pOworICAgICAgICBpZiAoIWJpdG1h
cCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5j
cmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgaWYgKCFjb250ZXh0KQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoKmltYWdlLCBGbG9hdFBvaW50
KCkpOworICAgICAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIH0oKTsKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOworfQorCiB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG5hdGl2ZUltYWdlUmVz
b3VyY2VJZGVudGlmaWVyKQogewogICAgIC8vIEltbWVkaWF0ZWx5IHR1cm4gdGhlIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciAod2hpY2ggaXMgZXJyb3ItcHJvbmUpIHRvIGEgUXVhbGlmaWVk
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggNDE5
YWU2ZDE2ZjcyZDdkNTkzMTQxZmUyMjk2YWNmZTY5YTFjNTkwYy4uNjM0OWQ4ZjM0MzM0ZDkyZGIx
YzQ0N2Q2ODk0N2FiZTgyZjE3MTJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC02MCw2ICs2
MCwxMSBAQCBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiBib29sOwogCiB9CiAKK25hbWVzcGFj
ZSBJUEMgeworY2xhc3MgRmlsdGVyUmVmZXJlbmNlOworY2xhc3MgRmlsdGVyR2VvbWV0cnlSZWZl
cmVuY2U7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBEaXNwbGF5TGlzdFJlYWRl
ckhhbmRsZTsKQEAgLTE0Myw2ICsxNDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0RGF0YVVS
TEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+
JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYp
PiYmKTsKICAgICB2b2lkIGdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9u
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsK
KyAgICB2b2lkIGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNlJiYsIElQQzo6RmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSYmKT4mJik7CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBk
ZWxldGVBbGxGb250cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpp
bmRleCAxZWY1NmRjYzk3NjI3NGUzNTZhYjIyYjRlYTRlNzFiY2ZhYzBiMGRmLi4yNGJlMzZmNjE2
YmE3ZjNlODIxODExYjYyNDNhODUyYzEyNmY4NmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5tZXNzYWdlcy5pbgpAQCAtMzIsNiArMzIsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kIHsKICAgICBHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVU
eXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJp
bmcgdXJsU3RyaW5nKSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJp
bmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAo
VmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0U2hhcmVhYmxlQml0bWFw
Rm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
QnVmZmVyLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgLT4gKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBT
eW5jaHJvbm91cworICAgIEdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIElQQzo6RmlsdGVyUmVmZXJl
bmNlIGZpbHRlciwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSBnZW9tZXRyeSkgLT4gKFdl
YktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwogICAgIENh
Y2hlTmF0aXZlSW1hZ2UoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCiAgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KQogICAgIERlbGV0
ZUFsbEZvbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRl
ckdlb21ldHJ5UmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJH
ZW9tZXRyeVJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmOWJlYWRlMWJhMDc5MGNjZGQ2OWZjYmYw
MzhiOGNjNDc3N2EyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9GaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJFbmNv
ZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXJHZW9tZXRyeS5oPgorCituYW1lc3BhY2Ug
SVBDIHsKKworY2xhc3MgRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UgeworcHVibGljOgorICAgIEZp
bHRlckdlb21ldHJ5UmVmZXJlbmNlKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9t
ZXRyeT4mJiBnZW9tZXRyeSkKKyAgICAgICAgOiBtX2dlb21ldHJ5KFdURk1vdmUoZ2VvbWV0cnkp
KQorICAgIHsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2Vv
bWV0cnk+IHRha2VHZW9tZXRyeSgpIHsgcmV0dXJuIFdURk1vdmUobV9nZW9tZXRyeSk7IH0KKwor
ICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgIH0KKwor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlPiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCitw
cml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4gbV9n
ZW9tZXRyeTsKK307CisKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUxNDhlMDllMTdjNzYx
MGJhODk4N2Q1MGVhZGI3MGU4MTc5NmM1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5jcHAKQEAgLTAsMCArMSwyNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNl
LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgor
I2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ZpbHRlci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRkVPZmZzZXQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlckVmZmVj
dFZlY3Rvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZHRmlsdGVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TVkdGaWx0ZXJFeHByZXNzaW9uLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitGaWx0ZXJS
ZWZlcmVuY2U6OkZpbHRlclJlZmVyZW5jZShSZWY8V2ViQ29yZTo6RmlsdGVyPiYmIGZpbHRlcikK
KyAgICA6IG1fZmlsdGVyKFdURk1vdmUoZmlsdGVyKSkKK3sKK30KKworc3RhdGljIHZvaWQgZW5j
b2RlRmlsdGVyRWZmZWN0KGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0LCBFbmNv
ZGVyJiBlbmNvZGVyKQoreworICAgIEFTU0VSVChlZmZlY3QudHlwZSgpID49IFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6VHlwZTo6RkVNaW5pbXVtICYmIGVmZmVjdC50eXBlKCkgPD0gV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1heGltdW0pOworCisgICAgZW5jb2RlciA8PCBlZmZlY3Qu
dHlwZSgpOworCisgICAgc3dpdGNoIChlZmZlY3QudHlwZSgpKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGU6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeDoKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZzoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFTWVyZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVNb3JwaG9sb2d5OgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpG
RU9mZnNldD4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nOgor
ICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZToKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxw
aGE6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhp
YzoKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIGVuY29kZVNWR0ZpbHRlcihjb25zdCBXZWJDb3JlOjpTVkdGaWx0ZXIm
IGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNvZGVyIDw8IFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7CisKKyAgICBhdXRvJiBmaWx0ZXJFZmZlY3Rz
ID0gZmlsdGVyLmZpbHRlckVmZmVjdHMoKTsKKyAgICBlbmNvZGVyIDw8IGZpbHRlckVmZmVjdHMu
c2l6ZSgpOworCisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXJFZmZlY3RzKQorICAgICAg
ICBlbmNvZGVGaWx0ZXJFZmZlY3QoZWZmZWN0LCBlbmNvZGVyKTsKKyAgICAKKyAgICBhdXRvJiBl
eHByZXNzaW9uID0gZmlsdGVyLmV4cHJlc3Npb24oKTsKKyAgICBlbmNvZGVyIDw8IGV4cHJlc3Np
b24uc2l6ZSgpOworCisgICAgZm9yIChhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdIDogZXhwcmVz
c2lvbikgeworICAgICAgICBlbmNvZGVyIDw8IHR5cGU7CisgICAgICAgIGVuY29kZXIgPDwgaW5k
ZXg7CisgICAgICAgIGVuY29kZXIgPDwgbGV2ZWw7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBl
bmNvZGVDU1NGaWx0ZXIoY29uc3QgV2ViQ29yZTo6Q1NTRmlsdGVyJiBmaWx0ZXIsIEVuY29kZXIm
IGVuY29kZXIpCit7CisgICAgZW5jb2RlciA8PCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6Q1NTRmlsdGVyOworICAgIGVuY29kZXIgPDwgZmlsdGVyLmZ1bmN0aW9ucygpLnNpemUoKTsK
KyAgICAKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZmlsdGVyLmZ1bmN0aW9ucygpKSB7Cisg
ICAgICAgIGlmIChpczxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uKSkKKyAgICAgICAgICAg
IGVuY29kZVNWR0ZpbHRlcihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uLmdl
dCgpKSwgZW5jb2Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kZUZpbHRlckVm
ZmVjdChkb3duY2FzdDxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLmdldCgpKSwgZW5j
b2Rlcik7CisgICAgfQorfQorCitzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OkZpbHRlckVmZmVjdD4g
ZGVjb2RlRmlsdGVyRWZmZWN0KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlIHR5cGUpCit7CisgICAgaWYgKCEodHlwZSA+PSBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVNaW5pbXVtICYmIHR5cGUgPD0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFTWF4aW11bSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
QmxlbmQ6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1h
dHJpeDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29t
cG9zaXRlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9s
dmVNYXRyaXg6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaWZm
dXNlTGlnaHRpbmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVE
aXNwbGFjZW1lbnRNYXA6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVEcm9wU2hhZG93OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Rmxvb2Q6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lh
bkJsdXI6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZToK
KyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlOgorICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neToKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNl
dDoKKyAgICAgICAgaWYgKGF1dG8gZWZmZWN0ID0gV2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZShk
ZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiB7ICgqZWZmZWN0KS5wdHIoKSB9OworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFU3Bl
Y3VsYXJMaWdodGluZzoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RVRpbGU6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxl
bmNlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBSZWZQdHI8
V2ViQ29yZTo6U1ZHRmlsdGVyPiBkZWNvZGVTVkdGaWx0ZXIoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7Cisg
ICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3RWZWN0b3IgZmlsdGVyRWZmZWN0czsKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0
eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICAgICAgYXV0byBlZmZlY3QgPSBkZWNvZGVGaWx0ZXJFZmZlY3QoZGVjb2RlciwgKnR5
cGUpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIAorICAgICAgICBmaWx0ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgfQorCisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSB8fCAhKnNp
emUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgV2ViQ29yZTo6U1ZHRmlsdGVyRXhw
cmVzc2lvbiBleHByZXNzaW9uOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNp
emU7ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IGluZGV4OworICAgICAgICBkZWNvZGVyID4+IGluZGV4OworICAgICAg
ICBpZiAoIWluZGV4KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gbGV2ZWw7CisgICAgICAgIGRlY29kZXIgPj4gbGV2ZWw7Cisg
ICAgICAgIGlmICghbGV2ZWwpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBleHByZXNzaW9uLmFwcGVuZCh7ICp0eXBlLCAqaW5kZXgsICpsZXZlbCB9KTsKKyAgICB9CisK
KyAgICByZXR1cm4gV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUoV1RGTW92ZShmaWx0ZXJFZmZl
Y3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8V2ViQ29yZTo6Q1NTRmlsdGVyPiBkZWNvZGVD
U1NGaWx0ZXIoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4g
c2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uPj4gZnVuY3Rpb25zOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBl
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKCp0eXBlID09IFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIGZpbHRlciA9IGRlY29kZVNWR0ZpbHRlcihkZWNvZGVyKSkgeworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVmZmVjdCA9IGRlY29kZUZpbHRlckVmZmVj
dChkZWNvZGVyLCAqdHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKGVmZmVjdC5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV2ViQ29yZTo6Q1NTRmlsdGVy
OjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbnMpLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKK30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXI+IGRlY29kZUZp
bHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOworICAgIGlmICgh
dHlwZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoKnR5cGUgPT0gV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcikKKyAgICAgICAgcmV0dXJuIGRlY29k
ZUNTU0ZpbHRlcihkZWNvZGVyKTsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlU1ZHRmlsdGVy
KGRlY29kZXIpOworICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgdm9pZCBl
bmNvZGVGaWx0ZXIoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29k
ZXIpCit7CisgICAgaWYgKGlzPFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSkKKyAgICAgICAg
ZW5jb2RlQ1NTRmlsdGVyKGRvd25jYXN0PFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSwgZW5j
b2Rlcik7CisgICAgZWxzZQorICAgICAgICBlbmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29y
ZTo6U1ZHRmlsdGVyPihmaWx0ZXIpLCBlbmNvZGVyKTsKK30KKwordm9pZCBGaWx0ZXJSZWZlcmVu
Y2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZUZpbHRlciht
X2ZpbHRlciwgZW5jb2Rlcik7Cit9CisKK3N0ZDo6b3B0aW9uYWw8RmlsdGVyUmVmZXJlbmNlPiBG
aWx0ZXJSZWZlcmVuY2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGlmIChhdXRv
IGZpbHRlciA9IGRlY29kZUZpbHRlcihkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVy
LnJlbGVhc2VOb25OdWxsKCkgfTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit9IC8v
IG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zp
bHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJl
bmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjBjMmZhMTQ4ZDRhNWNhMDcwOTViNzFlMmU2M2Q0NmZjN2EzN2E3
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJl
ZmVyZW5jZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBF
bmNvZGVyOworY2xhc3MgRGVjb2RlcjsKKworY2xhc3MgRmlsdGVyUmVmZXJlbmNlIHsKK3B1Ymxp
YzoKKyAgICBGaWx0ZXJSZWZlcmVuY2UoUmVmPFdlYkNvcmU6OkZpbHRlcj4mJik7CisKKyAgICBS
ZWY8V2ViQ29yZTo6RmlsdGVyPiB0YWtlRmlsdGVyKCkgeyByZXR1cm4gV1RGTW92ZShtX2ZpbHRl
cik7IH0KKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxGaWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6
CisgICAgUmVmPFdlYkNvcmU6OkZpbHRlcj4gbV9maWx0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDQxYzc2
YmRiOGRhNzE2NDVmMzg1M2EzM2ZhZDVkZDI1ZWQ3ODQ0MWMuLmU3Nzg0OWEzYjJkOGFjYWI1YjM3
OGM5ZGVlNTMxZGQ2MjJlYjM1NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQpAQCAtMjkwLDcgKzI5MCw2IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3
YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJDb3JlOjpNZWRpYVNlc3Npb25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNv
cmU6Ok5hdGl2ZUltYWdlUmVmZXJlbmNlJywKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAppbmRleCBjNGE4NGUxZmI2ZjQ2NmI4ZmJkNTRlNmNhNDZjNDcyNDIyYjNiMGM4Li5kMzUz
ZTUyYjg0NjAyYzRkMjYxZDgwYTNhN2UzNGUzODZjODVkNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTE2
Myw2ICsxNjMsNyBAQCBQbGF0Zm9ybS9JUEMvQXR0YWNobWVudC5jcHAgQG5vLXVuaWZ5CiBQbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5j
cHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAgQG5vLXVuaWZ5CitQbGF0Zm9y
bS9JUEMvRmlsdGVyUmVmZXJlbmNlLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9KU0lQQ0Jp
bmRpbmcuY3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlUXVldWVNYXAu
Y3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlck1hcC5jcHAgQG5vLXVu
aWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlZDIwNDFmYTUyZGYzNmE5MTY2ZmM3MjgyZTE5YjY0YjkxZDQ5YjNlLi5hZGRhMjQ4NTM1
OTJlYzYyZWFkMjRiZTJkZTRmMzVmYzEyMmJmNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzIsNiArMTMzMiw5IEBACiAJCTcx
QkFBNzMzMjVGRkQwOTgwMEQ3Q0Q1RCAvKiBXS01vZGVsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFCQUE3MzEyNUZGQ0NCQTAwRDdDRDVEIC8q
IFdLTW9kZWxWaWV3LmggKi87IH07CiAJCTcxRkI4MTBCMjI2MDYyN0UwMDMyMzY3NyAvKiBXZWJz
aXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8q
IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi87IH07CiAJCTcy
OEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI4RTg2RUYxNzk1MTg4QzAwODc4
NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CisJCTcyRUU3OUJCMjcwRTVBQjkwMDRD
RTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJFRTc5QjgyNzBFNUFCMTAwNENFNDBFIC8qIEZpbHRlclJlZmVy
ZW5jZS5jcHAgKi87IH07CisJCTcyRUU3OUJDMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJFRTc5QjkyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNl
LmggKi87IH07CisJCTcyRUU3OUJEMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRUU3OUJB
MjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLzsgfTsKIAkJNzVBOEQyQzgx
ODdDQ0ZBQjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8q
IFdLV2Vic2l0ZURhdGFTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKIAkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJu
YWwuaCAqLzsgfTsKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNS
ZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDcwMiw2
ICs0NzA1LDkgQEAKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2Vy
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQ
aWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjUzMTU3MjUzQzFF
NEQwMDQ5Mjk1QSAvKiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCNTMxNTgyNTNDMUU0RDAwNDkyOTVBIC8qIFJlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJFRTc5QjgyNzBFNUFCMTAwNENFNDBFIC8qIEZpbHRl
clJlZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0
ZXJSZWZlcmVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkVFNzlCOTI3
MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJl
ZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZWZlcmVu
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5
QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8q
IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03MzI0LDYgKzczMzAsOSBAQAogCQkJCUJDMDMyRDlFMTBGNDM3RDEwMDU4QzE1
QSAvKiBEZWNvZGVyLmggKi8sCiAJCQkJQkMwMzJEOUYxMEY0MzdEMTAwNThDMTVBIC8qIEVuY29k
ZXIuY3BwICovLAogCQkJCUJDMDMyREEwMTBGNDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmggKi8s
CisJCQkJNzJFRTc5QjkyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNl
LmggKi8sCisJCQkJNzJFRTc5QjgyNzBFNUFCMTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5j
cHAgKi8sCisJCQkJNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovLAogCQkJCTlCRDhBQjQ5MjU4MjBFNTIwMDUzODZGOCAvKiBGb250UmVmZXJlbmNlLmggKi8s
CiAJCQkJNDE1MUU1QzMxRkJCOTBBOTAwRTQ3RTJEIC8qIEZvcm1EYXRhUmVmZXJlbmNlLmggKi8s
CiAJCQkJQzBDRTcyQUMxMjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3NhZ2UuaCAqLywKQEAg
LTEyMjc2LDYgKzEyMjg1LDggQEAKIAkJCQk5MzEyQkFENjI2RjMzQzI5MDBGRERGNUYgLyogRmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUI1NzlBMjZGNTE5
MzMwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzEyQkFENTI2RjMzQzI2MDBGRERGNUYgLyogRmlsZVN5c3RlbVN0b3JhZ2VN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkVFNzlCQzI3MEU1QUI5MDA0Q0U0MEUgLyog
RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRUU3OUJEMjcw
RTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTAw
Qjk2NjFBMThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAvKiBGb2N1c2VkRWxlbWVudEluZm9y
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNjY3LDcgKzEzNjc4LDYgQEAKIAkJMDg2N0Q2
OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJY
UHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJRGVmYXVsdEJ1aWxkU3lzdGVtVHlwZUZv
cldvcmtzcGFjZSA9IE9yaWdpbmFsOwogCQkJCUxhc3RTd2lmdFVwZGF0ZUNoZWNrID0gMTMwMDsK
IAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTE0MDsKIAkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewpA
QCAtMTQ0NTksNiArMTQ0NjksNyBAQAogCQkJCTJEOTJBNzgwMjEyQjZBNzEwMEY0OTNGRCAvKiBF
bmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQ0RDOTlFMjQ4RkU4REEwMEE2OTUyMiAv
KiBFbmRvd21lbnRTdGF0ZVRyYWNrZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUE1NzYwMjE0
OTZCOTc5MDBBNEVFMDYgLyogRXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTcyRUU3OUJCMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVu
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBOTNEQjEyMkY4QkNGNDAwNDkwQTY5IC8qIEZ1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpY1BhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzFBMTUyRDcyNEU1QTI5QTAwOTc4QzhCIC8qIEhhbmRsZVhQQ0VuZHBvaW50TWVzc2FnZXMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyNzQ5RjY0NDIxNDY1NjFCMDA4MzgwQkYgLyogSW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaAppbmRleCA4Y2VjOTI0MjY4NzUxNGM2YzJjNzdiNzg5OGMwYTM0YzkwN2Q1YmM0Li5l
ZTI1MTYzNGNhZmZjYThjYmVhZjIxMDFlZjhhNDZlODc3YmIxZDk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaApAQCAtMjAzLDYgKzIwMywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJl
dHVybiBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7CiAgICAgfQogCisgICAgUmVmUHRyPFdlYkNvcmU6
OkltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRG
aWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IGZpbHRlciwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIH0KKwogICAgIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVs
QnVmZmVyRm9ybWF0JiBkZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCmluZGV4IDc3MmZiY2E2OGZhN2YwMzFhZDA0MjAxZTlmZTAxNmRlZDdiNTcxOWIu
LmE1MjRhYjFhMmVhMmMzNzQ0Zjg0MzhiYjk3YjAyY2I3Yzg5ZDM0N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFdyaXRlckhhbmRsZS5oIgor
I2luY2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgiCkBAIC0yMzcsNiArMjM4LDI0IEBAIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxlQml0bWFw
KFJlbmRlcmluCiAgICAgcmV0dXJuIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CiB9
CiAKK1JlZlB0cjxJbWFnZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRGaWx0ZXJl
ZEltYWdlRm9ySW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVm
ZmVyLCBjb25zdCBGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5
PiYmIGdlb21ldHJ5KQoreworICAgIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgp
OworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGF1dG8gc2VuZFJl
c3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRGaWx0
ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNl
IHsgUmVmPEZpbHRlcj4geyBjb25zdF9jYXN0PEZpbHRlciY+KGZpbHRlcikgfSB9LCBJUEM6OkZp
bHRlckdlb21ldHJ5UmVmZXJlbmNlKFdURk1vdmUoZ2VvbWV0cnkpKSksIE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXI6OlJlcGx5
KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgQVNTRVJU
X1VOVVNFRChzZW5kUmVzdWx0LCBzZW5kUmVzdWx0KTsKKworICAgIGlmIChoYW5kbGUuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1
cm4geyB9OworICAgIAorICAgIHJldHVybiBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Q2FjaGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2Vu
ZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDIzOTRmZjVhZGM0ZDc4M2I4
YWZkMmRjMTMyMWYyZjU0NzVhMjEyODUuLjNiYTVhNDIzNzQ1YzZkMDg3NTc4MzMzOTU3NWNiNTA5
ZDliMTlkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMjcs
NiArMjcsOCBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNs
dWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NXYWtldXBN
ZXNzYWdlQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSVBDU2VtYXBob3JlLmgiCkBAIC0xMDIsNiAr
MTA0LDcgQEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiBnZXREYXRhRm9ySW1hZ2VCdWZm
ZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBnZXRTaGFy
ZWFibGVCaXRtYXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gZ2V0Rmls
dGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5PiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRl
bGV0ZUFsbEZvbnRzKCk7Cg==
</data>
<flag name="commit-queue"
          id="465000"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440911</attachid>
            <date>2021-10-12 02:05:42 -0700</date>
            <delta_ts>2021-10-18 12:11:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211012020541.patch</filename>
            <type>text/plain</type>
            <size>738890</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhMDA2NDYzZjNkOGRk
NzAxZTg2ODJlNGIzZmJiZjY5NGVkNWVkMC4uYjViNGZkN2ZkMjViN2E3NmMwNTI2MTYxYWQ3YzE5
ZDNiNjJhODc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3MSBAQAorMjAyMS0xMC0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlclJlc3VsdENvcmVJ
bWFnZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmguCisgICAgICAgIChpc1R5cGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0Q29yZUltYWdlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHRDb3JlSW1hZ2U6OmltYWdlQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6aXNBbHBoYUltYWdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnNhdHVyYXRlQW5kSHVlUm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omx1bWlu
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdFR5cGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29t
cG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRy
YW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUlkZW50aXR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGlu
ZWFyVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUdhbW1hVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5oOgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9z
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpzZXRLMyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXJpdGhtZXRpY1NvZnR3YXJlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNT
b2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb3NpdGU6OmNvbXBvc2l0ZU9wZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1w
UkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9uUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZhc3RT
ZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGln
aHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZm
dXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQ
aXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURy
b3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpvdXRzZXRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZHJhd2luZ1JlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjphcHBseSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURyb3BTaGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2hhZG93Q29s
b3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVGbG9vZDo6RkVGbG9vZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkcmF3aW5n
UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpnYXVz
c2lhbktlcm5lbEZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcGVkVG9LZXJuZWxTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtl
cm5lbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtl
cm5lbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91dHNldHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRyYXdpbmdSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjppc0FscGhhSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0
KToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25YKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdv
cmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZv
cm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
RkVMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBs
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRMaWdodGluZ0NvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
bGVmdENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3Jt
YWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
UmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6c2V0UGl4ZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpkaWZmdXNlQ29uc3RhbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6c3BlY3VsYXJDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckV4cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNvdXJjZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRpbmdDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodFNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6bGVm
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0VG9w
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpz
ZXRDZW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFX
aW5kb3c6OnNldEJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTWVyZ2U6OkZFTWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZWZmZWN0
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRN
b3JwaG9sb2d5T3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwaXhl
bEFycmF5SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhl
bFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpt
aW5Pck1heCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRyZW11bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0
OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnNldER5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHgpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnNldER5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRlY29kZSk6CisgICAgICAgIChp
c1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6
OnNldFNwZWN1bGFyQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVj
dWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAo
V2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJFeHBv
bmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpk
cmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFR1
cmJ1bGVuY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0QmFzZUZy
ZXF1ZW5jeVgpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVl
bmN5WSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTZWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQ
YWludGluZ0RhdGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhD
dXJ2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9u
ZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0
ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR1cmJ1bGVuY2VUeXBlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50Lmlk
bC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlbmRlcmluZ01vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpmaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6YWJzb2x1dGVUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpzZXRSZW5kZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyQm91bmRhcnlTZXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6
OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0
Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJz
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZm
ZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11
bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpwcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252
ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGll
ZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldE9wZXJhdGluZ0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldElzQWxw
aGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFic29s
dXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzWCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1dpZHRoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzV2lkdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNIZWlnaHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNIZWlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZmZWN0Qm91bmRhcmllcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldFVuY2xpcHBlZEFic29sdXRlU3Vi
cmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91
dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
R2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Rmls
dGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmZpbHRlclJl
Z2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6c291cmNlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjphYnNvbHV0
ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6cmVz
b2x1dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Ym91bmRh
cnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNvbnZlcnRU
b0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2Vv
bWV0cnk6OmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9BYnNvbHV0
ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck91dHB1dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6Rmls
dGVyT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck91dHB1dDo6Y3JlYXRlRmlsdGVy
UmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1
dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5pZGwuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPdXRwdXQ6OnJlc3VsdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyT3V0cHV0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OnBpeGVsQnVmZmVy
SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpwaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmdldFBpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6Y29weUlt
YWdlQnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpnZXRDb252
ZXJ0ZWRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6
OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNvcnJl
Y3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVz
dWx0Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyUmVzdWx0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0OjpwcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyUmVzdWx0OjpkcmF3aW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJS
ZXN1bHQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1
bHQ6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJSZXN1bHQ6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyUmVzdWx0VmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNvdXJj
ZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6
YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChp
c1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxl
bmQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6Om1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFu
ZEh1ZVJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVu
dFRyYW5zZmVyU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJ
ZGVudGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1l
dGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdh
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3
YXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRo
bWV0aWNTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBw
bHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmFw
cGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNz
aWFuQmx1clNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmguCisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseVNvZnR3YXJlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oLgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0
U29mdHdhcmU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlclJlc3VsdFNvZnR3YXJlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgu
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNlcGlhRWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVJbnZlcnRFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0eUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJs
dXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkRnVuY3Rpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjptX3NvdXJjZUdyYXBo
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjppbnB1dENvbnRleHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZp
bHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKGlzVHlw
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyR2VvbWV0cnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXJHZW9tZXRyeTo6Q1NTRmlsdGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyR2VvbWV0cnk6OmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YmVn
aW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjph
cHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBs
eVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3Jp
dGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL1NWR0ZFQmxlbmRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZCBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFQmxlbmRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWls
ZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RF
eHBvc2VkRW51bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZF
Q29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0
RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0
eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBj
b25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6aW1hZ2VCdWZmZXJGb3JFZmZlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAg
ICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1v
cnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmhpZ2hlc3RF
bnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9tU3Ry
aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGw6
CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVP
ZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2Ug
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50Lmg6CisgICAgICAg
ICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICog
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6
CisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnNldFN0YW5kYXJkQXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RkVJbWFnZTo6ZHJhd2luZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVJbWFnZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdl
OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJ
bWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJ
UmVmZXJlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6
OnJlZmVyZW5jZWRSZW5kZXJlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpj
b2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpz
ZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmltaXRpdmVVbml0cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpsYXN0RWZmZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmVm
ZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVp
bGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAgICgpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Np
b24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaWRsLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdlb21ldHJ5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6Y2FsY3Vs
YXRlUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpTVkdGaWx0ZXJHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6YnVpbGRGaWx0ZXJF
ZmZlY3RCb3VuZGFyeVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR2VvbWV0cnk6
OmJvdW5kYXJ5U2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5
Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVn
aW9uIGNvbnN0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9t
ZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgKiB4bWwvWFBhdGhHcmFtbWFyLmNwcDoKKyAgICAgICAg
KiB4bWwvWFBhdGhHcmFtbWFyLnk6CisKIDIwMjEtMTAtMTAgIFNpaHVpIExpdSAgPHNpaHVpX2xp
dUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGl0ZXJhdGluZyBGaWxlU3lz
dGVtRGlyZWN0b3J5SGFuZGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMwOTQ0OTA1MTg4ZDlmODg3YTVlNTdmMzNj
ZTEyMjgyNDYxN2VjZTMuLmQzN2FmMTg0YWM4ZTVjNjhmNDUyZGFiNWQyZjIyMDEzNjhiMjA4ZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjEtMTAtMTIgIFNhaWQgQWJvdS1IYWxsYXdh
ICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmlsdGVy
cyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZElt
YWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRmls
dGVyR2VvbWV0cnlSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlckdlb21l
dHJ5UmVmZXJlbmNlOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OkZp
bHRlckdlb21ldHJ5UmVmZXJlbmNlOjp0YWtlR2VvbWV0cnkpOgorICAgICAgICAoSVBDOjpGaWx0
ZXJHZW9tZXRyeVJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQQzo6RmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0ZpbHRl
clJlZmVyZW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OkZp
bHRlclJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OmVuY29kZUZpbHRlckVmZmVjdCk6CisgICAg
ICAgIChJUEM6OmVuY29kZVNWR0ZpbHRlcik6CisgICAgICAgIChJUEM6OmVuY29kZUNTU0ZpbHRl
cik6CisgICAgICAgIChJUEM6OmRlY29kZUZpbHRlckVmZmVjdCk6CisgICAgICAgIChJUEM6OmRl
Y29kZVNWR0ZpbHRlcik6CisgICAgICAgIChJUEM6OmRlY29kZUNTU0ZpbHRlcik6CisgICAgICAg
IChJUEM6OmRlY29kZUZpbHRlcik6CisgICAgICAgIChJUEM6OmVuY29kZUZpbHRlcik6CisgICAg
ICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQQzo6
RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6dGFrZUZp
bHRlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICh0
eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKToKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTEwICBT
aWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciBpdGVyYXRpbmcgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggZDdkMTVhNTk3Y2M0ZTVjOTA2ODEzYmNjYzcyYWZiN2U0ODcyOGM5OC4uMjA5Y2Y0OWUzN2Jj
NTNhODg4YTY1NDhhODU2ODg2YTQzNjM3MTgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDA4
LDggKzE0MDgsMTQgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCiAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNl
bnRhdGlvbi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmgKIAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Cb3guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09PcmlnaW5hbEZvcm1hdEJveC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDJiMDNmYTcxOWEwMWI5
ZGE5MjlmOGI1OTRhYTdiMDIwODEzYjBjMDAuLmZmZjhlMjA0YjQ3MjU2YTEzOWUwYWEyYTVlZDcz
NTgwYTAxNGYxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDU0LDE0ICsyMDU0LDM0IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3RSZW5kZXJlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9p
bnRMaWdodFNvdXJjZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURy
b3BTaGFkb3dTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVGbG9vZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2lzby9JU09Cb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPT3JpZ2luYWxG
b3JtYXRCb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPUHJvdGVjdGlvblNjaGVtZUlu
Zm9Cb3guY3BwCkBAIC0yMjA4LDYgKzIyMjgsNyBAQCByZW5kZXJpbmcvQmlkaVJ1bi5jcHAKIHJl
bmRlcmluZy9Cb3JkZXJFZGdlLmNwcAogcmVuZGVyaW5nL0JyZWFrTGluZXMuY3BwCiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcAorcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmNwcAogcmVuZGVy
aW5nL0NhcmV0UmVjdENvbXB1dGF0aW9uLmNwcAogcmVuZGVyaW5nL0NsaXBSZWN0LmNwcAogcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0yNjQ0LDYgKzI2NjUsNyBAQCBz
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2VGb3JDb250YWluZXIuY3BwCiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAogc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKK3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckdlb21ldHJ5LmNwcAogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eS5jcHAKIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlv
bkltcGwuY3BwCiBzdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVBbmltYXRvci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IGE0YzBhNzYyN2MzNzgxZGZjZDA0OTA2ZmM1MjMzMDljOTA3
MzBjMmMuLjBiZGRiOTljMjM4YWQwZTcxMWQzMzkyNzBhM2VjNTFlOTFkNjYyNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtMzk4LDcgKzM5OCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2N2
L0NWVXRpbGl0aWVzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lv
blZULm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcAotcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCitw
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCitwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVURldmljZU1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
SWNvbklPUy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGZhY2IzYmRkMDI4Y2YyZDA2ZjBmZjE4ZWUwMjk2Mzc4NzYwNDMxNzIu
LmM5Y2YwNjBkMWY5ZDRmZGMwODdmZGFiNzc2N2RmNTU5NGNjYzA4MzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzNSw3ICsy
MzUsNiBAQAogCQkwODE2NjhENDEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4
RDIxMjU2MDNCRjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuaCAqLzsgfTsKIAkJMDgx
NjY4REExMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MTY2OEQ4MTI1NjAzRDUwMDZG
MjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggKi87IH07CiAJCTA4MUFBOERBMTExMTIzN0Uw
MDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MUFBOEQ5MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVt
ZW50UmFyZURhdGEuaCAqLzsgfTsKLQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4MUVCRjM5MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi87IH07
CiAJCTA4M0RBRUE3MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFF
QTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi87IH07
CiAJCTA4M0RBRUE5MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RB
RUE1MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAqLzsg
fTsKIAkJMDg0NTY4MDgxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQ1NjgwNzEyQjkwREE2MDA5
NjBBOUYgLyogRm9udE1ldHJpY3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNzc3LDggKzc3Niw2IEBACiAJCTJBRUY2RkREMjZFN0VDQ0YwMDMy
NkQwMiAvKiBDU1NOdW1lcmljVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkFFRjZGQ0UyNkU3MUYyRDAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBl
LmggKi87IH07CiAJCTJCMzY1Qzg0MTUyNTExOUUwMDkxRDI3QiAvKiBSZW5kZXJTVkdFbGxpcHNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQjQyMzVB
MDE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovOyB9OwogCQkyQkU4RTJD
NzEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1
NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi87IH07Ci0JCTJDODU2NTM0MjRDMEY3M0Mw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRl
ckVmZmVjdFJlbmRlcmVyLmggKi87IH07Ci0JCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi87IH07CiAJCTJEMDYyMTQ0MURBNjM5QjYwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MjFEQTYzOTg4MDBBN0ZCMjYgLyogV2Vi
S2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDA2MjE0NTFEQTYzOUJBMDBB
N0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBX
ZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oICovOyB9OwogCQkyRDA2MjE0RDFEQTYzQThCMDBB
N0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQ5MURBNjNBNzkwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleXMuY3BwICovOyB9OwpAQCAtMjI5Nyw3ICsyMjk0LDIwIEBACiAJCTcyOTlCQzY4MjNENkE1
M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5n
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyOUQwNTMwMjUzMTQyNDMwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOUQwNTJF
MjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkE3M0JFRjI0NUEz
RjkwMDAxQzlEMDMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5p
bWF0aW9uRnJhbWVSYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4OEM0IC8qIEZpbHRlckdlb21ldHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q4MzI3
MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDNTI3MTQzNTIzMDAzRTg4QzQgLyog
RmlsdGVyQm91bmRhcnlTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0
NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8q
IEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJBQTQ2QzcyNzE0MzY5QTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFB
NDZCRDI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDODI3MTQzNzMz
MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJB
QTQ2QzkyNzE0MzdEMTAwM0U4OEM0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcy
QUE0NkNBMjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAvKiBD
U1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkFBNDZDQjI3MTQzOTk3MDAzRTg4QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCQjI3MTQz
MEIwMDAzRTg4QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0MyNzE0MzlEOTAwM0U4OEM0IC8q
IFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJBODNENkIyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkNEMjcxNDM5RTUwMDNF
ODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCRjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVy
RXhwcmVzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyQUE0NkQzMjcxNEUzNUQwMDNFODhDNCAvKiBDU1NGaWx0ZXJHZW9tZXRyeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQTQ2RDAyNzE0
QzhBNTAwM0U4OEM0IC8qIENTU0ZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2RDQyNzE0RjE4RTAwM0U4OEM0IC8q
IEZpbHRlclJlc3VsdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFZlY3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
QkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyRjY2N0UxMjYwQzI2QUMwMEVFMzZBRCAvKiBE
aWFnbm9zdGljTG9nZ2luZ0RvbWFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJGNjY3REYyNjBDMjY0NDAwRUUzNkFEIC8qIERpYWdub3N0aWNMb2dn
aW5nRG9tYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYx
MDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5
M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyog
TWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC0yNzAwLDggKzI3MTAsNiBAQAogCQk4NDIyNDE5NDEw
N0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3
IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCAqLzsgfTsKIAkJODQzMDBCRDYxMjBDOUFBQzAw
MjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRo
U3RyaW5nU291cmNlLmggKi87IH07CiAJCTg0MzAwQkQ4MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQ
YXRoU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDMwMEJENzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovOyB9OwotCQk4
NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggKi87IH07Ci0JCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZE
MjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLzsgfTsKIAkJODQ2NTBFN0UyMzg3QUQ3RDAw
NjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NjUwRTdDMjM4N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1
ZXJ5TGlzdEV2ZW50LmggKi87IH07CiAJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0
YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAq
LzsgfTsKIAkJODQ3MzBENzkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVDMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggKi87IH07CkBAIC0yNzExLDcgKzI3
MTksNyBAQAogCQk4NDczMEQ4MTEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjQxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEODMxMjQ4RjBCMzAwRDNB
OUM5IC8qIEZFTWVyZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDY2MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggKi87IH07CiAJCTg0
NzMwRDg1MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY4MTI0OEYwQjMwMEQzQTlDOSAv
KiBGRU1vcnBob2xvZ3kuaCAqLzsgfTsKLQkJODQ3MzBEODcxMjQ4RjBCMzAwRDNBOUM5IC8qIEZF
T2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NDczMEQ2QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCAqLzsgfTsKKwkJODQ3MzBEODcx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NDcz
MEQ4OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggKi87IH07CiAJCTg0NzMwRDhCMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCAqLzsgfTsKIAkJODQ3
MzBEOEQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFVHVyYnVsZW5jZS5oICovOyB9OwpAQCAtNjEwMCw4ICs2MTA4LDYgQEAKIAkJMDgxNjY4RDcx
MjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MTY2OEQ4MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRM
YXlvdXRFbmdpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxQUE4RDkxMTEx
MjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdFbGVtZW50UmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMDgxRUJGMzgwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MUVCRjM5MEZEMzRGNDEwMERBNzU1
OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0ZpbHRlckJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFF
QTIwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTMwRjAxQTdGQjAw
MzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUE0MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTYyNDgsOCArNjI1NCw2IEBACiAJCTBGNDk2NkE4MURCNDBDNDMwMEEyNzRCQiAv
KiBKU0RPTVBvaW50UmVhZE9ubHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNET01Qb2ludFJlYWRPbmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0OTY2QTkxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFkT25seS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTVBvaW50UmVhZE9ubHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8qIFNjcm9s
bFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQg
LyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0I3ODY0MDBDNDBE
MzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5
ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyRmlsdGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzM1OCwxMCArNzM2Miw2IEBACiAJCTJCNDIzNUEwMTUy
NTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR0VsbGlwc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUw
IC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkM4NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRBMzcyNEJFMThBMTAwOURFRTcw
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0MjFEQTYzOTg4MDBBN0ZC
MjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0MzFEQTYzOTg4MDBBN0ZCMjYgLyogV2ViS2l0
TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQwNjIxNDcxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TWVkaWFLZXlO
ZWVkZWRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDUzMiw5ICsx
MDUzMiw1MiBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1NiAvKiBGaWx0ZXJPdXRwdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmlsdGVyT3V0cHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyog
RmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkEyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUg
LyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVB
QUUgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZEMjcw
M0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZF
MjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzAyNzA1NzUwNDAwM0M1
QUFFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3Vy
Y2VHcmFwaGljU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3MTI3MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNENzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAv
KiBGRU1lcmdlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJnZVNvZnR3YXJl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzUyNzA1ODVCODAwM0M1
QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNv
bG9yTWF0cml4U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3NjI3MDU4OTAyMDAzQzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNENzgyNzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdCMjcwNUIy
QzkwMDNDNUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBG
RURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyogRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkE4M0Q3RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRkVUaWxlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29m
dHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MTI3MDY0NkUyMDAzQzVBQUUgLyog
RkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgyMjcwNjUxMUIw
MDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVu
ZFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODMyNzA2
Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckdl
b21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI0MjcxNDJDRUIw
MDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVz
dWx0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI2MjcxNDJG
MzcwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0
Q29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCOTI3MTQy
Rjc5MDAzRTg4QzQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0
ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmls
dGVyUmVzdWx0Q29yZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0
NkJCMjcxNDMwQjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRWZmZWN0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQUE0NkJDMjcxNDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJPdXRwdXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyT3V0cHV0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0
IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbHRlclJlcHJlc2VudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUE0NkJFMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkYyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4
cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZDMDI3MTQzMkRG
MDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBQTQ2QzEyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21ldHJ5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckdlb21ldHJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkMyMjcxNDMyRTAwMDNFODhDNCAvKiBT
VkdGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFBNDZEMDI3MTRDOEE1MDAzRTg4QzQgLyogQ1NTRmlsdGVyR2Vv
bWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2RDEyNzE0QzhBNTAwM0U4OEM0IC8qIENTU0ZpbHRlckdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlckdlb21ldHJ5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU0Niw2ICsxMDU4
OSw4IEBACiAJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0FEMjNFMUU1
NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJDOTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlclJlc3Vs
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVzdWx0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNDc4LDkgKzExNTIzLDYgQEAKIAkJ
ODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFN0cmluZ1NvdXJjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJENzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0
aFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MzAwQkQ5MTIwQzlBRUQwMDIxOTU0
QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdDMjM4N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5
TGlzdEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlM
aXN0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFN0YyMzg3QUQ4
QTAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0NjUwRTgwMjM4N0FEOEIwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlz
dEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTEyLDggKzE5NTU0LDkgQEAKIAkJ
MkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNvcmVpbWFnZSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8q
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8sCi0JCQkJMkNBQTRBMzcyNEJFMThB
MTAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tICovLAorCQkJCTcy
QUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCAqLywKKwkJ
CQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tICov
LAorCQkJCTcyQUE0NkI5MjcxNDJGNzkwMDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdl
Lm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBjb3JlaW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjMxMjksNiArMjMxNzIsMzIgQEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVu
dCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQw
MDAzQzVBQUUgLyogc29mdHdhcmUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCTcyQTgzRDgyMjcwNjUxMUIwMDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUu
Y3BwICovLAorCQkJCTcyQTgzRDc1MjcwNTg1QjgwMDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVu
dFRyYW5zZmVyU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAv
KiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVB
QUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVD
N0VGMDAzQzVBQUUgLyogRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJB
ODNEN0UyNzA2MzM2QjAwM0M1QUFFIC8qIEZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVBQUUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkJNzJBODNEODEyNzA2NDZFMjAwM0M1QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5j
cHAgKi8sCisJCQkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5j
cHAgKi8sCisJCQkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3
YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0
d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0YyNzA2M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3
YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNl
U29mdHdhcmUuY3BwICovLAorCQkJCTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBGaWx0ZXJS
ZXN1bHRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBQTQ2QjcyNzE0MkYzODAwM0U4OEM0IC8qIEZp
bHRlclJlc3VsdFNvZnR3YXJlLmggKi8sCisJCQkJNzJBODNENzEyNzA1Nzg1MjAwM0M1QUFFIC8q
IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDcwMjcwNTc1MDQwMDNDNUFB
RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBzb2Z0
d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdDMDExRjNDMjRGQUQz
NjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTE4Myw2ICsyNTI1Miw3IEBACiAJCUE3NUU4QjdGMEUx
REUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8s
CiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAg
Ki8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
ICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywKQEAg
LTI1MjE5LDE1ICsyNTI4OSwyNCBAQAogCQkJCTg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RVRpbGUuaCAqLywKIAkJCQk4NDczMEQ2RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNl
LmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmgg
Ki8sCi0JCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcy
QTgzRDZFMjcwM0RGRDgwMDNDNUFBRSAvKiBGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDY5Mjcw
M0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkFBNDZDNDI3MTQzNTA1MDAzRTg4
QzQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLywKIAkJCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBE
RUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJCQkwOEM5MjUxODBGQ0M3QzRBMDA0ODBERUMg
LyogRmlsdGVyRWZmZWN0LmggKi8sCi0JCQkJMkM4NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKLQkJCQkyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKKwkJCQk3MkFBNDZCQjI3MTQzMEIwMDAzRTg4
QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi8sCisJCQkJNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzJBODNEODMyNzA2Njc0QzAwM0M1QUFF
IC8qIEZpbHRlckdlb21ldHJ5LmggKi8sCiAJCQkJNDlFQ0VCNjMxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBG
aWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyog
RmlsdGVyT3BlcmF0aW9ucy5oICovLAorCQkJCTcyQUE0NkJDMjcxNDMwQjEwMDNFODhDNCAvKiBG
aWx0ZXJPdXRwdXQuY3BwICovLAorCQkJCTcyOTc4RDQzMjZGRTlERTcwMEZEMkM1NiAvKiBGaWx0
ZXJPdXRwdXQuaCAqLywKKwkJCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVw
cmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVy
UmVzdWx0LmNwcCAqLywKKwkJCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVyUmVz
dWx0LmggKi8sCisJCQkJNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdFZl
Y3Rvci5oICovLAogCQkJCTg0NzMwRDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5o
ICovLAogCQkJCUExRTExNTQ1MTMwMTVDNEUwMDU0QUM4QyAvKiBQb2ludExpZ2h0U291cmNlLmNw
cCAqLywKIAkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5o
ICovLApAQCAtMjY5OTAsMTAgKzI3MDY5LDEzIEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCMjU1
OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5jcHAgKi8sCiAJCQkJQjI1NTk4RUIw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLywKLQkJCQk4NDVFNzJGOTBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLywKLQkJCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdE
NzkgLyogU1ZHRmlsdGVyLmggKi8sCi0JCQkJMDgxRUJGMzgwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuY3BwICovLAotCQkJCTA4MUVCRjM5MEZEMzRGNDEwMERBNzU1OSAvKiBT
VkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBODNENkEyNzAzREE5QTAwM0M1QUFFIC8qIFNW
R0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkIyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRl
ci5oICovLAorCQkJCTcyQUE0NkMwMjcxNDMyREYwMDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmNwcCAqLywKKwkJCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRl
ci5oICovLAorCQkJCTcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNz
aW9uLmggKi8sCisJCQkJNzJBQTQ2QzIyNzE0MzJFMDAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21l
dHJ5LmNwcCAqLywKKwkJCQk3MkFBNDZDMTI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyR2Vv
bWV0cnkuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0zMDEwMCw4ICszMDE4MiwxMCBAQAogCQkJCUNBN0U5QjQ3MjQzNjFEQzUw
MDRFODlGNiAvKiBDb250ZW50ZnVsUGFpbnRDaGVja2VyLmggKi8sCiAJCQkJOTM5MkYxNEYwQUQx
ODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmNwcCAqLywKIAkJCQk5MzkyRjE0QjBBRDE4NjFC
MDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCAqLywKLQkJCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBE
MzQgLyogQ1NTRmlsdGVyLmNwcCAqLywKLQkJCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyog
Q1NTRmlsdGVyLmggKi8sCisJCQkJNzJBODNENkMyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRl
ci5jcHAgKi8sCisJCQkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICov
LAorCQkJCTcyQUE0NkQxMjcxNEM4QTUwMDNFODhDNCAvKiBDU1NGaWx0ZXJHZW9tZXRyeS5jcHAg
Ki8sCisJCQkJNzJBQTQ2RDAyNzE0QzhBNTAwM0U4OEM0IC8qIENTU0ZpbHRlckdlb21ldHJ5Lmgg
Ki8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8sCiAJ
CQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJCQlF
NEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMxNTI0LDYg
KzMxNjA4LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTcyRUJDN0REMjcxMTNEMzEw
MEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAx
NkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFG
ODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1
MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMjE4Myw2ICszMjI2OCw4IEBACiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8q
IENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzc5RTE0MUJCMjE1
QkIwMENBQThCRiAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NDQ3NkJEQjFERkNBQzAzMDA2OTBFMjMgLyogQ1NTRGVmZXJyZWRQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyQUE0NkNBMjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkQzMjcxNEUzNUQwMDNFODhDNCAvKiBDU1NGaWx0ZXJHZW9t
ZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkJCMEM1QjgxN0JCRDYyOTAwM0QzNjc3IC8qIENT
U0ZpbHRlckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjRCNEQ2MENCNDI5OEEw
MDVGMkI2MiAvKiBDU1NGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRkQwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjY4
NywxMiArMzI3NzQsMTcgQEAKIAkJCQk5MzBFNDQ4NjI3MEMzNzIyMDBERTdBQjcgLyogRmlsZVN5
c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVF
QjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MTJCRTQ4MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyQUE0NkM5MjcxNDM3RDEwMDNFODhDNCAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
QUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyQUE0NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4OEM0IC8qIEZpbHRlckdlb21l
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI3MDE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzcyNzE0
MzY5QTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkFBNDZDODI3MTQzNzMzMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkFBNDZENDI3MTRGMThFMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0VmVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRGMDkwMDBBNDIzNCAvKiBGaXhl
ZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3RDJERDI1MEZEODI4MDAwMjA3
QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTM1NTkwLDkg
KzM1NjgyLDkgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90TGln
aHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwNjBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDkwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAot
CQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVyRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNW
R0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjM1NSw3ICszNjQ0Nyw2IEBACiAJCTA4NjdE
NjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBC
WFByb2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVG
b3JXb3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDA3MDA7
CiAJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlh
ZTllNTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li41NTFjMjgwNTI5MzgzMDMyM2VjODFi
ZjgyZTczMWY1NjVkMDA1ODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdl
VmFsdWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5oIgogCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVyR2VvbWV0
cnkuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xMTYsMjYgKzExNywy
MyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGlu
dG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3Vs
ZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
LCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
KyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwor
ICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9k
ZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7
CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsK
IAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CiAgICAgdGV4
dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CiAKLSAgICBhdXRv
IGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3Vy
Y2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdl
UmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVnaW9uKGltYWdlUmVj
dCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlv
bnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBmaWx0ZXIgPSBD
U1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdN
b2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdl
KCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0cHV0ID0gY3NzRmls
dGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0dXJuICZJbWFnZTo6
bnVsbEltYWdlKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IENTU0ZpbHRlckdlb21ldHJ5OjpjcmVh
dGUoaW1hZ2VSZWN0LCBpbWFnZVJlY3QpOworICAgIGlmIChhdXRvIGZpbHRlcmVkSW1hZ2UgPSB0
ZXh0dXJlLT5maWx0ZXJlZEltYWdlKCpmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkpKSkKKyAgICAg
ICAgcmV0dXJuIGZpbHRlcmVkSW1hZ2U7CiAKLSAgICByZXR1cm4gb3V0cHV0LT5jb3B5SW1hZ2Uo
KTsKKyAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXJJ
bWFnZVZhbHVlOjpmaWx0ZXJJbWFnZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgK
aW5kZXggYTVkZDI4YjczN2JjODM1ZTg2ZWEzZWYyMDJhNzRlNDZhYjIyMjE4MS4uODhhMzEwMjc3
OTgyZjMyN2QyNDM5NDZlZWVmNTI2ZTVmNzIwOTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApAQCAtMjUsNiAr
MjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIApAQCAtMTM4LDYgKzEz
OSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAg
IFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBGaWx0ZXImIGZpbHRlciwgc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlm
ICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAg
ICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKKworICAgICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAg
ICAgICBzdGQ6OnRpZShpbWFnZUJ1ZmZlciwgc3RkOjppZ25vcmUpID0gZmlsdGVyLmFwcGx5KHRo
aXMsIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyID8gaW1h
Z2VCdWZmZXItPmNvcHlJbWFnZSgpIDogbnVsbHB0cjsKKyAgICB9CisKICAgICB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggODVlM2QyNGJlYjBjMjA0YzMyNWEyNjU2
ZDljYTU0MDQwODY2ZmI3Mi4uY2U4OWY0YmQzYWRmNzhlMjI1ODkxZWQ2NzM3M2M5OWYwYzk2OTJm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIu
aCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYwOSw2ICs2
MTEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdAogICAgIEltYWdlQnVmZmVyOjpkcmF3Q29u
c3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9u
cyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmls
dGVyJiBmaWx0ZXIsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZp
bHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQoreworICAgIGF1dG8gW2ZpbHRlcmRJbWFnZSwgaW1h
Z2VSZWN0XSA9IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgV1RGTW92ZShnZW9tZXRyeSkpOwor
ICAgIGlmIChmaWx0ZXJkSW1hZ2UpCisgICAgICAgIGRyYXdJbWFnZUJ1ZmZlcigqZmlsdGVyZElt
YWdlLCBpbWFnZVJlY3QpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7CiAgICAgUGF0aCBwYXRoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApp
bmRleCBkNmUyNTY3N2JlZjcxNWJhNDljZjA0MWUxNGM5ZWM4MDFjNWM5N2MzLi5iNjFmNTQ0YTQ4
ZGMxNDY5NWI0MDlkNzZjODQzYzc2ZWEzNWZmZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtODUsNiArODUsOCBAQCB0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5Owog
Y2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOwpAQCAtNDQyLDYgKzQ0NCw4IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VC
dWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgCisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggMTM5NzgwMWI0ZDhlMGZmY2Q2OTQ2
N2NhMTQyMjBkMDA1M2NmMTVlZS4uYWIzNGM5NjU2M2UwYmVmZWY1NDFkZjk5ZWVhYjhkYzJkOTBl
NmUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCkBAIC00Miw2ICs0Miw5IEBAIGNsYXNzIERyYXdpbmdDb250ZXh0Owogc3RydWN0IEl0ZW1C
dWZmZXJIYW5kbGU7CiB9CiAKK2NsYXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5Owor
CiBjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUJ1
ZmZlciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxJbWFnZUJ1ZmZlcj4gewogcHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2lu
dGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KQEAgLTEwNiw2ICsxMDksNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYsIHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJikgPSAwOwogCiAgICAgLy8gQ3JlYXRlIGFu
IGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBm
cm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgogICAgIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
RmlsdGVyc0NvY29hLm1tCmluZGV4IGQ0ZmEzYzRiZmFkMzRhYWYzMDkzYTlmMDI0ODZiYjcyN2Y5
OGQ0YWEuLmQ0NWFiMzNjNDQwOGVkNjM2MDc0NjE0ZDQ2ZjQ1OWRhNmY1MWQ2MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FG
aWx0ZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdp
dGggQ1NTRmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzYwMDgpLgorLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBG
aWx0ZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjAwOCkuCiBzdGF0aWMgY29uc3QgZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsK
ICAgICB7IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjgg
fSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJh
MjZlMmMwNDRhZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgot
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgot
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgot
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0K
LSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUltYWdl
QnVmZmVyLmgiCi0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1MgQ0lJbWFnZTsK
LU9CSkNfQ0xBU1MgQ0lGaWx0ZXI7Ci1PQkpDX0NMQVNTIENJQ29udGV4dDsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBGRUNvbG9yTWF0cml4OwotY2xhc3MgRkVDb21wb25lbnRUcmFu
c2ZlcjsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlIDogcHVibGljIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7
Ci0gICAgUmV0YWluUHRyPENJQ29udGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBh
cHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgYm9vbCBoYXNSZXN1bHQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX291dHB1dEltYWdlOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIG91
dHB1dCgpIGNvbnN0IGZpbmFsOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJF
ZmZlY3QmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAg
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9p
ZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwotICAgIHN0YXRp
YyBib29sIGNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIAotICAg
IFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYp
OwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVD
b2xvck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBv
bmVudFRyYW5zZmVyJiwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICAKLSAgICBS
ZWZQdHI8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IG1fb3V0cHV0SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg2ZmM0YzIzYWY5NTQ1
NTU3YTU1OGM4YzQ1MWUxOWE4YTM4ZmI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMw
OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLQotI2lmIFVTRShDT1JFX0lN
QUdFKQotCi0jaW1wb3J0ICJGRUNvbG9yTWF0cml4LmgiCi0jaW1wb3J0ICJGRUNvbXBvbmVudFRy
YW5zZmVyLmgiCi0jaW1wb3J0ICJGaWx0ZXIuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdC5oIgot
I2ltcG9ydCAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
LSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgotI2ltcG9ydCA8
Q29yZUltYWdlL0NJQ29udGV4dC5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+Ci0j
aW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlD
cmVhdGUoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2lu
Z0NJRmlsdGVycyhsYXN0RWZmZWN0KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJl
dGFpblB0cjxDSUNvbnRleHQ+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRD
SUNvbnRleHQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250
ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6IEB7IGtDSUNv
bnRleHRXb3JraW5nQ29sb3JTcGFjZTogKF9fYnJpZGdlIGlkKUNHQ29sb3JTcGFjZUNyZWF0ZVdp
dGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKX1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0K
LXN0YXRpYyBib29sIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25z
dCBGRUNvbXBvbmVudFRyYW5zZmVyJiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVh
ciA9IFtdIChjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5L
Tk9XTgotICAgICAgICAgICAgfHwgZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgIH07Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5y
ZWRGdW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQot
ICAgICAgICAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVs
bE9yTGluZWFyKGVmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZl
Y3QmIGVmZmVjdCkKLXsKLSAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVl
IG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFw
aGljOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZF
Q29sb3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1VOS05PV046Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5D
RVRPQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FU
VVJBVEU6Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JM
aW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNm
ZXI+KGVmZmVjdCkpOwotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpE
aWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVu
dE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0g
ICAgbV9vdXRwdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYg
KCFtX291dHB1dEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZl
cihsYXN0RWZmZWN0KTsKLX0KLQotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewot
ICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZv
ciAoYXV0byBpbiA6IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0
SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQo
aW5wdXRJbWFnZSk7Ci0gICAgfQotICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOwotICAgIGVmZmVjdC5zZXRSZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIAotICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0Vt
cHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3
aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJj
ZUdyYXBoaWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAg
IHJldHVybiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRU
cmFuc2Zlcj4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVy
bnMgYSB2YWxpZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNl
bWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9n
eToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJl
dGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JT
b3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNv
dXJjZUltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9T
dXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFn
ZSBpbWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3Vy
Y2VJbWFnZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdl
IGltYWdlV2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCldOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4
JiBlZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykK
LXsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8g
dmFsdWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkp
OwotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlw
ZSgpKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1
ZXNbMF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNv
bXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0g
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAg
ICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0
byBBbHBoYSBJbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0g
ICAgCi0gICAgYXV0byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5h
bWU6QCJDSUNvbG9yTWF0cml4Il07Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlu
cHV0SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRj
aCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNb
MF0gWTpjb21wb25lbnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZl
Y3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOmNvbXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBX
OjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRz
WzddIFo6Y29tcG9uZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAg
ICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlu
cHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVj
dG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAg
ICAgICBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZ
OnZhbHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6dmFsdWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhd
XSAgZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2
YWx1ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVz
WzE1XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5w
dXRBVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFs
dWVzWzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLSAgICByZXR1cm4gY29sb3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJl
dGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVj
dG9yPFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhlIHJlc3Qgb2YgRkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBB
U1NFUlQoaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwot
Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAg
IAotICAgIFtmaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJ
bWFnZUtleV07Ci0gICAgCi0gICAgYXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5n
ICprZXksIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAg
ICAgIGlmIChmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIp
Ci0gICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5j
dGlvbi5pbnRlcmNlcHQgWTpmdW5jdGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAg
ICB9OwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0
LnJlZEZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmlj
aWVudHMiLCBlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJp
bnB1dEJsdWVDb2VmZmljaWVudHMiLCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENv
ZWZmaWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlv
bigpKTsKLSAgICAKLSAgICByZXR1cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0
ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5n
KGVmZmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4g
OiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZygqaW4pIHx8ICFjYW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRo
aXMgPDwgIiB1c2luZyBDb3JlSW1hZ2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVm
ZmVyLmdldCgpOwotfQotICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRl
cigpLmZpbHRlclNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBj
bGVhclJlc3VsdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29u
dGV4dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9v
dXRwdXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFz
dEVmZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9y
bUNvbG9yU3BhY2UoKV07Ci19Ci0gICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QK
LXsKLSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNj
YWxlKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGRlc3RTaXplKTsKLSAgICByZXR1cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVm
ZmVyID0gbnVsbHB0cjsKLSAgICBtX291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkK
LSAgICA6IEZpbHRlckVmZmVjdFJlbmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2FiZTU2MWI3MDFiY2EwNWIyNDRlNTI1ZTE3OGVjMjRmNmRkZDFmOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9G
aWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaApAQCAtMCwwICsxLDU3IEBACisvKgorKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZp
bHRlclJlc3VsdC5oIgorCitPQkpDX0NMQVNTIENJSW1hZ2U7CitPQkpDX0NMQVNTIENJQ29udGV4
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHRDb3JlSW1hZ2Ug
OiBwdWJsaWMgRmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJSZXN1bHQ6
OkZpbHRlclJlc3VsdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYp
OworICAgIAorcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklm
RXhpc3RzKCkgb3ZlcnJpZGU7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJp
ZGU7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVyUmVzdWx0Q29yZUltYWdl
KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJSZXN1bHQmIHJl
c3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9GaWx0ZXJSZXN1bHRDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcy
NzkyYjFhYmU5NzBkOGNkZjg5YWY4NWE1OGQ1NGQ1YWI4MDBiYjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyUmVzdWx0
Q29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGaWx0ZXJSZXN1bHRDb3JlSW1hZ2UuaCIKKworI2lm
IFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1w
b3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6
c2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYgaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdl
KTsKKyAgICBtX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZl
cj4mIEZpbHRlclJlc3VsdENvcmVJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cygpCit7CisgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXI7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJSZXN1bHRDb3Jl
SW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3Jl
SW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVjNDg0OGEwMjczNTk4ZDA0NjFhZjkzZmMwMjI3YWQ2NDNi
Y2ZlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisq
CisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VyY2VH
cmFwaGljLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAiUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6
YXBwbHlDb3JlSW1hZ2UoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZl
Y3RvciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc291
cmNlSW1hZ2UpOworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZTsKKyAgICBpZiAoaXM8SU9TdXJmYWNlSW1h
Z2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkpCisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VX
aXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2Up
LnN1cmZhY2UoKS5zdXJmYWNlKCldOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFn
ZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZv
cm1JbWFnZSgpLmdldCgpXTsKKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBkb3duY2FzdDxGaWx0ZXJSZXN1bHRDb3JlSW1hZ2U+KHJlc3VsdCkuc2V0
SW1hZ2UoV1RGTW92ZShpbWFnZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAy
NjExMGNkZmIwYmI2Y2Y0OTA0NTgzODc3ODdhYzEwZmExNzFjZjE4Li5iM2QyYTU5NDY5NDIyMzUz
MjM0MzkzMjg2NTZlOTY0ZTljMTZlZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApA
QCAtMTA3LDE1ICsxMDcsMTggQEAgcHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZlY3RvciYg
c3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8g
aW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdl
dCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
cmVzdWx0ID0gZmlsdGVyKCkuY3JlYXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCks
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5w
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMy
LDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNv
dXJjZVBpeGVsQXJyYXlMZW5ndGggPj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihz
b3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0
aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAg
Ly8gSWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBB
U1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Myw4IEBAIHZv
aWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgp
KVswXTsKICAgICBwbGF0Zm9ybUFwcGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihz
b3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNv
dXJjZUJBbmREZXN0WzBdOworCisgICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZv
aWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJh
eUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhl
bEFycmF5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDVm
MzZhOWMzYjcyZGE2MTljMjE4YmE4MmY2ZjE4MGJkYmExNTIwOWIuLmUzNjlkMzMxNDgwYWUzMTFl
YzEyMGJhOTcyMGRmYjQ1ZTk2ZjQ4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTE4Miw2ICsxODIsMTQgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QK
ICAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdl
QnVmZmVyKEZpbHRlciYsIEltYWdlQnVmZmVyKiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21l
dHJ5PiYmKQoreworLy8gICAgaWYgKG1fZGVsZWdhdGUpCisvLyAgICAgICAgbV9kZWxlZ2F0ZS0+
cmVjb3JkSW1hZ2VCdWZmZXJVc2UoKnNvdXJjZUltYWdlKTsKKy8vICAgIHJlY29yZEZpbHRlclVz
ZShmaWx0ZXIpOworLy8gICAgYXBwZW5kPERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oZmlsdGVyLnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGdlb21ldHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7
CiAgICAgcmVjb3JkU2F2ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggNDg2NmM4MmNhYzk0MzBkN2MzNzRhYzNmYTViZThjMDc3Y2Q5M2E0MS4uZDAxN2U2MDJi
Yzg4MWQzOGVjOTYyMWUyZDc4MTNmN2M5YWMxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0
ZXImLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9t
ZXRyeT4mJikgZmluYWw7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAK
aW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uZDU1OThmMjZj
MzNmOThjNmY0OTYwYTAxMjQxYmI4NjkyMjE2YTkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsy
Niw0NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2lu
Y2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0Lmgi
CisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBm
aWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6
QmxlbmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUo
QmxlbmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2Rl
KSk7CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJs
ZW5kTW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpGRUJsZW5kKQorICAgICwgbV9tb2RlKG1vZGUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUpKTsKIH0KIAogYm9vbCBGRUJs
ZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1fbW9kZSA9PSBt
b2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX21vZGUsIG1vZGUpICE9IG1fbW9k
ZTsKIH0KIAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFQmxlbmQ6OmFwcGx5KEZpbHRl
ck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlcios
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQm
IGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIEFTU0VS
VChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8g
aW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICAKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRw
dXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92
ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4sIGlu
MiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQotI2VuZGlmCiAKLVRleHRT
dHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQmxl
bmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwog
ICAgIHRzIDw8ICIgbW9kZT1cIiIgPDwgKG1fbW9kZSA9PSBCbGVuZE1vZGU6Ok5vcm1hbCA/ICJu
b3JtYWwiIDogY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBtX21vZGUpKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgK
aW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4uOGFkZTg3Yjcz
Y2I4YjFlYmU5MGUyNDUxMTMwZjY1MjM5Yjg3Yjk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTMsNiArMyw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDMzICsyNCwyOSBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
RUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2RlKTsKKyAgICBzdGF0aWMgUmVmPEZFQmxl
bmQ+IGNyZWF0ZShCbGVuZE1vZGUpOwogCiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAK
IHByaXZhdGU6CisgICAgRkVCbGVuZChCbGVuZE1vZGUpOworCiAgICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5kIjsgfQogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlH
ZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQ
aXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIq
IHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CisgICAgRmlsdGVy
UmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmls
dGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQm
LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVu
ZChGaWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCAzODA2NWNiOTZjN2I0YjRiMDNmYzZi
MGVlZDg1YWM0YjZjOTY4YTU0Li5kODg2OTEwOWFhYTgyYzBjMDI3NzE0MjY3YmYyYTIyNzEzOTU1
MTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIz
LDI4ICsyNCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIs
IENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JNYXRyaXgpCi0gICAgLCBtX3R5cGUodHlwZSkK
LSAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKK1JlZjxGRUNvbG9yTWF0cml4PiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2
YWx1ZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeCh0eXBlLCBX
VEZNb3ZlKHZhbHVlcykpKTsKIH0KIAotUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9h
dD4mJiB2YWx1ZXMpCitGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlw
ZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6
OkZFQ29sb3JNYXRyaXgpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fdmFsdWVzKFdURk1v
dmUodmFsdWVzKSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZp
bHRlciwgdHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKIGJvb2wgRkVDb2xvck1hdHJpeDo6
c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAgLTYzLDI1OCArNTYsNDggQEAgYm9vbCBG
RUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2
YWx1ZXMpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhm
bG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAg
ICBmbG9hdCBnID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0gICAgZmxvYXQgYSA9IGFs
cGhhOwotCi0gICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2
YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKLSAgICBn
cmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlcyBbN10gKiBi
ICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OwotICAgIGJsdWUgICAgPSB2YWx1
ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNd
ICogYSArIHZhbHVlc1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsg
dmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVz
WzE5XSAqIDI1NTsKKyAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7
CisgICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOworICAgIGNvbXBv
bmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzNdID0g
KDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAu
Mjg1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVl
KTsKKyAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29t
cG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbOF0g
PSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRI
dWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxv
YXQqIGNvbXBvbmVudHMpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNv
bXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIGZsb2F0IHIg
PSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAg
cmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29t
cG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9u
ZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9uZW50
c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CisgICAgZmxvYXQg
Y29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0g
c2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsg
Y29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43
MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0g
PSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50
c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21w
b25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAg
IGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7
CisgICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAw
Ljc4NzsKKyAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1
ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsg
c2luSHVlICogMC4wNzI7CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWlu
YW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
KQorYm9vbCBGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJikgY29uc3QKIHsKLSAgICBhbHBoYSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVu
ICsgMC4wNzIxICogYmx1ZTsKLSAgICByZWQgPSAwOwotICAgIGdyZWVuID0gMDsKLSAgICBibHVl
ID0gMDsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBl
IGZpbHRlclR5cGU+Ci1ib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJy
YXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9u
ZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQotewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxl
bmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5
cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRy
aXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0
aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAv
LyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYg
KHZhbHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2
YWx1ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Y29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFy
cmF5LmRhdGEoKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1
ZmZlclNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsK
LSAgICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRh
ID0gZGF0YTsKLSAgICAKLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9
IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVz
dC5kYXRhID0gZGF0YTsKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0
ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WyAwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sxNl0gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbIDJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sgN10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlz
b3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sxM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVs
bHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzddICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1s1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzhdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNv
ciwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNy
YywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxh
Z3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TFVNSU5BTkNFVE9BTFBIQTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0g
PSB7Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAot
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0g
ICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAw
LAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3Jj
LCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QTsKIH0KLSNlbmRpZgogCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLXZv
aWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCitGaWx0ZXJSZXN1bHQqIEZFQ29s
b3JNYXRyaXg6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3Im
IHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29u
c3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIGZsb2F0IGNv
bXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
U0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9u
ZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOworICAgIEFT
U0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsK
IAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQ8Zmls
dGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXplKSkKLSAg
ICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7Ci0jZW5k
aWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBw
aXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkg
ewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBp
eGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7
Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRIdWVSb3Rh
dGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxB
cnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJl
ZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQg
Z3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAg
ICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAg
ICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsg
Myk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbWFn
ZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5C
dWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpp
bkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3Bh
Y2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5s
b2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEo
KTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsK
LQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7
Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6
Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBzZXRJ
c0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwg
aW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVs
bHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKQEAg
LTMzOSwxMCArMTIyLDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAK
LVRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRT
dHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29sb3JNYXRyaXgiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgbV90eXBlIDw8
ICJcIiI7CiAgICAgaWYgKCFtX3ZhbHVlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgdHMgPDwgIiB2
YWx1ZXM9XCIiOwpAQCAtMzU3LDkgKzEzOSw2IEBAIFRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uCiAg
ICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAgIHRzIDw8ICJdXG4iOwotICAgIAotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVy
biB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0
ZGI1NTI0ZWZhNGMxMjNmLi40MTE2MjAzZWE3MjUxMTFlMTg0ZWQ2NjU4ZmZlNTFjYzFiMzE1ODgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzcsNyBAQCBlbnVtIENv
bG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShGaWx0
ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAgc3RhdGljIFJlZjxG
RUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwog
CiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAg
ICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhUeXBlKTsKQEAgLTQ2LDU0ICs0NSwyNSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAg
ICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBj
b21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0
ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAg
ICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVu
dHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIFZlY3Rv
cjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpOwog
CiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBW
ZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0
b3I8ZmxvYXQ+JiYpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJSZXN1bHQqIGFw
cGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFy
eVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKICAg
ICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2
YWx1ZSkKLXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVu
dHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAu
MjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1
ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsK
LSAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9u
ZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAo
MC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFs
dWUpCi17Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0g
ICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9u
ZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBj
b21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1Owot
ICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45
Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUg
KiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNp
bkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcy
IC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICog
MC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NI
dWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiAr
IGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVj
dCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdl
YTU4ZjVmOWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1NzQwMmY5ZTYzLi43OTQxYjg5OTdlZDU5ZGFlOWFh
YjRmYmZlYWU2M2ZkNmJmOTY1MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAK
QEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUs
MjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVy
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9y
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAg
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkNvbXBvbmVudFRyYW5zZmVyKQorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBy
ZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlv
biwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rp
b24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOworfQorCitGRUNvbXBvbmVudFRyYW5z
ZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVk
RnVuY3Rpb24pCiAgICAgLCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1f
Ymx1ZUZ1bmN0aW9uKGJsdWVGdW5jdGlvbikKQEAgLTQzLDExOSArNDYsMTUgQEAgRkVDb21wb25l
bnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVy
LCByZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9u
KSk7Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKLXsKLX0KLQot
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCitGaWx0ZXJSZXN1bHQqIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KEZpbHRlck91dHB1
dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5k
YXJ5U2V0KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0g
dHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1
ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25l
ZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91Ymxl
IHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0
ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICog
KHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6
Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19CisgICAgQVNTRVJUKCFzdGFjay5pc0Vt
cHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi12b2lkIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxl
VmFsdWVzOwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4g
PCAxKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVl
cy5zaXplKCk7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KChpICogbikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Ci0g
ICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgdmFsID0g
c3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1
cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkg
KyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25l
bnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNz
aW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJs
ZQotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1
ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0
KTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0g
ICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQot
Ci12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7
Ci0KLSAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxl
OwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxl
OwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJs
ZSwgYWxwaGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+
Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90
KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9
IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9m
ZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0gICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsK
LSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxl
cyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBU
YWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZFRhYmxl
W2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhhVGFibGVbaV0gPSBpOwot
Ci0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3Rb
XSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFi
bGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRl
RGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAg
ICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FS
UkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZ
X0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9yZWRGdW5jdGlvbi50eXBl
XShyZWRUYWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2dyZWVuRnVuY3Rp
b24udHlwZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21f
Ymx1ZUZ1bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rpb24pOwotICAgIGNhbGxF
ZmZlY3RbbV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1fYWxwaGFGdW5jdGlvbik7
CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21l
dHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkKQEAgLTIwOSwxMCArMTA4
LDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGYKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRT
dHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRT
dHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNmZXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICJcbiI7CiAgICAg
ewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgMik7CkBA
IC0yMjEsOSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW4KICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5jdGlvbiA8PCAifVxuIjsKICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmN0aW9uIDw8ICJ9XVxuIjsK
ICAgICB9Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5k
ZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uN2QwMDY4NzIyMjBk
OGIwNDcyZGIyNzJmMTliZTE2ODE2OTRmMjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIzLDkgKzI0LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGVudW0gQ29tcG9uZW50VHJhbnNmZXJUeXBlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVy
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBv
bmVudFRyYW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4g
Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biByZWRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dy
ZWVuRnVuY3Rpb247IH0KQEAgLTYyLDI0ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1
bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVD
b21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIHVzaW5nIExvb2t1cFRh
YmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KIAotICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFy
VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0g
ICAgc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVh
clRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwot
ICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVy
T3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUm
IHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJs
ZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVu
Y3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuY3Rpb247CkBA
IC04OCw3ICs3NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZj
YmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLjhiYmFlNzJhNmZlOWQ0MmQ5NTk2OTg4NDMyMmEwNTQwYmEx
ZTkyZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05F
T04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
Q29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5
cGUodHlwZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21w
b3NpdGVPcGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29t
cG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZF
Q29tcG9zaXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcGVyYXRvcikK
ICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykKQEAgLTQyLDI2
NCArNDcsNjIgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25z
dCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVmPEZFQ29tcG9z
aXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVP
cGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUs
IGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitib29sIEZFQ29tcG9zaXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKQogewotICAg
IGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9
IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9jb21w
b3NpdGVPcGVyYXRvciwgY29tcG9zaXRlT3BlcmF0b3IpICE9IG1fY29tcG9zaXRlT3BlcmF0b3I7
CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQogewotICAgIGlmIChtX2sx
ID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsxOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fazEsIGsxKSAhPSBtX2sxOwogfQog
CiBib29sIEZFQ29tcG9zaXRlOjpzZXRLMihmbG9hdCBrMikKIHsKLSAgICBpZiAobV9rMiA9PSBr
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2syLCBrMikgIT0gbV9rMjsKIH0KIAogYm9v
bCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMpCiB7Ci0gICAgaWYgKG1fazMgPT0gazMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2szID0gazM7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9rMywgazMpICE9IG1fazM7CiB9CiAKIGJvb2wgRkVD
b21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogewotICAgIGlmIChtX2s0ID09IGs0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBzdGQ6OmV4Y2hhbmdlKG1fazQsIGs0KSAhPSBtX2s0OwogfQogCi12b2lkIEZFQ29tcG9z
aXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQorRmxvYXRSZWN0IEZFQ29tcG9zaXRl
OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRI
TUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCi17
Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
KTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkp
XTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hh
ciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIs
IGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBz
Y2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0g
ICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUg
KC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAq
c291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAg
ICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAg
ICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQot
ICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9
IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5h
dGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlz
IGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21t
b24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVz
IGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0
aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBm
bG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUu
MGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAg
d2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
aTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwot
ICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIx
KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYg
KGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5h
dGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247
Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLXN0YXRpYyBpbmxp
bmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25l
ZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6
Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykg
KyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjpt
aW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAw
LjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8
PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsK
LSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlv
biwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNv
dXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBw
aXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNl
LCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYg
KGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRl
c3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8
MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczww
LCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBr
NCk7Ci0gICAgfQotfQotI2VuZGlmCisgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBl
ZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAvLyB0aGUgc2Vjb25kIGVm
ZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBl
ZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24o
aW5wdXRzWzFdLT5kcmF3aW5nUmVjdCgpLCBwcmltaXRpdmVTdWJyZWdpb24pOwogCi1pbmxpbmUg
dm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBpbnQgbGVuZ3RoID0g
c291cmNlLmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50Pihk
ZXN0aW5hdGlvbi5sZW5ndGgoKSkpOwotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVh
bGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQotICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4MykpOwotICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKLSNlbHNlCi0gICAgYXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRl
c3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0jZW5kaWYKLX0KKyAg
ICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZl
IHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhl
cmUuCisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1Jf
QVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotdm9pZCBG
RUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIHN3aXRjaCAo
bV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKLSAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUg
Zmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRo
ZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0
aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1
dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29t
cGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0
aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZl
Y3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6ZHJhd2lu
Z1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVDb21w
b3NpdGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0
YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3Qg
RmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIEFT
U0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbiA9IHN0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIAor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdp
b24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3Qo
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0
dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluLCBpbjIgfSwgbnVsbHB0ciwgZ2VvbWV0cnks
IGJvdW5kYXJ5U2V0KTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUpCitzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRkVDb21wb3NpdGVPcGVy
YXRvciYgY29tcG9zaXRlT3BlcmF0b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dp
dGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
VU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTMy
OCwxOCArMTMxLDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlCiAgICAgcmV0dXJuIHRzOwog
fQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4
dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQ29tcG9zaXRlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIG9wZXJhdGlvbj1cIiIgPDwgbV90eXBl
IDw8ICJcIiI7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKQorICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX2NvbXBvc2l0ZU9wZXJhdG9yIDw8
ICJcIiI7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBrMT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9
XCIiIDw8IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2szIDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8
PCAiXCIiOwogICAgIHRzIDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi44
ZjdiNTUxZGM5NmQxZmQ3N2MzYjE5ODE3ZjZlMWZmNGQ2YjEyNWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywx
MiArMjQsOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1lbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgeworZW51bSBGRUNvbXBvc2l0ZU9w
ZXJhdG9yIHsKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOICAgID0gMCwgCiAgICAg
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiAgICAgICA9IDEsCiAgICAgRkVDT01QT1NJVEVfT1BF
UkFUT1JfSU4gICAgICAgICA9IDIsCkBAIC00MSwxMCArMzksMTAgQEAgZW51bSBDb21wb3NpdGVP
cGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRkVDb21wb3NpdGVPcGVyYXRv
ciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCi0gICAgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAg
ICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsKKyAgICBGRUNvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3Np
dGVPcGVyYXRvcjsgfQorICAgIGJvb2wgc2V0Q29tcG9zaXRlT3BlcmF0b3IoRkVDb21wb3NpdGVP
cGVyYXRvcik7CiAKICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazE7IH0KICAgICBi
b29sIHNldEsxKGZsb2F0KTsKQEAgLTU4LDMwICs1NiwyMyBAQCBwdWJsaWM6CiAgICAgZmxvYXQg
azQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLXBy
b3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7
IH0KLQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVP
cGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIEZFQ29tcG9z
aXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZs
b2F0IGs0KTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVDb21wb3NpdGUiOyB9CiAKLSAgICB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5l
ZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3Vs
dFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
aW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisgICAgYm9vbCBhcHBseUFyaXRobWV0aWNT
b2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRp
Y1NvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0OworICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIHRlbXBsYXRlIDxpbnQg
YjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
c3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwg
ZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotI2VuZGlmCi0KLSAgICBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIG1f
Y29tcG9zaXRlT3BlcmF0b3I7CiAgICAgZmxvYXQgbV9rMTsKICAgICBmbG9hdCBtX2syOwogICAg
IGZsb2F0IG1fazM7CkBAIC04OSw0ICs4MCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDc1YjJlN2M2ZWEx
M2MyYzFjMmY4ZjY1ZDNkYjRlZDVjYzNhZmRhOGYuLjdlOGQxZmVjMjE2YmIyMDFlOTQ3ZjcyNWNk
ODdiZjZkOTNmMTcxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgot
I2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZl
TWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorUmVm
PEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXpl
JiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtl
cm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsTWF0cml4KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRy
aXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2Vy
bmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7Cit9CisKK0ZFQ29u
dm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbnZvbHZlTWF0cml4KQogICAgICwgbV9rZXJu
ZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKICAgICAsIG1fYmlh
cyhiaWFzKQpAQCAtNDksMTQgKzUxLDYgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1h
dHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBBU1NF
UlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4
PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUm
IGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9p
bnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29u
dm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZz
ZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBr
ZXJuZWxNYXRyaXgpKTsKLX0KLQogdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXpl
KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpCiB7CiAgICAgQVNTRVJUKGtlcm5lbFNpemUud2lk
dGgoKSA+IDApOwpAQCAtMTIwLDMxOCArMTE0LDIwIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6
c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29u
dm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxv
d2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAg
ICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwg
ICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAg
ICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0r
Ci0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2
YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2Yg
dGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAx
MCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6
IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dp
bmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0g
ICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBU
aGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAo
eDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIK
LSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdp
b24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8
IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6
IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAot
ICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9u
IEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwg
eTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24g
QyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAg
IGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNl
dEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVs
cyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVs
cyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtl
cm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxj
dWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVu
Y3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21t
b24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBh
cyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4K
LSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXggPSAyNTUpCitGbG9hdFJlY3QgRkVDb252
b2x2ZU1hdHJpeDo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
Y2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7Ci0gICAgcmV0dXJuIGNoYW5uZWw7
CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotdGVtcGxhdGU8Ym9vbCBwcmVz
ZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzKQorRmlsdGVyUmVzdWx0KiBGRUNvbnZvbHZlTWF0cml4OjphcHBseShGaWx0ZXJP
dXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBi
b3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2Vy
dmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3Ig
KyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBp
eGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJp
YXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAg
ICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAg
ICAgKytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywg
bWF4QWxwaGEpOwotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdu
b3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBo
YVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0Nzg5KQotI2VuZGlmCi0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHBy
ZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xp
cFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8g
ZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAo
bV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQu
eCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBp
bnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENv
bnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyAr
IChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5u
b3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNT
RVJUKG1fZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5
RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFz
ZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNs
aXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQot
ICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZv
ciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQg
a2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAg
ICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAg
aW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0Vt
cHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgICAgICAgICB0
b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRv
dGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAg
ICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQu
cmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAg
ICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFs
c1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKysp
KTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAg
ICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVs
UGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAg
IC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAg
ICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2Vy
dmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5k
c3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFz
KTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAg
ICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3Jl
YXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewot
ICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8
IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53
aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0
OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RF
X0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAg
ICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBh
aW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkg
PSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAg
ICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBh
aW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAg
ICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsK
LSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkK
LSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWlu
dGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGgg
KyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1w
bGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQg
eTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0
YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdp
ZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0
T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVs
WDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsK
LSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0g
ICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRv
dGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZp
c29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMK
LSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAw
OyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAg
ICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUo
KSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7
Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAg
ICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAg
dG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0
b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAg
ICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxW
YWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZh
bHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAg
ICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxz
WzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwot
ICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNb
Ml0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2Fz
dDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFW
YWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10g
Kz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwot
ICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVs
VmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAg
ICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNp
emUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFs
cywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2Vy
bmVsUGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAg
ICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFy
dEtlcm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3
YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50
IHlFbmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZl
cnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQg
aW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEp
Ci0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RT
ZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0
b20sIHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBp
bnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24g
Y2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAv
LyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAg
IGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihw
YWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRP
dXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZv
aWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAg
c291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhl
bEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAg
IFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5
LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0
aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwK
LSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAg
Ly8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWlu
dFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9t
ID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYg
KGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1
YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFi
c29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkp
IC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJv
dHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20g
KyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAgICBXb3JrUXVldWU6OmNvbmN1cnJlbnRB
cHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0
YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48
aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNl
dEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3Rh
cnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQ
aXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20p
OwotCi0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJv
dHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55
KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50
U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwg
cGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwot
ICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAg
ICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNl
dC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICByZXR1cm4gYXBwbHlQ
bGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsK
IH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEVkZ2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCArMTQ5LDkgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXBy
ZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29udm9sdmVNYXRyaXgiOwotICAgIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6ZSA8PCAiXCIgIgogICAgICAgIDw8ICJr
ZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4ICA8PCAiXCIgIgogICAgICAgIDw8ICJk
aXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIKQEAgLTQ2NSw5ICsxNjAsNiBAQCBUZXh0
U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdAogICAgICAgIDw8ICJlZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9k
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVu
aXRMZW5ndGggPDwgIlwiICIKICAgICAgICA8PCAicHJlc2VydmVBbHBoYT1cIiIgPDwgbV9wcmVz
ZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFiODk1YTZlMWU1MDA1NGUxM2RiYS4uZWI5
MTQ4MDNiMjVmMTdlZDFjODIyNjViY2ViNTVmYWJlOWNkYzdmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVy
Y3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI1LDYgQEAKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDkgKzM4LDcgQEAgZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNv
bnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0g
ICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBj
b25zdCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRM
ZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0
cml4KTsKIAogICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVs
U2l6ZTsgfQogICAgIHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXplJik7CkBAIC02Nyw0
MSArNjUsMTcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UHJlc2VydmVBbHBoYShib29sKTsKIAog
cHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsK
LSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7
Ci0gICAgfTsKLQotICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYs
IGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBl
LCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgIEZF
Q29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwg
ZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29udm9sdmVNYXRyaXgiOyB9CiAKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRl
bXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBj
bGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBs
eShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlT
ZXQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFs
dWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICB2b2lkIGZhc3RT
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQg
eTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBC
b3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHky
KTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0cwotICAgIHN0YXRpYyBjb25zdCBpbnQg
c19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBs
aW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlz
b3I7CkBAIC0xMTQsNCArODgsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCmluZGV4IGVlYjE3MjhkYjM1ZThhYzMw
MmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmEzOWRkZGFkNDZmMzk5MWNhOWJiMjFiZTFlMjNmZmJm
NzA2MGNhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDM2ICsyOCwyMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkK
LSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3Is
IHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpEaWZmdXNlTGln
aHRpbmcpCitSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUo
Y29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25z
dGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
RGlmZnVzZUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0K
IAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxl
LCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorRkVEaWZm
dXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkK
KyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAw
LCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNl
KSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRp
ZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxp
Z2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNl
Q29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQotewotICAgIGlmIChtX2RpZmZ1c2VDb25z
dGFudCA9PSBkaWZmdXNlQ29uc3RhbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Rp
ZmZ1c2VDb25zdGFudCA9IGRpZmZ1c2VDb25zdGFudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
VGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRl
bnQgPDwgIltmZURpZmZ1c2VMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2Nh
bGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgImRpZmZ1c2VDb25z
dGFudD1cIiIgPDwgbV9kaWZmdXNlQ29uc3RhbnQgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVs
VW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWCA8PCAiLCAiIDw8IG1fa2VybmVs
VW5pdExlbmd0aFkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGlu
ZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VM
aWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMu
Ljk2MDA2MjA0OWEyMmZlNWE4NWNiZmViYjM0OWVjZjFhYmQ0MTc5NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVz
ZUxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjUsMjEgKzI2LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
TGlnaHRTb3VyY2U7Ci0KIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRp
bmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShG
aWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGln
aHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsg
fQotICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKLQotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRp
bmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKIHByaXZhdGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRp
bmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7Cisg
ICAgCisgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
ICJGRURpZmZ1c2VMaWdodGluZyI7IH0KKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIyODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2
M2ZhMS4uMjQ0ZWY4NTJjNWVhOWZkY2ZhMDQ5ZWZiODhlM2I3YzcyMTY2YzBiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI0LDEzMiArMjUsNjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaXNwbGFj
ZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpEaXNw
bGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikK
LSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV9zY2Fs
ZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0
ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rv
ciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1h
cDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBz
Y2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXApCisgICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKKyAgICAs
IG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV9zY2FsZShzY2Fs
ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcChmaWx0ZXIs
IHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wg
RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQogewotICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3Ig
PT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feENoYW5u
ZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV94Q2hhbm5lbFNlbGVjdG9yLCB4Q2hhbm5lbFNlbGVjdG9yKSAh
PSBtX3hDaGFubmVsU2VsZWN0b3I7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlD
aGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
KQogewotICAgIGlmIChtX3lDaGFubmVsU2VsZWN0b3IgPT0geUNoYW5uZWxTZWxlY3RvcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2Vs
ZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV95Q2hh
bm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yKSAhPSBtX3lDaGFubmVsU2VsZWN0b3I7CiB9
CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQogewotICAg
IGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zY2Fs
ZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
c2NhbGUsIHNjYWxlKSAhPSBtX3NjYWxlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNl
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAogewogICAgIC8vIFNwZWM6
IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMg
dG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8vIGFuZCBkb2VzIG5vdCBhcHBseSB0byB0
aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBp
biBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNlLgogICAgIC8vIFRoZSByZXN1bHQgaXMg
aW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNwbGFjZW1lbnQgb2Yg
dGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlu
cHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkpOworICAgIEFTU0VSVChpbnB1dHMuc2l6
ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmNvbG9yU3BhY2UoKTsKIH0KIAotdm9p
ZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCitGbG9hdFJlY3QgRkVEaXNwbGFjZW1lbnRNYXA6OmRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8g
RG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNw
ZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQg
eCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCitGaWx0ZXJSZXN1bHQqIEZFRGlzcGxh
Y2VtZW50TWFwOjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9y
JiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBjb25zdCB1
bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwg
KyB5ICogcm93Qnl0ZXM7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwot
ICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBBU1NFUlQobV94
Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJUKG1feUNoYW5u
ZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g
4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFs
dWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlz
cGxhY2VtZW50SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChpbnB1dEltYWdl
LT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkpOwotCi0gICAgRmlsdGVy
JiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJS
ZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9y
WCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNj
YWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNj
YWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxl
LmhlaWdodCgpICogMC41OworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1
dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKICAgICAKLSAgICBpbnQgZGlzcGxhY2VtZW50Q2hh
bm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0g
eUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5dGVzID0gcGFpbnRTaXplLndpZHRoKCkg
KiA0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRzKCkuZ2V0KHsgKnRoaXMg
fSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBh
aW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5
ICogcm93Qnl0ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lk
dGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFy
dE9mZnNldCArIHggKiA0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHgg
KyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0
ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNl
dFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZv
ckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNw
bGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKLQotICAgICAgICAgICAgdW5zaWdu
ZWQqIGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVz
dGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwotICAgICAgICAg
ICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAg
fHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25QaXhlbFB0ciA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNY
LCBzcmNZLCByb3dCeXRlcykpOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBhcHBseVBs
YXRmb3JtKG91dHB1dCwgeyBpbiwgaW4yIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNl
dCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpAQCAtMTc0LDE3ICsxMDcsMTIgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxT
ZWxlY3RvclR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRURp
c3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEaXNw
bGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRGlzcGxh
Y2VtZW50TWFwIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHNjYWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJc
IiAiCiAgICAgICAgPDwgInhDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feENoYW5uZWxTZWxlY3Rv
ciA8PCAiXCIgIgogICAgICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3lDaGFubmVs
U2VsZWN0b3IgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIz
YTNhMi4uYzY1NTQ3ZjEyOGZkYWQwMmFiZDZlOTUzNjY5YTJjMDIxZWY1MTMzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDcgKzM2LDcgQEAgZW51
bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50
TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9y
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAg
ICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvcjsgfQogICAgIGJvb2wgc2V0WENo
YW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKQEAgLTQ4LDIyICs0Nywy
MyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9
CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHNldFJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkgb3ZlcnJpZGU7
Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25z
dCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBp
bnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7
IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxl
Y3RvciAtIDE7IH0KKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRl
clJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRz
LCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CiAgICAgQ2hhbm5l
bFNlbGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CkBAIC03MSw0ICs3MSwzIEBAIHByaXZh
dGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRl
eCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3ODlmNmJiZGQ4Li5kOTBjMDljNTQxZmVl
ZWNhMDQ1Mjk5MGJiMzYwZDk3ZmNmODQzNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDE2ICsy
NCwxOSBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQu
aCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICAKLUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBz
dGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkRyb3BTaGFkb3cpCisKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRl
KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFk
b3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgs
IGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNo
YWRvdykKICAgICAsIG1fc3RkWChzdGRYKQogICAgICwgbV9zdGRZKHN0ZFkpCiAgICAgLCBtX2R4
KGR4KQpAQCAtNDIsMTAwICs0Niw1MSBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0
ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewogfQog
Ci1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwg
ZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYg
c2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitJbnRPdXRzZXRzIEZFRHJvcFNoYWRv
dzo6b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hh
ZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0
eSkpOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVP
dXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3Rk
OjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSksCisgICAgICAgIHN0ZDo6
bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCksCisgICAgICAgIHN0ZDo6bWF4
PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAorICAgICAgICBzdGQ6Om1heDxp
bnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCisgICAgfTsKIH0KIAotdm9pZCBGRURy
b3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRURyb3BT
aGFkb3c6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0K
LSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1
dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGFic29sdXRl
UGFpbnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKLQotICAgIEludFNpemUg
a2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwg
eyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAg
ICBhdXRvIGRyYXdpbmdSZWN0ID0gaW5wdXRzWzBdLT5kcmF3aW5nUmVjdCgpOwogCisgICAgZHJh
d2luZ1JlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyh7IG1fZHgs
IG1fZHkgfSkpOworICAgIAorICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0c1swXS0+ZHJhd2lu
Z1JlY3QoKSk7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICAKICAgICAvLyBX
ZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBi
ZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVj
dC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQ
YWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAg
IGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2Vj
dChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2Vy
bmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtl
cm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnku
Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24p
OwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRl
clJlc3VsdCogRkVEcm9wU2hhZG93OjphcHBseShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVy
UmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgQVNTRVJUKCFzdGFj
ay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9
IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZp
bHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBi
bHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zm
c2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7Cisg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwotICAgIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKLQotICAgIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghc291cmNlSW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29udGV4dCA9
IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3No
YWRvd09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJ
bWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxw
aGEoMSk7Ci0KLSAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0
LCBtX3NoYWRvd0NvbG9yKTsKLQotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVz
dWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9
IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShz
b3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVm
ZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Ci0KLSAgICByZXN1bHRDb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3Vs
dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKLQotICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJh
d2luZ1JlZ2lvbik7Ci19Ci0KLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29u
c3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7Ci0gICAgICAgIHN0
ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAotICAgICAgICBzdGQ6
Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAotICAgICAgICBzdGQ6Om1h
eDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8
aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQotICAgIH07CisgICAgcmV0dXJuIGFw
cGx5UGxhdGZvcm0ob3V0cHV0LCB7IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNl
dCk7CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIi
IDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxv
b2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5l
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRz
OwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRl
ZTg4YTI5ZWZmMzg0Yy4uNGY4NWEzOTdlNWM4YTgyM2E3NjZiYjBlYzBhYWJhM2MyYTQ1MWIyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4g
Y3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYs
IGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0IHN0ZFgs
IGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFj
aXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7
IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRY
OyB9CkBAIC00MSwyNCArNDEsMjYgQEAgcHVibGljOgogICAgIGZsb2F0IGR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CiAK
LSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0Nv
bG9yOyB9IAorICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2hhZG93Q29sb3I7IH0KICAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBzaGFk
b3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KIAogICAgIGZsb2F0IHNo
YWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd09wYWNpdHk7IH0KICAgICB2b2lk
IHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0eSkgeyBtX3NoYWRvd09wYWNpdHkg
PSBzaGFkb3dPcGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVEcm9wU2hhZG93KEZpbHRlciYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBG
RURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBj
b25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BTaGFkb3ciOyB9CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEludE91dHNldHMgb3V0c2V0cygp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNl
dHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1
dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKQEAgLTY5LDQg
KzcxLDMgQEAgcHJpdmF0ZToKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYzYjZiMDEuLmNlNDRk
OWViODFjNzU1YjIyZmY5MWFlZWQ5YTczMjhhYWIyNjM2YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMyw2ICsz
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNCwyMiArMjUsMjEgQEAKICNpbmNsdWRlICJGRUZsb29kLmgiCiAK
ICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJPdXRwdXQuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3Is
IGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZs
b29kKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0
eShmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9y
JiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZs
b29kKGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLVJlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNp
dHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9v
ZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVGbG9vZCkKKyAgICAsIG1fZmxv
b2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoZmlsdGVyLCBmbG9vZENvbG9yLCBm
bG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTU4LDE3ICs1OCwyMCBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3Bh
Y2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUZsb29kOjpkcmF3aW5n
UmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBw
cmltaXRpdmVTdWJyZWdpb247Cit9CisKK0ZpbHRlclJlc3VsdCogRkVGbG9vZDo6YXBwbHkoRmls
dGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91
bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9y
KCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3Vs
dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0o
b3V0cHV0LCB7IH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRT
dHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRmxv
b2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
Rmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2
MTczNDhlLi40OGUwZmY4OGMyODEzMjc4OTAxZGMzOTkwMDU5NGI1MTA4M2YxZjVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwx
NCArMjMsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBv
cGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7CkBA
IC0zNywyNyArMzcsMjcgQEAgcHVibGljOgogICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9CiAgICAgYm9vbCBzZXRGbG9vZE9wYWNpdHkoZmxv
YXQpOwogCitwcml2YXRlOgorICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5
KTsKKworICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVGbG9vZCI7IH0KKyAgICAKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3Qg
cGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlz
IGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2Yg
dGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUg
eyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0K
ICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBm
bG9hdCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KLQotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0
ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0
UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3Qg
RmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBDb2xvciBtX2Zsb29kQ29sb3I7CiAgICAgZmxvYXQgbV9mbG9vZE9w
YWNpdHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4YWIzNjM5NDM2NS4uOTQyZjI0
YTNkOTdiNDRhN2ZjNzhhMWVkNWEyODM1NWVkZWI0NWYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNDUwICsyNiwzOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNp
bmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkZpbHRlck91dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAot
I2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgot
I2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdh
dXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBw
aUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1
ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFS
aWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4
LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9y
IGRldGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAg
ICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVz
IC8gMiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0Owot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAg
ICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMg
JSAyKSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVy
OjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3Np
YW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUdhdXNz
aWFuQmx1cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VN
b2RlKGVkZ2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVy
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0
ZXIsIHgsIHksIGVkZ2VNb2RlKSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERl
dmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0K
LQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
KQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBv
bmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFP
bmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRB
cnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYg
ZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwg
aW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAgICBjb25z
dCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCog
ZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQg
aXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBp
bnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQotICAgICAg
ICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2Vy
bmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAq
IHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBv
ZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0
V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGlu
ZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0g
ZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4K
LSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9m
ZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXks
Ci0gICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBp
bnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBjb25zdCBpbnQgbWF4S2Vy
bmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0
UGl4ZWxBcnJheSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZm
ZWN0V2lkdGgsIGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50
OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0
YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotCi0gICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkg
d2lkdGgvbGVuZ3RoOiBpdCBpcyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBu
dW1iZXIgb2YgcGl4ZWxzIHdpbGwgYmUKLSAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFu
bmVscy4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAg
ICAgIGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW1SID0gMCwgc3Vt
RyA9IDAsIHN1bUIgPSAwLCBzdW1BID0gMDsKLQotICAgICAgICBpZiAoZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSkgewotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotICAgICAgICAgICAg
ICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisr
OwotICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1
bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcu
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlk
ZTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRl
T2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1HIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBr
ZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBz
dHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0Rh
dGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0
clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4Umln
aHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9m
ZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAg
IHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsy
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJlLgotICAgICAgICAgICAgLy8gR2V0IGVk
Z2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRlJy4KLSAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsKLSAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAobGluZSArIChlZmZlY3RXaWR0
aCAtIDEpICogc3RyaWRlKTsKLQotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwgZHhSaWdodDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgdmFsdWVzIG9mICdp
Jz8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsK
LSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0
OwotCi0gICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdl
VmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRb
Ml07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
RyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdl
VmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdo
dFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdW1S
ICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0
ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA8IGR4
TGVmdCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBz
dW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4
TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRy
ID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3Jj
UHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEg
LT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4
ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1
ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zm
c2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAg
ICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtRyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKLXsKLSAg
ICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
ZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgotICAgIGlmIChrZXJuZWxT
aXplICUgMiAhPSAxKQotICAgICAgICBrZXJuZWxTaXplICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2Fz
dDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKLSAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVm
ZmVjdFdpZHRoOwotICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAg
ICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
ZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5k
YXRhKCk7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZm
ZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RPdXRCdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1w
b3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFs
IGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgotICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4g
ZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgotICAgIHNpemVfdCB0bXBCdWZmZXJTaXpl
ID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0
QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxv
Yyh0bXBCdWZmZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZl
X0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAw
LCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAg
dkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVm
ZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VF
ZGdlRXh0ZW5kKTsKLSAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUg
ZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlv
QnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1
ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0j
ZW5kaWYKLQotaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXpl
LCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGludCBk
eExlZnQgPSAwOwotICAgIGludCBkeFJpZ2h0ID0gMDsKLSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAg
ICBpbnQgZHlSaWdodCA9IDA7Ci0gICAgCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZm
ZXIgPSAmaW9CdWZmZXI7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBC
dWZmZXI7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAo
a2VybmVsU2l6ZVgpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVY
LCBkeExlZnQsIGR4UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAg
ICAgICAgIGlmICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0
cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBr
ZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAg
ICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4
UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwg
aXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChm
cm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2VybmVsU2l6
ZVkpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQs
IGR5UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlm
ICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFp
bnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXpl
WSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVy
KCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0
cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgaXNBbHBoYUlt
YWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVy
LCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0
IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9t
QnVmZmVyKSB7Ci0gICAgICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVy
LT5sZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXIt
PmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQotewotICAgIGlu
dCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAg
ICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVy
cy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXks
IHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFp
bnRTaXplKQorc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7Ci0j
aWYgIVVTRShBQ0NFTEVSQVRFKQotICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lk
dGgoKTsKLSAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAg
IGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXpl
LmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWlu
dFNpemUud2lkdGgoKSk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVs
Sm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAg
ICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChq
b2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdo
dCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0
bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3Rh
bCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dp
dGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUu
aGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBw
YWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAw
OwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlz
OwotCi0gICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBl
eHRyYUhlaWdodDsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4
dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgaW50
IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWln
aHQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICog
c2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFy
YW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2Fu
bGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBw
YXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
aGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6
ZVggPSBrZXJuZWxTaXplWDsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBr
ZXJuZWxTaXplWTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4
ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhl
IGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQg
am9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAg
ICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IGRlc3Rp
bmF0aW9uT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgICAg
IGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVp
Z2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRq
dXN0ZWRCbG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhl
aWdodCAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3Vy
cmVudFkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hl
aWdodCAqIHNjYW5saW5lOwotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEo
KSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3Vy
Y2VPZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAg
IH0KLSNlbmRpZgotCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxk
IGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZ
LCBwYWludFNpemUpOworICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAqIHBpRmxvYXQpOwog
fQogCiBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAg
Ly8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1h
a2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZs
YXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxl
IHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVs
U2l6ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3Rvcigp
ICsgMC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KLSAgICAKLUludFNpemUgRkVH
YXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2
aWF0aW9uKQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5l
bFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgQVNTRVJUKHN0ZERl
dmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwogICAg
IEludFNpemUga2VybmVsU2l6ZTsKQEAgLTQ4MywxMiArNzIsMTIgQEAgSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pCiAgICAgcmV0dXJuIGtlcm5lbFNpemU7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRp
b24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlv
biAvKmZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSovKTsKIH0K
IAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUg
c3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUg
PSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDcy
ICs4NSw0OCBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZs
b2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwogfQogCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitJbnRPdXRzZXRzIEZFR2F1c3Np
YW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIEludFNp
emUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
KyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCksIG91
dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OworfQogCi0gICAgRmxvYXRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBk
cmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVz
IG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0
LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUp
CisgICAgICAgIHJldHVybiBkcmF3aW5nUmVjdDsKIAotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBr
ZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRl
WSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIEludFNpemUga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAotICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhF
ZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUo
bWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFu
ZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0
aW1lcy4KKyAgICBkcmF3aW5nUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICog
MC41Zik7CisgICAgZHJhd2luZ1JlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkg
KiAwLjVmKTsKIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZlU3Vi
cmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUdhdXNzaWFuQmx1cjo6
aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIo
KSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJuZWxTaXplLnNjYWxlKGZpbHRlcigpLmZp
bHRlclNjYWxlKCkpOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0
KCksIHBhaW50U2l6ZSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9
CiAKLUludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAorRmlsdGVyUmVz
dWx0KiBGRUdhdXNzaWFuQmx1cjo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJl
c3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0g
ICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9z
dGRZIH0pOwotICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lk
dGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwor
CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1
dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi1UZXh0U3Ry
ZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlR2F1
c3NpYW5CbHVyIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRY
IDw8ICIsICIgPDwgbV9zdGRZIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRT
Y29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4M2JlYWFhMTc2NDdjYmIyZDNl
Li42YjNjY2Y5MjVlZTU1NGQzZGExMjZiNGVlNzdlMDBiMDIxYjY4ZDEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIyLDU5ICsyMyw0MiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGRUNvbnZvbHZl
TWF0cml4LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVHYXVzc2lhbkJsdXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBj
cmVhdGUoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOworICAgIHN0YXRpYyBS
ZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CiAK
ICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9Ci0gICAg
dm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0KTsKKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblgo
ZmxvYXQgeCkgeyBtX3N0ZFggPSB4OyB9CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25ZKCkgY29u
c3QgeyByZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0KTsK
KyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkgeyBtX3N0ZFkgPSB5OyB9CiAKICAg
ICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VNb2RlOyB9Ci0g
ICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUpOworICAgIHZvaWQgc2V0RWRnZU1vZGUo
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgfQogCi0gICAg
c3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImLCBGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtl
cm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2Fs
Y3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50
U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsK
KyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxv
YXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNl
dFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwogCiBwcml2YXRlOgotICAgIEZF
R2F1c3NpYW5CbHVyKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBG
RUdhdXNzaWFuQmx1cihmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CiAKICAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1c3NpYW5CbHVyIjsg
fQogCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICog
MTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0g
ICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVzc2lhbkJs
dXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJy
YXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKLSAg
ICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCBr
ZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsKKyAgICBJ
bnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxw
aGFJbWFnZShjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJS
ZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0
ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYs
IGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMg
dm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5l
cmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmlu
ZGV4IGRmMTc2ZjhlMDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLmQ2ZDU5NDJmMmZm
YmEyZGMzOWZiZGQ4NGU2YjQyYWNjZjJjNTUwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAq
IENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3
MCArMjgsNzcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgi
CiAKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVP
Ti5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0
LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgTGlnaHRpbmdUeXBl
IGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgdHlwZSkKLSAgICAsIG1fbGlnaHRpbmdUeXBlKGxp
Z2h0aW5nVHlwZSkKLSAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCi0g
ICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKK0ZFTGlnaHRpbmc6OkZFTGlnaHRp
bmcoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYgc291cmNlLCBGaWx0ZXJGdW5jdGlvbjo6VHlwZSB0eXBlKQorICAgIDogRmls
dGVyRWZmZWN0KHR5cGUpCisgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgICwgbV9zdXJmYWNlU2Nh
bGUoc3VyZmFjZVNjYWxlKQogICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50
KQogICAgICwgbV9zcGVjdWxhckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQpCiAgICAgLCBtX3Nw
ZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0
aFgoa2VybmVsVW5pdExlbmd0aFgpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVu
aXRMZW5ndGhZKQorICAgICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2UpKQogewogfQogCi1ib29s
IEZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZShmbG9hdCBzdXJmYWNlU2NhbGUpCi17Ci0gICAg
aWYgKG1fc3VyZmFjZVNjYWxlID09IHN1cmZhY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvcikKK2Jvb2wgRkVMaWdodGluZzo6c2V0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGlmIChtX2xpZ2h0aW5nQ29sb3IgPT0gbGlnaHRpbmdDb2xvcikKKyAgICBpZiAo
bV9jb2xvciA9PSBjb2xvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9saWdodGlu
Z0NvbG9yID0gbGlnaHRpbmdDb2xvcjsKKyAgICBtX2NvbG9yID0gY29sb3I7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2Vy
bmVsVW5pdExlbmd0aFgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5p
dExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSkKLXsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3RleHByIGlu
dCBjUGl4ZWxTaXplID0gNDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZz
ZXQgPSAzOwotc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDB4RkYpOwotCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNv
ZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25z
dGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjQgPSAtMSAvIDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYz
ID0gLTIgLyAzLmY7Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICog
Y2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICog
Y2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
b2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0
b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIgKiBs
ZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9t
UmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0y
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIg
KyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNl
dCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAotewotICAgIGludCByaWdodEFscGhh
T2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7Ci0gICAg
Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBo
YU9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotICAg
IGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxw
aGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotCi0gICAgaW50IGxlZnQg
PSBhbHBoYVdpbmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50b3BM
ZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwotCi0gICAgaW50IGJvdHRv
bUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0gICAgaW50IGJvdHRvbSA9IGFscGhh
V2luZG93LmJvdHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNoaWZ0
ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICBhbHBoYVdpbmRv
dy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzFdWzJdID0g
cmlnaHQ7Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKLSAgICAK
LSAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29tZSBz
cG90LWNoZWNrcy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cu
dG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQotICAgIHJldHVybiB7Ci0gICAgICAg
IC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQg
KyBib3R0b21SaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBi
b3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5l
IEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGlu
dCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
ICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2Vu
dGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsg
Ym90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
LXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0
b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1
cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAot
ICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0gICAgfTsK
LX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2Jvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxl
KGZsb2F0IHN1cmZhY2VTY2FsZSkKIHsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9w
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9w
UmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0
ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAy
ICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0gICAgfTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX3N1cmZhY2VTY2FsZSwgc3VyZmFjZVNjYWxlKSAhPSBt
X3N1cmZhY2VTY2FsZTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5n
OjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQogewotICAgIGludCBs
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNl
dCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAt
dG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExlZnQg
LSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fZGlmZnVzZUNvbnN0YW50LCBkaWZmdXNlQ29uc3RhbnQpICE9IG1fZGlmZnVzZUNv
bnN0YW50OwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIElu
dFNpemUgbm9ybWFsMkRWZWN0b3IpCitib29sIEZFTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3Rh
bnQoZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKIHsKLSAgICBzZXRQaXhlbEludGVybmFsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBmYWN0b3JYLCBmYWN0b3JZLCBub3JtYWwyRFZl
Y3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJDb25z
dGFudCkgIT0gc3BlY3VsYXJDb25zdGFudDsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFs
cGhhKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQpCiB7Ci0gICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5zdXJmYWNlU2NhbGU7Ci0g
ICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9IG1fbGln
aHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0RhdGEsIHgsIHksIHop
OwotCi0gICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKLSAgICBpZiAobm9ybWFsMkRWZWN0b3IuaXNa
ZXJvKCkpIHsKLSAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwgMSkuIFRoaXMgaXMg
YSBxdWl0ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVM
aWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1f
ZGlmZnVzZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5n
RGF0YS5saWdodFZlY3Rvckxlbmd0aDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhh
bGZ3YXlWZWN0b3JMZW5ndGg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGln
aHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkg
LyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKLSAgICAg
ICAgICAgIGZhY3RvclggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICogZGF0YS5zdXJmYWNlU2Nh
bGUsCi0gICAgICAgICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3IuaGVpZ2h0KCkgKiBkYXRh
LnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIDEuMGYKLSAgICAgICAgfTsKLSAgICAgICAgZmxv
YXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOwotCi0gICAgICAg
IGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAg
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9y
ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAgICAgIGxpZ2h0aW5n
RGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3Iueigp
ICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAgICB9OwotICAgICAg
ICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7
Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAgICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBo
YWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9z
cGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAo
bm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIG1fc3BlY3VsYXJFeHBv
bmVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGlnaHRTdHJlbmd0aCA+IDEpCi0g
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxOwotICAgIGlmIChsaWdodFN0cmVuZ3RoIDwgMCkKLSAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IDA7Ci0KLSAgICB1aW50OF90IHBpeGVsVmFsdWVbM10gPSB7
Ci0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0Rh
dGEuY29sb3JWZWN0b3IueCgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhf
dD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci55KCkgKiAyNTUuMGYp
LAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdE
YXRhLmNvbG9yVmVjdG9yLnooKSAqIDI1NS4wZikKLSAgICB9OwotICAgIAotICAgIGRhdGEucGl4
ZWxzLT5zZXRSYW5nZShwaXhlbFZhbHVlLCAzLCBvZmZzZXQpOworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fc3BlY3VsYXJFeHBvbmVudCwgc3BlY3VsYXJFeHBvbmVudCkgIT0gbV9zcGVjdWxh
ckV4cG9uZW50OwogfQogCi0vLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0
byB0aGUgc2FtZSBwaXhlbCBidWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRoZSBhbHBoYSBjaGFu
bmVsLCBhbmQgd3JpdGVzIHRoZSBub24tYWxwaGEgY2hhbm5lbHMuCi12b2lkIEZFTGlnaHRpbmc6
OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25z
dCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGlu
dCBlbmRZKQotewotICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdlIHJlYWQg
ZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgotICAgIEFTU0VSVChzdGFydFkpOwot
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkg
PCBlbmRZOyArK3kpIHsKLSAgICAgICAgaW50IHJvd1N0YXJ0T2Zmc2V0ID0geSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCBwcmV2aW91c1Jvd1N0YXJ0ID0g
cm93U3RhcnRPZmZzZXQgLSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAg
ICBpbnQgbmV4dFJvd1N0YXJ0ID0gcm93U3RhcnRPZmZzZXQgKyBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotCi0gICAgICAgIC8vIGFscGhhV2luZG93IGlzIGEgbG9jYWwgY2FjaGUg
b2YgYWxwaGEgdmFsdWVzLgotICAgICAgICAvLyBGaWxsIHRoZSB0d28gcmlnaHQgY29sdW1ucyBw
dXR0aW5nIHRoZSBsZWZ0IGVkZ2UgdmFsdWUgaW4gdGhlIGNlbnRlciBjb2x1bW4uCi0gICAgICAg
IC8vIEZvciBlYWNoIHBpeGVsLCB3ZSBzaGlmdCBlYWNoIHJvdyBsZWZ0IHRoZW4gZmlsbCB0aGUg
cmlnaHQgY29sdW1uLgotICAgICAgICBBbHBoYVdpbmRvdyBhbHBoYVdpbmRvdzsKLSAgICAgICAg
YWxwaGFXaW5kb3cuc2V0VG9wKGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFRvcFJpZ2h0KGRh
dGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotCi0gICAgICAgIGFscGhhV2luZG93LnNldENlbnRlcihkYXRhLnBpeGVs
cy0+aXRlbShyb3dTdGFydE9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAg
YWxwaGFXaW5kb3cuc2V0UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAgICAgIGFscGhhV2luZG93
LnNldEJvdHRvbShkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldEJvdHRvbVJpZ2h0KGRhdGEucGl4ZWxz
LT5pdGVtKG5leHRSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0KLSAgICAgICAgaW50IG9mZnNldCA9IHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwg
b2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIGFscGhhV2luZG93LnNoaWZ0KCk7
Ci0gICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRh
LCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1hbChv
ZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBs
YXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyogcGFyYW1ldGVycykKK2Jvb2wgRkVMaWdodGlu
Zzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCiB7Ci0gICAg
cGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KHBhcmFtZXRlcnMt
PmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJh
bWV0ZXJzLT55RW5kKTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2tlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWCkgIT0gbV9rZXJuZWxVbml0TGVuZ3RoWDsKIH0KIAotdm9p
ZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAg
ICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7
Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4OwotICAgIHVu
c2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUgLSAxKSAqIHJvd3NUb1Byb2Nlc3MpIC8gc19taW5pbWFsUmVjdERp
bWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAx
KSB7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgcGFyYWxsZWwgam9icwotICAgICAgICBXVEY6OlBh
cmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygm
cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAg
ICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAgICAgICBpbnQgam9iID0gcGFyYWxs
ZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAoam9iID4gMSkgewotICAgICAgICAg
ICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJ5U3RlcCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBm
ZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAg
ICAvLyB5U3RlcCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQg
YnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQg
eVN0ZXAgPSByb3dzVG9Qcm9jZXNzIC8gam9iOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNX
aXRoRXh0cmEgPSByb3dzVG9Qcm9jZXNzICUgam9iOwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0
ID0gMTsKLSAgICAgICAgICAgIGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAg
ICAgICAgICAgIFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0
aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBh
cmFtcy55U3RhcnQgPSB5U3RhcnQ7Ci0gICAgICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpv
YnNXaXRoRXh0cmEgPyB5U3RlcCArIDEgOiB5U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
eUVuZCA9IHlTdGFydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5l
eGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFs
bGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotCi0gICAgcGxhdGZvcm1BcHBs
eUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQorYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSkKIHsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxs
eSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotI2lmIENQVShB
Uk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElC
TEUpCi0gICAgcGxhdGZvcm1BcHBseU5lb24oZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbHNlCi0g
ICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbmRpZgorICAg
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fa2VybmVsVW5pdExlbmd0aFksIGtlcm5lbFVuaXRMZW5n
dGhZKSAhPSBtX2tlcm5lbFVuaXRMZW5ndGhZOwogfQogCi1ib29sIEZFTGlnaHRpbmc6OmRyYXdM
aWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
CitGbG9hdFJlY3QgRkVMaWdodGluZzo6ZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3QKIHsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhp
bmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBX
MyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0
dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNj
YWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdo
dCAtIDE7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9y
Q29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHBhaW50
aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIs
IGcsIGIpOwotCi0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFp
bnRpbmdEYXRhKTsKLQotICAgIC8vIFRvcCBsZWZ0LgotICAgIGludCBvZmZzZXQgPSAwOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMs
IGNGYWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gVG9w
IHJpZ2h0LgotICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRh
LnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zm
c2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRh
LmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAg
b2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYz
LCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICBp
ZiAod2lkdGggPj0gMykgewotICAgICAgICAvLyBUb3Agcm93LgotICAgICAgICBvZmZzZXQgPSBj
UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3Ix
ZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gQm90dG9tIHJv
dy4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4
ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVs
U2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2Miwg
ZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGhlaWdodCA+
PSAzKSB7Ci0gICAgICAgIC8vIExlZnQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVt
bk5vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBSaWdodCBjb2x1bW4uCi0gICAgICAgIG9m
ZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsK
LSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyAr
K3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAg
ICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5O
b3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49
IDMpIHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5
KGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0gICAgfQotCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdU
eXBlID09IERpZmZ1c2VMaWdodGluZykgewotICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hh
bm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAg
ZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpIHsKLSAgICAg
ICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKLSAgICAgICAgICAgIHVp
bnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMSk7Ci0gICAgICAgICAgICB1aW50OF90
IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIpOwotICAgICAgICAgICAgLy8gYWxwaGEgc2V0
IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQo
aSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6
IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cHJpbWl0aXZlU3VicmVnaW9uOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlck91dHB1dCYg
b3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5
U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwog
Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExl
bmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKLSAg
ICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3Nl
cnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMg
a2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgot
ICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxl
bWVudGF0aW9uCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAq
dGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFNpemUgYWJzb2x1dGVQ
YWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRpbmco
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0
ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFwcGx5UGxhdGZvcm0ob3V0cHV0LCB7
IGluIH0sIG51bGxwdHIsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggMGZmZmNkMDY0Mzk2ZDhmNGI2NDA4MjI2OWNjMjA3
NGY3YzlkYmRiYy4uYjg5OGFjOTc4ODdiY2RmZjAxZGI1NmRmMzUwMjg4MzhlY2JjNDE0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMzkgKzMxLDUxIEBACiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRT
b3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1v
biBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5n
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFG
b3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQor
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBi
b29sIHNldENvbG9yKGNvbnN0IENvbG9yJik7CiAKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQogICAgIGJvb2wgc2V0U3VyZmFjZVNjYWxl
KGZsb2F0KTsKIAotICAgIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9saWdodGluZ0NvbG9yOyB9Ci0gICAgYm9vbCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENv
bG9yJik7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZm
dXNlQ29uc3RhbnQ7IH0KKyAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7CisKKyAg
ICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0
YW50OyB9CisgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKIAorICAgIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0K
KyAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworICAgIAogICAgIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsgfQog
ICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOwogCiAgICAgZmxvYXQga2VybmVs
VW5pdExlbmd0aFkoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGhZOyB9CiAgICAg
Ym9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCk7CiAKLSAgICBjb25zdCBMaWdodFNvdXJj
ZSYgbGlnaHRTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9Cisg
ICAgY29uc3QgTGlnaHRTb3VyY2UmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdl
dCgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3RE
aW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxl
bCBqb2JzCisgICAgRkVMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiwgRmlsdGVyRnVuY3Rpb246OlR5cGUpOwogCi0gICAg
ZW51bSBMaWdodGluZ1R5cGUgewotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIFNw
ZWN1bGFyTGlnaHRpbmcKLSAgICB9OwotICAgIAotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0g
ICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
IGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBl
YXNpZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzBdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tTGVm
dCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9Ci0KLSAgICAgICAgdWlu
dDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0K
LSAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMV1bMV07IH0KLSAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMl1bMV07IH0KLQotICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZh
bHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRD
ZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9Ci0gICAg
ICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2
YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsg
YWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFs
dWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0
b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9Ci0KLSAgICAg
ICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKLSAgICAgICAgICAgIGFscGhhWzFdID0gYWxw
aGFbMl07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2hpZnQoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7Ci0gICAgICAgICAgICBzaGlmdFJv
dyhhbHBoYVsxXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7Ci0gICAgICAgIC8vIFRoaXMgc3Ry
dWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogcGl4ZWxzOwotICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0g
ICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRo
RGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAg
ICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Owot
ICAgICAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdp
bmRvdyYpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0gICAgc3RydWN0IFBs
YXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTGlnaHRpbmcqIGZpbHRl
cjsKLSAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0gICAgICAgIExpZ2h0U291cmNlOjpQYWlu
dGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgICAgICBpbnQgeVN0YXJ0OwotICAgICAgICBpbnQg
eUVuZDsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgcGxh
dGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb24qKTsKLQot
ICAgIEZFTGlnaHRpbmcoRmlsdGVyJiwgTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJiwg
VHlwZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFTGlnaHRpbmciOyB9Ci0KLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRB
cnJheSYsIGludCwgaW50KTsKLQotICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBp
bnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3Ip
OwotICAgIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9h
dCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxw
aGEpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGlu
dCBzdGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0j
aWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0Nf
Q09NUEFUSUJMRSkKLSAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4
cG9uZW50KTsKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGlu
Z0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0jZW5kaWYKLQotICAg
IExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGln
aHRTb3VyY2U7Ci0KLSAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CisgICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVz
dWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVj
dG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIENvbG9yIG1fY29sb3I7CiAgICAgZmxvYXQgbV9z
dXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9z
cGVjdWxhckNvbnN0YW50OwogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9h
dCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7Cisg
ICAgUmVmPExpZ2h0U291cmNlPiBtX3NvdXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2Iz
Zi4uYTYwNDI5YWM1NDgyZGU4ZjZlYjIyYTk2Yzg5YWU5MWNjYjNkZGRhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1
MSArMjMsNDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJGaWx0ZXJPdXRwdXQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVy
JiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxG
RU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykp
OwogfQogCi1SZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVN
ZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6IEZpbHRl
ckVmZmVjdChUeXBlOjpGRU1lcmdlKQorICAgICwgbV9udW1iZXJPZkVmZmVjdElucHV0cyhudW1i
ZXJPZkVmZmVjdElucHV0cykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZp
bHRlcikpOworICAgIEFTU0VSVChtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKIH0KIAotdm9pZCBG
RU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorY29uc3QgQXRvbVN0cmluZyYgRkVNZXJn
ZTo6ZWZmZWN0TmFtZSgpCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5w
dXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiRkVNZXJnZSIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4gc19lZmZlY3ROYW1lOwor
fQorCitGaWx0ZXJSZXN1bHQqIEZFTWVyZ2U6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25z
dAoreworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gbV9udW1iZXJPZkVmZmVjdElucHV0cyk7
CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8
UmVmPEZpbHRlclJlc3VsdD4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6ZSA9IG1f
bnVtYmVyT2ZFZmZlY3RJbnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1dHMuYXBw
ZW5kKHN0YWNrLnRha2VMYXN0KCkpOwogCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJl
c3VsdHMoKS5nZXQoeyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW5C
dWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIH0KKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9y
bShvdXRwdXQsIGlucHV0cywgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAot
VGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYg
RkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7Ci0g
ICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNT
RVJUKHNpemUgPiAwKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwi
XVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBpbnB1dEVmZmVj
dChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRz
IDw8ICIgbWVyZ2VOb2Rlcz1cIiIgPDwgbV9udW1iZXJPZkVmZmVjdElucHV0cyA8PCAiXCJdXG4i
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTljZWNlZDUwNzNlNTdi
MDE5NGViY2YxOGYyNjA3Li5hMWMwNzhlMDMwYTU3YjlmNzFjOTc5ZjljMTkyZDRkYmIxZGM4M2Vj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjgsMTYgKzI5LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVNZXJn
ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNZXJn
ZT4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKHVuc2ln
bmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJp
bmcmIGVmZmVjdE5hbWUoKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAg
IEZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCiAgICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJSZXN1bHQq
IGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3Vu
ZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRl
clJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZF
ZmZlY3RJbnB1dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKaW5kZXggOGE3ZTViNjY3YWI3NzNiOTBiODkwZTM4Mzg2MzkzNTYyYjlkOGRmNS4uMmI0MTU2
NzNhNTU5MzkwMmQyZjRiZmM1NDc1YTIxMDNjZmI0ZmFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApA
QCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTct
MjAxOCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIw
MTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwy
NjUgKzI1LDcwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5
LmgiCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVz
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNs
dWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVk
ZSAiRmlsdGVyUmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KEZpbHRlciYg
ZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNb3JwaG9sb2d5KQot
ICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKLSAgICAsIG1fcmFk
aXVzWShyYWRpdXNZKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9y
cGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQg
cmFkaXVzWSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xvZ3kobW9ycGhv
bG9neU9wZXJhdG9yLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKLVJlZjxGRU1vcnBob2xvZ3k+
IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitGRU1vcnBob2xvZ3k6OkZF
TW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCBy
YWRpdXNYLCBmbG9hdCByYWRpdXNZKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFTW9ycGhv
bG9neSkKKyAgICAsIG1fbW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcikKKyAg
ICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwg
cmFkaXVzWSkpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9y
KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK2Jvb2wgRkVNb3JwaG9sb2d5OjpzZXRNb3Jw
aG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsK
LSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5
cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1f
bW9ycGhvbG9neU9wZXJhdG9yLCBtb3JwaG9sb2d5T3BlcmF0b3IpICE9IG1vcnBob2xvZ3lPcGVy
YXRvcjsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkK
IHsKLSAgICBpZiAobV9yYWRpdXNYID09IHJhZGl1c1gpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fcmFkaXVzWCwgcmFkaXVzWCkgIT0gbV9yYWRpdXNYOwogfQogCiBib29s
IEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogewotICAgIGlmIChtX3Jh
ZGl1c1kgPT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWSA9
IHJhZGl1c1k7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9y
YWRpdXNZLCByYWRpdXNZKSAhPSBtX3JhZGl1c1k7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5Ojpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpkcmF3
aW5nUmVjdChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRl
UGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBw
YWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRp
dXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBh
aW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBh
aW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMSk7CisgICAgYXV0byBkcmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3Qo
KTsKIAotc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50
IHdpZHRoKQotewotICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OwotfQorICAgIGRyYXdp
bmdSZWN0LmluZmxhdGUoZ2VvbWV0cnkucmVzb2x2ZVRvRmlsdGVyQ29vcmRpbmF0ZXMoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBp
eGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwg
cHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGNvbXBvbmVudHMpCitib29sIEZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIHJldHVybiBQYWNrZWRD
b2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50
cykgfTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdGVtcGxh
dGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCitGaWx0ZXJSZXN1
bHQqIEZFTW9ycGhvbG9neTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3Vs
dFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
cGVyQ29tcG9uZW50TWluKGEsIGIpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIHJldHVybiBwZXJDb21wb25lbnRN
YXgoYSwgYik7Ci19CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQo
eyAqdGhpcyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotdGVtcGxhdGU8TW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQotewotICAgIGF1dG8g
ZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6
OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXku
ZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZv
ciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4
ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEg
eyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgp
ICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0g
bWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJl
bXVtOwotfQotCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1
bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgs
IGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0g
ICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+
KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNv
bHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXks
IHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOworICAgIHJldHVybiBhcHBseVBsYXRmb3JtKG91dHB1
dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQogCi11c2luZyBD
b2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+Owot
Ci10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRy
ZW1hJiBrZXJuZWwpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3JwaG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAg
YXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtl
cm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRy
ZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lO
TElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29s
dW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
a2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0g
ICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtl
cm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0g
ICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJh
eSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5
ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1c1gg
PSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5n
RGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsK
LSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFTU0VS
VChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQoc3Rh
cnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1
bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIg
KiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5
KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7
Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSAr
IDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0YXJ0
IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29s
dW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFk
aXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBLZXJu
ZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSBy
YWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNy
Y1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRo
LCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAg
ICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVs
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4
ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFr
ZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1f
dHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW0pCi17Ci0g
ICAgcGFyYW0tPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtLT5wYWludGluZ0Rh
dGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAg
Ly8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFz
b25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9h
dCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRh
LnJhZGl1c1kpICogMC42NTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbEFyZWEgPSAo
MTYwICogMTYwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLSAg
ICAKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIDg7
Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigo
cGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdodCAqIGtlcm5lbEZhY3Rvcikg
LyBtaW5pbWFsQXJlYSwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1i
ZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0gICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4g
MSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKLSAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2Ug
ZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgotICAg
ICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRz
OwotICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUg
bnVtT2ZUaHJlYWRzOwotICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKLSAgICAgICAgICAg
IGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbS5maWx0ZXIgPSB0aGlzOwot
ICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAg
IGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7
Ci0gICAgICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAg
IHBhcmFtLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKLSAgICB9
Ci0KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0
YS5oZWlnaHQpOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJh
dGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdl
UmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQotewotICAgIGlmIChyYWRpdXNYIDwgMCB8
fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLQotICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUo
RmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1
cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9
IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6
bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAg
aW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJh
ZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAg
IHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAg
ICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0g
ICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAq
IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYo
ZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
cGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSAqIGZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLQotICAgIHBsYXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKLX0KLQot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dp
dGNoIChtb3JwaG9sb2d5T3BlcmF0b3IpIHsKICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9VTktOT1dOOgogICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAt
Mjk3LDE1ICsxMDIsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7
CiB9CiAKLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwgIltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1v
cnBob2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCiAgICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFk
aXVzWCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5
YzVhMTEuLjUwMDUyOTIwY2Y0Yjk0NDk4NTRhN2UwZDcxY2U5NzkxNmQ1YmY1MjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjIsMTEgKzIzLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVu
dW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CitlbnVtIE1vcnBob2xvZ3lPcGVyYXRvciB7CiAg
ICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAogICAgIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSA9IDEsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSA9IDIK
QEAgLTM0LDEwICszNCwxMCBAQCBlbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFz
cyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3Jw
aG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9y
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0
b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9Cisg
ICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yKTsKIAogICAg
IGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBib29sIHNl
dFJhZGl1c1goZmxvYXQpOwpAQCAtNDYsNDAgKzQ2LDIxIEBAIHB1YmxpYzoKICAgICBib29sIHNl
dFJhZGl1c1koZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAg
ICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVNb3JwaG9sb2d5IjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlclJlc3VsdCogYXBwbHko
RmlsdGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3Qs
IGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRl
clJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkq
IHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5
OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCBy
YWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OworICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMgewotICAgICAgICBGRU1vcnBob2xvZ3kqIGZpbHRlcjsKLSAgICAgICAgaW50IHN0YXJ0
WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRp
bmdEYXRhOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3Qg
UGFpbnRpbmdEYXRhJik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0KLSAgICBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIG1fdHlwZTsKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbV9tb3JwaG9sb2d5T3BlcmF0
b3I7CiAgICAgZmxvYXQgbV9yYWRpdXNYOwogICAgIGZsb2F0IG1fcmFkaXVzWTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCmluZGV4IDAyNzBkYjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLmIxNmQy
NzVlM2Q3NmI3YWZhOTI5OGM5ODM3ZGU4ZDY1MDg5ZjIyMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC00LDYg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNzEgKzI1LDUzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIKIAotI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlck91
dHB1dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBm
bG9hdCBkeSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok9mZnNldCkKK0ZFT2Zm
c2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVPZmZzZXQpCiAgICAgLCBtX2R4KGR4KQogICAgICwgbV9keShkeSkKIHsKIH0KIAotUmVm
PEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxv
YXQgZHkpCitSZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGZpbHRlciwgZHgsIGR5KSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZHgsIGR5KSk7CiB9CiAKLXZvaWQg
RkVPZmZzZXQ6OnNldER4KGZsb2F0IGR4KQorRmxvYXRSZWN0IEZFT2Zmc2V0OjpkcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsK
LSAgICBtX2R4ID0gZHg7Ci19CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byBkcmF3aW5nUmVjdCA9IGlucHV0c1swXS0+ZHJhd2luZ1JlY3QoKTsKIAotdm9pZCBGRU9m
ZnNldDo6c2V0RHkoZmxvYXQgZHkpCi17Ci0gICAgbV9keSA9IGR5OworICAgIGRyYXdpbmdSZWN0
Lm1vdmUoZ2VvbWV0cnkucmVzb2x2ZVRvRmlsdGVyQ29vcmRpbmF0ZXMoeyBtX2R4LCBtX2R5IH0p
KTsKKworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oZHJhd2lu
Z1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKK2Jvb2wgRkVPZmZzZXQ6OmlzQWxwaGFJbWFnZShjb25zdCBG
aWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRS
ZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3Vu
ZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1
cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVPZmZzZXQ6OmFwcGx5KEZpbHRlck91
dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJv
dW5kYXJ5U2V0KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRh
a2VMYXN0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gb3V0cHV0LnJlc3VsdHMoKS5nZXQoeyAqdGhp
cyB9KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOwotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsK
KyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0
cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBkeD1cIiIgPDwgZHgo
KSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06Oklu
ZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oCmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmUyMTgx
OTJmYzg1NTdkODQ3ZWQwNzkwN2E5N2EwM2E2MzI0MDIyYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw2NiBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgZmxvYXQg
ZHgoKSBjb25zdCB7IHJldHVybiBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAg
dm9pZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KIAogICAgIGZsb2F0IGR5KCkgY29u
c3QgeyByZXR1cm4gbV9keTsgfQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOworICAgIHZvaWQgc2V0
RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVjb2RlKERlY29kZXImKTsK
IAogcHJpdmF0ZToKLSAgICBGRU9mZnNldChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOwor
ICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFT2Zmc2V0IjsgfQogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBj
b25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlclJlc3VsdCogYXBwbHkoRmlsdGVyT3V0cHV0Jiwg
RmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVy
UmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9OwogCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwgbV9keTsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gRkVP
ZmZzZXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5OworICAgIGRlY29k
ZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFT2Zm
c2V0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LnR5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVPZmZzZXQ7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3
NGY5YzQ4N2ExNDRjLi42OTkyNDQzM2Y5M2ZlNGYyMWZlYmJhYmY0ODQ0NTg3NjZlZWU2Yzk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIkxp
Z2h0U291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKEZp
bHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxhckxp
Z2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQs
IHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
V1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVTcGVj
dWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNv
bnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExl
bmd0aFksIFdURk1vdmUoc291cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBG
RVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNwZWN1
bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBv
bmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgc291cmNlKQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3VyZmFj
ZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVTcGVj
dWxhckxpZ2h0aW5nKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdo
dGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFu
dCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNw
ZWN1bGFyTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpz
ZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1f
c3BlY3VsYXJDb25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9zcGVjdWxhckNvbnN0YW50ID0gc3BlY3VsYXJDb25zdGFudDsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKLXsKLSAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50
ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1
bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1Rl
eHRTdHJlYW0mIEZFU3BlY3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVTcGVjdWxhckxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VT
Y2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAic3BlY3VhbENv
bnN0YW50PVwiIiA8PCBtX3NwZWN1bGFyQ29uc3RhbnQgPDwgIlwiICIKICAgICAgICA8PCAic3Bl
Y3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJcIl1cbiI7Ci0KLSAg
ICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZl
Y3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQx
ZTQ3MzVkOWY0OTc5OGQzOTgxOGJmM2IyNDk1OGEuLmNhZTViODJmYmViYzVhYjYzNDM1NjkwNWU5
YmU3ZTZmM2YwMzJmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMjAgKzI4LDE0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGlj
IEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5n
PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVTcGVjdWxhckxp
Z2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25z
dCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCi0gICAgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQotICAgIGJvb2wg
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50
KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9Ci0gICAgYm9vbCBzZXRTcGVj
dWxhckV4cG9uZW50KGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVTcGVjdWxhckxpZ2h0aW5nKGNv
bnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gIkZFU3BlY3VsYXJMaWdodGluZyI7IH0KIAotcHJpdmF0ZToK
LSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNhMGM1ZGIyZmNhYzIw
YWQuLjgwYzI3NzlkZGFmYzQ4ODVkYjI0OGJjODhjNzE1MzgyOTk0OWZmYTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9z
c2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsODAgKzIy
LDQ2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVUaWxlLmgiCiAKLSNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikKLSAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitSZWY8RkVUaWxlPiBGRVRpbGU6
OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKCkpOwogfQogCi1S
ZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZFVGlsZTo6RkVUaWxl
KCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRVRpbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOwogfQogCi12b2lkIEZFVGlsZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRVRpbGU6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBp
cyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJl
Y3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8g
U291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhl
IGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7
Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24o
KTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxv
Y2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0
VHlwZVNvdXJjZUlucHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0
aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdl
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVS
ZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9k
ZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAg
dGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5N
YXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKSk7CisgICAg
Ly8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIGRyYXdpbmdSZWN0IGZvciA8ZmVUaWxlPi4KKyAgICBy
ZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOworfQogCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0g
SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAg
ICBpZiAoIXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybjsKK2Jvb2wgRkVUaWxlOjppc0Fs
cGhhSW1hZ2UoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7Cit9CiAKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1h
eEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworRmlsdGVyUmVzdWx0KiBGRVRp
bGU6OmFwcGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNr
LCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmls
dGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2su
aXNFbXB0eSgpKTsKKyAgICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKIAotICAgIGF1dG8g
cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCks
IHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKLSAgICBmaWx0ZXJDb250ZXh0LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVy
bikpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShv
dXRwdXQsIHsgaW4gfSwgbnVsbHB0ciwgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKIH0KIAotVGV4
dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVRp
bGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewotICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZSI7Ci0gICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29w
ZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKLQorICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZV1cbiI7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaAppbmRleCA0OWJkOTlmMDk0NDdkYWUxY2YwOWFmMTIzNThjNmRlODQw
Njg3NzE0Li43MzExYjUxOWNhZTkxMmQwYmYzODljYmQ4ZDkzZTc0ZGNlMjQwYmU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI3
ICsyMywyNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVU
aWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVRp
bGU+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAK
IHByaXZhdGU6Ci0gICAgRkVUaWxlKEZpbHRlciYpOworICAgIEZFVGlsZSgpOwogCiAgICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CiAK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVGlsZTsgfQorICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVj
dChjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNB
bHBoYUltYWdlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
KyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZpbHRlclJlc3VsdFZlY3Rv
ciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZp
bHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYWMyMzQ2ZThhNGJhNThh
YWE5MjRhNmQ2N2JkNWU0Yjc3ZGQyMjY4Zi4uNGQ5OTc2Y2JiZDYwNDExZTNjMzZhNjk0N2MzOTkx
ZTE5OTc1YWViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBw
bGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwzMSArMjYsMTkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0
cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEg
LSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5k
QW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0g
MjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wu
IDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGht
IHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0
aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGlj
IGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFu
ZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19y
YW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRp
YyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQg
c19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6
OmNyZWF0ZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRp
bGVzKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNl
RnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVz
KSk7Cit9CiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJi
dWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKLSAgICAsIG1fdHlwZSh0eXBl
KQorRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5
cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9j
dGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVUdXJidWxlbmNlKQorICAgICwgbV90dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlw
ZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VG
cmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMp
CkBAIC01OSw0MDUgKzQ3LDQ3IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYg
ZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAKLVJl
ZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBUdXJi
dWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsK
LX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKK2Jv
b2wgRkVUdXJidWxlbmNlOjpzZXRUdXJidWxlbmNlVHlwZShUdXJidWxlbmNlVHlwZSB0dXJidWxl
bmNlVHlwZSkKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVy
YnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0gICAg
aWYgKG1fYmFzZUZyZXF1ZW5jeVkgPT0gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV90dXJidWxlbmNlVHlwZSwgdHVyYnVs
ZW5jZVR5cGUpICE9IG1fdHVyYnVsZW5jZVR5cGU7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKIHsKLSAgICBpZiAobV9iYXNl
RnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Jhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkg
IT0gbV9iYXNlRnJlcXVlbmN5WDsKIH0KIAotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxv
YXQgc2VlZCkKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNl
RnJlcXVlbmN5WSkKIHsKLSAgICBpZiAobV9zZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3NlZWQgPSBzZWVkOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBz
dGQ6OmV4Y2hhbmdlKG1fYmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVxdWVuY3lZKSAhPSBtX2Jhc2VG
cmVxdWVuY3lZOwogfQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyhpbnQgbnVt
T2N0YXZlcykKIHsKLSAgICBpZiAobV9udW1PY3RhdmVzID09IG51bU9jdGF2ZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1PY3RhdmVzOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0
Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGlsZXMgPT0gc3RpdGNoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNp
b24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246Ci0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCi0KLS8vIENv
bXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVk
ZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBp
ZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Ci0K
LWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0
IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVk
IDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBz
X3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhp
bXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3IgKGludCBjaGFubmVsID0g
MDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGll
bnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICog
c19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAg
ICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAg
ICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRp
ZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7
Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0t
aSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0g
ICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7Ci0gICAg
ICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSAr
IDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxv
Y2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBm
b3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRkVUdXJi
dWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0
aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRp
bGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkg
LyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNo
RGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0Ci17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRp
b24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0g
ICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAg
ICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAg
ICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0
OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQg
LSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVy
bGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24p
OwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rp
b24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lk
IHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXpl
KQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChi
eDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0
Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQot
ICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3Np
dGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRq
dXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFw
WCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEu
d3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4MCAmPSBCTTsKLSAgICAvLyBieDEgJj0gQk07Ci0g
ICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0g
c19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Js
b2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07Ci0gICAgLy8gaiA9
IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOwotICAgIGludCBuZXh0TGF0dGljZUlu
ZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKLQot
ICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7Ci0gICAgLy8gc3kgPSBkb3VibGUoc19j
dXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7
Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOwotCi0gICAgYXV0
byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKLSAgICAgICAgLy8gYjAwID0g
dUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQotICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAv
LyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkw
ICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOwotICAgICAgICAvLyByeDEg
PSByeDAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwotICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFj
dGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0gICAgICAgIC8vIGEg
PSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07
Ci0gICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwot
ICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBx
WzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVku
ZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3Rv
cltqICsgYnkxXTsKLSAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsx
XTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOwotICAg
ICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24g
LSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxv
YXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIHJldHVy
biBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ks
IGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDIpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKLSAgICB9OwotfQotCi0vLyBodHRwczov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2Ny
aWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KLS8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6
OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1
KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8
dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAy
NTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fbnVtT2N0YXZlcywgbnVtT2N0YXZlcykgIT0gbV9udW1PY3RhdmVzOwogfQogCi1D
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgRkVU
dXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNlZWQpCiB7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZl
Y3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAq
IHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAg
IGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsK
LSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAg
ICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZl
Y3Rvci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZ
KG5vaXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlm
IChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4g
U3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAot
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1
KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlw
ZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9zZWVkLCBzZWVkKSAhPSBtX3NlZWQ7CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3QKK2Jvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhi
b29sIHN0aXRjaFRpbGVzKQogewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIElu
dFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdp
b24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgw
LCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5l
bCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52
ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBz
dGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBw
b2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBv
aW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRv
IHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdl
KHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAg
ICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zdGl0Y2hUaWxlcywgc3RpdGNoVGlsZXMpICE9IG1fc3Rp
dGNoVGlsZXM7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxS
ZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6ZHJh
d2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBwYXJh
bWV0ZXJzLT5maWx0ZXItPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJh
bWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMt
PnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lv
bjsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0
ZXJSZXN1bHQqIEZFVHVyYnVsZW5jZTo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRl
clJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25Q
aXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRT
aXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCku
c2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsK
LSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9z
ZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0
UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgp
OwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1U
aHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0g
c3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1U
aHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RG
OjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsK
LQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0byBudW1K
b2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVtSm9icyA+
IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpv
YnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhF
eHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9i
czsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2Jz
OwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxS
ZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAg
ICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBw
YXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJh
bXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0
WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwg
am9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJh
bXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3Rh
cnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxK
b2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVk
IG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBh
cmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIHJldHVybiBhcHBseVBs
YXRmb3JtKG91dHB1dCwgeyB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOwogfQog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5j
ZVR5cGUgdHlwZSkKQEAgLTQ3NiwxMSArMTA2LDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0
CitUZXh0U3RyZWFtJiBGRVR1cmJ1bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlVHVyYnVsZW5jZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0eXBl
KCkgPDwgIlwiICIKKyAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IHR1cmJ1bGVuY2VUeXBlKCkgPDwg
IlwiICIKICAgICAgICA8PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8
PCAiLCAiIDw8IGJhc2VGcmVxdWVuY3lZKCkgPDwgIlwiICIKICAgICAgICA8PCAic2VlZD1cIiIg
PDwgc2VlZCgpIDw8ICJcIiAiCiAgICAgICAgPDwgIm51bU9jdGF2ZXM9XCIiIDw8IG51bU9jdGF2
ZXMoKSA8PCAiXCIgIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKaW5kZXggNGQ1MzZiMzdhODBhYWRmOTExZWJmY2U4
OTc3NGNkM2NjZWNiNWNmYi4uMDAzNTUzNGFhMTNlMzQxZDk2MGQwNTdkZTg2MmMxOWRjMGUyMjQx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRh
IEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsOSArMjQsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDEwICszNiwxMCBAQCBl
bnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVUdXJidWxlbmNlIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNy
ZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBi
b29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGVuY2VUeXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIFR1cmJ1bGVuY2VUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldFR5cGUoVHVyYnVs
ZW5jZVR5cGUpOworICAgIFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90dXJidWxlbmNlVHlwZTsgfQorICAgIGJvb2wgc2V0VHVyYnVsZW5jZVR5cGUoVHVy
YnVsZW5jZVR5cGUpOwogCiAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVgoKSBjb25zdCB7IHJldHVy
biBtX2Jhc2VGcmVxdWVuY3lYOyB9CiAgICAgYm9vbCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7
CkBAIC01OSw3MCArNTcsMTkgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3RpdGNoVGlsZXMoYm9v
bCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsK
LSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0g
ICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0
IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwg
Y29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAg
ICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1
ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0g
ICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAg
IGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRT
aXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBm
bG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAg
ICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBk
ZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJh
Y3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1p
bmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAg
aW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgot
ICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBh
cmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKLSAgICAgICAgVWludDhD
bGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdE
YXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgICAgIGludCBzdGFydFk7
Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9u
V29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVy
JiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAg
RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRp
bGVzKTsKIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVUdXJidWxlbmNlIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUg
eyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkp
OyB9Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0
aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERh
dGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0
YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxS
ZWdpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShG
aWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9p
ZCopOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgVHVyYnVsZW5jZVR5cGUgbV90eXBl
OworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBUdXJi
dWxlbmNlVHlwZSBtX3R1cmJ1bGVuY2VUeXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7
CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WTsKICAgICBpbnQgbV9udW1PY3RhdmVzOwpAQCAt
MTMxLDQgKzc4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdlOWM5MTdlNGZjMDFjYzlhNmViYzg0M2QyYjVjNjM2ZmY0MzQyZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyOjpGaWx0ZXIoUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBUeXBlIHR5cGUpCisgICAgOiBGaWx0ZXJGdW5jdGlvbih0eXBl
KQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK3N0ZDo6dHVw
bGU8UmVmUHRyPEltYWdlQnVmZmVyPiwgRmxvYXRSZWN0PiBGaWx0ZXI6OmFwcGx5KEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIEZpbHRlclJlc3VsdFZlY3RvciBzdGFjazsKKyAgICBGaWx0ZXJP
dXRwdXQgb3V0cHV0KG1fcmVuZGVyaW5nTW9kZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGFwcGx5
KG91dHB1dCwgc3RhY2ssIHNvdXJjZUltYWdlLCAqZ2VvbWV0cnkpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmVzdWx0LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIHJldHVybiB7IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKSwgZ2VvbWV0cnktPmNv
bnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzdWx0LT5kcmF3aW5nUmVjdCgpKSB9OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCBhMmQ5OTc5M2IwZGIyMjU4YmM0NzZkZGNj
MjljMGNlMjYxMTBiYzFmLi4wMWFkN2QxMzY1NWY4YjY1YjBhYzdiNWJhYWFhMjQ0YWQzODMxMTcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNTkgKzIxLDI0
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlICJG
aWx0ZXJGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAi
UmVuZGVyaW5nTW9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlckVm
ZmVjdDsKK2NsYXNzIEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CisgICAgdXNpbmcg
RmlsdGVyRnVuY3Rpb246OmFwcGx5OwogCi1jbGFzcyBGaWx0ZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWx0ZXI+IHsKIHB1YmxpYzoKLSAgICBGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
YnNvbHV0ZVRyYW5zZm9ybSwgZmxvYXQgZmlsdGVyU2NhbGUgPSAxKQotICAgICAgICA6IG1fYWJz
b2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgICAgICwgbV9maWx0ZXJTY2Fs
ZShmaWx0ZXJTY2FsZSkKLSAgICB7IH0KLSAgICB2aXJ0dWFsIH5GaWx0ZXIoKSA9IGRlZmF1bHQ7
Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJ
bWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KLSAgICBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9Ci0K
LSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVy
UmVzb2x1dGlvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNp
emUmIGZpbHRlclJlc29sdXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1
dGlvbjsgfQotCi0gICAgZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
clNjYWxlOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRl
clNjYWxlID0gc2NhbGU7IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Ci0KICAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KLSAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwg
RmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3Qg
eyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rk
Ojp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSBjb25zdDsK
IAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRl
clJlc29sdXRpb24pCi0gICAgICAgIDogbV9maWx0ZXJSZXNvbHV0aW9uKGZpbHRlclJlc29sdXRp
b24pCi0gICAgewotICAgIH0KKyAgICBGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgVHlwZSk7CiAKLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwotICAgIEZsb2F0
U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVU
cmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkIH07Ci0gICAgZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKKyAg
ICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyQm91bmRhcnlTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODY3MDExYzQ5NDk5MjVi
N2FlZjgzZDY2YmUwMDcwNzE1OWI3M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCkBAIC0wLDAg
KzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyQm91bmRhcnlT
ZXQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgRmxhZ3MgeworICAgICAgICBIYXNYICAgICAg
PSAxIDw8IDAsCisgICAgICAgIEhhc1kgICAgICA9IDEgPDwgMSwKKyAgICAgICAgSGFzV2lkdGgg
ID0gMSA8PCAyLAorICAgICAgICBIYXNIZWlnaHQgPSAxIDw8IDMKKyAgICB9OworCisgICAgRmls
dGVyQm91bmRhcnlTZXQoKSA9IGRlZmF1bHQ7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldChjb25z
dCBGbG9hdFJlY3QmIGJvdW5kYXJpZXMsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgICAg
IDogbV9ib3VuZGFyaWVzKGJvdW5kYXJpZXMpCisgICAgICAgICwgbV9mbGFncyhmbGFncykKKyAg
ICB7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9ib3VuZGFyaWVzLngoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNZKSkKKyAgICAgICAgICAgIHJldHVybiBt
X2JvdW5kYXJpZXMueSgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4g
bV9ib3VuZGFyaWVzLndpZHRoKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gaGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNIZWlnaHQpKQorICAgICAgICAgICAg
cmV0dXJuIG1fYm91bmRhcmllcy5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fYm91bmRhcmllczsKKyAgICBP
cHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1MWMzNDhlYzdmNjNlNGNj
OTI3ZGIxMDguLjg4ZThmY2YyZDYzZmIwMDFkNmQ3MmM1NzI5ZDA3NDhmOTYzNjgyOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI0LDY2MCArMjQsOTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisjaW5jbHVkZSAiRmls
dGVyUmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgPGFy
bV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2Vs
ZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmls
dGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIsIFR5cGUgdHlwZSkKLSAgICA6
IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKHR5cGUpCi17
Ci19Ci0KLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBtX2Fic29s
dXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1
dEVmZmVjdHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZWZmZWN0LT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLX0KLQotdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgLy8gRmlsdGVy
cyBpbiBTVkcgY2xpcCB0byBwcmltaXRpdmUgc3VicmVnaW9uLCB3aGlsZSBDU1MgZG9lc24ndC4K
LSAgICBpZiAobV9jbGlwc1RvQm91bmRzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0Lmlu
dGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZm
ZWN0UmVjdCkpOwotfQotCi1GbG9hdFBvaW50IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCB1c2VyU3BhY2VQb2ludCkgY29uc3QKLXsKLSAgICBG
bG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQb2ludCh1c2VyU3BhY2VQb2ludCwgbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24pOwotICAg
IGFic29sdXRlUG9pbnQubW92ZUJ5KC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwot
ICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OwotfQotCi1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3Qp
IGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFpbnRSZWN0Lmxv
Y2F0aW9uKCk7Ci0gICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwot
ICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OnBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRh
cnlTZXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICBGbG9hdFJlY3Qg
ZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIHNjYWxl
KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnNjYWxl
KHNjYWxlKS50cmFuc2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAg
cmV0dXJuIHRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIC8vIEZF
VGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFr
ZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVjdCBzdWJyZWdp
b247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3Rz
KCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gaW5w
dXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmlt
aXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9CisgICAgLy8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdz
IHN1YnJlZ2lvbiBmb3IgPGZlVGlsZT4uCisgICAgaWYgKCFpbnB1dHMuaXNFbXB0eSgpICYmIHR5
cGUoKSAhPSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkgeworICAgICAgICBmb3IgKGF1dG8m
IGlucHV0IDogaW5wdXRzKQorICAgICAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi51
bml0ZShpbnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOwogICAgIH0gZWxzZQotICAgICAgICBz
dWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgLy8g
QWZ0ZXIgY2FsbGluZyBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gb24gdGhlIHRh
cmdldCBlZmZlY3QsIHJlc2V0IHRoZSBzdWJyZWdpb24gYWdhaW4gZm9yIDxmZVRpbGU+LgotICAg
IGlmIChmaWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAg
IHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICBh
dXRvIGJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzKCk7Ci0gICAgaWYgKGhhc1goKSkKLSAg
ICAgICAgc3VicmVnaW9uLnNldFgoYm91bmRhcmllcy54KCkpOwotICAgIGlmIChoYXNZKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRZKGJvdW5kYXJpZXMueSgpKTsKLSAgICBpZiAoaGFzV2lkdGgo
KSkKLSAgICAgICAgc3VicmVnaW9uLnNldFdpZHRoKGJvdW5kYXJpZXMud2lkdGgoKSk7Ci0gICAg
aWYgKGhhc0hlaWdodCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJpZXMu
aGVpZ2h0KCkpOwotCi0gICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7
Ci0KLSAgICBhdXRvIGFic29sdXRlU3VicmVnaW9uID0gbV9maWx0ZXIuYWJzb2x1dGVUcmFuc2Zv
cm0oKS5tYXBSZWN0KHN1YnJlZ2lvbik7Ci0gICAgYXV0byBmaWx0ZXJSZXNvbHV0aW9uID0gbV9m
aWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpOwotICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZp
bHRlclJlc29sdXRpb24pOwotICAgIC8vIFNhdmUgdGhpcyBiZWZvcmUgY2xpcHBpbmcgc28gd2Ug
Y2FuIHVzZSBpdCB0byBtYXAgbGlnaHRpbmcgcG9pbnRzIGZyb20gdXNlciBzcGFjZSB0byBidWZm
ZXIgY29vcmRpbmF0ZXMuCi0gICAgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oYWJzb2x1
dGVTdWJyZWdpb24pOwotCi0gICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBm
aWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2Zp
bHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2Fs
ZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJz
b2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwotCi0gICAgc2V0TWF4RWZmZWN0UmVjdChhYnNvbHV0
ZVN1YnJlZ2lvbik7Ci0gICAgcmV0dXJuIHN1YnJlZ2lvbjsKLX0KLQotRmlsdGVyRWZmZWN0KiBG
aWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKLXsKLSAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihudW1iZXIgPCBtX2lucHV0RWZmZWN0cy5z
aXplKCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwotfQot
Ci1zdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KmVmZmVj
dCwgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKLXsKLSAgICBhbGxF
ZmZlY3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPm51bWJlck9m
RWZmZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKLSAg
ICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0KLSAgICByZXR1cm4g
YWxsRWZmZWN0cy5zaXplKCk7Ci19Ci0KLXVuc2lnbmVkIEZpbHRlckVmZmVjdDo6dG90YWxOdW1i
ZXJPZkVmZmVjdElucHV0cygpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZl
Y3QqPiBhbGxFZmZlY3RzOwotICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZl
Y3RzKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKLXsKLSAgICBpZiAoaGFzUmVz
dWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVj
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpOwotICAg
ICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRvIHRoZSBj
dXJyZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKGluLCBpKTsKLSAgICB9CisgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24g
PSBnZW9tZXRyeS5maWx0ZXJSZWdpb24oKTsKIAotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwor
ICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb247CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBt
X2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBt
X2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8
IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAi
IDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhF
ZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9uICIgPDwgbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlv
bigpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WChib3VuZGFyeVNldC54KCkudmFsdWVf
b3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi54KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdp
b24uc2V0WShib3VuZGFyeVNldC55KCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lv
bi55KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcnlTZXQud2lk
dGgoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLndpZHRoKCkpKTsKKyAgICBw
cmltaXRpdmVTdWJyZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJ5U2V0LmhlaWdodCgpLnZhbHVlX29y
KGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24uaGVpZ2h0KCkpKTsKIAotICAgIGlmIChtX2Fic29s
dXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNv
cnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAgIH0KLSAgICAKLSAgICAvLyBBZGQgcGxh
dGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgot
ICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5pbnRl
cnNlY3QoZ2VvbWV0cnkuZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJy
ZWdpb247CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVjdChjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICAvLyBNdXN0IG9w
ZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2
ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7
Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0g
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYg
aW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0LT5kcmF3aW5n
UmVjdCgpKTsKIAotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKLQotICAgIC8vIEl0
ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9y
IGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsK
LSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKLSAgICAgICAgdWlu
dDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25l
bnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCi0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+
IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAgICAgICAgICArK3BpeGVs
RGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCi0gICAgICAg
ICsrcGl4ZWxEYXRhOwotICAgIH0KKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvUHJpbWl0aXZl
U3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQorRmlsdGVyUmVzdWx0KiBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBhcHBseShvdXRwdXQsIHN0YWNrLCBz
b3VyY2VJbWFnZSwgZ2VvbWV0cnksIEZpbHRlckJvdW5kYXJ5U2V0KCkpOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKK0ZpbHRlclJlc3VsdCogRmlsdGVy
RWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlck91dHB1dCYgb3V0cHV0LCBjb25zdCBGaWx0ZXJS
ZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNl
dCkgY29uc3QKIHsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRo
ZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4g
ZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0g
ICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVj
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsK
LX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQotewot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4
aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOworICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gdGhpcy0+
cHJpbWl0aXZlU3VicmVnaW9uKGlucHV0cywgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKKyAgICBh
dXRvIGRyYXdpbmdSZWN0ID0gdGhpcy0+ZHJhd2luZ1JlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJp
bWl0aXZlU3VicmVnaW9uKTsKKyAgICBhdXRvIGFic29sdXRlRHJhd2luZ1JlY3QgPSBnZW9tZXRy
eS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGRyYXdpbmdSZWN0KTsKIAotICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCks
IG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1faW1h
Z2VCdWZmZXJSZXN1bHQpCisgICAgaWYgKGFic29sdXRlRHJhd2luZ1JlY3QuaXNFbXB0eSgpIHx8
IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZURyYXdpbmdSZWN0LnNpemUo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJl
Y3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0
UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Qp
OwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIo
Km1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAg
SW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZSht
X2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6
ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkg
PSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7
Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICBy
ZXR1cm4gcGl4ZWxBcnJheTsKLX0KKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMtPmlzQWxw
aGFJbWFnZShpbnB1dHMpOworICAgIGF1dG8gcmVzdWx0Q29sb3JTcGFjZSA9IHRoaXMtPnJlc3Vs
dENvbG9yU3BhY2UoaW5wdXRzKTsKIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJF
ZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBz
Y2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJl
Y29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYg
KCFwaXhlbEFycmF5KQorICAgIGF1dG8gcmVzdWx0ID0gb3V0cHV0LmNyZWF0ZUZpbHRlclJlc3Vs
dChwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBpc0FscGhhSW1hZ2UsIGFic29sdXRl
RHJhd2luZ1JlY3Quc2l6ZSgpLCByZXN1bHRDb2xvclNwYWNlKTsKKyAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBp
eGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2Fs
ZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVk
UGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRo
ZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVy
ZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJl
Y3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
IHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAg
ICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0K
LSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGgg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0
Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
IHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERl
c3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2lu
OwotICAgICAgICB4T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0
Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAg
ICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9IHNj
YWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7
Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0K
LSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVk
UGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdo
dCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVz
dGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJj
ZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVj
dC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwg
PSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsg
eE9yaWdpbikgKiA0OwogCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1l
bWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwg
Kz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5w
dXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlu
cHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53
aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVp
Z2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwot
ICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEo
KSk7Ci0KLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50
ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25l
bnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGlu
YXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNl
Q29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFsz
XTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0YXRp
YyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBp
bnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0g
aW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3Jj
LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5o
ZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZl
ciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0Lmhl
aWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7
Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0
YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBv
bmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29t
cG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotICAgIHdoaWxlIChzb3Vy
Y2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50
WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
MDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VD
b21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICBM
T0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3Qg
IiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseVBsYXRmb3JtKCk6Igor
ICAgICAgICA8PCAiXG4gIHByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IHByaW1pdGl2ZVN1YnJlZ2lv
bgorICAgICAgICA8PCAiXG4gIGRyYXdpbmdSZWN0ICIgPDwgZHJhd2luZ1JlY3QKKyAgICAgICAg
PDwgIlxuICBhYnNvbHV0ZURyYXdpbmdSZWN0ICIgPDwgYWJzb2x1dGVEcmF3aW5nUmVjdAorICAg
ICAgICA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9uICIgPDwgZ2VvbWV0cnkucmVzb2x1dGlvbigp
KTsKKworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChvdXRwdXQucmVuZGVyaW5nTW9kZSgp
ID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7CisgICAgICAgIGlmIChhcHBseUNvcmVJ
bWFnZSgqcmVzdWx0LCBpbnB1dHMsIHNvdXJjZUltYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQubGVha1JlZigpOwogICAgIH0KICNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVy
Zm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRv
IGl0IGRpcmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwg
cGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUg
YW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0
YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZv
cm1hdCgpLmFscGhhRm9ybWF0KTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmls
dGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIs
IGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFG
b3JtYXQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1
c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRl
IGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUg
Q0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmlu
Z01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBp
bnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgot
ICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZl
ciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxw
aGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJl
dHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Ci19Ci0K
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9u
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVk
IGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShj
b2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4
ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIg
aXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBp
eGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
LXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAg
aWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBh
IGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0
ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoYXBwbHlTb2Z0d2FyZSgqcmVzdWx0
LCBpbnB1dHMsIHNvdXJjZUltYWdlLCBnZW9tZXRyeSkpCisgICAgICAgIHJldHVybiByZXN1bHQu
bGVha1JlZigpOwogCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29s
b3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0p
OwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5w
dXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAg
aW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNv
bG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwg
aW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWlu
Z0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRp
b24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorVGV4dFN0cmVhbSYgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxp
ZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdl
IGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAg
IGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkp
IHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09
IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNj
YWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3Vs
dENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRT
aXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBp
eGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHJlY3QpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAg
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
LmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0g
ICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBl
ZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwg
bV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYg
RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9H
KEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUg
aXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAg
IEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJl
c3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6
ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8v
IE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQo
KSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAo
bV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3Bh
Y2UgfTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRl
c3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlv
biBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBz
cGFjZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNp
b24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8g
QU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4g
ZGVzdGluYXRpb25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRp
b25Db2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b25Db2xvclNwYWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0
ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENH
IGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURf
UEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQo
KSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkg
dW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xv
ciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJh
eXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlv
bkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxs
b3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2Vu
ZGlmCi19Ci0KLVRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2Yg
dGhlIGZpbHRlciBwcmltaXRpdmVzIGhlcmUgbGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3Nz
aWJsZSBhdCB0aGUgbW9tZW50LCBiZWNhdXNlIHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1h
dGlvbnMgZnJvbSB0aGUgdGFyZ2V0IG9iamVjdC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRp
b25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CisgICAgaWYgKHJlcHJl
c2VudGF0aW9uID09IEZpbHRlclJlcHJlc2VudGF0aW9uOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImFscGhhIGltYWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9y
U3BhY2UpOwogICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJu
IHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBG
aWx0ZXJFZmZlY3QmIGZpbHRlcikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ug
d2Ugd2FudCBtdWx0aWxpbmUgbW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJl
YW0gZmlsdGVyU3RyZWFtOwotICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRl
clN0cmVhbSwgRmlsdGVyRWZmZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0g
ICAgCi0gICAgcmV0dXJuIHRzIDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2Uy
Y2YwNWI1Mjc3M2YyYjk2YjQ3MWMuLjVlNGFmZDJjNjFlNGZiZWFiZWFhY2ZkZTlhYzUxMzc0Yzk4
ZDA0YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjIsMjM3ICsyMiw1MyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEZXN0
aW5hdGlvbkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRl
cjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZp
bHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRl
ckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJF
ZmZlY3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldDsKK2NsYXNz
IEZpbHRlckdlb21ldHJ5OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5j
dGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAg
IEJsZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIs
Ci0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERp
ZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hh
ZG93LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFn
ZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5
LAotICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRp
bGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBT
b3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAg
IHZvaWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAg
IHZvaWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
PSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmls
dGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVt
YmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7
IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7Ci0gICAg
Ci0gICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRo
aXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5
IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0Ci0gICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0K
LSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29u
c3QgSW50UmVjdCYpIGNvbnN0OwotICAgIAotICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KLSAg
ICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAv
LyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgYm9v
bCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICB2b2lk
IHNldElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJ
bWFnZTsgfQotCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fYWJzb2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBh
YnNvbHV0ZVBhaW50UmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVm
ZmVjdFJlY3Q7IH0gCi0KLSAgICB2b2lkIGFwcGx5KCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFueSBp
bnZhbGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9w
ZXJhdGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhl
bCB2YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBP
bmx5IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3Jt
IGNvcnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7
Ci0KLSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91
dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQotCi0gICAgZW51
bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKLSAg
ICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RP
dXRwdXQpIGNvbnN0OwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBz
cGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LgotICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZv
aWQgc2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhh
c1koKSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1
ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9o
YXNXaWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hh
c0hlaWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2
b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0ID0gMDsKIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVz
KGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMg
PSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNvbHV0
ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJl
Z2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIAotICAgIFR5cGUgZmls
dGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5
cGU7IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBj
b25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBi
b29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAg
ICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2
YWx1ZTsgfQotCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xv
clNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0K
LSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVz
dWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsg
bV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGlu
LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAg
ICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+
IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVl
c1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFs
aXplZFZhbHVlczsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVy
JiwgVHlwZSk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgPSAwOwogCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIHZpcnR1YWwgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJP
dXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCA9IDA7CiAKLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICAvLyBJZiBhIHByZS1t
dWx0aXBsaWVkIGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJl
Y3QgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMo
KTsKLQotICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Citwcm90ZWN0ZWQ6CisgICAg
dXNpbmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CisgICAgRmxvYXRSZWN0IHBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0OwogCi0gICAg
dm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2
b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rl
c3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9y
U3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZm
ZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXIm
LCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0gICAgCisgICAgdmlydHVhbCBG
bG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0OwogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3Ig
bV9pbnB1dEVmZmVjdHM7CisgICAgdmlydHVhbCBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgRmlsdGVyUmVzdWx0KiBh
cHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmluYWw7CiAKLSAg
ICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIG1heGltdW0g
c2l6ZSBvZiBhIGZpbHRlciBwcmltaXRpdmUuIEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUg
c3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgLy8gVGhlIGFic29s
dXRlIHBhaW50IHJlY3Qgc2hvdWxkIG5ldmVyIGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVj
dC4KLSAgICBGbG9hdFJlY3QgbV9tYXhFZmZlY3RSZWN0OwotICAgIAotICAgIC8vIFRoZSBzdWJy
ZWdpb24gb2YgYSBmaWx0ZXIgcHJpbWl0aXZlIGFjY29yZGluZyB0byB0aGUgU1ZHIEZpbHRlciBz
cGVjaWZpY2F0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaXMgU1ZHIHNw
ZWNpZmljIGFuZCBuZWVkcyB0byBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLgotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGaWx0
ZXJSZXN1bHQqIGFwcGx5UGxhdGZvcm0oRmlsdGVyT3V0cHV0JiwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0OwogCi0gICAgLy8geCwgeSwg
d2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0
byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZl
IG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAg
IHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3QgPSAwOwogICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbiBtYXBwZWQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgotICAg
IEZsb2F0UmVjdCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uOwotCi0gICAgYm9vbCBtX2Fs
cGhhSW1hZ2UgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNYIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzWSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1dpZHRoIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faGFzSGVpZ2h0IHsgZmFsc2UgfTsKLQotICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNs
aXAgdG8gaXRzIHByaW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVk
IHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgotICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9
OwotCi0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKLSAgICBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkgfTsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlDb3JlSW1h
Z2UoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIq
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCi0gICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07
CiAgICAgCi0gICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsKKyAgICBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkgfTsKIH07CiAKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkZpbHRlckVmZmVjdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi50eXBlKCkgPj0gV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWluaW11bSAmJiBmdW5jdGlvbi50eXBlKCkg
PD0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWF4aW11bTsgfQorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhODU1Y2RiOTYzMTdiODJkZTM1NjdmYzMxZTVi
OWU5YTllYzYwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJl
bmRlcmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0qIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRl
cmVyLmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5
Q3JlYXRlKGJvb2wgYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkLCBGaWx0ZXJFZmZl
Y3QmIGxhc3RFZmZlY3QpCi17Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAgaWYgKGFjY2VsZXJh
dGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUobGFzdEVmZmVjdCk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpOwotICAgIFVOVVNFRF9Q
QVJBTShsYXN0RWZmZWN0KTsKLSNlbmRpZgotICAgIHJldHVybiBudWxscHRyOwotfQotCi0KLX0g
Ly8gbmFtc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3
M2U5Y2M0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXI+IHRyeUNyZWF0ZShib29sLCBGaWx0ZXJFZmZlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzUmVzdWx0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIG91dHB1
dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0
ZXJFZmZlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgPSAw
OwotICAgIAotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0Owot
ICAgIAotcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0Owot
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc1ZjRjODMyY2UzYWUxNmQ5ZWE5MjA5Y2Y4NzJlZGI3OGMwY2I3OTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdFZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRWZmZWN0Owor
Cit1c2luZyBGaWx0ZXJFZmZlY3RWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI3
OTc0NDQ2NWQxZWM5YWNlNjQyN2RmOTk4ZDZjYzY0OTYzM2I2MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24u
aApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlclJlcHJlc2VudGF0aW9u
LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0VmVjdG9yLmgiCisjaW5jbHVkZSAiSW50UmVjdEV4
dGVudC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Y2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0
ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlck91dHB1dDsKK2NsYXNzIEltYWdlQnVmZmVyOworCitj
bGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7
CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIENTU0Zp
bHRlciwKKyAgICAgICAgU1ZHRmlsdGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKworICAgICAg
ICBGRUJsZW5kID0gRkVNaW5pbXVtLAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAgICAgICBG
RUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAgRkVDb252
b2x2ZU1hdHJpeCwKKyAgICAgICAgRkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZFRGlzcGxh
Y2VtZW50TWFwLAorICAgICAgICBGRURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2QsCisgICAg
ICAgIEZFR2F1c3NpYW5CbHVyLAorICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1lcmdlLAor
ICAgICAgICBGRU1vcnBob2xvZ3ksCisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBGRVNwZWN1
bGFyTGlnaHRpbmcsCisgICAgICAgIEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNlLAorICAg
ICAgICBTb3VyY2VBbHBoYSwKKyAgICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAgICBGRU1h
eGltdW0gPSBTb3VyY2VHcmFwaGljCisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9uKFR5cGUg
dHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29u
c3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIEZpbHRlclJlc3VsdCogYXBwbHkoRmls
dGVyT3V0cHV0JiwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0ID0gMDsKKyAgICAKKyAgICB2aXJ0
dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZpbHRlclJlcHJlc2VudGF0aW9uOjpUZXN0T3V0
cHV0KSBjb25zdCA9IDA7CisgICAgCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0
ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAg
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVT
cGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxl
bmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE2YTQ0ZTY0YTFkZjJmZDc3MmUzY2Y2MTdkM2M0MDA2NDc4Nzg1YTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdl
b21ldHJ5LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeShjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QpCisgICAgICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICAgICAsIG1f
c291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB+RmlsdGVyR2VvbWV0cnkoKSA9IGRlZmF1bHQ7CisKKyAgICBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICBGbG9hdFJlY3Qg
c291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgcmVzb2x1dGlvbigpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgRmlsdGVyQm91bmRhcnlTZXQgYm91bmRhcnlTZXQo
RmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZs
b2F0UmVjdCYgZHJhd2luZ1JlY3QpIGNvbnN0IHsgcmV0dXJuIGRyYXdpbmdSZWN0OyB9CisgICAg
dmlydHVhbCBGbG9hdFNpemUgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9h
dFNpemUmIGRyYXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorCisgICAg
RmxvYXRSZWN0IGNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRS
ZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxvYXRSZWN0JiByZXN1bHRSZWN0KSBjb25zdAorICAg
IHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICAgICAgaW1hZ2VS
ZWN0Lm1vdmVCeSgtcmVzdWx0UmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1hZ2VSZWN0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIGRy
YXdpbmdTaXplKSBjb25zdCB7IHJldHVybiBkcmF3aW5nU2l6ZTsgfQorICAgIAorICAgIHZpcnR1
YWwgRmxvYXRTaXplIHJlc29sdmVUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXpl
JiBkcmF3aW5nU2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x2ZWREcmF3aW5n
UmVjdCA9IHJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKGRyYXdpbmdTaXplKTsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzb2x2ZWREcmF3aW5nUmVjdCk7
CisgICAgfQorCisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9u
KGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBGbG9hdFJlY3QgbV9maWx0
ZXJSZWdpb247CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlZmRhOGNkNjVj
YzA4MzU4YTg3MGY5ZWNmNTQzMjA3YTVmMTBhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck91dHB1dC5jcHAKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCisKKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlck91dHB1dDo6RmlsdGVyT3V0cHV0KFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQor
eworfQorCitSZWZQdHI8RmlsdGVyUmVzdWx0PiBGaWx0ZXJPdXRwdXQ6OmNyZWF0ZUZpbHRlclJl
c3VsdChjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBkcmF3aW5nUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBy
ZXR1cm4gRmlsdGVyUmVzdWx0OjpjcmVhdGUocHJpbWl0aXZlU3VicmVnaW9uLCBkcmF3aW5nUmVj
dCwgaXNBbHBoYUltYWdlLCBsb2dpY2FsU2l6ZSwgbV9yZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNw
YWNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPdXRwdXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0cHV0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjNjOGZiMWU2ZDNhM2NkYzEzOGQ5Yjg5MDk4MWZiZDRjYjc0MGYyMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3V0
cHV0LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyUmVzdWx0OworY2xhc3MgRmlsdGVyRnVuY3Rp
b247CisKK2NsYXNzIEZpbHRlck91dHB1dCB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzdWx0cyA9
IEhhc2hNYXA8UmVmPGNvbnN0IEZpbHRlckZ1bmN0aW9uPiwgUmVmPEZpbHRlclJlc3VsdD4+Owor
CisgICAgRmlsdGVyT3V0cHV0KFJlbmRlcmluZ01vZGUpOworCisgICAgUmVzdWx0cyYgcmVzdWx0
cygpIHsgcmV0dXJuIG1fcmVzdWx0czsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQorCisgICAgUmVmUHRyPEZpbHRl
clJlc3VsdD4gY3JlYXRlRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jik7CisKK3ByaXZhdGU6CisgICAgUmVzdWx0cyBtX3Jlc3VsdHM7CisgICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJl
c2VudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlclJlcHJlc2VudGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRiZmY3ZDgwNDdjZWY5ZWY2M2EzNmVj
YzM1ZTVlOWIyMDExY2VlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaApAQCAtMCwwICsxLDM1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBGaWx0ZXJSZXByZXNl
bnRhdGlvbiA6IHVpbnQ4X3QgeworICAgIFRlc3RPdXRwdXQsCisgICAgRGVidWdnaW5nCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmUx
NzRiYTg1N2FiMDZkODU3ZTg0ZDk4MTAwN2M0ZWY4M2FlMjM1MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNw
cApAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorI2luY2x1ZGUgIkZpbHRlclJlc3VsdENvcmVJ
bWFnZS5oIgorI2VuZGlmCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVk
ZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8
QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWZQdHI8RmlsdGVyUmVzdWx0PiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgYm9v
bCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5p
c0VtcHR5KCkgfHwgZHJhd2luZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxT
aXplKSk7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bHRlclJlc3VsdENvcmVJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBpc0Fs
cGhhSW1hZ2UsIGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UpKTsKKyNlbmRpZgorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlclJlc3Vs
dFNvZnR3YXJlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGlzQWxwaGFJbWFnZSwg
bG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkp
OworfQorCitGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdChjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgYm9vbCBpc0FscGhh
SW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UpCisgICAgOiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJy
ZWdpb24pCisgICAgLCBtX2RyYXdpbmdSZWN0KGRyYXdpbmdSZWN0KQorICAgICwgbV9pc0FscGhh
SW1hZ2UoaXNBbHBoYUltYWdlKQorICAgICwgbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAg
ICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9
CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dC
eXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOwor
ICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1
dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRh
dGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAg
ZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJv
d0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0
aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNl
Q29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3Vy
Y2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisgICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRp
ZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVf
dCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIg
c3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAg
c3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRl
cyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRl
c3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7
CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7
CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEg
PSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSAwOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7
CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyUmVzdWx0OjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRl
clJlc3VsdDo6cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkK
K3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3Jt
YXQpOworICAgIGlmIChwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52
YWx1ZSgpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9jb2xvclNwYWNlIH07CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICBwaXhlbEJ1ZmZlciA9IGlt
YWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgSW50U2l6ZSht
X2xvZ2ljYWxTaXplKSB9KTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cisg
ICAgfQorICAgIAorICAgIEludFNpemUgc2NhbGVkU2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAg
c2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9
IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAg
ICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBzY2FsZWRTaXplKTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7
CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gRmlsdGVyUmVzdWx0OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZs
b3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlclJlc3VsdDo6cmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVy
c2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAv
LyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVy
biBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAg
Ly8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9u
LUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCit2b2lkIEZpbHRlclJlc3VsdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsK
KyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUg
c2NhbGVkUGFpbnRTaXplKG1fbG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
KyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAg
IGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAg
aW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2Fu
bGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4
ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0
OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwg
Kz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nh
bmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlclJlc3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QK
K3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3Jy
ZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVy
dGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29s
b3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20g
b25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9y
U3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVy
KGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlclJl
c3VsdDo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxC
dWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWlu
ZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25T
Y2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+
cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0
ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKK30KKwordm9pZCBGaWx0ZXJSZXN1bHQ6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4
aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFs
dWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAg
ICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVy
LgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKG1fbG9naWNhbFNpemUpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVy
dGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFs
cGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJ
bWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNS
ZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsK
KyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAg
ICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdl
Qnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2
b2lkIEZpbHRlclJlc3VsdDo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7Cisg
ICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1h
dHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGlt
YWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4
X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVu
Z3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5
dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJy
YXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYg
KHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0g
cGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWlu
dDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAg
ICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwg
c2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0g
PSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwor
ICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxz
LnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4
ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAg
ICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFy
cmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhl
bEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVj
a2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Cisg
ICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0
aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsK
KyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQg
dGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7
CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVs
RGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAv
LyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwor
dm9pZCBGaWx0ZXJSZXN1bHQ6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xv
ciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNw
YWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkg
dW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xv
ciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJh
eXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAg
ICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UsIGNvbG9y
U3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBp
eGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2ZDg1NzZlNTU1YjEzMjVhYzRkODg5OWNm
ZGFhOTI1MDkxMDE2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlQnVmZmVyOworY2xhc3MgUGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlclJlc3Vs
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlclJlc3VsdD4geworcHVibGljOgorICAgIHN0YXRp
YyBSZWZQdHI8RmlsdGVyUmVzdWx0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGJvb2wgaXNBbHBoYUltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgdmlydHVh
bCB+RmlsdGVyUmVzdWx0KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1
YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nUmVjdDsgfQorICAg
IGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KKwor
ICAgIEZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7
IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
bmRlcmluZ01vZGU7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgUmVmUHRy
PEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpID0gMDsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAg
IFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKKyAgICAKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAg
ICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitw
cm90ZWN0ZWQ6CisgICAgRmlsdGVyUmVzdWx0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wgcmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBn
ZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVm
ZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25z
dDsKKworICAgIEZsb2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFJlY3Qg
bV9kcmF3aW5nUmVjdDsKKyAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsKKworICAg
IEZsb2F0U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdN
b2RlOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBtX2NvbG9yU3BhY2U7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3Vu
cHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJSZXN1bHRWZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjgzMTUxYjk4MjRmNjIyOWZk
YjQ5ZmIwNTY3MmY4M2M3NmY1Y2FmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0VmVjdG9yLmgKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaWx0ZXJSZXN1bHQ7CisKK3VzaW5nIEZpbHRlclJlc3VsdFZlY3RvciA9
IFZlY3RvcjxSZWY8RmlsdGVyUmVzdWx0Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3
OTEyOGY1NGI0NGIuLjRiYzZiYzcxYzg1ZGZiMWFlMzkxZGViMjQzZGM4MTQ1NzVkYjBjMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApAQCAtMzYsMTIgKzM2LDEyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNv
bnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2lu
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0g
ICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3Np
dGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBv
c2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9u
LnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZl
clBvc2l0aW9uLngoKSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVj
dC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkp
KTsKKy8vICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNw
YWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCisvLyAgICBGbG9hdFBvaW50IG1h
cHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnkoKSB9KTsKKy8vICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngo
KSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKIH0KIAogTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGln
aHRpbmdEYXRhIFBvaW50TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFk
NmNmM2EzLi40YzhkNTI4YTI0YzI0OTViZTgxYTJlNjQyNzRmNDMwNGIzYWQzMWRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjAg
KzIxLDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIK
IAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyT3V0cHV0LmgiCiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYg
c291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYSgpKTsKIH0KIAotY29uc3QgQXRvbVN0
cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhh
KCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMg
TWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgi
U291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0
dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQorY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUo
KQogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBo
YTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogU291cmNlQWxwaGE6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJl
c3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyID0gaW5wdXRFZmZlY3QoMCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5y
ZXN1bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBG
bG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2sp
OwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9p
bnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworICAgIHJldHVybiBhcHBs
eVBsYXRmb3JtKG91dHB1dCwgeyBpbiB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQp
OwogfQogCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291
cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhh
XVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0
ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3Qu
ZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3Rz
KCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4u
Mzg5ZWNiM2JmY2Q2NDQ1ZjU2ZTY3YjI1OGJjNjRlNWIxZmIyNTEwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9o
Ci0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAK
LSAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CisgICAg
c3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQXRv
bVN0cmluZyYgZWZmZWN0TmFtZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFs
cGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsg
fQorICAgIFNvdXJjZUFscGhhKCk7CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0
b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wg
YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlu
cHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlk
ZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzEx
MDdkNzgzOTJlOS4uODhmNjVmZmUzY2YxZGVmYjczOGQ3NjY5MTM0Yjc4OTM3MmY2ZGUzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMCwxOCArMjEsMjIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VH
cmFwaGljLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1
dC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitSZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhp
Yzo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKCkp
OworfQorCitTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVj
dChUeXBlOjpTb3VyY2VHcmFwaGljKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJj
ZUdyYXBoaWMoZmlsdGVyKSk7CiB9CiAKIGNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUdyYXBoaWM6
OmVmZmVjdE5hbWUoKQpAQCAtNDAsMjcgKzQ1LDIwIEBAIGNvbnN0IEF0b21TdHJpbmcmIFNvdXJj
ZUdyYXBoaWM6OmVmZmVjdE5hbWUoKQogICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZv
aWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0
IFNvdXJjZUdyYXBoaWM6OmRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsK
LSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIEZsb2F0UmVjdCBwYWlu
dFJlY3QgPSBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7Ci0gICAgcGFpbnRSZWN0LnNjYWxlKGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChw
YWludFJlY3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuc291cmNlSW1hZ2VSZWN0KCk7CiB9CiAK
LXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3Vs
dCogU291cmNlR3JhcGhpYzo6YXBwbHkoRmlsdGVyT3V0cHV0JiBvdXRwdXQsIEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7
Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLQotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJ
bWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBvdXRwdXQucmVzdWx0cygpLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJj
ZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4gYXBwbHlQbGF0Zm9ybShvdXRwdXQsIHsg
fSwgc291cmNlSW1hZ2UsIGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CiB9CiAKLVRleHRTdHJlYW0m
IFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdyYXBoaWNdXG4iOwogICAgIHJl
dHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhl
ZjIxMDZiN2ZjYTViZi4uZmFmYzZmZWY5N2VmMzk4MjAxYTI3ZDQ5NTU3NTU3NWY0YTc4YmNmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xOCw0MSArMTksMzQgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLSNpZm5kZWYgU291cmNlR3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNv
dXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBo
aWM+IGNyZWF0ZSgpOwogCiAgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUo
KTsKIAogcHJpdmF0ZToKLSAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQotICAgICAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCi0gICAgewotICAg
ICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKLSAgICB9CisgICAgU291cmNlR3JhcGhpYygpOwogCiAgICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VHcmFwaGljIjsgfQogCi0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0KGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5
cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVj
dFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91
dHB1dCYsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0
IG92ZXJyaWRlOwogCi19IC8vbmFtZXNwYWNlIFdlYkNvcmUKKyAgICBib29sIGFwcGx5U29mdHdh
cmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2Uo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3Jh
cGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5k
ZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZh
NTM2ZTEwYjEwYmYyYzExMzBmNGYzNDJiYmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApA
QCAtNDEsMzYgKzQxLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0
aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQg
YW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3Np
dGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91
c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQg
b2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4K
LSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRp
b24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFp
bnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJT
cGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXpl
KCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxp
bWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0g
LWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4w
ZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdD
b25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGlu
Z0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAg
Ly8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBp
ZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAg
ICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBp
cyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAyOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Cisv
LyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBv
c2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRa
ID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3Np
dGlvbi55KCkgfSk7CisvLyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBt
X2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZl
Y3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAg
cGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAo
IW1fbGltaXRpbmdDb25lQW5nbGUpIHsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0ID0gMC4wZjsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1h
bnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRp
bmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGlu
Z0NvbmVBbmdsZSA8IDAuMGYpCisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxp
bWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBm
KQorLy8gICAgICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRp
bmdDb25lQW5nbGUpKTsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0K
Ky8vCisvLyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZh
bHVlcworLy8gICAgaWYgKCFtX3NwZWN1bGFyRXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdE
YXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOworLy8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9u
ZW50ID09IDEuMGYpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAx
OworLy8gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBw
YWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBTcG90TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0
YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhlZDdkN2Q5NjJlNmJhODg0NDIwNjM1NGQ5MmE0ODU0MTBmZmY3OWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQmxlbmRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZF
QmxlbmQuaCIKKworI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5
U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5n
ZXQoKTsKKyAgICBhdXRvJiBpbjIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdl
QnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFn
ZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworLy8gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKKy8vICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
CisvLyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zl
ciwgbV9tb2RlIH0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29m
dHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNzg3MGE3MzQ5ZWFlODE3MWM0N2NmZDZiOTM2ZTNiYjMx
YWQxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwz
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNv
bG9yTWF0cml4LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZp
bHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NF
TEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0
JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
dmFsdWVzKQoreworICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAg
IGZsb2F0IGIgPSBibHVlOworICAgIGZsb2F0IGEgPSBhbHBoYTsKKworICAgIHJlZCAgICAgPSB2
YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNb
IDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7CisgICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiBy
ICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXNbIDddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFs
dWVzWyA5XSAqIDI1NTsKKyAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFd
ICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1
OworICAgIGFscGhhICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVz
WzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Cit9CisKK2lubGlu
ZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxv
YXQmIGJsdWUsIGNvbnN0IGZsb2F0KiBjb21wb25lbnRzKQoreworICAgIGZsb2F0IHIgPSByZWQ7
CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVlOworCisgICAgcmVkICAg
ICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50
c1syXTsKKyAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0
XSArIGIgKiBjb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSAr
IGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07Cit9CisKKy8vIEZJWE1FOiB0
aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5h
bmNlLmguCitpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBm
bG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQoreworICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsg
MC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOworICAgIHJlZCA9IDA7CisgICAgZ3JlZW4g
PSAwOworICAgIGJsdWUgPSAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCit0ZW1wbGF0ZTxD
b2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK2Jvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChV
aW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVz
LCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgQVNTRVJU
KHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKKyAgICAKKyAg
ICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7CisgICAgICAg
IC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYg
YW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0
cml4CisgICAgICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFnZSBjb2Rl
LgorICAgICAgICBpZiAodmFsdWVzWzRdIHx8IHZhbHVlc1s5XSB8fCB2YWx1ZXNbMTRdIHx8IHZh
bHVlc1sxOV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qg
aW50MzJfdCBkaXZpc29yID0gMjU2OworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRh
dGEoKTsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNp
emUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBz
cmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIHNyYy5kYXRhID0gZGF0
YTsKKyAgICAKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGJ1ZmZl
clNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Cisg
ICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgZGVzdC5kYXRh
ID0gZGF0YTsKKworICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0g
PSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbIDVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0g
KiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAorCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
M10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4
TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwg
bnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6IHsKKyAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0g
eworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1szXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1s0XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzddICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzhdICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgZGl2aXNvciwKKyAg
ICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRl
c3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Cisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAorCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAorCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAorCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAg
ICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVz
dCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9Cisj
ZW5kaWYKKwordGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Cit2b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQoreworICAgIGZsb2F0IGNvbXBvbmVudHNbOV07
CisKKyAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisg
ICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25l
bnRzLCB2YWx1ZXNbMF0pOworICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJ
WF9UWVBFX0hVRVJPVEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90
YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOworCisgICAgdW5zaWduZWQgcGl4
ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFU
RSkKKyAgICBpZiAoZWZmZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBlPihwaXhlbEFycmF5
LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm47CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShidWZmZXJTaXplKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChm
aWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBp
eGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9h
dCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZs
b2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAg
ICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsK
KyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDMpOworICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1
ZXMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Cisg
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAg
IGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4
ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0
IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxv
YXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAg
ICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwor
ICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMyk7CisgICAgICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVl
LCBjb21wb25lbnRzKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEs
IGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIs
IGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywg
YWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5
dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5
dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBo
YSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIGx1
bWluYW5jZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEFycmF5
LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxp
emVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFs
dWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXpl
ZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisKK2Jv
b2wgRkVDb2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29u
c3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVy
R2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09
IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byByZXN1bHRJ
bWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5pbWFnZUJ1ZmZl
cigpOworICAgIGlmIChpbWFnZUJ1ZmZlcikgeworICAgICAgICBhdXRvIGltYWdlUmVjdCA9IGdl
b21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4uZHJhd2luZ1JlY3Qo
KSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgfQorCisgICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdC5jb2xvclNwYWNlKCkgfTsKKyAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUo
KSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Cisg
ICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7CisKKyAg
ICBhdXRvIHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworCisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBw
aXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5
LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVz
LCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOTE2NTQ3YzFiYTFmM2JiZGQ5OTFlMzNmNjU1OWU4ZmEzNjM1MmQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
RUNvbXBvbmVudFRyYW5zZmVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNs
dWRlICJGaWx0ZXJSZXN1bHRWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKworc3RhdGljIHZvaWQg
Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJikKK3sKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29r
dXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2Zl
ckZ1bmN0aW9uKQoreworICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJh
bnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKKyAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMu
c2l6ZSgpOworICAgIGlmIChuIDwgMSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGMgPSBp
IC8gMjU1LjA7CisgICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyAq
IChuIC0gMSkpOworICAgICAgICBkb3VibGUgdjEgPSB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAg
ZG91YmxlIHYyID0gdGFibGVWYWx1ZXNbc3RkOjptaW4oKGsgKyAxKSwgKG4gLSAxKSldOworICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodjEgKyAoYyAqIChuIC0gMSkgLSBrKSAqICh2MiAt
IHYxKSk7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkp
OworICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVl
cywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sK
KyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24u
dGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAgICBp
ZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKKyAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAx
KTsKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2tdOworICAgICAgICB2
YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFsdWVz
W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IGNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgKiBpICsgMjU1ICogdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQ7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOwor
ICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRv
dWJsZSBleHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24uZXhwb25lbnQ7IC8vIFJDVlQgZG9lc24n
dCBsaWtlIHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxvYXQgdG8gcG93LCBzbyBwcm9tb3RlIHRo
aXMgdG8gZG91YmxlCisgICAgICAgIGRvdWJsZSB2YWwgPSAyNTUuMCAqICh0cmFuc2ZlckZ1bmN0
aW9uLmFtcGxpdHVkZSAqIHBvdygoaSAvIDI1NS4wKSwgZXhwb25lbnQpICsgdHJhbnNmZXJGdW5j
dGlvbi5vZmZzZXQpOworICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4w
LCB2YWwpKTsKKyAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBMb29rdXBUYWJsZSBjb21wdXRlTG9va3VwVGFibGUoY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgTG9va3VwVGFibGUg
dGFibGU7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLnNpemUoKTsg
KytpKQorICAgICAgICB0YWJsZVtpXSA9IGk7CisKKyAgICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2
b2lkICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
KyAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0geworICAgICAgICBjb21wdXRlSWRlbnRp
dHlUYWJsZSwKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisgICAgICAgIGNvbXB1dGVU
YWJ1bGFyVGFibGUsCisgICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLAorICAgICAgICBjb21w
dXRlTGluZWFyVGFibGUsCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlCisgICAgfTsKKworICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7CisgICAgY2FsbEVmZmVjdFtmdW5jdGlvbi50eXBlXSh0YWJsZSwg
ZnVuY3Rpb24pOworCisgICAgcmV0dXJuIHRhYmxlOworfQorCitib29sIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJl
c3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBn
ZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBh
dXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHJlc3VsdC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwor
ICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3VsdENv
b3JkaW5hdGVzKGluLmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAg
IGluLmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChkcmF3aW5nUmVjdCks
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBMb29rdXBUYWJsZSByZWRUYWJsZSA9IGNv
bXB1dGVMb29rdXBUYWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBncmVlblRh
YmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZ3JlZW5GdW5jdGlvbik7CisgICAgTG9va3VwVGFi
bGUgYmx1ZVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1ZUZ1bmN0aW9uKTsKKyAgICBM
b29rdXBUYWJsZSBhbHBoYVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYWxwaGFGdW5jdGlv
bik7CisKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5h
dGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCogZGF0YSA9IGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0XV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDFdXTsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAz
XSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyODhmYjZkMWZj
MTY0ZGQ2YzIwNDgwNDM1OTM3MTY4YTg0NzM0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQorewor
ICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihj
KSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7
CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07
Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIq
IGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2Nh
bGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAg
IGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgt
LXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNv
dXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAg
ZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAg
ICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSBj
bGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRp
b247CisgICAgfQorfQorCisvLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBh
IGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9u
IGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBh
Z2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlv
bi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVk
IGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxv
YXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBm
OworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdo
aWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkx
ID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAg
ICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChi
NCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRp
b24gPSByZXN1bHQ7CisgICAgICAgICsrc291cmNlOworICAgICAgICArK2Rlc3RpbmF0aW9uOwor
ICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitzdGF0aWMgaW5saW5l
IHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3RkOjpt
YXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMpICsg
azQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6bWlu
KDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OworICAgIGlmICgoazQgPj0gMC4w
ZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQgPD0g
MS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7Cisg
ICAgICAgIGlmIChrNCkgeworICAgICAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAgICAgIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoazEpCisgICAgICAgICAgICAgICAgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4
ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGs0KSB7CisgICAgICAgIGlmIChr
MSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwgZGVz
dGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBkZXN0
aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEs
IDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwg
MD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQp
OworICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworICAgIEFTU0VSVChsZW5n
dGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOworICAgIC8vIFRo
ZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCisj
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4Mykp
OworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24u
ZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbHNlCisgICAgYXJpdGhtZXRpY1Nv
ZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7CisjZW5kaWYKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlBcml0aG1ldGlj
U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7
CisgICAgYXV0byYgaW4yID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gcmVzdWx0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gZWZmZWN0QURyYXdp
bmdSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhpbi5k
cmF3aW5nUmVjdCgpLCByZXN1bHQuZHJhd2luZ1JlY3QoKSk7CisgICAgYXV0byBzb3VyY2VQaXhl
bEFycmF5ID0gaW4uZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChlZmZlY3RBRHJhd2luZ1JlY3QpLCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBlZmZlY3RCRHJhd2luZ1JlY3QgPSBnZW9tZXRyeS5jb252ZXJ0
VG9BYnNvbHV0ZVJlc3VsdENvb3JkaW5hdGVzKGluMi5kcmF3aW5nUmVjdCgpLCByZXN1bHQuZHJh
d2luZ1JlY3QoKSk7CisgICAgaW4yLmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVsQXJy
YXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0ludFJl
Y3QoZWZmZWN0QkRyYXdpbmdSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIHBs
YXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBp
eGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAyKTsKKyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbjIgPSBp
bnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIo
KTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICgh
aW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVz
dWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBhdXRvIGltYWdl
UmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4uZHJh
d2luZ1JlY3QoKSwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VSZWN0MiA9
IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW4yLmRyYXdpbmdS
ZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29tcG9z
aXRlT3BlcmF0b3IpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKKyAgICAgICAgLy8gQXBwbGll
cyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCisgICAgICAgIGF1dG8gZHJhd2luZ1Jl
Y3QgPSBpbi5kcmF3aW5nUmVjdCgpOworICAgICAgICBhdXRvIGRyYXdpbmdSZWN0MiA9IGluMi5k
cmF3aW5nUmVjdCgpOworICAgICAgICBhdXRvIHJlc3VsdFJlY3QgPSByZXN1bHQuZHJhd2luZ1Jl
Y3QoKTsKKworICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUmVjdCA9IGRyYXdpbmdSZWN0OworICAg
ICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGRyYXdpbmdSZWN0Mik7CisgICAgICAgIGRl
c3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QocmVzdWx0UmVjdCk7CisgICAgICAgIGlmIChkZXN0aW5h
dGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byBh
ZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgYWRqdXN0
ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5KC1yZXN1bHRSZWN0LmxvY2F0aW9uKCkpOworICAgICAg
ICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29v
cmRpbmF0ZXMoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNl
UmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5tb3ZlQnkoLWRyYXdp
bmdSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBzb3VyY2VSZWN0ID0gZ2VvbWV0cnkuY29udmVy
dFRvQWJzb2x1dGVDb29yZGluYXRlcyhzb3VyY2VSZWN0KTsKKworICAgICAgICBhdXRvIHNvdXJj
ZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2UyUmVjdC5tb3ZlQnkoLWRy
YXdpbmdSZWN0Mi5sb2NhdGlvbigpKTsKKyAgICAgICAgc291cmNlMlJlY3QgPSBnZW9tZXRyeS5j
b252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHNvdXJjZTJSZWN0KTsKKworICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCwgc291cmNlMlJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCB7
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGltYWdlUmVjdDIsIEludFJl
Y3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBpbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRv
cCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBpbWFn
ZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxT
aXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9M
SUdIVEVSOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBpbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBpbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIt
PmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBvc2l0
ZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0
VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWNTb2Z0
d2FyZShyZXN1bHQsIGlucHV0cywgZ2VvbWV0cnkpOworICAgIHJldHVybiBhcHBseU5vbkFyaXRo
bWV0aWNTb2Z0d2FyZShyZXN1bHQsIGlucHV0cywgZ2VvbWV0cnkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZhZTg3MWE5MjhkZmJmNDg0ZjQ3NTdhMDA3MzUw
YWExZjI0NTdmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0
YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
RkVDb252b2x2ZU1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJiOTY3ZDE4MDljZDBkODlmYjM5ZWRkZjczODUyYjljZDI1MGVkNWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmLCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKy8vICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKy8vICAgIEZp
bHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisvLworLy8gICAgQVNTRVJUKG1feENo
YW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworLy8gICAgQVNTRVJUKG1feUNoYW5u
ZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworLy8KKy8vICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKy8vICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKy8vICAgICAgICByZXR1cm47CisvLworLy8g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOworLy8KKy8vICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5n
UmVjdCk7CisvLworLy8gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKy8vICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KKy8v
ICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZl
Y3RCRHJhd2luZ1JlY3QpOworLy8gICAgCisvLyAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3Bs
YWNlbWVudEltYWdlKQorLy8gICAgICAgIHJldHVybjsKKy8vCisvLyAgICBBU1NFUlQoaW5wdXRJ
bWFnZS0+bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKKy8vCisvLyAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworLy8gICAgSW50U2l6ZSBwYWludFNp
emUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKKy8vICAgIHBhaW50U2l6ZS5zY2FsZShm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisvLworLy8gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7CisvLyAgICBm
bG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKKy8vICAgIGZsb2F0
IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKy8vICAgIGZsb2F0IHNj
YWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OworLy8gICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworLy8gICAgCisvLyAgICBp
bnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7CisvLyAgICBpbnQgZGlz
cGxhY2VtZW50Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7CisvLworLy8gICAgaW50IHJvd0J5
dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworLy8KKy8vICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKy8vICAgICAgICBpbnQgbGluZVN0YXJ0T2Zm
c2V0ID0geSAqIHJvd0J5dGVzOworLy8KKy8vICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBh
aW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKy8vICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5k
ZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKKy8vICAgICAgICAgICAgCisvLyAgICAgICAg
ICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNw
bGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5l
bFgpICsgc2NhbGVkT2Zmc2V0WCk7CisvLyAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRp
Y19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0
aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Cisv
LworLy8gICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGlu
YXRpb25JbmRleCk7CisvLyAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50
U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7
CisvLyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7CisvLyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKy8vICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAgICAgKmRl
c3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1h
Z2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7Cisv
LyAgICAgICAgfQorLy8gICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2Fy
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzdhZmYwZGZlMTQzMzY4YWNmODcyMjMzYThiMWE0ZWJlNzE2ZTMy
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hh
ZG93LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNvZnR3
YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0
cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW4gPSBpbnB1dHNb
MF0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1hZ2VCdWZmZXIoKTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJl
c3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICog
Z2VvbWV0cnkucmVzb2x2ZVRvQWJzb2x1dGVDb29yZGluYXRlcyh7IG1fc3RkWCwgbV9zdGRZIH0p
OworICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnZW9tZXRyeS5yZXNvbHZlVG9BYnNvbHV0ZUNvb3Jk
aW5hdGVzKHsgbV9keCwgbV9keSB9KTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW4uZHJhd2lu
Z1JlY3QoKTsKKyAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZVJlc3Vs
dENvb3JkaW5hdGVzKGltYWdlUmVjdCwgcmVzdWx0LmRyYXdpbmdSZWN0KCkpOworCisgICAgYXV0
byBpbWFnZVJlY3RXaXRoT2Zmc2V0ID0gaW1hZ2VSZWN0OworICAgIGltYWdlUmVjdFdpdGhPZmZz
ZXQubW92ZShvZmZzZXQpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hh
ZG93T3BhY2l0eSk7CisgICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBpbWFnZVJlY3RXaXRoT2Zmc2V0KTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEp
OworCisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9z
aGFkb3dDb2xvcik7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdC5j
b2xvclNwYWNlKCkgfTsKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0
SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJy
YXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1h
Z2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworCisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAgICByZXN1bHRDb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOworICAgIHJlc3Vs
dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVzdWx0LmxvZ2ljYWxT
aXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKworICAgIHJlc3Vs
dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRmxvb2RTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU3OGViNjQ3
MjAwYzMwN2FjYWUyYTg0MTk5YjNmMGE0YTYwMjZhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRUZsb29kLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUg
IkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBy
ZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIGNvbG9yID0gbV9mbG9vZENvbG9yLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KG1fZmxvb2RPcGFjaXR5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGdlb21l
dHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMocmVzdWx0LmRyYXdpbmdSZWN0KCkpOwor
ICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgaW1hZ2VSZWN0LnNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzRmZmMwZTVmOTAzOTY1YjkyMjc5OTdkY2Zi
MDdmM2NmZDhlMDVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFR2F1
c3NpYW5CbHVyOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3Vs
dFZlY3RvciYsIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWEyZmE1NjQz
ZmVmYTk0M2NlM2ZiOWEwYTAxNTFkODA5ZDAyNDcwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1Nv
ZnR3YXJlLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcK
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUo
RmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdh
cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjEyMTI1ODViOTgwMGNlNzI2YWMzZDM4OTE1NTU3NjEwMjMwZjFk
OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTWVyZ2UuaCIK
KworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTWVyZ2U6OmFwcGx5U29mdHdhcmUoRmls
dGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3Vs
dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKSB7CisgICAgICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIGlt
YWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29vcmRpbmF0ZXMoaW5w
dXQtPmRyYXdpbmdSZWN0KCksIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
ZDc5MjI2NmZjNTcxZGJmYTFhZGE0YmZiYzI4MGYwYjZjOGZkOTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9y
cGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9n
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjphcHBseVNv
ZnR3YXJlKEZpbHRlclJlc3VsdCYsIGNvbnN0IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVm
ZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNl
dFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NThmYjgwNzU3YTFmYjk5OGM0OWE4YTk3OGVkYWMw
MDMzMWFiOTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVPZmZzZXQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5j
bHVkZSAiRmlsdGVyUmVzdWx0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFT2Zm
c2V0OjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0ZXJSZXN1
bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0
byYgaW4gPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4uaW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbWFnZVJl
Y3QgPSBpbi5kcmF3aW5nUmVjdCgpOworICAgIGltYWdlUmVjdC5tb3ZlKGdlb21ldHJ5LnJlc29s
dmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9keCwgbV9keSB9KSk7CisgICAgaW1hZ2VSZWN0ID0g
Z2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhpbWFnZVJlY3QsIHJl
c3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZjI0OGRhZmQyMGIwODBjZjc1NTM5NDI5YWMyNDBlZTAxOGY2
OWRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwxMTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9i
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxlLmgiCisKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAodGFyZ2V0UmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gbG9naWNhbFJl
Y3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOworCisgICAgRmxvYXRT
aXplIHNjYWxlOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShsb2dpY2FsUmVjdC5zaXplKCksIHNjYWxlKTsKKworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCAxLCBj
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsK
KyAgICB0cmFuc2Zvcm0uc2NhbGUoc2NhbGUpLnRyYW5zbGF0ZSgtbG9naWNhbFJlY3QubG9jYXRp
b24oKSkubXVsdGlwbHkoYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiBpbWFnZUNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIGltYWdlQ29udGV4
dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKwor
Ym9vbCBGRVRpbGU6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0IEZp
bHRlclJlc3VsdFZlY3RvciYgaW5wdXRzLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsK
KyAgICBhdXRvJiBpbiA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBpbi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW4uZHJh
d2luZ1JlY3QoKSk7CisgICAgYXV0byByZXN1bHRJbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0
VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKworICAgIGF1dG8g
cHJpbWl0aXZlU3VicmVnaW9uID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRl
cyhpbi5wcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgYXV0byByZXN1bHRQcmltaXRpdmVTdWJy
ZWdpb24gPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHJlc3VsdC5wcmlt
aXRpdmVTdWJyZWdpb24oKSk7CisgICAgCisgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUg
YXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMg
dGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMg
cGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorICAgIEZsb2F0UmVj
dCB0aWxlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFBvaW50IGluTWF4RWZm
ZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgbWF4RWZm
ZWN0TG9jYXRpb24gPSByZXN1bHRQcmltaXRpdmVTdWJyZWdpb24ubG9jYXRpb24oKTsKKy8vICAg
IGlmIChpbi5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0
KSB7CisvLyAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKy8vICAgICAg
ICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKKy8vICAgICAgICB0aWxlUmVjdC5z
Y2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOworLy8gICAgfQorCisgICAgYXV0byB0aWxlSW1hZ2VCdWZmZXIg
PSBjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgZ2VvbWV0cnkuYWJzb2x1dGVUcmFuc2Zvcm0o
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIGlmICghdGlsZUltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2VCdWZm
ZXItPmNvbnRleHQoKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZl
Y3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7CisgICAgdGlsZUltYWdl
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbWFnZVJlY3QubG9jYXRpb24o
KSk7CisKKyAgICBhdXRvIHRpbGVJbWFnZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUlt
YWdlKFdURk1vdmUodGlsZUltYWdlQnVmZmVyKSk7CisgICAgaWYgKCF0aWxlSW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3Jt
OworICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBt
YXhFZmZlY3RMb2NhdGlvbik7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUo
dGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9y
bSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CisgICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBh
dHRlcm4pKTsKKyAgICAKKyAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHJlc3VsdEltYWdlUmVjdC5zaXplKCkpKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVU
dXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllOGQ0MDlkNmMxYWI4ZDNkYjRhZmQy
YzZiOTI4MzU5NTAxYTA1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJ
bmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBG
RVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiwgY29uc3QgRmlsdGVyUmVz
dWx0VmVjdG9yJiwgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmls
dGVyUmVzdWx0U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmVh
YTEyZDhiNTczNDQ3ODJjMWU5YTM0Y2E1MTlmOTM4YWQ1NGY4MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
UmVzdWx0U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdFNvZnR3YXJlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXIqIEZpbHRlclJlc3VsdFNvZnR3
YXJlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworCisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUobV9sb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwg
bV9yZXNvbHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50
UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9Owor
CisgICAgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhl
bEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpLCBy
ZWN0KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCksIHJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVyUmVzdWx0U29mdHdhcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
UmVzdWx0U29mdHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMzhjNDU2OGY1MWMzNjJiOWZjYTk2YjRhZmI0
MzViNDMzZTk5MTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJSZXN1bHRTb2Z0d2FyZS5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJS
ZXN1bHRTb2Z0d2FyZSA6IHB1YmxpYyBGaWx0ZXJSZXN1bHQgeworcHVibGljOgorICAgIHVzaW5n
IEZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0OworICAgIAorcHJpdmF0ZToKKyAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9p
bWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpIG92ZXJyaWRlOwor
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlclJlc3VsdFNvZnR3YXJlKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJSZXN1bHQmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9
PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jM2I1ZDczMDA1Yzc4OTc2MGFkMWFlNDBhZDhjNzFkMWRjYTcy
MjRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1bHQmIHJl
c3VsdCwgY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiBpbnB1dHMsIEltYWdlQnVmZmVyKiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMu
c2l6ZSgpID09IDEpOworICAgIGF1dG8mIGluID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IGluLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29y
ZGluYXRlcyhpbi5kcmF3aW5nUmVjdCgpKTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCku
ZmlsbFJlY3QoRmxvYXRSZWN0IHsgeyB9LCBpbWFnZVJlY3Quc2l6ZSgpIH0sIENvbG9yOjpibGFj
ayk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VH
cmFwaGljU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlMDI4
YzUyNmVkYTlhOGNmMWNlMDZlOTkwZjJjNzNkMGY5ZGZjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdy
YXBoaWNTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IFNvdXJjZUdyYXBoaWM6OmFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0JiByZXN1bHQsIGNvbnN0
IEZpbHRlclJlc3VsdFZlY3RvciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIEFTU0VSVChzb3VyY2VJbWFnZSk7CisKKyAgICBh
dXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcAppbmRleCBmNDRhZTEyOWQwNzM4ZDMwYzc2ZTcxMDg1YjJhZWMwNWE3YjZm
MWRhLi5mZWY1NzVmMDY2M2ExZGRlODZlNjU1MjM0ZTczNDY1ZTI2ZWI5MWNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQxMiArMjgsMzI1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTVkdE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCi0jaW5j
bHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogI2lu
Y2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIK
ICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgotI2luY2x1ZGUgIkZFTWVyZ2UuaCIKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1
ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1
ZGUgIlJlZmVyZW5jZWRTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgot
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFs
Z29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJE
KQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
ZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0Zp
bHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIENTU0ZpbHRlckdl
b21ldHJ5OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NG
aWx0ZXIob3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSkpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1
aWxkRnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25zLCBjbGlwT3BlcmF0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZmlsdGVyOwogfQogCi1DU1NGaWx0ZXI6
OkNTU0ZpbHRlcigpCi0gICAgOiBGaWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9z
b3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgqdGhpcykpCitSZWZQdHI8Q1NTRmls
dGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiBmdW5j
dGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENTU0ZpbHRlcihXVEZNb3ZlKGZ1bmN0aW9ucyksIHJlbmRlcmluZ01vZGUpKTsKIH0K
IAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0OworQ1NTRmlsdGVyOjpDU1NGaWx0
ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKHJlbmRlcmluZ01vZGUsIFR5cGU6OkNTU0ZpbHRlcikK
K3sKKyAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKK30KIAotR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6
OmlucHV0Q29udGV4dCgpCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1
bmN0aW9uPj4mJiBmdW5jdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKKyAgICA6
IEZpbHRlcihyZW5kZXJpbmdNb2RlLCBUeXBlOjpDU1NGaWx0ZXIpCisgICAgLCBtX2Z1bmN0aW9u
cyhXVEZNb3ZlKGZ1bmN0aW9ucykpCiB7Ci0gICAgcmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291
cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
JiBmaWx0ZXJPcGVyYXRpb24pCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmls
dGVyKEZpbHRlciYgZmlsdGVyLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0
ICZwcmV2aW91c0VmZmVjdCwgY29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJP
cGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5k
b2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOwotICAgIGlmICghZmlsdGVyRWxlbWVudCkgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8
PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciBy
ZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJh
Z21lbnQoKSk7Ci0gICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJl
bmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KLSAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRwczov
L3dlYmtpdC5vcmcvYi8xMzEwODU+Ci0gICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlmIHRoaXMg
ZG9lcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSByZW5kZXJlci5lbGVt
ZW50KCkpCi0gICAgICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCksICplbGVt
ZW50KTsKKyAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJl
UmVmZXJlbmNlZFNWR1Jlc291cmNlcygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3Vt
ZW50KCksIGZpbHRlck9wZXJhdGlvbik7CisKKyAgICBpZiAoIWZpbHRlckVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICAKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpj
cmVhdGUoKmZpbHRlckVsZW1lbnQsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksICZwcmV2aW91c0Vm
ZmVjdCk7Cit9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxk
ZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51
c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAs
IDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxl
L3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBp
bmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFt
ZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIg
LSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAg
ICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAr
IDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0g
MC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAg
ICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+PiByZWZlcmVuY2VFZmZlY3RzOworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0
ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9y
TWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8o
MSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBT
ZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4
Lmh0bWwjc2VwaWFFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRl
cnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0
cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZU
eXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQp
KSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwg
KnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVm
ZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVt
ZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworfQogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVj
dC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBF
TkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5z
dHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50
ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdC
KCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAg
ZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVt
ZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgq
ZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3Zl
KHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0Oworc3RhdGljIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8Zmxv
YXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwog
fQogCi1ib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQor
c3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbikKIHsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0
cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKLSAgICBtX291dHNldHMgPSB7
IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0eUVmZmVjdChjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKwor
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51
bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1
bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9
IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICBy
ZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRp
YyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0g
YW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCAr
IDAuNTsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAg
IHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3Rh
dGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRl
ck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRp
b24gY2xpcE9wZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBG
RUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjbGlwT3Bl
cmF0aW9uID09IENTU0ZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSA/IEVER0VN
T0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlv
bi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmls
dGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24g
Y2xpcE9wZXJhdGlvbikKK3sKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3Vy
Y2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0p
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdy
YXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAg
IGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmls
dGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2Fz
dDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0
LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZWZmZWN0KTsKKyAgICAgICAgc3dpdGNoIChvcGVy
YXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
OgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKCp0aGlzLCByZW5kZXJlciwg
KmVmZmVjdCwgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAg
ICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91Ymxl
IG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50
KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxl
bnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAg
ICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAw
LAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIx
MjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5
U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRv
KDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAg
ICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0
ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3Jt
YXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMg
KyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVh
dGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigq
b3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQo
KSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywg
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwor
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8Zmxv
YXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4
OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5w
dXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0
aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0
ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVJbnZlcnRFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNT
IGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBh
dXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwot
ICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25l
bnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0
aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rp
b247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5T
RkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAg
ICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAg
IGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsK
KworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAg
IGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAg
ICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
KTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAg
ICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAg
ICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9h
dFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9u
LCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0
eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVm
ZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJh
dGlvbik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dP
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMs
IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCks
IGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEp
OworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAg
ICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0Zp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoZWZmZWN0KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMg
YW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAg
ICAgICAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWly
IHByaW1pdGl2ZSBzdWJyZWdpb25zLgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91
bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7Ci0gICAgICAg
ICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9u
LnR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0g
ICAgICAgICAgICAgICAgbV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICBp
ZiAoZmlsdGVyKSB7CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsK
KyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIElmIHdl
IGRpZG4ndCBtYWtlIGFueSBlZmZlY3RzLCB0ZWxsIG91ciBjYWxsZXIgd2UgYXJlIG5vdCB2YWxp
ZC4KLSAgICBpZiAobV9lZmZlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1f
ZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZm
ZWN0IH0pOworICAgIH0KIAotICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1Jl
Z2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQot
ICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0
ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5h
YmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsKLSNlbmRpZgogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlY3QpCi17Ci0gICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChmaWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVy
UmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCkK
K0ludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICAvLyBBdCB0aGlz
IHBvaW50IHRoZSBlZmZlY3QgY2hhaW4gaGFzIGJlZW4gYnVpbHQsIGFuZCB0aGUKLSAgICAvLyBz
b3VyY2UgaW1hZ2Ugc2l6ZXMgc2V0LiBXZSBqdXN0IG5lZWQgdG8gYXR0YWNoIHRoZSBncmFwaGlj
Ci0gICAgLy8gYnVmZmVyIGlmIHdlIGhhdmUgbm90IHlldCBkb25lIHNvLgotCi0gICAgaWYgKG1f
Z3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBs
b2dpY2FsU2l6ZSB7IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCkgfTsKLSAgICBpZiAoIXNv
dXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6
ZSkgewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwg
ZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwot
ICAgICAgICBSZW5kZXJpbmdNb2RlIG1vZGUgPSBtX2ZpbHRlclJlbmRlcmVyID8gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQgOiByZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgIHNldFNvdXJjZUlt
YWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIGZpbHRlclNjYWxlKCks
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNl
bmRpZgotICAgIH0KLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOworICAgIGlm
ICghbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgfHwgIW1fb3V0c2V0cy5pc1plcm8oKSkKKyAg
ICAgICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDog
bV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOwor
ICAgIAorICAgIHJldHVybiBtX291dHNldHM7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorRmlsdGVyUmVzdWx0KiBDU1NGaWx0ZXI6OmFw
cGx5KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAg
ICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZs
b2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKLSAgICAvLyBB
dCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwgcmVjYWxj
dWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIEZsb2F0
U2l6ZSBzY2FsZTsKLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJl
Z2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAgICBzZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxl
KTsKLSAgICAgICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
KTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBmdW5jdGlvbi0+YXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UsIGdl
b21ldHJ5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICpyZXN1bHQgfSk7CisgICAgICAg
IG91dHB1dC5yZXN1bHRzKCkuYWRkKGZ1bmN0aW9uLCBSZWY8RmlsdGVyUmVzdWx0PigqcmVzdWx0
KSk7CiAgICAgfQorICAgIAorICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gMSk7CisgICAgYXV0
byByZXN1bHQgPSBzdGFjay50YWtlTGFzdCgpOworICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4gJnJlc3Vs
dC5sZWFrUmVmKCk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3Vs
dHMoKQotewotICAgIG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9z
b3VyY2VBbHBoYSkKLSAgICAgICAgbV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3Vs
dCgpOwotfQotCi12b2lkIENTU0ZpbHRlcjo6YXBwbHkoKQorVGV4dFN0cmVhbSYgQ1NTRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVj
dHMubGFzdCgpLmdldCgpOwotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1f
ZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0
ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBhdXRvIGVuZCA9IG1fZnVuY3Rpb25zLnJlbmQoKTsKKyAgICB1bnNp
Z25lZCBsZXZlbCA9IDA7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2Z1bmN0aW9ucy5yYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1dG8gZnVuY3Rpb24gPSAqaXQ7CisgICAg
ICAgIGlmIChmdW5jdGlvbi0+dHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxw
aGEpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdCAhPSBlbmQpOworICAgICAgICAgICAgKytpdDsK
ICAgICAgICAgfQorICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cywgbGV2ZWwrKyk7CisgICAgICAgIGZ1bmN0aW9uLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVj
dC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKLX0KLQotTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JE
aXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0KQotewotICAgIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0
aGUgYXJlYSBpbiB0aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVk
LCBzbyB0aGF0IHdlIGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0Ii4KLSAgICBhdXRvIHJlY3RG
b3JSZXBhaW50ID0gZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMo
KSkKLSAgICAgICAgcmVjdEZvclJlcGFpbnQgKz0gb3V0c2V0cygpOwotICAgIHJlY3RGb3JSZXBh
aW50LmludGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKLSAgICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7
Ci19Ci0KLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCi0gICAg
ICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKTsKLSAgICAKLSAgICByZXR1cm4g
bV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLX0KIAotdm9pZCBDU1NGaWx0
ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkK
LXsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2V0
TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJSZWdpb24oc291
cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKLX0K
LQotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZm
ZWN0UmVjdCkKLXsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAg
ZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOwotfQotCi1JbnRSZWN0IENTU0Zp
bHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZm
ZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkg
fHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQot
ICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOwotICAgIAotICAgIHJldHVybiB7IH07Ci19
Ci0KLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYg
KCFtX291dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7Ci0KLSAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVj
dC0+b3V0c2V0cygpOwotICAgIHJldHVybiBtX291dHNldHM7CisgICAgcmV0dXJuIHRzOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgK
aW5kZXggMDBiOTE5MTdiODA0YzkyZDk0MDhiNzU4ZTM3NWMyNTJmMjlkYjBjNS4uMWU3NTVmMDM4
ODBjMjA4MzdiYjI4YjkzNmZiNGNmNDY3ZTNhYWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI1LDg3ICsyNSw0NyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIkNTU0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
SW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYv
VHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyOwog
Y2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBTb3Vy
Y2VBbHBoYTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWVudW0gY2xhc3MgRmlsdGVyQ29uc3Vt
ZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAogY2xhc3MgQ1NTRmlsdGVy
IGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQogCi0g
ICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKLSAgICB2
b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRlKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIENTU0ZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uID0gQ1NTRmlsdGVy
R2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9u
Pj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKICAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzOyB9CiAgICAgYm9v
bCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW47IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0g
ICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPFJlZjxGaWx0
ZXJGdW5jdGlvbj4+JiBmdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQor
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCiBwcml2YXRlOgotICAgIENT
U0ZpbHRlcigpOwotICAgIHZpcnR1YWwgfkNTU0ZpbHRlcigpOwotCi0gICAgYm9vbCBpc0NTU0Zp
bHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247
IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZm
ZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgQ1NT
RmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2RlKTsKKyAgICBDU1NG
aWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYsIFJlbmRlcmluZ01vZGUpOwogCi0g
ICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBib29sIGJ1
aWxkRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgQ1NT
RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBp
bnB1dENvbnRleHQoKTsKKyAgICBGaWx0ZXJSZXN1bHQqIGFwcGx5KEZpbHRlck91dHB1dCYsIEZp
bHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0
b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZvaWQgYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QgZmluYWw7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKLQot
ICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwot
Ci0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9m
aWx0ZXJSZWdpb247Ci0KLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsK
LSAgICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IG1fc291cmNlQWxwaGE7Ci0KLSAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRz
ZXRzOwotCi0gICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9o
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07
Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRl
clJlbmRlcmVyOworCisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25z
OworICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Q1NTRmls
dGVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRl
cikgeyByZXR1cm4gZmlsdGVyLmlzQ1NTRmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci50eXBlKCkg
PT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcjsgfQogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlckdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXJHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRhNGUzN2Q2Y2I0ZWQwNmZkODIzOGJlZjkyNTIy
MzZjNmYzYWYwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXJHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ1NTRmlsdGVyR2VvbWV0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVu
aXF1ZV9wdHI8Q1NTRmlsdGVyR2VvbWV0cnk+IENTU0ZpbHRlckdlb21ldHJ5OjpjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8Q1NTRmlsdGVyR2VvbWV0cnk+KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0LCBjbGlw
T3BlcmF0aW9uKTsKK30KKworQ1NTRmlsdGVyR2VvbWV0cnk6OkNTU0ZpbHRlckdlb21ldHJ5KGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDogRmlsdGVyR2VvbWV0cnko
ZmlsdGVyUmVnaW9uLCBzb3VyY2VJbWFnZVJlY3QpCisgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xp
cE9wZXJhdGlvbikKK3sKK30KKworRmxvYXRSZWN0IENTU0ZpbHRlckdlb21ldHJ5OjpjbGlwVG9Q
cmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgYXV0byBjbGlwcGVkRHJh
d2luZ1JlY3QgPSBkcmF3aW5nUmVjdDsKKyAgICBpZiAobV9jbGlwT3BlcmF0aW9uID09IENsaXBP
cGVyYXRpb246OkludGVyc2VjdCkKKyAgICAgICAgY2xpcHBlZERyYXdpbmdSZWN0LmludGVyc2Vj
dChwcmltaXRpdmVTdWJyZWdpb24pOworICAgIGVsc2UKKyAgICAgICAgY2xpcHBlZERyYXdpbmdS
ZWN0LnVuaXRlKHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgcmV0dXJuIGNsaXBwZWREcmF3aW5n
UmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjRjZjU0NGIxNmNmYTk5N2E4
ODE3ZmJjNzgxNDZhOGM0OTQ1ZDljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q1NTRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0cnkgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7
IEludGVyc2VjdCwgVW5pdGUgfTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENT
U0ZpbHRlckdlb21ldHJ5PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9wZXJh
dGlvbjo6SW50ZXJzZWN0KTsKKworICAgIENTU0ZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVj
dCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgQ2xpcE9w
ZXJhdGlvbik7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBDbGlwT3BlcmF0aW9uIG1fY2xp
cE9wZXJhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggMWJmMjJlNDJjMzUxODYxODc5ZWY1YWYwY2YxZWMw
YjQ3MTQ5YjVlYS4uMDBmNjZlOGFiMjE4YmU0ZjAxZmE3MmJjY2NhZTkxZTdlODYzYTM1NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xh
c3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NGaWx0ZXI7
CiBjbGFzcyBDbGlwUmVjdHM7CiBjbGFzcyBDbGlwUmVjdHNDYWNoZTsKIGNsYXNzIEV2ZW50UmVn
aW9uQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAKaW5kZXggMjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4u
ZWQ2OGYxOTZhZmY3NTg1MTc5MjhlMmYzODhhNjM5MTc4NWE1YTVkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllckZpbHRlcnMuaCIKIAogI2luY2x1ZGUgIkNTU0ZpbHRl
ci5oIgorI2luY2x1ZGUgIkNTU0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZH
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTExNiwzOSArMTE3LDUxIEBAIHZvaWQgUmVuZGVyTGF5ZXJG
aWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKICAgICBtX2ludGVybmFsU1ZH
UmVmZXJlbmNlcy5jbGVhcigpOwogfQogCi12b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRG
aWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUpCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0
ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikgewotICAgICAgICBtX2ZpbHRlciA9IENTU0Zp
bHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZh
Y3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUp
OwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZpbHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3Ip
IHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAg
ICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIH0KKyAgICBtX2Zp
bHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRl
cigpLCByZW5kZXJpbmdNb2RlLCBDU1NGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5p
dGUpOworfQorCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6aW5wdXRDb250
ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9zb3VyY2VJbWFnZSA/ICZtX3NvdXJjZUltYWdlLT5jb250
ZXh0KCkgOiBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3Nv
dXJjZUltYWdlUmVjdC5zaXplKCkgfTsKKyAgICBtX3NvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgMSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAKLSAgICAvLyBJ
ZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0
IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNz
aW5nIChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgIC8v
IEZJWE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRo
ZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChy
ZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRl
clByb3BlcnR5KSkKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJG
aWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBp
ZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8mIGZpbHRl
ciA9ICptX2ZpbHRlcjsKLSAgICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBmaWx0ZXIuY29tcHV0
ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChmaWx0ZXJCb3hSZWN0LCBkaXJ0eVJlY3QpOwor
ICAgIAorICAgIGF1dG8gZmlsdGVyU291cmNlUmVjdCA9IGRpcnR5UmVjdDsKKyAgICBpZiAoZmls
dGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQorICAgICAgICBmaWx0ZXJTb3VyY2VSZWN0
ICs9IGZpbHRlci5vdXRzZXRzKCk7CisgICAgZmlsdGVyU291cmNlUmVjdC5pbnRlcnNlY3QoZmls
dGVyQm94UmVjdCk7CisKICAgICBpZiAoZmlsdGVyU291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYm9vbCBoYXNVcGRhdGVkQmFja2luZ1N0b3JlID0g
ZmlsdGVyLnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7CisgICAgCisg
ICAgaWYgKGZpbHRlclNvdXJjZVJlY3QgIT0gbV9zb3VyY2VJbWFnZVJlY3QpIHsKKyAgICAgICAg
bV9zb3VyY2VJbWFnZVJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0OworICAgICAgICBtX2dyYXBoaWNz
QnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJl
Y3Q7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlKQorICAg
ICAgICBpZiAoIW1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgICAgIG1fcmVwYWlu
dFJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1f
cmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CkBAIC0xNTksMTEgKzE3Miw5IEBAIEdyYXBoaWNzQ29u
dGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0CiAgICAgbV9wYWludE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3QubG9jYXRp
b24oKTsKICAgICByZXNldERpcnR5U291cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgZmlsdGVyLmFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoZGVzdGluYXRpb25Db250ZXh0KTsKLSAgICBhdXRvKiBzb3VyY2VHcmFw
aGljc0NvbnRleHQgPSBmaWx0ZXIuaW5wdXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFw
aGljc0NvbnRleHQgfHwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUoKSkpCisg
ICAgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIGF1dG8qIHNvdXJjZUdyYXBo
aWNzQ29udGV4dCA9IGlucHV0Q29udGV4dCgpOworICAgIGlmICghc291cmNlR3JhcGhpY3NDb250
ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29u
dGV4dCBzbyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaXMgY2FwdHVyZWQgaW4gdGhl
IG9mZnNjcmVlbiBtZW1vcnkgYnVmZmVyLgpAQCAtMTc3LDIzICsxODgsMTUgQEAgR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXQKIAogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZm
ZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KQogewotICAgIEFTU0VSVCht
X2ZpbHRlci0+aW5wdXRDb250ZXh0KCkpOworICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAK
ICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJcblJlbmRlckxheWVyRmls
dGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCIpOwogCiAgICAgYXV0byYgZmls
dGVyID0gKm1fZmlsdGVyOwotICAgIGZpbHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwot
Ci0gICAgZmlsdGVyLmFwcGx5KCk7Ci0KLSAgICAvLyBHZXQgdGhlIGZpbHRlcmVkIG91dHB1dCBh
bmQgZHJhdyBpdCBpbiBwbGFjZS4KLSAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91
dHB1dFJlY3QoKTsKLSAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50
T2Zmc2V0LnkoKSk7Ci0KLSAgICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1
dCgpKQotICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRwdXRC
dWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIucmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICBpbnB1dENvbnRleHQoKS0+
cmVzdG9yZSgpOwogCi0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworICAg
IGF1dG8gZ2VvbWV0cnkgPSBDU1NGaWx0ZXJHZW9tZXRyeTo6Y3JlYXRlKG1fc291cmNlSW1hZ2VS
ZWN0LCBtX3NvdXJjZUltYWdlUmVjdCwgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246
OlVuaXRlKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZp
bHRlciwgbV9zb3VyY2VJbWFnZS5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOwogCiAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwg
dGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMx
OTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjJhZjZmYjQ3ZTE4NGY2OTQwNDdjMGU3MTUyNzNhYzE0
MmFhNWJmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENh
Y2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNz
IEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5
ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMTkgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0
d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgp
IHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRl
eHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRl
ZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVs
ZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAor
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9z
b3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CiAgICAgTGF5
b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRh
Y2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAgIExh
eW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDE5NTA5ZDk3MThh
ZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjlhZWNkNTM4YjA1ZGRjMjZiMDIyMmQwMmVi
MzI3Yjc4OWUzN2I5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNyw2ICszOCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisj
aW5jbHVkZSAiU1ZHRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKQEAgLTgyLDE0OSArODUsNjUgQEAgdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNs
aWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9y
SW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlk
YXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QK
LXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwot
ICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxk
Tm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJv
dW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZm
ZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmls
dGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXIt
PnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAg
ICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAg
Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8g
ZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBp
ZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBl
bmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5k
ZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0Lmdl
dCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRl
eHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5k
aW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUo
REVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3Qt
PnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0
eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6
TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRp
ZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZN
b3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25T
ZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsK
IAotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgYXBwbHlSZXNv
dXJjZSByZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KLSAgICBpZiAobV9yZW5kZXJl
ckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkgewotICAgICAgICBGaWx0ZXJEYXRh
KiBmaWx0ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZyZW5kZXJlcik7Ci0g
ICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQYWludGluZ1NvdXJj
ZSB8fCBmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWluZykKLSAgICAgICAg
ICAgIGZpbHRlckRhdGEtPnN0YXRlID0gRmlsdGVyRGF0YTo6Q3ljbGVEZXRlY3RlZDsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdyZSBpbiBhIGN5Y2xlLCBv
ciB3ZSdyZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1c3QgZG8gbm90aGluZyBt
b3JlIG5vdy4KLSAgICB9Ci0KKyAgICAvLyBCdWlsZCB0aGUgU1ZHRmlsdGVyCiAgICAgYXV0byBm
aWx0ZXJEYXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigpOwotICAgIEZsb2F0UmVjdCB0YXJn
ZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7Ci0KLSAgICBmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxT
VkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVy
VW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVuZGVyaW5n
TW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3Ig
ZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0
ZVN5c3RlbShyZW5kZXJlcik7Ci0gICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJF
bGVtZW50KCksIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byB0YXJnZXRCb3VuZGluZ0JveCA9
IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgZmlsdGVyRGF0YS0+Ym91bmRhcmll
cyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4o
JmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCksIHRhcmdldEJv
dW5kaW5nQm94KTsKIAotICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUg
aW1hZ2VzIGZvciBmZVRpbGUuCi0gICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAs
IGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKLQotICAgIC8vIERldGVybWluZSBh
YnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4K
KyAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZUltYWdlUmVjdAogICAgIGZpbHRlckRhdGEtPmRy
YXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwogICAgIGZpbHRlckRh
dGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwotICAg
IEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24pOwotCi0g
ICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91
bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEt
PmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8g
Q3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5i
dWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICgh
ZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0
ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUg
SW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAg
ICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAg
RmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
Zyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2Fs
ZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAKLSAgICAvLyBTZXQgdGhlIHNjYWxl
IGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJl
c29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZF
ZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVy
RGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0
RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5w
dXRzKQorICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGVUcmFuc2Zvcm0KKyAgICBhdXRvIGFi
c29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3Jt
YXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOworICAgIGlmICghYWJz
b2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZm
ZWN0KCkpOwotCi0gICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJl
Y3QoKTsKLSAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1h
Z2Ugc2l6ZSwKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNj
YWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJS
ZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRG
aWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBv
ZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1
Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCisgICAgZmlsdGVyRGF0YS0+c2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKIAot
ICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBs
aWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJv
dW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZl
Y3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgotICAgIGlmIChmaWx0ZXJEYXRh
LT5kcmF3aW5nUmVnaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJG
aWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgICAgICBmaWx0ZXJEYXRhLT5z
YXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5z
ZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbHRlciByZXNvbHV0aW9uCisgICAgZmls
dGVyRGF0YS0+c2NhbGUgPSBTVkdGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRlUmVzb2x1dGlvbihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBmaWx0ZXJE
YXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICAvLyBDaGFuZ2UgdGhlIGNv
b3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB0byB0aGUgZmlsdGVyZWQgZWxlbWVudCB0
byByZWZsZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBmaWx0ZXIuCisgICAgLy8gQ2FsY3VsYXRl
IGVmZmVjdGl2ZVRyYW5zZm9ybQogICAgIEFmZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zv
cm07Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKKyAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoZmlsdGVyRGF0YS0+c2NhbGUp
OwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgYXV0byBjb2xvclNwYWNlID0g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCk7CiAjZWxzZQogICAgIGF1dG8gY29s
b3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogI2VuZGlmCisKICAgICBh
dXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAgIGlmICghc291cmNlR3JhcGhpYykgewot
ICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJl
cikpOworLy8gICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMo
JnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7
CiAgICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUo
ZmlsdGVyRGF0YSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIC8v
IFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZp
bHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKIAorICAg
IC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdy
YXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNl
R3JhcGhpYy0+Y29udGV4dCgpOwotICAKKwogICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNC
dWZmZXIgPSBXVEZNb3ZlKHNvdXJjZUdyYXBoaWMpOwogICAgIGZpbHRlckRhdGEtPnNhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7CiAKICAgICBjb250ZXh0ID0gJnNvdXJjZUdyYXBoaWNDb250ZXh0Owog
Ci0gICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIp
KTsKICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZp
bHRlckRhdGEpKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjksMzggKzE4OCwxOCBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBG
aWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3Qo
KTsKLQotICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0
eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4g
SXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCi0gICAgICAgIC8vIGluaXRpYWwgZmls
dGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24g
YQotICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4KLSAgICAgICAgaWYgKGZpbHRlckRhdGEuc3Rh
dGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCi0gICAgICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+
c2V0U291cmNlSW1hZ2UoV1RGTW92ZShmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIpKTsK
LQotICAgICAgICAvLyBBbHdheXMgdHJ1ZSBpZiBmaWx0ZXJEYXRhIGlzIGp1c3QgYnVpbHQgKGZp
bHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkJ1aWx0KS4KLSAgICAgICAgaWYgKCFsYXN0
RWZmZWN0LT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZp
bHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAg
ICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWZpbHRlckRhdGEuYm91
bmRhcmllcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRh
dGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZl
Y3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAg
ICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgICAg
IGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3Jt
LmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRl
ckRhdGEuc2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCks
IDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoKnJlc3VsdEltYWdlLCBsYXN0RWZm
ZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZp
bHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgICAgICAgICBjb250
ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgYXV0byBnZW9tZXRyeSA9IFNWR0ZpbHRlckdlb21ldHJ5OjpjcmVh
dGUoZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJEYXRhLmJvdW5kYXJpZXMsIGZpbHRlckRhdGEuZHJh
d2luZ1JlZ2lvbiwgcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKSwgZmlsdGVyRGF0YS5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRl
eHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcigqZmlsdGVyRGF0YS5maWx0ZXIsIGZpbHRlckRhdGEu
c291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgV1RGTW92ZShnZW9tZXRyeSkpOworICAgIAorICAg
ICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICAgICAgY29udGV4dC0+
Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIH0K
LSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIg
IiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CiAKIEZsb2F0UmVj
dCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwOCwyNyArMjA3LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZH
RmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVu
aXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGluZ0JveCgpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9i
amVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQordm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBjb25z
dCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCi0gICAgTE9HKEZpbHRlcnMsICJSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVyICVw
IiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZvciAoY29uc3QgYXV0byYgb2JqZWN0RmlsdGVyRGF0
YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewogICAgICAgICBjb25zdCBhdXRvJiBm
aWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0YVBhaXIudmFsdWU7CiAgICAgICAgIGlmIChmaWx0
ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIqIGJ1aWxkZXIgPSBmaWx0ZXJEYXRhLT5idWls
ZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJFZmZlY3QqIGVmZmVjdCA9IGJ1aWxkZXItPmVmZmVj
dEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAgICAgaWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgLy8gU2luY2UgYWxsIGVmZmVjdHMgc2hhcmVzIHRoZSBzYW1lIGF0
dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAgIC8vIG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNo
YW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0dmUtPnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShl
ZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXIt
PmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3QpOwotCiAgICAgICAgIC8vIFJlcGFpbnQgdGhl
IGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24o
Km9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oCmluZGV4IDhjZTBjN2FiYzE0M2JkYjY1Mzg1MGM5M2UzMjkyYWM5ZGE0OWJiYzcu
LjcxZTRkMWYzNDZjMzI2MmQ3ZjRlMDMzYzRjM2Y4MTljMjhjMTgxZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgK
QEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1
aWxkZXIuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsOCArNDIsNyBAQCBwdWJsaWM6
CiAKICAgICBGaWx0ZXJEYXRhKCkgPSBkZWZhdWx0OwogCi0gICAgUmVmUHRyPFNWR0ZpbHRlcj4g
ZmlsdGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyOwor
ICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRlcjsKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNvdXJj
ZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQgeyBudWxs
cHRyIH07CiAgICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOwpA
QCAtNzIsOCArNzAsNiBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJikgY29uc3Q7Ci0K
ICAgICBpbmxpbmUgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0ZXJVbml0cygpIGNvbnN0
OwogICAgIGlubGluZSBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCmluZGV4IGRlNDkzMjgyNjNkMDYyYTIzNWJjZDJmNDY2N2VlZjA5YzEy
ZWIzYjMuLjZmNzZmMjBjOWM5ZGNkYTUyMTIwNTMyNzQwNmE4ZWM0MWE5MzBmY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAog
I2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUg
IlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIK
ICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgog
I2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgpAQCAtNDMxLDEzICs0MzMsOSBA
QCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMs
ICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci5wcmltaXRpdmVVbml0cygpKTsKICAgICAgICAgdHMg
PDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2gg
aXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0Owot
ICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNm
b3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBp
ZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQo
KSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVy
OjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIFRleHRTdHJl
YW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLQotICAgICAgICAgICAgaWYgKEZpbHRl
ckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKLSAgICAgICAgICAg
ICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICAgICAgICAg
IGR1bW15RmlsdGVyLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlw
ZSkgewogICAgICAgICBjb25zdCBhdXRvJiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyJj4ocmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUJsZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3OTlmMTE3NGNmZTA0YjgyMmQ2ZDA2
NDMxZjY4Ni4uOWIxM2U2NTUzNDliNDA4ZTk4ZTA0MDBkNzQzZTIxZDYzMDc4YTUwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCkBAIC0xMDAsMjAgKzEwMCwxNSBA
QCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRl
ciwgbW9kZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVu
ZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9Owor
CisgICAgcmV0dXJuIHsgRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSksIHsgeyAqaW5wdXQxIH0sIHsg
KmlucHV0MiB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
aAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2Li5iYzk1YmM5
MjVjZDAzNTcxNDc0ZWMyZjcyNTg1NDZkZmU0M2Q3NjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFy
c2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVy
cmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCAw
NTI0ODU3OGMyNzRjOGZhMmIzZTFmMjQ0ZTQzNjc4NjhmNDJiYTljLi5lODY4NTI3MDczODgwMjY2
NTE4MzgzNmQ0OTMzMTFhMTM0ZmY5ZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbG9yTWF0cml4RWxlbWVudC5jcHAKQEAgLTEwMCwxMiArMTAwLDExIEBAIHZvaWQgU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5w
dXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPGZs
b2F0PiBmaWx0ZXJWYWx1ZXM7CiAgICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBl
KCk7CkBAIC0xMzUsMTUgKzEzNCwxMyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAgICAg
ICBpZiAoKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiBzaXplICE9
IDIwKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURSAmJiBzaXplICE9IDEpCiAgICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUgJiYgc2l6ZSAhPSAxKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIGZp
bHRlclZhbHVlcyA9IHZhbHVlcygpOwogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQo
KTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0
ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4g
eyBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMp
KSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5k
ZXggN2FiNGFhNDE4MWU3YWIxOThiMTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uMWJlYzU0MzdhNmUw
ZGY1NGVlNDc1N2I5YmIwNzQzZmExOThhNjlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lz
dHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmlu
ZGV4IDkwYTU1YjdlZmZmN2EzZmU2MDZhOWUwNTc5YTc2ZWRlOWY5NjgwMTEuLjA3NWNjYTM1YzUy
NjkwOTQ3MjM1ZTg4NTc2OTgyNDc2MDJjNWZjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtNjMsMTIgKzYzLDEx
IEBAIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVw
bGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
KSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7Ci0gICAgCisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAgICBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuOwpAQCAtODYsOSArODUsNyBAQCBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdAogICAgICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNB
RWxlbWVudD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0gICAgYXV0
byBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07
Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThiOTkzYTRkZDU0ODYzLi43OTM3
MTE2ZDM0YzdhNzViZTQzYmViMzVmMGMzMTQ5NGU1NzJjM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMs
NyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3Npbmcu
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4
YTZiYWY2NTNkYzA2ZmUyMDVhYzk4MjM1Li40MzYzODBiMDkxMmI5YTliN2E3NzcxYjI0OGYxN2E5
OTA1NDU3NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcApAQCAtNDAsNyArNDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lz
dGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9p
bjE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFt
ZXM6OmluMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigpOwotICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIs
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fc3ZnT3Bl
cmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZH
TmFtZXM6Om9wZXJhdG9yQXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9jb21wb3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3Ry
eTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjptX2sxPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5
PFNWR05hbWVzOjprMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazI+KCk7CiAgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmszQXR0ciwg
JlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2LDkgQEAgUmVmPFNW
R0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENv
bXBvc2l0ZU9wZXJhdGlvblR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgRkVDb21w
b3NpdGVPcGVyYXRvciBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3Np
dGVPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1
ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8Q29t
cG9zaXRlT3BlcmF0aW9uVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX2NvbXBv
c2l0ZU9wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4ocHJv
cGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk5LDcgKzk5LDcgQEAg
Ym9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QKIHsKICAgICBGRUNvbXBvc2l0ZSogY29tcG9zaXRlID0g
c3RhdGljX2Nhc3Q8RkVDb21wb3NpdGUqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRPcGVy
YXRpb24oc3ZnT3BlcmF0b3IoKSk7CisgICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldENvbXBv
c2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9yKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6azFBdHRyKQogICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLMShrMSgpKTsK
ICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKQEAgLTEzMSwyMCArMTMxLDE1
IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBh
dXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwotICAgIAor
ICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBp
bnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMigpKTsKKwogICAgIGlmICghaW5wdXQxIHx8
ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBG
RUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMo
KSwgazQoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0g
ICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQo
aW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiB7IEZFQ29tcG9zaXRlOjpjcmVhdGUoY29tcG9zaXRlT3BlcmF0b3IoKSwgazEo
KSwgazIoKSwgazMoKSwgazQoKSksIHsgeyAqaW5wdXQxIH0sIHsgKmlucHV0MiB9IH0gfTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgx
YTc4Yzg2NTdhMGZhMzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLmY1MTAwMWUyMGQ3MDRkZDg2
ODMxNmI4ZDMwYjJhMjBkOTg0OTQ1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgKQEAgLTI3LDE1ICsyNywxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB0ZW1wbGF0ZTw+Ci1pbmxpbmUgdW5zaWduZWQgU1ZHSURMRW51bUxpbWl0czxDb21wb3NpdGVP
cGVyYXRpb25UeXBlPjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CitpbmxpbmUgdW5zaWduZWQgU1ZHSURMRW51bUxp
bWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJl
dHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKIHRlbXBsYXRlPD4KLXN0
cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CitzdHJ1Y3Qg
U1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNp
Z25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfTElH
SFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhDb21wb3NpdGVPcGVyYXRpb25U
eXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3IpIHsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKQEAgLTU4LDcgKzU4LDcgQEAg
c3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3ZlciIpCiAgICAgICAgICAgICByZXR1cm4gRkVDT01Q
T1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIFN0
cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2luMi0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdP
cGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+KCk7IH0KKyAgICBG
RUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZhbHVlPEZFQ29tcG9zaXRlT3BlcmF0b3I+KCk7IH0K
ICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAg
ICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVybiBtX2syLT5jdXJyZW50VmFsdWUoKTsgfQogICAg
IGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMy0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTkz
LDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVk
KCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4yQW5pbWF0ZWQo
KSB7IHJldHVybiBtX2luMjsgfQotICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJh
dG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fY29tcG9z
aXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazFBbmltYXRlZCgpIHsgcmV0
dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazJBbmltYXRlZCgpIHsgcmV0dXJu
IG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazNBbmltYXRlZCgpIHsgcmV0dXJuIG1f
azM7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5
UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBT
VkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMiB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVy
YXRpb246OmNyZWF0ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OworICAgIFJl
ZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2NvbXBvc2l0ZU9wZXJhdG9yIHsgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07
CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2sxIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNy
ZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMiB7IFNWR0FuaW1h
dGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1f
azMgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsCmluZGV4IDc4ZTQwMjA3ZjViMDJmNjcwZjA0
MGIyOTM3NWVhZDdjMmI0NTJkZTAuLmZjNjcwYzllYzU2YzQxYzEwOTI4NTQ4NDI3YzVmNmE4ZTE4
NWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRs
CkBAIC0zOCw3ICszOCw3IEBACiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRT
dHJpbmcgICAgICBpbjE7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5n
ICAgICAgaW4yOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRy
aWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRB
cz1jb21wb3NpdGVPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gb3BlcmF0b3I7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVy
ICAgICAgazE7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAg
azI7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgazM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApp
bmRleCBmNzUwNTgxNWRlY2FiYjRlYTM0YjQzNWI0N2VhNWE4MGM2YTI2ZGYxLi4zYjQ2NTQwZjdl
ZTFjNDEwZmI4YjczNmFlNDIzNDAwODE2NzE2ODMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKQEAgLTE5MSwxMiArMTkxLDExIEBA
IHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0
CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAg
aWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgaW50IG9yZGVyWFZhbHVlID0gb3JkZXJYKCk7CiAgICAgaW50IG9yZGVyWVZhbHVl
ID0gb3JkZXJZKCk7CkBAIC0yMDYsMjIgKzIwNSwyMiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVy
QgogICAgIH0KICAgICAvLyBTcGVjIHNheXMgb3JkZXIgbXVzdCBiZSA+IDAuIEJhaWwgaWYgaXQg
aXMgbm90LgogICAgIGlmIChvcmRlclhWYWx1ZSA8IDEgfHwgb3JkZXJZVmFsdWUgPCAxKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvJiBrZXJu
ZWxNYXRyaXggPSB0aGlzLT5rZXJuZWxNYXRyaXgoKTsKICAgICBpbnQga2VybmVsTWF0cml4U2l6
ZSA9IGtlcm5lbE1hdHJpeC5pdGVtcygpLnNpemUoKTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRo
aXMgaXMgYSByZXF1aXJlbWVudCwgYW5kIHNob3VsZCBiYWlsIG91dCBpZiBmYWlscwogICAgIGlm
IChvcmRlclhWYWx1ZSAqIG9yZGVyWVZhbHVlICE9IGtlcm5lbE1hdHJpeFNpemUpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaW50IHRhcmdldFhW
YWx1ZSA9IHRhcmdldFgoKTsKICAgICBpbnQgdGFyZ2V0WVZhbHVlID0gdGFyZ2V0WSgpOwogICAg
IGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSAmJiAodGFyZ2V0WFZhbHVl
IDwgMCB8fCB0YXJnZXRYVmFsdWUgPj0gb3JkZXJYVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZh
dWx0IHZhbHVlIGlzOiB0YXJnZXRYID0gZmxvb3IgKCBvcmRlclggLyAyICkpCiAgICAgaWYgKCFo
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSkKICAgICAgICAgdGFyZ2V0WFZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob3JkZXJYVmFsdWUgLyAyKSk7CiAgICAgaWYgKGhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpICYmICh0YXJnZXRZVmFsdWUgPCAwIHx8
IHRhcmdldFlWYWx1ZSA+PSBvcmRlcllWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFs
dWUgaXM6IHRhcmdldFkgPSBmbG9vciAoIG9yZGVyWSAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpKQogICAgICAgICB0YXJnZXRZVmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlcllWYWx1ZSAvIDIpKTsKQEAgLTIzNCwxMSArMjMzLDEx
IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZVmFs
dWUgPSAxOwogICAgIH0KICAgICBpZiAoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSA8PSAwIHx8IGtl
cm5lbFVuaXRMZW5ndGhZVmFsdWUgPD0gMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBmbG9hdCBkaXZpc29yVmFsdWUgPSBkaXZpc29yKCk7CiAg
ICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZGl2aXNvckF0dHIpICYmICFkaXZpc29yVmFs
dWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIGlm
ICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29yQXR0cikpIHsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBrZXJuZWxNYXRyaXhTaXplOyArK2kpCiAgICAgICAgICAgICBkaXZpc29y
VmFsdWUgKz0ga2VybmVsTWF0cml4Lml0ZW1zKClbaV0tPnZhbHVlKCk7CkBAIC0yNDYsOSArMjQ1
LDE4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgICAgICBkaXZpc29yVmFsdWUg
PSAxOwogICAgIH0KIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRl
KGZpbHRlciwgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUpLCBkaXZpc29yVmFsdWUs
IGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9kZSgp
LCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFs
dWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJpeCk7Ci0gICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4gewor
ICAgICAgICBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoCisgICAgICAgICAgICBJbnRTaXplKG9y
ZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksCisgICAgICAgICAgICBkaXZpc29yVmFsdWUsCisgICAg
ICAgICAgICBiaWFzKCksCisgICAgICAgICAgICBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdl
dFlWYWx1ZSksCisgICAgICAgICAgICBlZGdlTW9kZSgpLAorICAgICAgICAgICAgRmxvYXRQb2lu
dChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwKKyAgICAg
ICAgICAgIHByZXNlcnZlQWxwaGEoKSwKKyAgICAgICAgICAgIGtlcm5lbE1hdHJpeCksCisgICAg
ICAgIHsgeyAqaW5wdXQxIH0gfQorICAgIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKaW5k
ZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5MDQ5YjMzOS4uMTg3MDZkYTczNWZk
MmE3NzhmN2YxODU4NzZmNzQ4Zjg0Y2ExZjBjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNw
cAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li5iOWMxYjNh
Mjk3NjgzZGY5ODA0ZmM2OTEyNzVlMDYwN2ZiNmM3NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtODksMTQgKzg5LDE0
IEBAIGJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsCiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgICAg
ICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmls
dGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAg
ICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7CisgICAg
ICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldENvbG9yKGNvbG9yKTsKICAgICB9CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQogICAgICAgICByZXR1
cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwogICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKICAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFu
dCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+
KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7CisgICAgYXV0byYgbGlnaHRTb3VyY2Ug
PSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5nLT5zb3VyY2UoKSk7CiAg
ICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVt
ZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwog
CkBAIC0xNTEsMjggKzE1MSwyNSBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAg
ICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5w
dXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVu
dCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0
RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3Vy
Y2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb2xvciBj
b2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2Nh
bGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRM
ZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFRGlm
ZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3Rh
bnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShs
aWdodFNvdXJjZSkpLCB7IHsgKmlucHV0MSB9IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRi
NmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLjliMzRhYTcyMmIwNGQ1NDFhZDY0OTc4MGUz
YWNmNDBkNTExMDFkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5kZXggMGM1ZTgy
NWJjODI1NjBmMzZhMjY5ZWE2ZDcyMmRmZDA1MTczZDhjMi4uYzllZDJmNTI3MGYwMmZkNzc3ODg1
MGVmZWZhN2U3MTMwYTRlMmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKQEAgLTExNSwyMCArMTE1LDE1IEBAIHZvaWQgU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAg
IGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAg
YXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0
MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8
ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBG
RURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvcigpLCB5Q2hh
bm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2
ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1
dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhD
aGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKSwgeyB7ICppbnB1
dDEgfSwgeyAqaW5wdXQyIH0gfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0
MTFjNGQwYWU1ZWNkNTg2NjVkMy4uMGU1OTNkZDBkYTI0NjAzMDllMWVjNjgxNjFhODE3NzE0OWI0
MGY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZp
bHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAppbmRleCBhNjg2YmI4ZmEzOGQ5
ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZmMmY3Li45MTZmMDNjMGY5MTU3ZWM4MjhjOTJlOTliNjNi
ZDYyMmU5NTI2YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmNwcApAQCAtMzYsNyArMzYsNyBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50PiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYQog
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CitSZWY8TGlnaHRTb3Vy
Y2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIERpc3RhbnRMaWdodFNvdXJjZTo6Y3JlYXRl
KGF6aW11dGgoKSwgZWxldmF0aW9uKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudC5oCmluZGV4IGZiZGY3MWMwZWNiZDlmOTk3ZDY5ZWE2NTRiOWY1
YmEwMzE3ZDcxY2MuLmJiYmZlOTQ3MzliNDQzOWMwNjA2YmMxMzg4ZWQ4MGY3MjI3MjU4NGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKQEAgLTMw
LDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRURpc3RhbnRMaWdodEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3Vy
Y2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBS
ZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggMjJiY2UxZDMzMzE3Yzk1NzFm
ZTVkNzlmNGIzMjZhODliZmM1YjY4MS4uNjM0NzEwOGYyNmJiOGE1MzhlYTY5M2UxMzA3ZWYxMDRm
OGQ0MmE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50
LmNwcApAQCAtOTcsMjcgKzk3LDI1IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIpIGNvbnN0CiB7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0
KGluMSgpKTsKKyAgICBpZiAoIWlucHV0MSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
aWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogICAgIAog
ICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5
bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBz
dGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNp
dHkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVy
biBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9u
WCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KSwgeyAqaW5w
dXQxIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVt
ZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0MmY3NDUxZC4uMWM2
ZTEyMjAwYzBiMDdhNTY1OTQwMDVmZDNjNDEyNmEyZTZkZWM4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAppbmRleCBjMjI4ZTIyZDU2NWQwZTE2M2Zm
ODdkMGI0YmNhYmQyMjQ0NzU4ZmMyLi5mMmZhOGQ1NDBhOGQxMGM5OTBlNGRlNzRiNmRkNGJhYWYw
MGE4MTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKQEAgLTU4
LDE4ICs1OCwxOCBAQCBib29sIFNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRmxvb2RFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAK
ICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9y
RmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0
eWxlLmZsb29kT3BhY2l0eSgpOwogCi0gICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIs
IGNvbG9yLCBvcGFjaXR5KTsKKyAgICByZXR1cm4geyBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9w
YWNpdHkpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
aAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcyNDhhMWI2ZjVjZjUxZmVlOTExLi40ZjAzYTc2
NWM5ODcyODUzZjkzZjVhMmY4MDBkZjI2MjU1YzNlNjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuaApAQCAtMzYsNyArMzYsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNW
R1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlk
ZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5
ZC4uYmU4MjA2YTRiN2Q1YzhiZjU2YWJhYmRjYzE1MDk5MDc1MjhiNzYwMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTk1LDE4ICs5
NSwxNiBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAg
IGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgp
LCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVHYXVz
c2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1v
ZGUoKSksIHsgKmlucHV0MSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBkODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQx
MDAxY2U0OGVlMGIyLi5iNWY2MmQ0YTAzYjNjMTg4Yjg1YzgyNjMxMzY2MDE4ZTUyM2IxMTQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01
Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRl
eCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi4xOTM0MDg3MjIzYzk1
M2MwNDUxYjRmMGM2ZmY4OGRhYzY2MDU5Zjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3
NCwxNiArMTc1LDQ0IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50
UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPElt
YWdlQnVmZmVyPiBTVkdGRUltYWdlRWxlbWVudDo6aW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSBjb25z
dAogewotICAgIGlmIChtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aEltYWdlKGZpbHRlciwgbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcigpKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKLQogICAgIGF1dG8gdGFyZ2V0ID0gU1ZH
VVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29w
ZSgpKTsKKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKICAgICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50
T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3Bl
KCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICBhdXRvIGNvbnRleHROb2Rl
ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCk7CisgICAg
YXV0byByZW5kZXJlciA9IGNvbnRleHROb2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzcmNSZWN0ID0gcmVuZGVy
ZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvJiBjb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBj
b250ZXh0LnRyYW5zbGF0ZSgtc3JjUmVjdC5sb2NhdGlvbigpKTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVu
ZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1h
dGlvbik7CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFSW1hZ2VFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKK3sKKyAgICBpZiAobV9jYWNoZWRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIHsgRkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4geyAqbV9j
YWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpLCB7IH0gfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZm
ZXJGb3JFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgRkVJbWFnZTo6Y3JlYXRlKGltYWdlQnVm
ZmVyLnJlbGVhc2VOb25OdWxsKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSksIHsgfSB9OworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmluZGV4IGQ5M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVh
MjU2YmFkYTE1NGM1YzcuLjA1YmVmOWFmMTM5YmQ2MDQ2ZmRiNmU4YjhlNjJkM2FhZjUxMTM4MGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCkBAIC01NSw3ICs1NSw5IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
Rm9yRWZmZWN0KCkgY29uc3Q7CisgICAgCisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwog
ICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGln
aHRFbGVtZW50LmgKaW5kZXggY2QwYmZiOWVkY2ZkN2I0ZTFhZjM5YjU1ZWRiYmJkNzg0YWFlYTg5
ZC4uMWNiMjdkZjMxNTA0MDE3YzY5OWUwMTBjZWQ0YjBkNWQ2MDBiYzYzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgU1ZHRmls
dGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQg
ewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRkVMaWdodEVsZW1lbnQpOwogcHVibGlj
OgotICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJj
ZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOwogICAgIHN0YXRpYyBTVkdGRUxp
Z2h0RWxlbWVudCogZmluZExpZ2h0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7CiAKICAgICBm
bG9hdCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoLT5jdXJyZW50VmFsdWUoKTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5kZXggYmUyZjZlMDMw
N2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uNWQ3ZDcwY2RjZTYwMWU0Mjg2YmQ3NWVh
M2Y2MjIwYTQ1ZmQ5YTJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
Y3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDUsMjQgKzQ0LDIy
IEBAIFJlZjxTVkdGRU1lcmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZH
RkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBlZmZlY3QgPSBG
RU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlucHV0
czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJn
ZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBt
ZXJnZUVmZmVjdCA9IGJ1aWxkZXIubmFtZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsKICAgICAg
ICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOworICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJlbGVh
c2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0KCk7Ci0K
ICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsg
RkVNZXJnZTo6Y3JlYXRlKG1lcmdlSW5wdXRzLnNpemUoKSksIFdURk1vdmUobWVyZ2VJbnB1dHMp
IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1
MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4MDJkMjgzY2Y0ZTNjMi4uNTVhNjExZjA3ODhlMDc0MmI1
YjNiYjE4Y2FkYWZlMTU4MzhjNzAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVt
ZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lz
dHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVn
aXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5
UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IGQ2ZmI5NWM4ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQx
Nzk1ZDMyMWIuLjI5YmI1OWQ3MWY1N2E0NzJlMzMwZTFmMjhlNDUxYThmMmM3YjczZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKQEAgLTM5LDcg
KzM5LDcgQEAgaW5saW5lIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmEKICAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAg
UHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudDo6bV9pbjE+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6
OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9tb3Jw
aG9sb2d5T3BlcmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJv
cGVydHk8U1ZHTmFtZXM6OnJhZGl1c0F0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3Jh
ZGl1c1gsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1k+KCk7CiAgICAgfSk7CiB9
CkBAIC01OSw5ICs1OSw5IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVz
KGZsb2F0IHgsIGZsb2F0IHkpCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVl
KQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBNb3Jw
aG9sb2d5T3BlcmF0b3IgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xv
Z3lPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1
ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX21vcnBo
b2xvZ3lPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvcj4ocHJv
cGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg1LDcgKzg1LDcgQEAg
Ym9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiBlZmZlY3QsIGNvbnMKIHsKICAgICBGRU1vcnBob2xvZ3kqIG1vcnBob2xvZ3kg
PSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0
TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOworICAgICAgICByZXR1cm4gbW9ycGhv
bG9neS0+c2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcigpKTsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKICAgICAgICAgLy8gQm90aCBz
ZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJhdGVseS4KICAgICAg
ICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWChyYWRpdXNY
KCkpOwpAQCAtMTE0LDIxICsxMTQsMTggQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAg
ZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5u
YW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4geyB9OwogCisgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1go
KTsKKyAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOwogICAgIGlmICh4UmFkaXVzIDwgMCB8
fCB5UmFkaXVzIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3Zn
T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRU1vcnBo
b2xvZ3k6OmNyZWF0ZShtb3JwaG9sb2d5T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyksIHsg
eyAqaW5wdXQxIH0gfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVh
ZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li4zZDcyN2EzZjUwYjYwNzViNTVjZmMwMzQzZWMzOTEz
Mjk5MWRhYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50
LmgKQEAgLTI2LDEyICsyNiwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4geworc3Ry
dWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1
bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0RJTEFURTsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0
b3IgbW9ycGhvbG9neU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU6CkBAIC00NCw3ICs0
NCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBz
dGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZXJvZGUiKQogICAgICAgICAgICAgcmV0dXJu
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERTsKQEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRSYWRpdXMoZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKICAg
ICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9Ci0g
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPigpOyB9Cisg
ICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fbW9ycGhvbG9neU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yPigp
OyB9CiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWC0+Y3VycmVu
dFZhbHVlKCk7IH0KICAgICBmbG9hdCByYWRpdXNZKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNZ
LT5jdXJyZW50VmFsdWUoKTsgfQogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVk
KCkgeyByZXR1cm4gbV9pbjE7IH0KLSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVy
YXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVk
RW51bWVyYXRpb24mIG1vcnBob2xvZ3lPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9tb3Jw
aG9sb2d5T3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgcmFkaXVzWEFuaW1hdGVk
KCkgeyByZXR1cm4gbV9yYWRpdXNYOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1lB
bmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWTsgfQogCkBAIC04MSwxMSArODEsMTEgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
KyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVm
ZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0Fu
aW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fbW9ycGhvbG9neU9wZXJh
dG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7
IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fcmFkaXVzWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKaW5kZXgg
YTJjMTgxZjJlNjM3Y2QzOTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4uMmQyMWYyYTFkODg4ZDAy
ZWMxNzlkZjEwZTJkZTQzZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAogICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFNWR19NT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAgID0gMjsKIAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKLSAgICBbSW1wbGVt
ZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhvbG9neU9wZXJhdG9yXSBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICByYWRpdXNYOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJhZGl1c1k7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlm
OWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uODdiYTM4N2IzNTA1ODFlZmZkNDM2ZDA1ZDNiNDBl
NGM1NmVlNDc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAK
QEAgLTgxLDE2ICs4MSwxMyBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZH
RkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
Ci0KKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlm
ICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGF1dG8gZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShmaWx0ZXIsIGR4KCksIGR5KCkp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBl
ZmZlY3Q7CisgICAgcmV0dXJuIHsgRkVPZmZzZXQ6OmNyZWF0ZShkeCgpLCBkeSgpKSwgeyB7ICpp
bnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
aAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUzNWI1NzM3MDQ5YmVlLi5mZmExYzE2
ODMzN2Y0NGM5NTIwMWI3MmU4OGMzMWZjNWJlNWYxYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKaW5kZXggOWZmODQ3MzM4YTFiNmE1NWZjZGI4
MjFhMDlmMGFjYzNjMjA3ZWE4MS4uNjQwNjRmNWY2ODA4NDk0Y2Y3YWIxMGRkMDE5YzBhYWQ2OTg5
Y2RhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNw
cApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApA
QCAtMzksMTkgKzM4LDE5IEBAIFJlZjxTVkdGRVBvaW50TGlnaHRFbGVtZW50PiBTVkdGRVBvaW50
TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdGRVBvaW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9
CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2Uo
U1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNv
bnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVyLnByaW1p
dGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJv
dW5kaW5nQm94KCk7Ci0gICAgICAgIAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJv
eC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNl
dFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0KLSAg
ICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExp
Z2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNV
bml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVj
bGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJv
eC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICBpZiAoZmls
dGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGZpbHRl
ci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVy
ZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9z
aXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgp
KTsKKy8vCisvLyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0
bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9j
b29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9zaXRpb24u
c2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIo
KSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8g
ICAgfSBlbHNlCisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHoo
KSk7CiAgICAgCiAgICAgcmV0dXJuIFBvaW50TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaAppbmRleCAz
M2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0NWU0OGRhNzllLi5jNDdhNjA1NmU4ODdkYTA4
MWEwNGYzYjk1MmJkZTQ1YmNkYTlkOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBv
aW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYp
OwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBT
VkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXpl
b2YoU1ZHRkVQb2ludExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50LmNwcAppbmRleCA5YjdjZTQwYWI5NzE2YWU0ZjMzNWY1NGIyNGNkYTQ1OWE4NDI5YTU5Li43
ZGY2NjJjNjczODFiMDFmYTQ1YWVmZTZmYjVmYjU4MDNiZTcyODVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC05Niw3
ICs5Niw3IEBAIGJvb2wgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZm
ZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0CiAgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwog
ICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsK
LSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3Ip
OworICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0Q29sb3IoY29sb3IpOwogICAg
IH0KICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCiAgICAg
ICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxl
KCkpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIGJvb2wgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0CiAgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKICAgICAgICAgcmV0
dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFNwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVu
dCgpKTsKIAotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+
KHNwZWN1bGFyTGlnaHRpbmctPmxpZ2h0U291cmNlKCkpOworICAgIGF1dG8mIGxpZ2h0U291cmNl
ID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRpbmctPnNvdXJjZSgpKTsK
ICAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVs
ZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CiAgICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7
CiAKQEAgLTE2MCwyOCArMTYwLDI1IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJp
bWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAgICBpZiAo
IXJlbmRlcmVyKQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVmUHRyIGxpZ2h0RWxlbWVu
dCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIGlmICgh
bGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBhdXRvIGxp
Z2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7Cisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50
LT5saWdodFNvdXJjZShidWlsZGVyKTsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFw
cGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0Nv
bG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShm
aWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxh
ckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1
dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVj
dWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCks
IFdURk1vdmUobGlnaHRTb3VyY2UpKSwgeyB7ICppbnB1dDEgfSB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4
IDg5N2I4ZGUxNTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0N2IxNDYuLjIzNWJhMTI4YjI2ZGFk
Y2JkNzQ2YWFiZmZmZmZlYzE1MmRkMjFkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAppbmRleCBkNmRh
MzEwNjRjYjFiMzdlOGNjOTM4NzRlYTRhYTljZjJkZmJmZmVlLi43NDEzMWY5MzRmY2MyMTJjMGNl
ODI1YTYwNjYwMjY5MzFjYzMzYWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVTcG90TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmNwcApAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgIlNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
cG90TGlnaHRTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMzksMjcg
KzM4LDI3IEBAIFJlZjxTVkdGRVNwb3RMaWdodEVsZW1lbnQ+IFNWR0ZFU3BvdExpZ2h0RWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU1ZHRkVTcG90TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxM
aWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdGaWx0ZXJC
dWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPExpZ2h0U291cmNlPiBTVkdGRVNwb3RMaWdodEVs
ZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAg
IEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKICAgICBGbG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAg
ICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94
ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRp
b24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwot
ICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VC
b3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRp
b24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3Ju
ZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwot
Ci0gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgpICog
cmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJv
eC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVj
bGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJv
eC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9p
bnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFoo
KSk7Ci0gICAgfQorLy8KKy8vICAgIGlmIChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdV
bml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBG
bG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLwor
Ly8gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5j
ZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkg
KyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2Vu
dGFnZQorLy8gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVm
ZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigp
KSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vCisvLyAgICAgICAgcG9pbnRzQXQuc2V0WChyZWZlcmVu
Y2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVu
Y2VCb3guaGVpZ2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcv
ZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAg
IHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VC
b3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3Fy
dE9mVHdvRmxvYXQpOworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0
UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAgICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQz
RChwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKy8vICAgIH0KIAogICAg
IHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1
bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5nbGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKaW5kZXggM2Y3NzE3YzEyNjVjNGYzMWY1MzA4ODY4
ZDQ3Yzk3ODc5N2E3MzIxMS4uMDc0MzZjYzAxNjYzYjUyMTU2MjRhNmUxMmQ3MTYwNjgxZTk2NTI1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaApAQCAtMzAs
NyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFU3BvdExpZ2h0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4g
bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkg
PT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3
MzcwLi45OGYzN2FmODg2YjRmZGU2YWRkZmM3NzhkNzkzOTUxMjI5YWIzZmNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBAIC03MCwxNiArNzAsMTMgQEAgdm9pZCBT
VkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5h
bWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3Jl
YXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBGRVRpbGU6OmNyZWF0ZSgpLCB7ICppbnB1
dDEgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0
NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEyMmRjNDJhMzNhOTFmLi5iMGMxN2NjMjY1MGIyNTlh
MjMxNTQyYjhiNTU4OWYwZDM1NjIzOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVt
ZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVk
U3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmNwcAppbmRleCAxMTU2MTExOWQ4M2UzZmM3ODhhNDJiMTQ4NjdjNjU2NDEy
MzM0YTRkLi4xZDcyMzEwYjNlODM5ODI5NjY5YzY5ZGM3NjRiZTdiYTIwNzg4MTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIGJvb2wgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zCiB7CiAgICAgRkVUdXJidWxlbmNlKiB0dXJi
dWxlbmNlID0gc3RhdGljX2Nhc3Q8RkVUdXJidWxlbmNlKj4oZWZmZWN0KTsKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+
c2V0VHlwZSh0eXBlKCkpOworICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0VHVyYnVsZW5j
ZVR5cGUodHlwZSgpKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVz
QXR0cikKICAgICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFN0aXRjaFRpbGVzKHN0aXRjaFRp
bGVzKCkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIp
CkBAIC0xMTcsMTEgKzExNywxMSBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBs
ZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAg
aWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VGcmVxdWVuY3lZKCkgPCAwKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoZmlsdGVy
LCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMo
KSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgRkVUdXJidWxlbmNlOjpjcmVhdGUodHlwZSgp
LCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQo
KSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpLCB7IH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKaW5kZXggYmY5
ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3NjllMTk4YS4uMDgwM2MxZTI5MmIzOGQ4MzAx
N2VlYjkxMDYxMTA4MGEyMWRlYzc1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlz
KSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCmluZGV4IDU1NzhiNTE5
YTM2MjJiZDcwNmFkMjdiZmU0YzYwMDM5MTQ4NThjYTAuLjljNDMxMTM0YTg3NzA0ZjA2NDlkOTIy
YmE5NzE2MzZkZDI1ZTFjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5j
cHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudElubGluZXMuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5kZXggZmY1MjIzMDk0NjZiMDQwYmVmMDg5ZDE1N2Iz
ODZkZmZiYjA1YzYxOS4uNzcxYTQxNmVmMGVmMDU1ODJkNzI5ODFhMzBjYzlkNjJlNjUyOWY0NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKQEAgLTI1LDkgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTMsMjIgKzkxLDYgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2gK
ICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZl
Y3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZpbHRlckVmZmVjdCk7Ci0gICAgaWYgKCFmaWx0ZXJF
ZmZlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNYKHRydWUpOwotICAgIGlmICho
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRI
YXNZKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCi0g
ICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzV2lkdGgodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFz
SGVpZ2h0KHRydWUpOwotfQotCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5
bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKIHsKICAgICByZXR1cm4gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU+KCp0aGlzLCBXVEZN
b3ZlKHN0eWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKaW5kZXggYzk4YjEzZWQ5NjI3NmFmOWUxNGY2
NDI4MTFhNmZkNzQ2NzcyYWNhNy4uNzI1YTg3MDE1OThmYWZmYTZlZGJhYjAxNjEzMDA3NGFlNTQ3
MmZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAtMzYsMTIgKzM2LDYgQEAgY2xhc3MgU1ZHRmls
dGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6
IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9
IDA7Ci0gICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBm
cm9tIHRoZSBvbGQgb25lLgotICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJv
cGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0VsZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3Ro
VmFsdWUmIHgoKSBjb25zdCB7IHJldHVybiBtX3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2
ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVk
KCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5p
bWF0ZWQoKSB7IHJldHVybiBtX3Jlc3VsdDsgfQogCisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5l
dyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KKyAgICB2aXJ0dWFsIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKTsKKwogcHJvdGVjdGVkOgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcyhjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5
MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li41YTIyNzQyNmQ4NTVkMTI2NzcwNmNm
Yjg1Y2UzM2EyMzcwZjNhYzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
MTMwICsyNCw4NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFSW1hZ2Uu
aCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgor
I2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFn
ZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAgLCBtX2ltYWdl
KGltYWdlKQotICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8p
CitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFNvdXJjZUltYWdlJiYgc291cmNlSW1hZ2Us
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykK
IHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2Up
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBm
aWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV90cmVlU2NvcGUoJnRyZWVT
Y29wZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJbWFnZTo6RkVJbWFnZShTb3VyY2VJbWFnZSYm
IHNvdXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZl
QXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVJbWFnZSkKKyAgICAsIG1f
c291cmNlSW1hZ2UoV1RGTW92ZShzb3VyY2VJbWFnZSkpCiAgICAgLCBtX3ByZXNlcnZlQXNwZWN0
UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6
OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdlPiBpbWFnZSwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCBpbWFnZSwgcHJlc2VydmVB
c3BlY3RSYXRpbykpOwotfQotCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJl
ZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmlu
ZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVl
U2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKLX0KLQotdm9pZCBGRUltYWdlOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVJbWFnZTo6ZHJhd2luZ1Jl
Y3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBG
bG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0
KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAg
ICBpZiAobV9pbWFnZSkgewotICAgICAgICBzcmNSZWN0LnNldFNpemUobV9pbWFnZS0+c2l6ZSgp
KTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0
LCBzcmNSZWN0KTsKLSAgICB9IGVsc2UgaWYgKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVm
ZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRy
YW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkpOwotCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVy
c2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRl
KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChwYWludFJlY3QpKTsKLX0KKyAgICBhdXRvIGRyYXdpbmdSZWN0T2ZTb3VyY2VJbWFnZSA9
IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25zdCBSZWY8SW1hZ2U+JiBpbWFnZSkg
eworICAgICAgICAgICAgYXV0byBkcmF3aW5nUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAg
ICAgICAgICAgIGF1dG8gc3JjUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUoKSB9
OworICAgICAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZHJhd2lu
Z1JlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb1ByaW1p
dGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICAgICAg
fSwKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOworICAgICAgICB9CisgICAgKTsKIAotUmVuZGVyRWxl
bWVudCogRkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
dHJlZVNjb3BlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHRhcmdldCA9IFNW
R1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcobV9ocmVmLCAqbV90cmVl
U2NvcGUpOwotICAgIGlmICghaXM8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gdGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7
CisgICAgcmV0dXJuIFdURjo6dmlzaXQoZHJhd2luZ1JlY3RPZlNvdXJjZUltYWdlLCBtX3NvdXJj
ZUltYWdlKTsKIH0KIAotdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9v
bCBGRUltYWdlOjphcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdCYgcmVzdWx0LCBjb25zdCBGaWx0
ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSkgY29uc3QKIHsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRS
ZW5kZXJlcigpOwotICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VC
dWZmZXIoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBG
bG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qo
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QgPSByZXN1bHQucHJpbWl0aXZlU3VicmVnaW9uKCk7CiAg
ICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0
ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3JjUmVjdCA9
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJl
c2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICB9
Ci0KLSAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2Nh
dGlvbigpOwotICAgIGRlc3RSZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2Nh
dGlvbi55KCkpOwotCi0gICAgYXV0byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
Ci0KLSAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
YnNvbHV0ZVRyYW5zZm9ybSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAg
IGNvbnRleHQuY29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKLQotICAgICAgICBSZWZQdHIg
Y29udGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsK
LSAgICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAg
ICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KGNvbnRleHROb2RlLmdldCgpKTsK
LSAgICAgICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7Ci0KLSAgICAgICAgICAgIC8vIElm
IHdlJ3JlIHJlZmVyZW5jaW5nIGFuIGVsZW1lbnQgd2l0aCBwZXJjZW50YWdlIHVuaXRzLCBlZy4g
PHJlY3Qgd2l0aD0iMzAlIj4gdGhvc2UgdmFsdWVzIHdlcmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUg
dmlld3BvcnQuCi0gICAgICAgICAgICAvLyBCdWlsZCB1cCBhIHRyYW5zZm9ybWF0aW9uIHRoYXQg
bWFwcyBmcm9tIHRoZSB2aWV3cG9ydCBzcGFjZSB0byB0aGUgZmlsdGVyIHByaW1pdGl2ZSBzdWJy
ZWdpb24uCi0gICAgICAgICAgICBpZiAobGVuZ3RoQ29udGV4dC5kZXRlcm1pbmVWaWV3cG9ydCh2
aWV3cG9ydFNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG1ha2VNYXBC
ZXR3ZWVuUmVjdHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdmlld3BvcnRTaXplKSwgZGVzdFJl
Y3QpKTsKKworICAgIGF1dG8gZHJhd1NvdXJjZUltYWdlID0gV1RGOjptYWtlVmlzaXRvcigKKyAg
ICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBzcmNSZWN0
ID0gRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH07CisgICAgICAgICAgICBtX3ByZXNl
cnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkcmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAg
ICAgICAgICBkcmF3aW5nUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlUmVzdWx0Q29v
cmRpbmF0ZXMoZHJhd2luZ1JlY3QsIHJlc3VsdC5kcmF3aW5nUmVjdCgpKTsKKyAgICAgICAgICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkcmF3aW5nUmVjdCwgc3Jj
UmVjdCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBp
bWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfTsKKyAgICAgICAgICAgIGRyYXdpbmdSZWN0ID0gZ2Vv
bWV0cnkuY29udmVydFRvQWJzb2x1dGVSZXN1bHRDb29yZGluYXRlcyhkcmF3aW5nUmVjdCwgcmVz
dWx0LmRyYXdpbmdSZWN0KCkpOworICAgICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5k
cmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWN0LCBzcmNSZWN0KTsKICAgICAg
ICAgfQorICAgICk7CiAKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1h
dGlvbjsKLSAgICAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4
dChjb250ZXh0LCAqcmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgV1RGOjp2aXNpdChkcmF3U291cmNlSW1hZ2UsIG1fc291cmNlSW1h
Z2UpOworICAgIHJldHVybiB0cnVlOworfQorCitGaWx0ZXJSZXN1bHQqIEZFSW1hZ2U6OmFwcGx5
KEZpbHRlck91dHB1dCYgb3V0cHV0LCBGaWx0ZXJSZXN1bHRWZWN0b3ImLCBJbWFnZUJ1ZmZlcios
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQm
IGJvdW5kYXJ5U2V0KSBjb25zdAoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1
bHRzKCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBjb250
ZXh0LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiBh
cHBseVBsYXRmb3JtKG91dHB1dCwgeyB9LCBudWxscHRyLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQp
OwogfQogCi1UZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0
U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplOwot
ICAgIGlmIChtX2ltYWdlKQotICAgICAgICBpbWFnZVNpemUgPSBtX2ltYWdlLT5zaXplKCk7Ci0g
ICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigp
KQotICAgICAgICBpbWFnZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KHJlbmRlcmVyLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKS5zaXplKCk7CisgICAgYXV0byBzb3VyY2VJbWFnZVNp
emUgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1h
Z2UpIHsgcmV0dXJuIGltYWdlLT5zaXplKCk7IH0sCisgICAgICAgIFsmXShjb25zdCBSZWY8SW1h
Z2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeyByZXR1cm4gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCk7IH0KKyAgICApOworCisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IFdURjo6dmlzaXQoc291
cmNlSW1hZ2VTaXplLCBtX3NvdXJjZUltYWdlKTsKKwogICAgIHRzIDw8IGluZGVudCA8PCAiW2Zl
SW1hZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgaW1hZ2Utc2l6ZT1cIiIgPDwgaW1hZ2VTaXplLndp
ZHRoKCkgPDwgIngiIDw8IGltYWdlU2l6ZS5oZWlnaHQoKSA8PCAiXCJdXG4iOwogICAgIC8vIEZJ
WE1FOiBzaG91bGQgdGhpcyBkdW1wIGFsc28gb2JqZWN0IHJldHVybmVkIGJ5IFNWR0ZFSW1hZ2U6
OmltYWdlKCkgPwogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCBhYzE2MGVkY2U3YzBlMGEwNjdiZGVmYmQ3
MDdmMmFiZTU1OTA4MWI2Li5lYmY5MzRhNDIwYzg0ZGM1YzljOTUwY2M4NDFhMmViNjIzMzM3MmVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywzNiArMjgsMzEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEltYWdlOwotY2xhc3MgUmVu
ZGVyRWxlbWVudDsKLWNsYXNzIFRyZWVTY29wZTsKIAogY2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3Jl
YXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJl
ZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICB1c2luZyBTb3VyY2VJbWFnZSA9IFZhcmlhbnQ8
UmVmPEltYWdlPiwgUmVmPEltYWdlQnVmZmVyPj47CisKKyAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+
IGNyZWF0ZShTb3VyY2VJbWFnZSYmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
KTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5GRUltYWdlKCkgPSBkZWZhdWx0OwotICAgIEZF
SW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBGRUltYWdlKFNvdXJj
ZUltYWdlJiYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiAgICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUltYWdlIjsgfQog
Ci0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFy
ZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKKyAgICB2b2lkIHNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUg
eyB9CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3QoY29uc3QgRmlsdGVyUmVzdWx0VmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVuZGVyRWxlbWVudCogcmVmZXJl
bmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmlsdGVyUmVzdWx0KiBhcHBseShGaWx0ZXJPdXRw
dXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIGZpbmFsOwotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJSZXN1
bHQmLCBjb25zdCBGaWx0ZXJSZXN1bHRWZWN0b3ImIGlucHV0cywgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVm
UHRyPEltYWdlPiBtX2ltYWdlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmlu
YWw7CiAKLSAgICAvLyBtX3RyZWVTY29wZSB3aWxsIG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJl
bmNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0g
ICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVm
OworICAgIFNvdXJjZUltYWdlIG1fc291cmNlSW1hZ2U7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4
NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjAzMmY0N2E5YzNlNTVjNWI3ZDUyNWI4YzA0
NTk5MjdjMzMzOWQ1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlck91dHB1dC5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUg
IlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNW
R0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZm
ZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0g
ICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0
ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94
TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1l
bnQmIGZpbHRlckVsZW1lbnQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgRmlsdGVyRWZm
ZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRpbkVm
ZmVjdHM7CisgICAgaWYgKHByZXZpb3VzRWZmZWN0KQorICAgICAgICBidWlsdGluRWZmZWN0cy5h
cHBlbmQoUmVmPEZpbHRlckVmZmVjdD4oKnByZXZpb3VzRWZmZWN0KSk7CisgICAgZWxzZQorICAg
ICAgICBidWlsdGluRWZmZWN0cy5hcHBlbmQoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOworICAg
IGJ1aWx0aW5FZmZlY3RzLmFwcGVuZChTb3VyY2VBbHBoYTo6Y3JlYXRlKCkpOworCisgICAgU1ZH
RmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgIGF1dG8gW2ZpbHRlckVmZmVjdHMsIGV4cHJlc3Np
b25dID0gYnVpbGRlci5idWlsZEVmZmVjdHMoZmlsdGVyRWxlbWVudCwgYnVpbHRpbkVmZmVjdHMp
OworICAgIGlmIChmaWx0ZXJFZmZlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gY3JlYXRlKFdURk1vdmUoYnVpbHRpbkVmZmVjdHMpLCBXVEZNb3Zl
KGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJlc3Npb24pLCByZW5kZXJpbmdNb2RlKTsKK30K
KworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9y
JiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKK3sKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRp
bkVmZmVjdHMgPSB7IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRl
KCkgfTsKKyAgICByZXR1cm4gY3JlYXRlKFdURk1vdmUoYnVpbHRpbkVmZmVjdHMpLCBXVEZNb3Zl
KGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJlc3Npb24pLCByZW5kZXJpbmdNb2RlKTsKK30K
KworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9y
JiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNW
R0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIoV1RGTW92ZShidWlsdGlu
RWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbiksIHJl
bmRlcmluZ01vZGUpKTsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVj
dG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMs
IFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCisgICAgOiBGaWx0ZXIocmVuZGVyaW5nTW9kZSwgVHlwZTo6U1ZHRmlsdGVyKQorICAg
ICwgbV9idWlsdGluRWZmZWN0cyhXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSkKKyAgICAsIG1fZmls
dGVyRWZmZWN0cyhXVEZNb3ZlKGZpbHRlckVmZmVjdHMpKQorICAgICwgbV9leHByZXNzaW9uKFdU
Rk1vdmUoZXhwcmVzc2lvbikpCit7CisgICAgQVNTRVJUKG1fYnVpbHRpbkVmZmVjdHMuc2l6ZSgp
ID09IDIpOworICAgIEFTU0VSVCghbV9maWx0ZXJFZmZlY3RzLmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKK30KKworUmVmPEZpbHRlckVmZmVjdD4gU1ZH
RmlsdGVyOjppbmRleGVkRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlLCB1bnNpZ25lZCBp
bmRleCkgY29uc3QKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFu
c2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOworICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYykKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHNb
MF07CisKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQor
ICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0c1sxXTsKKworICAgIEFTU0VSVChpbmRleCA8
IG1fZmlsdGVyRWZmZWN0cy5zaXplKCkpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdHNbaW5k
ZXhdOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24o
RmxvYXRTaXplIHNpemUpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXI6Omxh
c3RFZmZlY3QoKSBjb25zdAogewotICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBz
aXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIGlmIChtX2V4cHJl
c3Npb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIFt0eXBl
LCBpbmRleCwgbGV2ZWxdID0gbV9leHByZXNzaW9uLmxhc3QoKTsKKyAgICByZXR1cm4gaW5kZXhl
ZEVmZmVjdCh0eXBlLCBpbmRleCk7Cit9CisKK0ZpbHRlclJlc3VsdCogU1ZHRmlsdGVyOjphcHBs
eShGaWx0ZXJPdXRwdXQmIG91dHB1dCwgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
Cit7CisgICAgaWYgKCFsYXN0RWZmZWN0KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKCFzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHNvdXJjZUltYWdlID0gc3RhY2sudGFr
ZUxhc3QoKS0+aW1hZ2VCdWZmZXIoKTsKIAotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9m
aWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IG91dHB1dC5yZXN1bHRz
KCkuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBmb3IgKGF1
dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBtX2V4cHJlc3Npb24pIHsKKyAgICAgICAgYXV0byBl
ZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5cGUsIGluZGV4KTsKKyAgICAgICAgYXV0byBib3VuZGFy
eVNldCA9IGdlb21ldHJ5LmJvdW5kYXJ5U2V0KHR5cGUsIGluZGV4KTsKKworICAgICAgICBhdXRv
IHJlc3VsdCA9IGVmZmVjdC0+YXBwbHkob3V0cHV0LCBzdGFjaywgc291cmNlSW1hZ2UsIGdlb21l
dHJ5LCBib3VuZGFyeVNldCk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3RhY2suYXBwZW5kKHsgKnJlc3VsdCB9KTsKKyAgICAg
ICAgb3V0cHV0LnJlc3VsdHMoKS5hZGQoV1RGTW92ZShlZmZlY3QpLCBSZWY8RmlsdGVyUmVzdWx0
PigqcmVzdWx0KSk7CisgICAgfQorCisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgcmVzdWx0LT50cmFuc2Zvcm1U
b0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIHJldHVybiAm
cmVzdWx0LmxlYWtSZWYoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0
JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hN
b2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lv
biwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBhdXRvIGVuZCA9IG1fZXhwcmVzc2lvbi5yZW5kKCk7
CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2V4cHJlc3Npb24ucmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdID0gKml0OworICAgICAg
ICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAgICAgICAg
ICAgKytpdDsKKworICAgICAgICBhdXRvIGVmZmVjdCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5k
ZXgpOworICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgbGV2
ZWwpOworICAgICAgICBlZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2Vu
dGF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmgKaW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2RhNDkzMDJmNWFlYTBmYjE3MDBjZi4uOTlmYTMx
MDFlNjY5Yzg0ZGNkNGZhOWYzOTdlYzZlMGVlZTA0ODEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjAsNDEgKzIxLDQ0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1Jl
Zi5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RW
ZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFeHByZXNzaW9uLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKK2NsYXNzIFNWR0ZpbHRlckdlb21l
dHJ5OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVy
PiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7CisgICAgc3RhdGljIFJlZlB0cjxT
VkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgUmVuZGVyaW5nTW9kZSA9IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QgPSBu
dWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3Jl
YXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Np
b24mJiwgUmVuZGVyaW5nTW9kZSk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0
ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9y
JiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmLCBSZW5kZXJpbmdNb2RlKTsK
IAotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247IH0KKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgY29uc3Q7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBmaWx0ZXJFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJF
ZmZlY3RzOyB9CisgICAgY29uc3QgU1ZHRmlsdGVyRXhwcmVzc2lvbiYgZXhwcmVzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQogCi0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdl
UmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
OyB9Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90
YXJnZXRCb3VuZGluZ0JveDsgfQorcHJpdmF0ZToKKyAgICBTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0
VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVj
dHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiwgUmVuZGVyaW5nTW9kZSk7CiAKLSAgICBib29sIGlz
U1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJlZjxGaWx0ZXJF
ZmZlY3Q+IGluZGV4ZWRFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5n
UmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgRmlsdGVyUmVzdWx0
KiBhcHBseShGaWx0ZXJPdXRwdXQmLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmluYWw7CisK
KyAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7
Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1f
ZmlsdGVyUmVnaW9uOwotICAgIGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKKyAgICBGaWx0ZXJFZmZl
Y3RWZWN0b3IgbV9idWlsdGluRWZmZWN0czsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9maWx0
ZXJFZmZlY3RzOworICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gbV9leHByZXNzaW9uOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlNWR0ZpbHRlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBm
aWx0ZXIudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7
IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24m
IGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi50eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OlNWR0ZpbHRlcjsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3
Yjk0Li4yM2QzZTcwOTIzZTk0Mjg1MDIwZGIxYzc5ZGFkNWJjNjIzNDNlYTVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw4
NyArMjEsMTU1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVp
bGRlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0xJTkVBUl9TUkdCKQorI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoUmVm
UHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKK3N0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0
VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9uPiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBidWlsdGluRWZmZWN0cykKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291
bnRDaGlsZE5vZGVzID0gMjAwOworICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2Rl
cygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgc2V0
dXBCdWlsdGluRWZmZWN0cyhidWlsdGluRWZmZWN0cyk7CisKKyAgICBGaWx0ZXJFZmZlY3RzSW5w
dXRzIGVmZmVjdHNJbnB1dHM7CisgICAgaWYgKCFidWlsZEVmZmVjdHMoZmlsdGVyRWxlbWVudCwg
ZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWJ1aWxkRXhw
cmVzc2lvbihlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVy
biB7IFdURk1vdmUobV9maWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShtX2V4cHJlc3Npb24pIH07Cit9
CisKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyhjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKQoreworICAgIG1fYnVpbHRpbkVmZmVjdHMu
YWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgYnVpbHRpbkVmZmVjdHNbMF0pOworICAg
IG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIGJ1aWx0aW5F
ZmZlY3RzWzFdKTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6
c291cmNlR3JhcGhpYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0
KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhhKCkgY29uc3QKIHsKLSAgICBtX2J1aWx0aW5F
ZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwot
ICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJj
ZUFscGhhOjpjcmVhdGUoKnNvdXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygp
OworICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFt
ZSgpKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYg
aWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
YWRkTmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgUmVmPEZpbHRlckVmZmVjdD4g
ZWZmZWN0KQogewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZmZWN0
ID0gZWZmZWN0OworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBtX2xhc3RFZmZl
Y3QgPSBlZmZlY3QucHRyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9i
dWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29u
dGFpbnMobmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVj
dDsKLSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVjdCk7CisgICAgbV9sYXN0
RWZmZWN0ID0gZWZmZWN0LnB0cigpOworICAgIG1fbmFtZWRFZmZlY3RzLnNldChuYW1lLCBXVEZN
b3ZlKGVmZmVjdCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVy
OjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYg
bmFtZSkgY29uc3QKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CisgICAgaWYgKG5hbWUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGlmIChtX2xhc3RFZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4g
bV9sYXN0RWZmZWN0OwogCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKCkpOworICAgICAgICByZXR1cm4gc291cmNlR3JhcGhpYygp
OwogICAgIH0KIAotICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAg
ICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KGlkKTsKKyAgICBpZiAobV9idWlsdGluRWZm
ZWN0cy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0
KG5hbWUpOwogCi0gICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCk7CisgICAgcmV0dXJu
IG1fbmFtZWRFZmZlY3RzLmdldChuYW1lKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjph
cHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBlZmZl
Y3QsIFJlbmRlck9iamVjdCogb2JqZWN0KQorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9T
UEFDRV9MSU5FQVJfU1JHQikKK3N0YXRpYyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRlcnBv
bGF0aW9uRm9yRWxlbWVudChTVkdFbGVtZW50JiBlbGVtZW50KQogewotICAgIC8vIFRoZSBlZmZl
Y3QgbXVzdCBiZSBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1f
ZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8
fCAhbV9lZmZlY3RSZW5kZXJlci5jb250YWlucyhvYmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVy
ZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVt
YmVyT2ZJbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAg
IC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhZGQgdGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdp
Y2UuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyAr
K2kpCi0gICAgICAgIGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRk
KGVmZmVjdC5nZXQoKSk7Ci0KLSAgICAvLyBJZiBvYmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0
aGUgZWxlbWVudCBpc24ndCBhdHRhY2hlZCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2gg
aW4gdHVybiBtZWFuIHRoYXQgY2VydGFpbiB0eXBlcyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QK
LSAgICAvLyB3b3JrICh0aGUgTGF5b3V0T2JqZWN0IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdp
bGwgbm90IGJlIGRlZmluZWQpLgotICAgIGlmIChvYmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVu
ZGVyZXIuYWRkKG9iamVjdCwgZWZmZWN0LmdldCgpKTsKKyAgICBpZiAoYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLnN2
Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpOworCisgICAgaWYgKGF1dG8gdmFs
dWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKCZlbGVtZW50KS5wcm9wZXJ0eVZhbHVlKENTU1By
b3BlcnR5Q29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycykpIHsKKyAgICAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIENvbG9ySW50ZXJwb2xh
dGlvbjo6QXV0bzsKIH0KKyNlbmRpZgogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyRWZm
ZWN0cygpCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVt
ZW50JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQog
ewotICAgIG1fbGFzdEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9uYW1lZEVmZmVjdHMuY2xlYXIo
KTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlbmRlcmVy
LmNsZWFyKCk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKyAgICBlZmZlY3RzSW5wdXRzLnNl
dCgqc291cmNlQWxwaGEoKSwgRmlsdGVyRWZmZWN0VmVjdG9yIHsgKnNvdXJjZUdyYXBoaWMoKSB9
KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAg
ICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0gZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7Cisg
ICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorICAgICAgICBpZiAoY29s
b3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9s
YXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CisjZW5kaWYKKyAgICAK
KyAgICAgICAgZWZmZWN0c0lucHV0cy5zZXQoeyAqZWZmZWN0IH0sIFdURk1vdmUoaW5wdXRzKSk7
CisgICAgICAgIGFkZE5hbWVkRWZmZWN0KGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIHsgKmVmZmVj
dCB9KTsKKworICAgICAgICBtX2ZpbHRlckVmZmVjdHMuYXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJC
dWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCitib29s
IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVyRWZmZWN0
PiYgZWZmZWN0LCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzLCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCB1bnNpZ25lZCBsZXZlbCkKIHsKLSAgICBpZiAoIWVmZmVj
dC0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoc3RhY2suY29udGFpbnMo
ZWZmZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVmZmVjdC0+dHlwZSgp
ID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykKKyAgICAgICAgbV9leHByZXNz
aW9uLmluc2VydCgwLCB7IGVmZmVjdC0+dHlwZSgpLCAwLCBsZXZlbCB9KTsKKyAgICBlbHNlIGlm
IChlZmZlY3QtPnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAg
ICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCksIDEsIGxldmVsIH0p
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQobV9maWx0ZXJFZmZlY3RzLmNvbnRhaW5zKGVm
ZmVjdCkpOworICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCks
IG1fZmlsdGVyRWZmZWN0cy5maW5kKGVmZmVjdCksIGxldmVsIH0pOworICAgIH0KIAotICAgIGVm
ZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZv
ciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3QpKSB7CisgICAg
ICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5wdXRzLCBzdGFj
aywgbGV2ZWwgKyAxKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBB
U1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHN0YWNrLmxhc3QoKS5wdHIoKSA9
PSBlZmZlY3QucHRyKCkpOworCisgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBG
aWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQoreworICAgIGlmICghbV9sYXN0RWZm
ZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6
IGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZl
KHJlZmVyZW5jZSk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOworICAgIHJldHVybiBi
dWlsZEV4cHJlc3Npb24oeyAqbV9sYXN0RWZmZWN0IH0sIGVmZmVjdHNJbnB1dHMsIHN0YWNrLCAw
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM3N2FlMDhi
YWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjk4ZTZlODhiZDliN2FjOTE0ZTA0ZDIy
NmQ2MGUzNzBhOTFjNTQwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFp
bC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw2OCArMjEsNDMgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdVbml0VHlw
ZXMuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0
ZXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNWR0ZpbHRlckVs
ZW1lbnQ7CiAKIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0
ZXJFZmZlY3RTZXQ7CisgICAgU1ZHRmlsdGVyQnVpbGRlcigpID0gZGVmYXVsdDsKIAotICAgIFNW
R0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAg
c3RkOjp0dXBsZTxGaWx0ZXJFZmZlY3RWZWN0b3IsIFNWR0ZpbHRlckV4cHJlc3Npb24+IGJ1aWxk
RWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWls
dGluRWZmZWN0cyk7CiAKLSAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0
UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQotICAgIEZsb2F0UmVjdCB0YXJn
ZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAg
ICAKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmltaXRpdmVVbml0czsgfQotICAgIHZvaWQgc2V0UHJpbWl0aXZlVW5pdHMo
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB1bml0cykgeyBtX3ByaW1pdGl2ZVVuaXRzID0gdW5p
dHM7IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBuYW1lZEVmZmVjdChjb25zdCBBdG9tU3Ry
aW5nJiBuYW1lKSBjb25zdDsKIAotICAgIHZvaWQgYWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0Pik7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBnZXRFZmZl
Y3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RF
ZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0KLQotICAgIHZvaWQg
YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYsIFJl
bmRlck9iamVjdCopOwotCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdFNldCYgZWZmZWN0UmVmZXJl
bmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKLSAgICB7Ci0gICAgICAgIC8vIE9ubHkgYWxsb3dl
ZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KLSAgICAgICAgQVNTRVJUKG1f
ZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1fZWZm
ZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnZhbHVlOwotICAgIH0KK3ByaXZhdGU6CisgICAg
dXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0cyA9IEhhc2hNYXA8UmVmPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+OwogCi0gICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRo
ZSBhdHRyaWJ1dGVzIG9mIGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgot
ICAgIGlubGluZSBGaWx0ZXJFZmZlY3QqIGVmZmVjdEJ5UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBv
YmplY3QpIHsgcmV0dXJuIG1fZWZmZWN0UmVuZGVyZXIuZ2V0KG9iamVjdCk7IH0KKyAgICB2b2lk
IHNldHVwQnVpbHRpbkVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZm
ZWN0cyk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYygpIGNvbnN0Owor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUFscGhhKCkgY29uc3Q7CiAKLSAgICB2b2lk
IGNsZWFyRWZmZWN0cygpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVm
ZmVjdCopOworICAgIHZvaWQgYWRkTmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwg
UmVmPEZpbHRlckVmZmVjdD4pOworICAgIGJvb2wgYnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1l
bnQmLCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CiAKLXByaXZhdGU6Ci0gICAgaW5saW5lIHZvaWQg
YWRkQnVpbHRpbkVmZmVjdHMoKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBt
X2J1aWx0aW5FZmZlY3RzLnZhbHVlcygpKQotICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2Vz
LmFkZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKLSAgICB9CisgICAgYm9vbCBidWlsZEV4
cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5w
dXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpOworICAgIGJv
b2wgYnVpbGRFeHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmKTsKIAotICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7
Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVm
ZmVjdHM7Ci0gICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2Ug
ZmlsdGVyIGVmZmVjdHMsCi0gICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBl
ZmZlY3QuCi0gICAgSGFzaE1hcDxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0
PiBtX2VmZmVjdFJlZmVyZW5jZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJF
ZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2ZpbHRl
ckVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Npb247CiAKKyAgICBI
YXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOwor
ICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3Rz
OwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKLSAgICBGbG9hdFJlY3Qg
bV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJp
bWl0aXZlVW5pdHMgeyBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0Ug
fTsKIH07Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iYjUwMmFkYTk2MjcwZTUwMTkzMmM2YzA3YjVmNDc5NTYyNDAzYjQ3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyRXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgU1ZHRmlsdGVyRXhwcmVzc2lvbiA9IFZlY3RvcjxzdGQ6OnR1cGxlPEZpbHRlckVm
ZmVjdDo6VHlwZSwgdW5zaWduZWQsIHVuc2lnbmVkPj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckdlb21ldHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTA3NWQ1MDBkYjk1MTAxNzQ1NzE5MjMx
YjExMDk5MGYyYmUzZmNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJHZW9tZXRyeS5oIgorCisjaW5jbHVkZSAiRWxl
bWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlNvdXJj
ZUFscGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0Zsb2F0U2l6ZSBTVkdGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRlUmVzb2x1dGlvbihj
b25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pCit7CisgICAg
YXV0byBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qo
c291cmNlSW1hZ2VSZWN0KTsKKyAgICBhdXRvIHNjYWxlID0gRmxvYXRTaXplIHsgMSwgMSB9Owor
ICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZVNvdXJjZUltYWdlUmVj
dC5zaXplKCksIHNjYWxlKTsKKworICAgIGF1dG8gZWZmZWN0aXZlVHJhbnNmb3JtID0gYWJzb2x1
dGVUcmFuc2Zvcm07CisgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlKTsKKworICAg
IGF1dG8gYWJzb2x1dGVGaWx0ZXJSZWdpb24gPSBlZmZlY3RpdmVUcmFuc2Zvcm0ubWFwUmVjdChm
aWx0ZXJSZWdpb24pOworICAgIGF1dG8gcmVzb2x1dGlvbiA9IEZsb2F0U2l6ZSB7IDEsIDEgfTsK
KyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVGaWx0ZXJSZWdpb24u
c2l6ZSgpLCByZXNvbHV0aW9uKTsKKworICAgIHJldHVybiByZXNvbHV0aW9uICogc2NhbGU7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJHZW9tZXRyeT4gU1ZHRmlsdGVyR2VvbWV0cnk6
OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbikKK3sKKyAgICBhdXRvIHBy
aW1pdGl2ZVVuaXRzID0gZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpOworICAgIGF1dG8g
Z2VvbWV0cnkgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckdlb21ldHJ5PihmaWx0ZXJSZWdpb24sIHNv
dXJjZUltYWdlUmVjdCwgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZVVuaXRzLCBhYnNvbHV0
ZVRyYW5zZm9ybSwgcmVzb2x1dGlvbik7CisgICAgaWYgKCFnZW9tZXRyeSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBnZW9tZXRyeS0+YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNl
dHMoZmlsdGVyRWxlbWVudCk7CisgICAgcmV0dXJuIGdlb21ldHJ5OworfQorCitTVkdGaWx0ZXJH
ZW9tZXRyeTo6U1ZHRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFNpemUm
IHJlc29sdXRpb24pCisgICAgOiBGaWx0ZXJHZW9tZXRyeShmaWx0ZXJSZWdpb24sIHNvdXJjZUlt
YWdlUmVjdCkKKyAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCisg
ICAgLCBtX3ByaW1pdGl2ZVVuaXRzKHByaW1pdGl2ZVVuaXRzKQorICAgICwgbV9hYnNvbHV0ZVRy
YW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKKyAgICAsIG1fcmVzb2x1dGlvbihyZXNvbHV0aW9u
KQoreworfQorCit2b2lkIFNWR0ZpbHRlckdlb21ldHJ5OjpidWlsZEZpbHRlckVmZmVjdEJvdW5k
YXJ5U2V0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQoreworICAgIGZvciAoYXV0
byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBib3VuZGFyaWVz
ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVtZW50LCBtX3ByaW1pdGl2ZVVuaXRzLCBtX3Rh
cmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgCisgICAgICAgIE9wdGlvblNldDxGaWx0ZXJCb3Vu
ZGFyeVNldDo6RmxhZ3M+IGZsYWdzOworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3Vu
ZGFyeVNldDo6RmxhZ3M6Okhhc1gpOworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJv
dW5kYXJ5U2V0OjpGbGFnczo6SGFzWSk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFz
QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZp
bHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzV2lkdGgpOworCisgICAgICAgIGlmIChlZmZlY3RF
bGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCisgICAgICAgICAgICBm
bGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNIZWlnaHQpOworCisgICAgICAg
IG1fRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzLmFwcGVuZCh7IGJvdW5kYXJpZXMsIGZsYWdzIH0p
OworICAgIH0KK30KKworRmlsdGVyQm91bmRhcnlTZXQgU1ZHRmlsdGVyR2VvbWV0cnk6OmJvdW5k
YXJ5U2V0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sK
KyAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgdHlw
ZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAgICAgICByZXR1cm4geyB9
OworICAgIAorICAgIGlmIChpbmRleCA+PSBtX0ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cy5zaXpl
KCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorICAgIAorICAgIHJldHVybiBtX0ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0c1tpbmRl
eF07Cit9CisKK0Zsb2F0UmVjdCBTVkdGaWx0ZXJHZW9tZXRyeTo6Y29udmVydFRvQWJzb2x1dGVD
b29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgYXV0byBhYnNv
bHV0ZVJlY3QgPSBtX2Fic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7CisgICAgYWJzb2x1
dGVSZWN0LnNjYWxlKG1fcmVzb2x1dGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlUmVjdDsKK30K
KworRmxvYXRTaXplIFNWR0ZpbHRlckdlb21ldHJ5Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5h
dGVzKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSAqIG1f
cmVzb2x1dGlvbiAqIEZsb2F0U2l6ZShtX2Fic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBtX2Fi
c29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpKTsKK30KKworRmxvYXRTaXplIFNWR0ZpbHRlckdlb21l
dHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyhjb25zdCBGbG9hdFNpemUmIHNpemUpIGNv
bnN0Cit7CisgICAgaWYgKG1fcHJpbWl0aXZlVW5pdHMgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5J
VF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQorICAgICAgICByZXR1cm4gc2l6ZSAqIG1fdGFyZ2V0
Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIHJldHVybiBzaXplOworfQorCitGbG9hdFJlY3QgU1ZH
RmlsdGVyR2VvbWV0cnk6OmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3Qm
IGRyYXdpbmdSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
K3sKKyAgICBhdXRvIGNsaXBwZWREcmF3aW5nUmVjdCA9IGRyYXdpbmdSZWN0OworICAgIGNsaXBw
ZWREcmF3aW5nUmVjdC5pbnRlcnNlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICByZXR1cm4g
Y2xpcHBlZERyYXdpbmdSZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRy
eS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0
cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MTlkMTBhNWI0YmI0M2UzNDQ3MzdlMmQzNDMwNmNjN2JhOTM2MjQ2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyR2VvbWV0cnkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJT
VkdVbml0VHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKK2NsYXNz
IFNWR0ZpbHRlckdlb21ldHJ5IDogcHVibGljIEZpbHRlckdlb21ldHJ5IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNhbGN1bGF0
ZVJlc29sdXRpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyR2VvbWV0cnk+IGNy
ZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJv
dW5kaW5nQm94LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFNpemUmIHJlc29sdXRpb24pOworCisgICAgU1ZHRmlsdGVyR2VvbWV0cnkoY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1Vu
aXRUeXBlIHByaW1pdGl2ZVVuaXRzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFNpemUmIHJlc29sdXRpb24pOworCitwcml2YXRlOgorICAgIHZv
aWQgYnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoU1ZHRmlsdGVyRWxlbWVudCYpOworCisg
ICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQorICAgIEZsb2F0U2l6ZSByZXNvbHV0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXNvbHV0aW9uOyB9CisKKyAgICBGaWx0ZXJCb3Vu
ZGFyeVNldCBib3VuZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUsIHVuc2lnbmVkIGluZGV4KSBj
b25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5h
dGVzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRTaXplIGNv
bnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgCisgICAgRmxvYXRTaXplIHJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKGNvbnN0
IEZsb2F0U2l6ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIEZsb2F0UmVjdCBjbGlwVG9Q
cmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRS
ZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CisKKyAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBl
IG1fcHJpbWl0aXZlVW5pdHM7CisgICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBtX0ZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0czsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJh
bnNmb3JtOworICAgIEZsb2F0U2l6ZSBtX3Jlc29sdXRpb247Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCmluZGV4IDBkNDg4NjdhOThm
NmU0MzEyODJmMzIwNGRlNTBkNmYyMDk0MDM3NDMuLmE2ZDM3NjAwZjYxNmE5MzI5NGM2ZjMzZTJm
NDkyNzQzMzliNTg4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCkBAIC0xOTg2
LDcgKzE5ODYsNyBAQCB5eXJlZHVjZToKICNsaW5lIDQxOSAiV2ViQ29yZS94bWwvWFBhdGhHcmFt
bWFyLnkiCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3QoKHl5dnNwWygyKSAtICgyKV0uZXhwcmVz
c2lvblZlY3RvcikpOwotICAgICAgICAoeXl2YWwuZXhwcmVzc2lvbikgPSBuZXcgRmlsdGVyKHN0
ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIpXS5leHByZXNzaW9uKSks
IFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAgICAgKHl5dmFsLmV4cHJlc3Npb24pID0g
bmV3IFhQYXRoOjpGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCh5eXZzcFsoMSkg
LSAoMildLmV4cHJlc3Npb24pKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOwogICAgIDt9CiAg
ICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIu
eSBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQppbmRleCA3NzY5OGZhNzY0Zjdh
MTVhNDViYzVjMGU1ZDJkNjc3NTFiMWJlNzBmLi5kZDc4YTViZDlmODA2NzM3MDJiZjQ0YzYwNzZk
ZDJkMmQwMGQxMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhHcmFtbWFy
LnkKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55CkBAIC00MTUsNyArNDE1
LDcgQEAgRmlsdGVyRXhwcjoKICAgICBQcmltYXJ5RXhwciBQcmVkaWNhdGVMaXN0CiAgICAgewog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9u
Pj4+IHByZWRpY2F0ZUxpc3QoJDIpOwotICAgICAgICAkJCA9IG5ldyBGaWx0ZXIoc3RkOjp1bmlx
dWVfcHRyPEV4cHJlc3Npb24+KCQxKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlzdCkpOworICAgICAg
ICAkJCA9IG5ldyBYUGF0aDo6RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigkMSks
IFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICB9CiAgICAgOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKaW5kZXggZmNjZWQ3ZDUxYTIxMjJhNjAwNDg5OWUxOWUzODBjYmQ1ODU3MjFmMS4u
YWE5OWM2N2U0ODI0ZmI0MjlhNTI2NTZiZDEwMjBmNjhmZGQ3N2UzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcApAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAog
I2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVhZGVySGFuZGxlLmgiCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnlSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRl
ICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaCIKQEAgLTUyNyw2ICs1MjksMzUgQEAg
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1
ZmZlcldpdGhRdWFsaWZpZWRJZGVudGkKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhh
bmRsZSkpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1h
Z2VGb3JJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwg
SVBDOjpGaWx0ZXJSZWZlcmVuY2UmJiBmaWx0ZXJSZWZlcmVuY2UsIElQQzo6RmlsdGVyR2VvbWV0
cnlSZWZlcmVuY2UmJiBnZW9tZXRyeVJlZmVyZW5jZSwKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBmaWx0ZXIgPSBmaWx0
ZXJSZWZlcmVuY2UudGFrZUZpbHRlcigpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBnZW9tZXRyeVJl
ZmVyZW5jZS50YWtlR2VvbWV0cnkoKTsKKyAgICAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSBoYW5kbGU7CisgICAgWyZdKCkgeworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1v
dGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKGlkZW50aWZpZXIpOworICAgICAgICBp
ZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdl
ID0gaW1hZ2VCdWZmZXItPmZpbHRlcmVkSW1hZ2UoZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7
CisgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8g
aW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKyAgICAgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKGltYWdlU2l6ZSksIHsgaW1hZ2VCdWZm
ZXItPmNvbG9yU3BhY2UoKSB9KTsKKyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGF1dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCk7CisgICAgICAgIGlmICghY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY29udGV4dC0+ZHJhd0ltYWdlKCppbWFnZSwgRmxvYXRQb2ludCgpKTsKKyAgICAgICAgYml0
bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICB9KCk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShoYW5kbGUpKTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpj
YWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuYXRpdmVJbWFnZVJlc291cmNlSWRlbnRpZmllcikK
IHsKICAgICAvLyBJbW1lZGlhdGVseSB0dXJuIHRoZSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgKHdoaWNoIGlzIGVycm9yLXByb25lKSB0byBhIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDQxOWFlNmQxNmY3MmQ3ZDU5MzE0
MWZlMjI5NmFjZmU2OWExYzU5MGMuLjYzNDlkOGYzNDMzNGQ5MmRiMWM0NDdkNjg5NDdhYmU4MmYx
NzEyYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtNjAsNiArNjAsMTEgQEAgZW51bSBjbGFz
cyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogfQogCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEZp
bHRlclJlZmVyZW5jZTsKK2NsYXNzIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOworfQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGU7CkBAIC0xNDMs
NiArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2Vi
Q29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdl
dERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBn
ZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBnZXRGaWx0
ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSYmLCBJUEM6OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNl
JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYp
OwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNo
ZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggMWVmNTZkY2M5NzYy
NzRlMzU2YWIyMmI0ZWE0ZTcxYmNmYWMwYjBkZi4uMjRiZTM2ZjYxNmJhN2YzZTgyMTgxMWI2MjQz
YTg1MmMxMjZmODZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
QEAgLTMyLDYgKzMyLDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAg
ICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3lu
Y2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6
Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBk
YXRhKSBTeW5jaHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgZW51bTp1aW50
OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIC0+IChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKKyAgICBH
ZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlQnVmZmVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIsIElQQzo6
RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UgZ2VvbWV0cnkpIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdl
YktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIENhY2hl
Rm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkKICAgICBEZWxldGVBbGxGb250cygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJHZW9tZXRyeVJlZmVyZW5j
ZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZjliZWFkZTFiYTA3OTBjY2RkNjlmY2JmMDM4YjhjYzQ3NzdhMmI0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyR2VvbWV0
cnlSZWZlcmVuY2UuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRmlsdGVyR2VvbWV0cnkuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZp
bHRlckdlb21ldHJ5UmVmZXJlbmNlIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJHZW9tZXRyeVJlZmVy
ZW5jZShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkp
CisgICAgICAgIDogbV9nZW9tZXRyeShXVEZNb3ZlKGdlb21ldHJ5KSkKKyAgICB7CisgICAgfQor
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5PiB0YWtlR2VvbWV0
cnkoKSB7IHJldHVybiBXVEZNb3ZlKG1fZ2VvbWV0cnkpOyB9CisKKyAgICB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CisgICAgeworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk+IG1fZ2VvbWV0cnk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0ZpbHRlclJlZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1MTQ4ZTA5ZTE3Yzc2MTBiYTg5ODdkNTBlYWRiNzBl
ODE3OTZjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9G
aWx0ZXJSZWZlcmVuY2UuY3BwCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgorCisjaW5jbHVkZSAi
QXJndW1lbnRDb2Rlci5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJFbmNvZGVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZF
T2Zmc2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXJFZmZlY3RWZWN0b3IuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NWR0ZpbHRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oPgorCituYW1lc3BhY2UgSVBDIHsKKworRmlsdGVyUmVmZXJlbmNlOjpGaWx0ZXJS
ZWZlcmVuY2UoUmVmPFdlYkNvcmU6OkZpbHRlcj4mJiBmaWx0ZXIpCisgICAgOiBtX2ZpbHRlcihX
VEZNb3ZlKGZpbHRlcikpCit7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUZpbHRlckVmZmVjdChj
b25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgRW5jb2RlciYgZW5jb2RlcikKK3sK
KyAgICBBU1NFUlQoZWZmZWN0LnR5cGUoKSA+PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFTWluaW11bSAmJiBlZmZlY3QudHlwZSgpIDw9IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlw
ZTo6RkVNYXhpbXVtKTsKKworICAgIGVuY29kZXIgPDwgZWZmZWN0LnR5cGUoKTsKKworICAgIHN3
aXRjaCAoZWZmZWN0LnR5cGUoKSkgeworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFQmxlbmQ6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVDb2xvck1hdHJpeDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUNvbXBvbmVudFRyYW5zZmVyOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFQ29tcG9zaXRlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFQ29udm9sdmVNYXRyaXg6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXA6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVEcm9wU2hhZG93OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFRmxvb2Q6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVHYXVzc2lhbkJsdXI6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVJbWFnZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdl
OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neToK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRU9mZnNldDoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVPZmZzZXQ+KGVmZmVjdCku
ZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZzoKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVRpbGU6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBl
bmNvZGVTVkdGaWx0ZXIoY29uc3QgV2ViQ29yZTo6U1ZHRmlsdGVyJiBmaWx0ZXIsIEVuY29kZXIm
IGVuY29kZXIpCit7CisgICAgZW5jb2RlciA8PCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6U1ZHRmlsdGVyOworCisgICAgYXV0byYgZmlsdGVyRWZmZWN0cyA9IGZpbHRlci5maWx0ZXJF
ZmZlY3RzKCk7CisgICAgZW5jb2RlciA8PCBmaWx0ZXJFZmZlY3RzLnNpemUoKTsKKworICAgIGZv
ciAoYXV0byYgZWZmZWN0IDogZmlsdGVyRWZmZWN0cykKKyAgICAgICAgZW5jb2RlRmlsdGVyRWZm
ZWN0KGVmZmVjdCwgZW5jb2Rlcik7CisgICAgCisgICAgYXV0byYgZXhwcmVzc2lvbiA9IGZpbHRl
ci5leHByZXNzaW9uKCk7CisgICAgZW5jb2RlciA8PCBleHByZXNzaW9uLnNpemUoKTsKKworICAg
IGZvciAoYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA6IGV4cHJlc3Npb24pIHsKKyAgICAgICAg
ZW5jb2RlciA8PCB0eXBlOworICAgICAgICBlbmNvZGVyIDw8IGluZGV4OworICAgICAgICBlbmNv
ZGVyIDw8IGxldmVsOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZW5jb2RlQ1NTRmlsdGVyKGNv
bnN0IFdlYkNvcmU6OkNTU0ZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAg
IGVuY29kZXIgPDwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcjsKKyAg
ICBlbmNvZGVyIDw8IGZpbHRlci5mdW5jdGlvbnMoKS5zaXplKCk7CisgICAgCisgICAgZm9yIChh
dXRvJiBmdW5jdGlvbiA6IGZpbHRlci5mdW5jdGlvbnMoKSkgeworICAgICAgICBpZiAoaXM8V2Vi
Q29yZTo6U1ZHRmlsdGVyPihmdW5jdGlvbikpCisgICAgICAgICAgICBlbmNvZGVTVkdGaWx0ZXIo
ZG93bmNhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVyPihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNvZGVGaWx0ZXJFZmZlY3QoZG93bmNhc3Q8V2Vi
Q29yZTo6RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOworICAgIH0KK30K
Kworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+IGRlY29kZUZpbHRlckVmZmVj
dChEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZSB0eXBlKQor
eworICAgIGlmICghKHR5cGUgPj0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWlu
aW11bSAmJiB0eXBlIDw9IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1heGltdW0p
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXg6CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZToKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwOgor
ICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdzoKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2U6CisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGlmIChh
dXRvIGVmZmVjdCA9IFdlYkNvcmU6OkZFT2Zmc2V0OjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAg
ICAgICByZXR1cm4geyAoKmVmZmVjdCkucHRyKCkgfTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmc6Cisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VBbHBo
YToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGlj
OgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlNWR0ZpbHRl
cj4gZGVjb2RlU1ZHRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxzaXplX3Q+IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSB8fCAh
KnNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0VmVjdG9yIGZpbHRlckVmZmVjdHM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCAqc2l6ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYg
KCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgICAgIGF1dG8g
ZWZmZWN0ID0gZGVjb2RlRmlsdGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAgICAgICAgaWYg
KCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAgICAgZmls
dGVyRWZmZWN0cy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAg
IGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFdlYkNvcmU6OlNWR0ZpbHRlckV4cHJlc3Npb24gZXhwcmVzc2lv
bjsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU+IHR5cGU7CisgICAg
ICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBp
bmRleDsKKyAgICAgICAgZGVjb2RlciA+PiBpbmRleDsKKyAgICAgICAgaWYgKCFpbmRleCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IGxldmVsOworICAgICAgICBkZWNvZGVyID4+IGxldmVsOworICAgICAgICBpZiAoIWxldmVs
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZXhwcmVzc2lvbi5hcHBl
bmQoeyAqdHlwZSwgKmluZGV4LCAqbGV2ZWwgfSk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYkNv
cmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhw
cmVzc2lvbiksIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworfQorCitz
dGF0aWMgUmVmUHRyPFdlYkNvcmU6OkNTU0ZpbHRlcj4gZGVjb2RlQ1NTRmlsdGVyKERlY29kZXIm
IGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHNpemU7CisgICAgZGVjb2Rl
ciA+PiBzaXplOworICAgIGlmICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgVmVjdG9yPFJlZjxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbj4+IGZ1bmN0aW9u
czsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworICAg
ICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6U1ZHRmlsdGVyKSB7CisgICAgICAgICAgICBpZiAoYXV0byBmaWx0ZXIgPSBk
ZWNvZGVTVkdGaWx0ZXIoZGVjb2RlcikpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMuYXBw
ZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byBlZmZlY3QgPSBkZWNvZGVGaWx0ZXJFZmZlY3QoZGVjb2RlciwgKnR5cGUp
OworICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKFdURk1vdmUo
ZnVuY3Rpb25zKSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Cit9CisK
K3N0YXRpYyBSZWZQdHI8V2ViQ29yZTo6RmlsdGVyPiBkZWNvZGVGaWx0ZXIoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
PiB0eXBlOworICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpDU1NGaWx0ZXIpCisgICAgICAgIHJldHVybiBkZWNvZGVDU1NGaWx0ZXIoZGVjb2Rl
cik7CisKKyAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNW
R0ZpbHRlcikKKyAgICAgICAgcmV0dXJuIGRlY29kZVNWR0ZpbHRlcihkZWNvZGVyKTsKKyAgICAK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlRmlsdGVyKGNvbnN0
IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGlmIChp
czxXZWJDb3JlOjpDU1NGaWx0ZXI+KGZpbHRlcikpCisgICAgICAgIGVuY29kZUNTU0ZpbHRlcihk
b3duY2FzdDxXZWJDb3JlOjpDU1NGaWx0ZXI+KGZpbHRlciksIGVuY29kZXIpOworICAgIGVsc2UK
KyAgICAgICAgZW5jb2RlU1ZHRmlsdGVyKGRvd25jYXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZmls
dGVyKSwgZW5jb2Rlcik7Cit9CisKK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVGaWx0ZXIobV9maWx0ZXIsIGVuY29kZXIp
OworfQorCitzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gRmlsdGVyUmVmZXJlbmNlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVG
aWx0ZXIoZGVjb2RlcikpCisgICAgICAgIHJldHVybiB7IGZpbHRlci5yZWxlYXNlTm9uTnVsbCgp
IH07CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSVBDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYwYzJmYTE0OGQ0YTVjYTA3MDk1YjcxZTJlNjNkNDZmYzdhMzdhN2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbHRlci5oPgorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgRW5jb2RlcjsKK2NsYXNzIERl
Y29kZXI7CisKK2NsYXNzIEZpbHRlclJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyUmVm
ZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYpOworCisgICAgUmVmPFdlYkNvcmU6OkZpbHRl
cj4gdGFrZUZpbHRlcigpIHsgcmV0dXJuIFdURk1vdmUobV9maWx0ZXIpOyB9CisKKyAgICB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVy
UmVmZXJlbmNlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIFJlZjxXZWJDb3Jl
OjpGaWx0ZXI+IG1fZmlsdGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA0MWM3NmJkYjhkYTcxNjQ1ZjM4NTNh
MzNmYWQ1ZGQyNWVkNzg0NDFjLi5lNzc4NDlhM2IyZDhhY2FiNWIzNzhjOWRlZTUzMWRkNjIyZWIz
NTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI5MCw3
ICsyOTAsNiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6TWVkaWFLZXlTeXN0ZW1SZXF1ZXN0SWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
TWVkaWFTZXNzaW9uSWRlbnRpZmllcicsCi0gICAgICAgICdXZWJDb3JlOjpOYXRpdmVJbWFnZVJl
ZmVyZW5jZScsCiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJDb3JlOjpQbGF5YmFja1RhcmdldENsaWVudENvbnRleHRJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3knLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggYzRhODRl
MWZiNmY0NjZiOGZiZDU0ZTZjYTQ2YzQ3MjQyMmIzYjBjOC4uZDM1M2U1MmI4NDYwMmM0ZDI2MWQ4
MGEzYTdlMzRlMzg2Yzg1ZDQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNjMsNiArMTYzLDcgQEAgUGxh
dGZvcm0vSVBDL0F0dGFjaG1lbnQuY3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rp
b24uY3BwIEBuby11bmlmeQogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwIEBuby11bmlmeQogUGxh
dGZvcm0vSVBDL0VuY29kZXIuY3BwIEBuby11bmlmeQorUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVy
ZW5jZS5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmNwcCBAbm8tdW5p
ZnkKIFBsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcCBAbm8tdW5pZnkKIFBs
YXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZXJNYXAuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWQyMDQxZmE1MmRm
MzZhOTE2NmZjNzI4MmUxOWI2NGI5MWQ0OWIzZS4uYWRkYTI0ODUzNTkyZWM2MmVhZDI0YmUyZGU0
ZjM1ZmMxMjJiZjU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xMzMyLDYgKzEzMzIsOSBAQAogCQk3MUJBQTczMzI1RkZEMDk4MDBE
N0NENUQgLyogV0tNb2RlbFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxQkFBNzMxMjVGRkNDQkEwMEQ3Q0Q1RCAvKiBXS01vZGVsVmlldy5oICov
OyB9OwogCQk3MUZCODEwQjIyNjA2MjdFMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNl
RXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVk
TW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovOyB9OwogCQk3MjhFODZGMTE3OTUxODhDMDA4
Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oICovOyB9OworCQk3MkVFNzlCQjI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVm
ZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyRUU3OUI4MjcwRTVBQjEwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwICovOyB9Owor
CQk3MkVFNzlCQzI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRUU3OUI5Mjcw
RTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovOyB9OworCQk3MkVF
NzlCRDI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlCQTI3MEU1QUI5MDA0Q0U0MEUg
LyogRmlsdGVyUmVmZXJlbmNlLmggKi87IH07CiAJCTc1QThEMkM4MTg3Q0NGQUIwMEMzOUM5RSAv
KiBXS1dlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3Rv
cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTc1
QThEMkQ2MTg3RDFDMEUwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyRDQxODdE
MUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi87IH07CiAJCTc2
MkI3NDhEMTIwQkM3NUMwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzYyQjc0ODQxMjBCQkEy
RDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3MDIsNiArNDcwNSw5IEBACiAJCTcy
OEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI1MzE1NzI1M0MxRTREMDA0OTI5NUEgLyogUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjUzMTU4
MjUzQzFFNEQwMDQ5Mjk1QSAvKiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyRUU3OUI4MjcwRTVBQjEwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJFRTc5QjkyNzBFNUFCOTAwNENFNDBFIC8q
IEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyRUU3OUJBMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVE
YXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0
YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYw
MEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3Rv
cmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVE
YXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMyNCw2
ICs3MzMwLDkgQEAKIAkJCQlCQzAzMkQ5RTEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oICov
LAogCQkJCUJDMDMyRDlGMTBGNDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmNwcCAqLywKIAkJCQlC
QzAzMkRBMDEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5oICovLAorCQkJCTcyRUU3OUI5Mjcw
RTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZS5oICovLAorCQkJCTcyRUU3
OUI4MjcwRTVBQjEwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuY3BwICovLAorCQkJCTcyRUU3
OUJBMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKIAkJCQk5QkQ4QUI0
OTI1ODIwRTUyMDA1Mzg2RjggLyogRm9udFJlZmVyZW5jZS5oICovLAogCQkJCTQxNTFFNUMzMUZC
QjkwQTkwMEU0N0UyRCAvKiBGb3JtRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCUMwQ0U3MkFDMTI0
N0U3OEQwMEJDMEVDNCAvKiBIYW5kbGVNZXNzYWdlLmggKi8sCkBAIC0xMjI3Niw2ICsxMjI4NSw4
IEBACiAJCQkJOTMxMkJBRDYyNkYzM0MyOTAwRkRERjVGIC8qIEZpbGVTeXN0ZW1TdG9yYWdlSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVCNTc5QTI2RjUxOTMzMDA4QjQ4QUMgLyogRmls
ZVN5c3RlbVN0b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxMkJB
RDUyNkYzM0MyNjAwRkRERjVGIC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzJFRTc5QkMyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVm
ZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkVFNzlCRDI3MEU1QUI5MDA0Q0U0MEUgLyog
RmlsdGVyUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwMEI5NjYxQTE4RTI1QUUxMDBD
RTFGODggLyogRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MEMxRjQxMjY0RkQ3
MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTlDNEE1
OTE4QjgxMTc0MDA3QkRDQjYgLyogRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMzY2Nyw3ICsxMzY3OCw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMw
NyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlhdHRy
aWJ1dGVzID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JXb3Jrc3BhY2UgPSBPcmln
aW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDEzMDA7CiAJCQkJTGFzdFVwZ3JhZGVD
aGVjayA9IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKQEAgLTE0NDU5LDYgKzE0NDY5
LDcgQEAKIAkJCQkyRDkyQTc4MDIxMkI2QTcxMDBGNDkzRkQgLyogRW5jb2Rlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDRENEQzk5RTI0OEZFOERBMDBBNjk1MjIgLyogRW5kb3dtZW50U3RhdGVU
cmFja2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBNTc2MDIxNDk2Qjk3OTAwQTRFRTA2IC8q
IEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3
MkVFNzlCQjI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUNEQTkzREIxMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNo
ZXVyaXN0aWNQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEy
OUEwMDk3OEM4QiAvKiBIYW5kbGVYUENFbmRwb2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjc0OUY2NDQyMTQ2NTYxQjAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRs
ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggOGNl
YzkyNDI2ODc1MTRjNmMyYzc3Yjc4OThjMGEzNGM5MDdkNWJjNC4uZWUyNTE2MzRjYWZmY2E4Y2Jl
YWYyMTAxZWY4YTQ2ZTg3N2JiMWQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAg
LTIwMyw2ICsyMDMsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVh
dGVJbWFnZSgpOwogICAgIH0KIAorICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJ
bWFnZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJl
dHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0RmlsdGVyZWRJbWFnZUZvcklt
YWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBmaWx0ZXIsIFdURk1vdmUo
Z2VvbWV0cnkpKTsKKyAgICB9CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVm
ZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVz
dGluYXRpb25Gb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCA3
NzJmYmNhNjhmYTdmMDMxYWQwNDIwMWU5ZmUwMTZkZWQ3YjU3MTliLi5hNTI0YWIxYTJlYTJjMzc0
NGY4NDM4YmI5N2IwMmNiN2M4OWQzNDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQog
CiAjaW5jbHVkZSAiRGlzcGxheUxpc3RXcml0ZXJIYW5kbGUuaCIKKyNpbmNsdWRlICJGaWx0ZXJS
ZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oIgpAQCAtMjM3LDYgKzIzOCwyNCBAQCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldFNoYXJlYWJsZUJpdG1hcChSZW5kZXJpbgogICAgIHJl
dHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOwogfQogCitSZWZQdHI8SW1hZ2U+
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVm
ZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4mJiBnZW9tZXRyeSkKK3sK
KyAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKKworICAgIFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdl
QnVmZmVyKGltYWdlQnVmZmVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSB7IFJlZjxGaWx0ZXI+IHsg
Y29uc3RfY2FzdDxGaWx0ZXImPihmaWx0ZXIpIH0gfSwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVy
ZW5jZShXVEZNb3ZlKGdlb21ldHJ5KSkpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6R2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcigpLCAxX3MpOworICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3Vs
dCwgc2VuZFJlc3VsdCk7CisKKyAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4geyB9OworICAgIAorICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUo
aGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAg
ICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOworfQorCiB2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
LCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNo
TWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaAppbmRleCAyMzk0ZmY1YWRjNGQ3ODNiOGFmZDJkYzEzMjFmMmY1NDc1
YTIxMjg1Li4zYmE1YTQyMzc0NWM2ZDA4NzU3ODMzMzk1NzVjYjUwOWQ5YjE5ZDAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5UmVmZXJlbmNl
LmgiCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIklQQ1NlbWFwaG9yZS5oIgpAQCAtMTAyLDYgKzEwNCw3IEBAIHB1YmxpYzoK
ICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNo
SWRlbnRpZmllciBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZpbHRlciYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeT4mJik7
CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hl
Rm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441629</attachid>
            <date>2021-10-18 12:11:59 -0700</date>
            <delta_ts>2021-10-22 00:57:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211018121157.patch</filename>
            <type>text/plain</type>
            <size>866350</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmE2MDExMTJlODk1ODA3
NjlmOGE3M2IwOTQxNjMyOTdkN2E4OTJmZi4uODc0Yzk4Y2IwN2NjZjVkZGNlZTc2ZDA4ZmFiNzdi
ZTAyMzdhNjgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5NSBAQAorMjAyMS0xMC0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjphcHBseUNvcmVJbWFnZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJh
bnNmZXJDb3JlSW1hZ2UubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHlDb3JlSW1hZ2UgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9G
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZUNvcmVJbWFnZTo6aW1h
Z2UgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW06IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6c2hhcmVkQ0lDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29y
ZUltYWdlOjpzZXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZUNvcmVJbWFn
ZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZUNv
cmVJbWFnZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVp
bWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmguCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlcklt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6c2V0Qmxl
bmRNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpzZXRCbGVuZE1vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0YWtlSW5wdXRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzZXRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJhdGVBbmRIdWVSb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6c2V0Q29sb3JNYXRyaXhUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXg6OnZhbHVlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyk6IERlbGV0
ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25l
bnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvbmVudFRyYW5zZmVyOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRh
YnVsYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGluZWFyVGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFibGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2Zlcjo6cmVkRnVuY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Z3JlZW5GdW5jdGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpibHVlRnVuY3Rp
b24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6YWxwaGFGdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b3NpdGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsxKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OnNldEs0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRo
bWV0aWNTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb3NpdGU6OnNldEsyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMyk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6Om9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6azEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmsyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjprMyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6azQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6RkVDb252
b2x2ZU1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpjYWxjdWxh
dGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6
dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OnNldEtlcm5lbFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6c2V0S2VybmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldERpdmlzb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6c2V0Qmlhcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpzZXRUYXJnZXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5pdExlbmd0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9uUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRl
clBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnNldEJpYXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXg6OnNldEVkZ2VNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNl
dEtlcm5lbFVuaXRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6
c2V0UHJlc2VydmVBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRLZXJuZWxNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6a2Vy
bmVsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjprZXJuZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeDo6ZGl2aXNvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4OjpiaWFzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxw
aGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRp
bmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZm
dXNlTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGln
aHRpbmc6OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaWZmdXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhD
aGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRYQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpzZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50
TWFwOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENo
YW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1h
cDo6eENoYW5uZWxTZWxlY3RvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxTZWxlY3RvciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6c2NhbGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6Y2FsY3VsYXRlT3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpzZXRTdGREZXZpYXRpb25YKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNldER4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6c2V0RHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpzZXRTaGFkb3dD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnN0ZERldmlhdGlvblggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpzdGREZXZpYXRp
b25ZIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZHgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkeSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNoYWRvd0NvbG9y
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2hhZG93
T3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAo
V2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpzZXRGbG9vZE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RD
b2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9w
YWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJs
dXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChnYXVzc2lhbktlcm5lbEZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpr
ZXJuZWxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6c2V0U3RkRGV2aWF0aW9uWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Ym94Qmx1ckFscGhhT25seSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnN0YW5kYXJkQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpzZXRFZGdlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6c3RkRGV2aWF0aW9uWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6c3RkRGV2aWF0aW9uWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6ZWRnZU1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6RkVMaWdodGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6c2V0TGlnaHRpbmdDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1
bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBp
eGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBpeGVsSW50
ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1B
cHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6c2V0U3VyZmFjZVNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldERp
ZmZ1c2VDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckNvbnN0YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhw
b25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0
aFgpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c291cmNlIGNvbnN0KToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzdXJmYWNlU2NhbGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRpbmdD
b2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjprZXJu
ZWxVbml0TGVuZ3RoWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjprZXJuZWxVbml0TGVuZ3RoWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpsaWdodFNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6bGVmdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Ym90dG9t
TGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0VG9wKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldEJv
dHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OnNldFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6
OkZFTWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6dGFrZUlucHV0cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6Cisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpzZXRSYWRpdXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6cGl4ZWxBcnJheUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjptYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6bWluT3JNYXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1u
RXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3Jt
QXBwbHlXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpzZXRSYWRpdXNZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6bW9ycGhv
bG9neU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neTo6cmFkaXVzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3k6OnJhZGl1c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZF
T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zm
c2V0OjpzZXREeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpzZXREeCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVP
ZmZzZXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkeCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdo
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5n
OjpzZXRTcGVjdWxhckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFU3Bl
Y3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJDb25zdGFudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OnNwZWN1bGFyRXhw
b25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6
Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6aXNB
bHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6dGFrZUlucHV0cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldFR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lY
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0U2VlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldE51bU9jdGF2ZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6
cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNtb290aEN1cnZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0UGFpbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNoaW5nIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9pc2UyRCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6c2V0TnVtT2N0YXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNl
dFNlZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR5cGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2VlZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzdGl0Y2hU
aWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZW5k
ZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0OjpGaWx0ZXJCb3VuZGFyeVNldCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJCb3VuZGFyeVNldDo6eCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFy
eVNldDo6eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6d2lk
dGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmhlaWdodCBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVT
dWJyZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxh
dGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZm
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZl
Y3RJbnB1dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNl
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0
ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUNvbG9yU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlucHV0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0
KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omlu
cHV0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51
bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6aGFzUmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZp
bHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZmlsdGVyRWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6Omhhc1kgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRIYXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6aGFzV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpzZXRIYXNXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Omhhc0hlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnNldEhhc0hlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZl
Y3RCb3VuZGFyaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRD
b2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3Iu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
aWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5j
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjppc0NTU0ZpbHRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6aXNTVkdGaWx0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OmlzRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0Zp
bHRlckVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291
cmNlQWxwaGFOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VH
cmFwaGljTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFt
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c3VwcG9ydHNDb3Jl
SW1hZ2VSZW5kZXJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OmNhbGN1bGF0ZU91dHNldHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJH
ZW9tZXRyeTo6RmlsdGVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0
cnk6OmZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6c291cmNlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21l
dHJ5OjphYnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJH
ZW9tZXRyeTo6cmVzb2x1dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9t
ZXRyeTo6Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0
cnk6OmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9BYnNvbHV0ZUNvb3JkaW5h
dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjptYXhQcmltaXRp
dmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNs
aXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Rmls
dGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
SW1hZ2U6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZVJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVySW1hZ2U6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2VWZWN0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
UmVzdWx0OjpjcmVhdGVGaWx0ZXJJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0
OjppbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyUmVzdWx0OjpyZW5kZXJpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VB
bHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpT
b3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9y
TWF0cml4U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6bWF0
cml4KToKKyAgICAgICAgKFdlYkNvcmU6OnNhdHVyYXRlQW5kSHVlUm90YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Omx1bWluYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RBcHBseUFjY2Vs
ZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUlkZW50aXR5VGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGluZWFyVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Y2xhbXBCeXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6CisgICAgICAg
IChXZWJDb3JlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6YXBwbHlBcml0aG1ldGljU29mdHdhcmUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OmFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjbGFt
cFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRJbnRlcmlvclBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldE91dGVyUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Ynl0ZU9mZnNldE9mUGl4
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5U29mdHdhcmUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVE
cm9wU2hhZG93U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFRmxvb2Q6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Ym94Qmx1ckFscGhhT25seSk6CisgICAgICAgIChXZWJDb3JlOjpib3hCbHVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnN0YW5kYXJkQm94Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5V29ya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OnBsYXRmb3JtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmguCisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBseVNvZnR3YXJlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9y
cGhvbG9neVNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwLgorICAgICAgICAoV2ViQ29yZTo6cGl4
ZWxBcnJheUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNv
bXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6bWluT3JNYXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29sdW1uRXh0cmVtdW0pOgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9y
bUFwcGx5V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNl
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpUdXJidWxlbmNl
UGFpbnRpbmdEYXRhOjpUdXJidWxlbmNlUGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlR1cmJ1bGVuY2VQYWludGluZ0RhdGE6OnJhbmRvbSk6CisgICAgICAgIChXZWJDb3JlOjpzbW9v
dGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmluaXRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlU3RpdGNo
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om5vaXNlMkQpOgorICAgICAgICAoV2ViQ29yZTo6dG9J
bnRCYXNlZENvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbGxSZWdpb25Xb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZVNvZnR3YXJlOjpGaWx0
ZXJJbWFnZVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdhcmU6
OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaC4KKyAgICAgICAg
KGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9M
aWdodGluZ0RhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6dG9w
TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6bGVmdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5k
b3c6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2V0VG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpBbHBo
YVdpbmRvdzo6c2V0VG9wUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNl
dFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6QWxwaGFXaW5kb3c6OnNoaWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5nRGF0
YTo6dG9wTGVmdE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGluZ0RhdGE6
OnRvcFJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGluZ0RhdGE6OnRv
cFJpZ2h0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5nRGF0YTo6bGVm
dENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGluZ0RhdGE6Omlu
dGVyaW9yTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5nRGF0YTo6cmln
aHRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdEYXRhOjpi
b3R0b21MZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5nRGF0YTo6
Ym90dG9tUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5nRGF0YTo6
Ym90dG9tUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5oLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6YXBwbHlTb2Z0
d2FyZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVNlcGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVJbnZlcnRFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
T3BhY2l0eUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNzRWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNo
YWRvd0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkRnVuY3Rpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50
ZXJtZWRpYXRlUmVzdWx0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y29tcHV0ZVNv
dXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHB1dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyR2VvbWV0cnkuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5p
ZGwuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJHZW9tZXRyeTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlckdlb21ldHJ5OjpDU1NGaWx0ZXJHZW9tZXRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9u
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyR2VvbWV0cnkuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0
ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZp
bHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRp
dmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpzdHlsZURpZENoYW5nZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OndyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9TVkdG
RUJsZW5kRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6
ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJs
ZW5kRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUJsZW5kRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUJsZW5kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6ZmlsdGVy
RWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSURMRW51bUxpbWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6
aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46
OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RW51bVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0
ZU9wZXJhdGlvblR5cGU+Ojp0b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6ZnJvbVN0cmluZyk6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGw6CisgICAgICAg
ICogc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmZpbHRl
ckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAg
ICAgKiBzdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZs
b29kRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29k
RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OnNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdG
RUZsb29kRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdG
RUZsb29kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmltYWdlQnVmZmVy
Rm9yRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVtZW50Ojpi
dWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lF
bGVtZW50OjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJh
dG9yPjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9y
cGhvbG9neU9wZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9w
ZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlPjo6dG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVk
LgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU9m
ZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZH
RkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3Vy
Y2UgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwb3RM
aWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcG90
TGlnaHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2
Zy9TVkdGRVRpbGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVy
RWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNGaWx0ZXJFZmZlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
ZXRGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpmaWx0ZXJFZmZlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpGRUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNh
bGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjphcHBs
eVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0
aEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJ
UklSZWZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFn
ZTo6cmVmZXJlbmNlZFJlbmRlcmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXI6OmluZGV4ZWRFZmZlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpsYXN0RWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2Nh
bGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGljIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckJ1aWxkZXI6OmdldEVmZmVjdEJ5SWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyRWZmZWN0
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJl
c3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6
OnNldFRhcmdldEJvdW5kaW5nQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckJ1aWxkZXI6OnRhcmdldEJvdW5kaW5nQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnByaW1pdGl2ZVVuaXRzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldFByaW1pdGl2ZVVuaXRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6Omxhc3RFZmZl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
ZWZmZWN0UmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjplZmZlY3RCeVJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmFkZEJ1aWx0aW5FZmZlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKCk6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVz
c2lvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5pZGwuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0
cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpjYWxj
dWxhdGVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR2VvbWV0cnk6OlNWR0ZpbHRlckdl
b21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpidWlsZEZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJHZW9tZXRy
eTo6Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyR2VvbWV0
cnk6OmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckdlb21ldHJ5OjpjbGlwVG9QcmltaXRpdmVTdWJy
ZWdpb24gY29uc3QpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckdl
b21ldHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIHhtbC9YUGF0aEdyYW1tYXIuY3BwOgorICAgICAg
ICAqIHhtbC9YUGF0aEdyYW1tYXIueToKKwogMjAyMS0xMC0xNSAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIEVuYWJsZSBpbmxp
bmUgYm94ZXMgd2l0aCBib3JkZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVhYzIzZjljZDgwNmU3MGQ2ZDg5MjMz
MmJkMTBiMDIwOGE4OTVjMDIuLjc2M2UyZWM4YmMzOGI4NTM1MjExNmY2YmRmYjUwZDA0NDkwYTMw
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjEtMTAtMTggIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmls
dGVycyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJl
ZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMv
RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlckdl
b21ldHJ5UmVmZXJlbmNlOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6
OkZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOjp0YWtlR2VvbWV0cnkpOgorICAgICAgICAoSVBDOjpG
aWx0ZXJHZW9tZXRyeVJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQQzo6Rmls
dGVyR2VvbWV0cnlSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zp
bHRlclJlZmVyZW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6
OkZpbHRlclJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OmVuY29kZUZpbHRlckVmZmVjdCk6Cisg
ICAgICAgIChJUEM6OmRlY29kZUZpbHRlckVmZmVjdCk6CisgICAgICAgIChJUEM6OmVuY29kZVNW
R0ZpbHRlcik6CisgICAgICAgIChJUEM6OmRlY29kZVNWR0ZpbHRlcik6CisgICAgICAgIChJUEM6
OmVuY29kZUNTU0ZpbHRlcik6CisgICAgICAgIChJUEM6OmRlY29kZUNTU0ZpbHRlcik6CisgICAg
ICAgIChJUEM6OmVuY29kZUZpbHRlcik6CisgICAgICAgIChJUEM6OmRlY29kZUZpbHRlcik6Cisg
ICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKElQ
Qzo6RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0
ZXJSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6dGFr
ZUZpbHRlcik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAg
ICh0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKToKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorCiAyMDIxLTEwLTE2
ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEs0XSBVcGRh
dGUgc2lnbmFsIG5hbWUgdG8gbW9uaXRvciB3aW5kb3cgcmVzaXplCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpp
bmRleCA0Y2U1NTFjY2QwMzVkMWI1NzA2M2VmNDEyNGYzYmNlY2QyYjcyMWUwLi40Zjg5NDk5ZWM0
OTkxNDA5NjIzZTYzOGRkMjc1MzFkN2E5M2Q5YjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0
MTIsOCArMTQxMiwxNCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKIAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJl
c2VudGF0aW9uLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHRWZWN0b3IuaAogCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
aXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYzNlMjU4N2U2Y2Nm
YzEyYzBlOTMzMzE2ZjNlMmQ0NDUyOGUxNjZmNy4uMzE3YTRjYmVkZDE4NzhiZjg1MWQ5YWIyYTJm
N2Q3NWUzNzUwOTRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNTQsMTQgKzIwNTQsMzUgQEAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlv
bi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyUmVzdWx0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1Nv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29m
dHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5C
bHVyU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVN
ZXJnZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1v
cnBob2xvZ3lTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVPZmZzZXRTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVUaWxlU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VHVyYnVsZW5jZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GaWx0ZXJJbWFnZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28v
SVNPQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94LmNwcApA
QCAtMjIwMSw2ICsyMjIyLDcgQEAgcmVuZGVyaW5nL0JpZGlSdW4uY3BwCiByZW5kZXJpbmcvQm9y
ZGVyRWRnZS5jcHAKIHJlbmRlcmluZy9CcmVha0xpbmVzLmNwcAogcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKK3JlbmRlcmluZy9DU1NGaWx0ZXJHZW9tZXRyeS5jcHAKIHJlbmRlcmluZy9DYXJldFJl
Y3RDb21wdXRhdGlvbi5jcHAKIHJlbmRlcmluZy9DbGlwUmVjdC5jcHAKIHJlbmRlcmluZy9Db250
ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApAQCAtMjYzNyw2ICsyNjU5LDcgQEAgc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlRm9yQ29udGFpbmVyLmNwcAogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAKIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCitzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJHZW9tZXRyeS5jcHAKIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwCiBz
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmNwcAog
c3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlQW5pbWF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCAzZWM5M2I2OTEwNjYyY2ExZWZhZmQ2MTE3NDRkMTJjZTRjZWE2YzE2Li4zNDI2
ZjUyMjE2ZmIxZDE1ODQxYTdmNTY1YzE4MjEwOTY3MmVhYWM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTM5OCw3ICszOTgsMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRp
ZXMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tCitwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbQorcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUltYWdlLm1tCitwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVURldmljZU1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvRGlz
cGxheVJlZnJlc2hNb25pdG9ySU9TLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGNkMGY5YTJmMDM5NzM4MDVkNjBkMzU1ODFjMzNkOGJlMjE5MWU1YjcuLjZjYjBmYTBl
NTVjYmQ3OWJlM2EyMzk5ZmEyZTJmMDM1N2FmMGIwODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzOCw3ICsyMzgsNiBAQAog
CQkwODE2NjhENDEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDIxMjU2MDNC
RjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuaCAqLzsgfTsKIAkJMDgxNjY4REExMjU2
MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MTY2OEQ4MTI1NjAzRDUwMDZGMjVERSAvKiBT
VkdUZXh0TGF5b3V0RW5naW5lLmggKi87IH07CiAJCTA4MUFBOERBMTExMTIzN0UwMDJBQjA2RSAv
KiBTVkdFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4MUFBOEQ5MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdFbGVtZW50UmFyZURh
dGEuaCAqLzsgfTsKLQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MUVC
RjM5MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi87IH07CiAJCTA4M0RB
RUE3MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTMwRjAxQTdG
QjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggKi87IH07CiAJCTA4M0RB
RUE5MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUE1MEYwMUE3
RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAqLzsgfTsKIAkJMDg0
NTY4MDgxMkI5MERBNjAwOTYwQTlGIC8qIEZvbnRNZXRyaWNzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQ1NjgwNzEyQjkwREE2MDA5NjBBOUYgLyog
Rm9udE1ldHJpY3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzgxLDggKzc4MCw2IEBACiAJCTJBRUY2RkREMjZFN0VDQ0YwMDMyNkQwMiAvKiBD
U1NOdW1lcmljVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkFFRjZGQ0UyNkU3MUYyRDAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBlLmggKi87IH07
CiAJCTJCMzY1Qzg0MTUyNTExOUUwMDkxRDI3QiAvKiBSZW5kZXJTVkdFbGxpcHNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQjQyMzVBMDE1MjUwRjYw
MDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovOyB9OwogCQkyQkU4RTJDNzEyQTU4OUVD
MDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRN
TE1ldGFDaGFyc2V0UGFyc2VyLmggKi87IH07Ci0JCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyLmggKi87IH07Ci0JCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLmggKi87IH07CiAJCTJEMDYyMTQ0MURBNjM5QjYwMEE3RkIyNiAvKiBXZWJL
aXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MjFEQTYzOTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFL
ZXlNZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDA2MjE0NTFEQTYzOUJBMDBBN0ZCMjYgLyog
V2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleU1lc3NhZ2VFdmVudC5oICovOyB9OwogCQkyRDA2MjE0RDFEQTYzQThCMDBBN0ZCMjYgLyog
V2ViS2l0TWVkaWFLZXlzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEMDYyMTQ5MURBNjNBNzkwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleXMuY3Bw
ICovOyB9OwpAQCAtMjMxNyw3ICsyMzE0LDIwIEBACiAJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4
MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOUQwNTMw
MjUzMTQyNDMwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOUQwNTJFMjUzMTNFMjYw
MDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkE3M0JFRjI0NUEzRjkwMDAxQzlE
MDMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJh
bWVSYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4OEM0IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q4MzI3MDY2NzRDMDAz
QzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDNTI3MTQzNTIzMDAzRTg4QzQgLyogRmlsdGVyQm91
bmRhcnlTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM2MjcxNDM1
RkQwMDNFODhDNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1
bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzJBQTQ2QzcyNzE0MzY5QTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCRDI3MTQz
MEIxMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDODI3MTQzNzMzMDAzRTg4QzQg
LyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM5MjcxNDM3
RDEwMDNFODhDNCAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQTI3MTQz
OTAxMDAzRTg4QzQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2
Q0IyNzE0Mzk5NzAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0
IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyQUE0NkNDMjcxNDM5RDkwMDNFODhDNCAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZC
MjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDRDI3MTQzOUU1MDAzRTg4QzQgLyogU1ZH
RmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJBQTQ2QkYyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZEMzI3MTRFMzVEMDAzRTg4QzQgLyogQ1NTRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkQwMjcxNEM4QTUwMDNFODhD
NCAvKiBDU1NGaWx0ZXJHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyQUE0NkQ0MjcxNEYxOEUwMDNFODhDNCAvKiBGaWx0ZXJJbWFn
ZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJCQUMzQUUyM0UxRjBC
MDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdl
QnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERpYWdub3N0aWNMb2dn
aW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dpbmdEb21haW4uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZF
ODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4
MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMw
MDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQu
aCAqLzsgfTsKQEAgLTI3MjAsOCArMjczMCw2IEBACiAJCTg0MjI0MTk0MTA3RTc4QTcwMDc2NkE4
NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFDMDAyMTk1NEEgLyogU1ZH
UGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2Uu
aCAqLzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ3MTIw
QzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0JCTg0NUU3MkY4MEZEMjYx
RUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLzsgfTsK
LQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5
IC8qIFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdEMDA2MjY2RTIgLyogTWVk
aWFRdWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQu
aCAqLzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBE
NUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovOyB9OwogCQk4NDcz
MEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKQEAgLTI3MzEsNyArMjczOSw3IEBACiAJCTg0
NzMwRDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NDEyNDhGMEIzMDBEM0E5QzkgLyog
RkVMaWdodGluZy5oICovOyB9OwogCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBE
NjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgfTsKIAkJODQ3MzBEODUxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9n
eS5oICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMwRDg5MTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1
bGFyTGlnaHRpbmcuaCAqLzsgfTsKIAkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBE
NkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwogCQk4NDczMEQ4RDEyNDhGMEIz
MDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNl
LmggKi87IH07CkBAIC02MTQyLDggKzYxNTAsNiBAQAogCQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1
REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUg
LyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFF
QkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRl
ckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVp
bGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAz
NDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI5
Miw4ICs2Mjk4LDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRS
ZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBv
aW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFE
QjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4NDIx
M0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03NDAzLDEwICs3NDA3LDYgQEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4
IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJD
NjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJD
ODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNB
QTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRN
ZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3Nh
Z2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRNZWRpYUtl
eU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0NzFE
QTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTgyLDkgKzEwNTgyLDU2IEBACiAJ
CTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQy
M0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQw
NTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFF
IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1
QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIw
MDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNv
dXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIw
MDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
Q29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8q
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdD
MjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIw
MDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZF
QmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUg
LyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZp
bHRlckltYWdlVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBG
aWx0ZXJJbWFnZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlU29m
dHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCNzI3MTQyRjM4
MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VTb2Z0d2FyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJ
bWFnZVNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI4Mjcx
NDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbHRlckltYWdlQ29yZUltYWdlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNl
R3JhcGhpY0NvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCQjI3MTQzMEIwMDAzRTg4QzQgLyog
RmlsdGVyRWZmZWN0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZp
bHRlckVmZmVjdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZC
QzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQUE0NkJEMjcxNDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4
QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0
NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVy
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkMxMjcxNDMy
REYwMDNFODhDNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdGaWx0ZXJHZW9tZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkFBNDZDMjI3MTQzMkUwMDAzRTg4QzQgLyogU1ZHRmlsdGVyR2VvbWV0cnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyR2VvbWV0cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZDNDI3MTQzNTA1MDAzRTg4QzQg
LyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmlsdGVyQm91bmRhcnlTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2
RDAyNzE0QzhBNTAwM0U4OEM0IC8qIENTU0ZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENTU0ZpbHRlckdlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0
NkQxMjcxNEM4QTUwMDNFODhDNCAvKiBDU1NGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQUE0NkQ3MjcxNThBNTcwMDNFODhDNCAvKiBGRUNvbG9yTWF0cml4Q29yZUltYWdlLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2RDkyNzE1OEE1NzAwM0U4OEM0IC8qIEZFQ29t
cG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGRUNvbXBv
bmVudFRyYW5zZmVyQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkIxQjc1MTI3MTdFQTJFMDAxQjJFMDggLyogRmlsdGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkIxQjc1NDI3MTkxMTQzMDAxQjJFMDggLyogTGlnaHRpbmdEYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExpZ2h0aW5nRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNB
NDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E2MjNFMTcz
MjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEwNTk2LDYgKzEwNjQzLDggQEAKIAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFD
IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdD
NyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5n
T3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFG
MDA3N0YwRTggLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1h
Z2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0QTFGMDA3
N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpT
RVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNS
R0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0
QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNE
MDA4NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTUy
OCw5ICsxMTU3Nyw2IEBACiAJCTg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3Ry
aW5nU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJp
bmdTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFE
NDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMw
MEJEOTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZp
bHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdE
NzkgLyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Zp
bHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2
MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2
RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVk
aWFRdWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTU4
MCw4ICsxOTYyNiwxMSBAQAogCQkyQ0UxMTg5ODI0QzI0MDJDMDAzNzcwRTkgLyogY29yZWltYWdl
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkyQ0FBNEEz
OTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLywK
LQkJCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2RDcyNzE1OEE1NzAwM0U4OEM0IC8qIEZFQ29sb3JNYXRy
aXhDb3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2RDkyNzE1OEE1NzAwM0U4OEM0IC8qIEZFQ29t
cG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2QkEyNzE0MkY3QTAwM0U4
OEM0IC8qIEZpbHRlckltYWdlQ29yZUltYWdlLmggKi8sCisJCQkJNzJBQTQ2QjgyNzE0MkY3OTAw
M0U4OEM0IC8qIEZpbHRlckltYWdlQ29yZUltYWdlLm1tICovLAorCQkJCTcyQUE0NkI5MjcxNDJG
NzkwMDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBjb3JlaW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMyMDksNiAr
MjMyNTgsMzMgQEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVudCI7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDgy
MjcwNjUxMUIwMDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc1
MjcwNTg1QjgwMDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwICovLAorCQkJCTcy
QTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3Bw
ICovLAorCQkJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJl
LmNwcCAqLywKKwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVDN0VGMDAzQzVBQUUgLyogRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0UyNzA2MzM2QjAwM0M1QUFF
IC8qIEZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3ODI3MDU4QzAzMDAz
QzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QjI3MDVCMkM5MDAz
QzVBQUUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODEyNzA2
NDZFMjAwM0M1QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzQy
NzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzMy
NzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4
M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJB
ODNEN0YyNzA2M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4
M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmNwcCAqLywK
KwkJCQk3MkFBNDZCNzI3MTQyRjM4MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VTb2Z0d2FyZS5oICov
LAorCQkJCTcyQjFCNzU0MjcxOTExNDMwMDFCMkUwOCAvKiBMaWdodGluZ0RhdGEuaCAqLywKKwkJ
CQk3MkE4M0Q3MTI3MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzAyNzA1NzUwNDAwM0M1QUFFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5j
cHAgKi8sCisJCQkpOworCQkJcGF0aCA9IHNvZnR3YXJlOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKIAkJN0MwMTFGM0MyNEZBRDM2MDAwNUJFRjEwIC8qIFNldHRpbmdzVGVtcGxh
dGVzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1MjYz
LDYgKzI1MzM5LDcgQEAKIAkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDZGMjcw
NTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLywKIAkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFD
OEMgLyogRGlzdGFudExpZ2h0U291cmNlLmNwcCAqLywKIAkJCQk4NDczMEQ1QTEyNDhGMEIzMDBE
M0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTc1RThCODAwRTFERTJENjAw
N0YyNDgxIC8qIEZFQmxlbmQuY3BwICovLApAQCAtMjUyOTksMTUgKzI1Mzc2LDI1IEBACiAJCQkJ
ODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovLAogCQkJCTg0NzMwRDZGMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuY3BwICovLAogCQkJCTg0NzMwRDcwMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCAqLywKLQkJCQk4NDVFNzJGNzBGRDI2MUVFMDBB
ODdENzkgLyogRmlsdGVyLmggKi8sCisJCQkJNzJBODNENkUyNzAzREZEODAwM0M1QUFFIC8qIEZp
bHRlci5jcHAgKi8sCisJCQkJNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRlci5oICov
LAorCQkJCTcyQUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICov
LAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICovLAog
CQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKLQkJCQky
Qzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAot
CQkJCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICov
LAorCQkJCTcyQUE0NkJCMjcxNDMwQjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAq
LywKKwkJCQk3MkIxQjc1MTI3MTdFQTJFMDAxQjJFMDggLyogRmlsdGVyRnVuY3Rpb24uY3BwICov
LAorCQkJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAor
CQkJCTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBGaWx0ZXJHZW9tZXRyeS5oICovLAorCQkJ
CTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJNzJD
OTBBM0EyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlckltYWdlLmggKi8sCisJCQkJNzJBQTQ2QjQy
NzE0MkNFQjAwM0U4OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggKi8sCiAJCQkJNDlFQ0VCNjMx
NDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQx
NDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk0OUVDRUI2NjE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oICovLAorCQkJCTcyQUE0NkJEMjcx
NDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovLAorCQkJCTcyQUE0NkJD
MjcxNDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovLAorCQkJCTcyOTc4RDQzMjZG
RTlERTcwMEZEMkM1NiAvKiBGaWx0ZXJSZXN1bHQuaCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIz
MDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFD
OEMgLyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNB
OUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTI3MDcwLDEwICsyNzE1NywxMyBAQAog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJQjI1NTk4RUEwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1h
Z2UuY3BwICovLAogCQkJCUIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmgg
Ki8sCi0JCQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgKi8sCi0J
CQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovLAotCQkJCTA4MUVC
RjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKLQkJCQkwODFF
QkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovLAorCQkJCTcyQTgz
RDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZCMjcw
M0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLywKKwkJCQk3MkFBNDZDMDI3MTQzMkRGMDAz
RTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCisJCQkJNzJBQTQ2QkUyNzE0MzJERTAw
M0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJCQk3MkFBNDZCRjI3MTQzMkRFMDAz
RTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oICovLAorCQkJCTcyQUE0NkMyMjcxNDMyRTAw
MDNFODhDNCAvKiBTVkdGaWx0ZXJHZW9tZXRyeS5jcHAgKi8sCisJCQkJNzJBQTQ2QzEyNzE0MzJE
RjAwM0U4OEM0IC8qIFNWR0ZpbHRlckdlb21ldHJ5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZp
bHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzAxODYsOCArMzAyNzYsMTAg
QEAKIAkJCQlDQTdFOUI0NzI0MzYxREM1MDA0RTg5RjYgLyogQ29udGVudGZ1bFBhaW50Q2hlY2tl
ci5oICovLAogCQkJCTkzOTJGMTRGMEFEMTg2MjMwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5jcHAg
Ki8sCiAJCQkJOTM5MkYxNEIwQUQxODYxQjAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmggKi8sCi0J
CQkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8sCi0JCQkJMEY1
M0ZCODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovLAorCQkJCTcyQTgzRDZDMjcw
M0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovLAorCQkJCTcyQTgzRDZEMjcwM0RDM0Ew
MDNDNUFBRSAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJCQk3MkFBNDZEMTI3MTRDOEE1MDAzRTg4QzQg
LyogQ1NTRmlsdGVyR2VvbWV0cnkuY3BwICovLAorCQkJCTcyQUE0NkQwMjcxNEM4QTUwMDNFODhD
NCAvKiBDU1NGaWx0ZXJHZW9tZXRyeS5oICovLAogCQkJCUUzQkJDMjQ1MjM4MzU1MUEwMDZFQzM5
RiAvKiBDU1NWYWx1ZUtleS5oICovLAogCQkJCUU0QThEMjE1MjI1NzhEQTAwMEE4NDYzQyAvKiBF
dmVudFJlZ2lvbi5jcHAgKi8sCiAJCQkJRTRBOEQyMTQyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50
UmVnaW9uLmggKi8sCkBAIC0zMTYyMCw2ICszMTcxMiw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJz
QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9
ICgKKwkJCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51bGwpIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0MDBBN0QyREQgLyogQWJzdHJhY3RE
T01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzIyNzksNiArMzIzNzIsOCBAQAogCQkJCUFB
MjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8qIENT
U0RlZmVycmVkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDQTI3MTQzOTAxMDAz
RTg4QzQgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZEMzI3MTRFMzVE
MDAzRTg4QzQgLyogQ1NTRmlsdGVyR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCQjBD
NUI4MTdCQkQ2MjkwMDNEMzY3NyAvKiBDU1NGaWx0ZXJJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzY0QjRENjBDQjQyOThBMDA1RjJCNjIgLyogQ1NTRm9udEZhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MEU2Q0ZEMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NGb250RmFjZVJ1bGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMzI3ODYsMTIgKzMyODgxLDE3IEBACiAJCQkJOTMwRTQ0ODYy
NzBDMzcyMjAwREU3QUI3IC8qIEZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2OUYwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEyQkU0ODMxRkU4NjVERDAwMjAzMUNDIC8qIEZpbGxN
b2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDOTI3MTQzN0QxMDAzRTg4QzQgLyogRmls
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNTI3MTQzNTIzMDAzRTg4QzQgLyogRmls
dGVyQm91bmRhcnlTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4
MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJDODU2NTM0MjRDMEY3
M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDQjI3MTQzOTk3MDAzRTg4QzQgLyogRmlsdGVy
RWZmZWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNjI3MTQzNUZEMDAzRTg4
QzQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkMzMjcxNDM0
NDcwMDNFODhDNCAvKiBGaWx0ZXJHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2
QzgyNzE0MzczMzAwM0U4OEM0IC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MkFBNDZENDI3MTRGMThFMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyog
RmlsdGVyUmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5
RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYw
QTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTZGQjdEMkREMjUwRkQ4MjgwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzU2OTYsOSArMzU3OTYsOSBAQAogCQkJCUIyMjI3QTAzMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3QTA2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjIyN0EwOTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0Zp
bHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNDMjcxNDM5RDkwMDNF
ODhDNCAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBDMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZD
RDI3MTQzOUU1MDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjIyMjdBMEYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0ZpdFRvVmlld0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUIwQ0VG
MEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NDgw
LDcgKzM2NTgwLDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2Jq
ZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJ
RGVmYXVsdEJ1aWxkU3lzdGVtVHlwZUZvcldvcmtzcGFjZSA9IE9yaWdpbmFsOwogCQkJCUxhc3RT
d2lmdFVwZGF0ZUNoZWNrID0gMDcwMDsKIAkJCQlMYXN0VXBncmFkZUNoZWNrID0gMTE0MDsKIAkJ
CQlUYXJnZXRBdHRyaWJ1dGVzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdl
VmFsdWUuY3BwCmluZGV4IDhjZjkwOWFlOWU1MzcyNGI5MWRiNGFjZTE0YWUyODU3MWRkOTU1MjYu
LjU1MWMyODA1MjkzODMwMzIzZWM4MWJmODJlNzMxZjU2NWQwMDU4NTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCiAKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKKyNp
bmNsdWRlICJDU1NGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKQEAgLTExNiwyNiArMTE3LDIzIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VW
YWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAg
ICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5
NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVy
YXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVy
biAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3Qg
eyB7IH0sIHNpemUgfTsKICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwg
aW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsK
LSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOwotICAgIGNz
c0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0gICAgY3NzRmlsdGVyLT5z
ZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNzc0ZpbHRlci0+YnVpbGQocmVu
ZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9u
KSkKKyAgICBhdXRvIGZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCBtX2ZpbHRl
ck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmlsdGVyKQogICAgICAgICBy
ZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBjc3NGaWx0ZXItPmFwcGx5KCk7CiAKLSAg
ICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwotICAgIGlmICghb3V0cHV0KQot
ICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKKyAgICBhdXRvIGdlb21ldHJ5ID0g
Q1NTRmlsdGVyR2VvbWV0cnk6OmNyZWF0ZShpbWFnZVJlY3QsIGltYWdlUmVjdCk7CisgICAgaWYg
KGF1dG8gZmlsdGVyZWRJbWFnZSA9IHRleHR1cmUtPmZpbHRlcmVkSW1hZ2UoKmZpbHRlciwgV1RG
TW92ZShnZW9tZXRyeSkpKQorICAgICAgICByZXR1cm4gZmlsdGVyZWRJbWFnZTsKIAotICAgIHJl
dHVybiBvdXRwdXQtPmNvcHlJbWFnZSgpOworICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgp
OwogfQogCiB2b2lkIENTU0ZpbHRlckltYWdlVmFsdWU6OmZpbHRlckltYWdlQ2hhbmdlZChjb25z
dCBJbnRSZWN0JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRleCBhNWRkMjhiNzM3YmM4MzVlODZlYTNlZjIwMmE3
NGU0NmFiMjIyMTgxLi44OGEzMTAyNzc5ODJmMzI3ZDI0Mzk0NmVlZWY1MjZlNWY3MjA5NzQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJ
bWFnZUJ1ZmZlci5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCkBAIC0xMzgsNiArMTM5LDE5IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCisgICAgUmVmUHRyPEltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0
IEZpbHRlciYgZmlsdGVyLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0
cnkpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIAorICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXIm
PigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworCisgICAgICAgIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgICAgIHN0ZDo6dGllKGltYWdlQnVmZmVyLCBzdGQ6Omln
bm9yZSkgPSBmaWx0ZXIuYXBwbHkodGhpcywgV1RGTW92ZShnZW9tZXRyeSkpOworICAgICAgICBy
ZXR1cm4gaW1hZ2VCdWZmZXIgPyBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKCkgOiBudWxscHRyOwor
ICAgIH0KKwogICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0
YzFjNWY5MDg3YTkzYTdkMTI1Yjg5MzY0NDhmMDRlZmVkMGY3MGMwLi5hZjRkMDI4NGEwZmRkYjFh
ZWVkYzE5NmE3YTIxN2M1ZWNhYWYxNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAog
I2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5j
bHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJG
bG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgpAQCAtNjI5LDYgKzYzMSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAg
ICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJJbWFnZUJ1ZmZlcihGaWx0ZXImIGZpbHRlciwgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkpCit7CisgICAg
YXV0byBbZmlsdGVyZEltYWdlLCBpbWFnZVJlY3RdID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdl
LCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgaWYgKGZpbHRlcmRJbWFnZSkKKyAgICAgICAgZHJh
d0ltYWdlQnVmZmVyKCpmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdCk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkK
IHsKICAgICBQYXRoIHBhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDA2YjcxMzM4ZWY4ZDkxYWRlNDZjOTIwOWE1OWM3
NzA5NTJkY2E5OTAuLjRmZjVkOGMzYTNiNTY2NjRkZGM0NzJmMzZkZTlkN2I2NjE5NjZhZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCkBAIC04NSw2ICs4NSw4IEBAIHR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOworY2xhc3MgRmlsdGVyOwor
Y2xhc3MgRmlsdGVyR2VvbWV0cnk7CiBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3Jh
ZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CkBAIC00NTAsNiAr
NDUyLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ZpbHRlcklt
YWdlQnVmZmVyKEZpbHRlciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckdlb21ldHJ5PiYmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRl
eCBhMDU5MmI5OWI4OGRiZTAxOGZhOTVjNWEzMDVkMjk4MmMwMjRmNmQ4Li5iZjM5OTVmYzllYTdh
NzA3MzgzNDU1YTkxY2Q2YjY2ZjE5MzBhNTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTQyLDYgKzQyLDkgQEAgY2xhc3MgRHJhd2lu
Z0NvbnRleHQ7CiBzdHJ1Y3QgSXRlbUJ1ZmZlckhhbmRsZTsKIH0KIAorY2xhc3MgRmlsdGVyOwor
Y2xhc3MgRmlsdGVyR2VvbWV0cnk7CisKIGNsYXNzIEltYWdlQnVmZmVyIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPEltYWdlQnVmZmVyLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWlu
PiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEltYWdlQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgLy8g
V2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtMTA2
LDYgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVk
SW1hZ2UoY29uc3QgRmlsdGVyJiwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSA9
IDA7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUg
Y29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUu
CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KaW5kZXggZDRmYTNjNGJmYWQz
NGFhZjMwOTNhOWYwMjQ4NmJiNzI3Zjk4ZDRhYS4uZDQ1YWIzM2M0NDA4ZWQ2MzYwNzQ2MTRkNDZm
NDU5ZGE2ZjUxZDYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCkBA
IC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFNob3Vs
ZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBDU1NGaWx0ZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCisvLyBGSVhNRTogU2hvdWxkIHNo
YXJlIHRoZXNlIHZhbHVlcyB3aXRoIEZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4KS4KIHN0YXRpYyBjb25zdCBkb3VibGUgc2VwaWFG
dWxsQ29uc3RhbnRzWzNdWzNdID0gewogICAgIHsgMC4zOTMsIDAuNzY5LCAwLjE4OSB9LAogICAg
IHsgMC4zNDksIDAuNjg2LCAwLjE2OCB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb2xvck1hdHJpeENvcmVJ
bWFnZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zY2ZhOWYxNzk2N2I5M2ZiODdlYzg0M2I3OWE2NTRkZjI5NTQ4
NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSwxMDYgQEAKKy8q
CisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisq
CisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGRUNvbG9y
TWF0cml4LmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAiRmlsdGVySW1hZ2VD
b3JlSW1hZ2UuaCIKKyNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KKyNpbXBvcnQgPENv
cmVJbWFnZS9DSUZpbHRlci5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVDb2xvck1hdHJpeDo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbG9yTWF0cml4VHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUKKyAgICAgICAgfHwgbV9jb2xvck1hdHJpeFR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURQorICAgICAgICB8fCBtX2NvbG9yTWF0cml4
VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOworfQorCitib29sIEZFQ29sb3JNYXRy
aXg6OmFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICBBU1NF
UlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQo
KTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdl
PihpbnB1dCkuaW1hZ2UoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gdmFsdWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKyAgICAKKyAgICBzd2l0Y2gg
KG1fY29sb3JNYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEU6CisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhj
b21wb25lbnRzLCB2YWx1ZXNbMF0pOworICAgICAgICBicmVhazsKKyAgICAKKyAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAgICAg
YnJlYWs7CisgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTog
QWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlvbgorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgCisgICAgYXV0byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0
ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07CisgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwor
ICAgIAorICAgIHN3aXRjaCAobV9jb2xvck1hdHJpeFR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzow
XSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0
XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25l
bnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1
dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAg
ICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAg
ICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogeworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0g
IGZvcktleTpAImlucHV0UlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFs
dWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sx
MF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0
QlZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVl
c1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0g
IFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBkb3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJ
bWFnZT4ob3V0cHV0KS5zZXRJbWFnZShjb2xvck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRUcmFuc2ZlckNv
cmVJbWFnZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjA2MzI1ODIzZDRlNWQ4NTVkYjQ2ZmJiOTgzOTZiZTg5
NjI3NTM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSw3
NiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcoKSBjb25zdAoreworICAgIGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsKKyAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKKyAgICB9OworCisgICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKG1fcmVkRnVuY3Rpb24pCisg
ICAgICAgICYmIGlzTnVsbE9yTGluZWFyKG1fZ3JlZW5GdW5jdGlvbikKKyAgICAgICAgJiYgaXNO
dWxsT3JMaW5lYXIobV9ibHVlRnVuY3Rpb24pCisgICAgICAgICYmIGlzTnVsbE9yTGluZWFyKG1f
YWxwaGFGdW5jdGlvbik7Cit9CisKK2Jvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHlDb3Jl
SW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhlIHJlc3Qgb2YgRkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKKyAgICBBU1NFUlQo
c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSk7CisKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUo
KSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8g
aW5wdXRJbWFnZSA9IGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihpbnB1dCkuaW1hZ2Uo
KTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBhdXRvIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JQb2x5bm9t
aWFsIl07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJ
bnB1dEltYWdlS2V5XTsKKyAgICAKKyAgICBhdXRvIHNldENvZWZmaWNpZW50cyA9IFsmXSAoTlNT
dHJpbmcgKmtleSwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsK
KyAgICAgICAgaWYgKGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJ
TkVBUikKKyAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhY
OmZ1bmN0aW9uLmludGVyY2VwdCBZOmZ1bmN0aW9uLnNsb3BlIFo6MCBXOjBdIGZvcktleTprZXld
OworICAgIH07CisgICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRSZWRDb2VmZmljaWVudHMiLCBt
X3JlZEZ1bmN0aW9uKTsKKyAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEdyZWVuQ29lZmZpY2ll
bnRzIiwgbV9ncmVlbkZ1bmN0aW9uKTsKKyAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEJsdWVD
b2VmZmljaWVudHMiLCBtX2JsdWVGdW5jdGlvbik7CisgICAgc2V0Q29lZmZpY2llbnRzKEAiaW5w
dXRBbHBoYUNvZWZmaWNpZW50cyIsIG1fYWxwaGFGdW5jdGlvbik7CisgICAgCisgICAgZG93bmNh
c3Q8RmlsdGVySW1hZ2VDb3JlSW1hZ2U+KG91dHB1dCkuc2V0SW1hZ2UoZmlsdGVyLm91dHB1dElt
YWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0
ZDU1YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0
OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIFVTRShDT1JFX0lNQUdFKQotCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgot
I2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgot
Ci1PQkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpDX0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBD
SUNvbnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsK
LWNsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFz
cyBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5k
ZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5
Q3JlYXRlKEZpbHRlckVmZmVjdCYpOwotICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJ
Q29udGV4dCgpOwotICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwot
ICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsg
fQotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVh
clJlc3VsdCgpIGZpbmFsOwotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0g
ICAgCi1wcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZp
bHRlckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3Qm
KSBmaW5hbDsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0
ZXJFZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0
ZXJFZmZlY3QmKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VH
cmFwaGljKFNvdXJjZUdyYXBoaWMmKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JG
RUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRy
PENJSW1hZ2U+PiYpOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50
VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJ
bWFnZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRyPElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1
dEltYWdlQnVmZmVyOwotICAgIFJldGFpblB0cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9G
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNWM4NmZjNGMyM2FmOTU0NTU1N2E1NThjOGM0NTFlMTlhOGEzOGZiNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0K
KysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0q
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgot
I2ltcG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1w
b3J0ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9y
dCAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2lt
cG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJj
ZUdyYXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENv
cmVJbWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2lt
cG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsK
LSAgICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVmZmVjdCkpCi0gICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPigpOwotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0PiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4
dFdpdGhPcHRpb25zOiBAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IChfX2JyaWRnZSBp
ZClDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQil9XTsKLSAgICBy
ZXR1cm4gY2lDb250ZXh0OwotfQotCi1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewot
ICAgIGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZnVuY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUg
PT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBp
c051bGxPckxpbmVhcihlZmZlY3QucmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZm
ZWN0LmdyZWVuRnVuY3Rpb24oKSkKLSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJs
dWVGdW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsK
LX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5n
ZSByZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dp
dGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAg
ICAgc3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAg
ICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAg
ICAgICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3du
Y2FzdDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNl
dDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZm
ZWN0JiBsYXN0RWZmZWN0KQotewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJz
KGxhc3RFZmZlY3QpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUlt
YWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0
ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1
dEltYWdlczsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkp
IHsKLSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAg
ICAgICBpZiAoIWlucHV0SW1hZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFj
ZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFi
c29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUo
KSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAg
ICByZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVm
ZmVjdCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAg
ICAgcmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4Pihl
ZmZlY3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBv
bmVudFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVy
KGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0
aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9z
aXRlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGlu
ZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9m
ZnNldDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxw
aGE6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3Qp
Ci17Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJj
ZUltYWdlKCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgCi0gICAgaWYgKGlzPElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQot
ICAgICAgICByZXR1cm4gW0NJSW1hZ2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3Vy
ZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAg
IAotICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5
TmF0aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJ
SW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRy
aXgoY29uc3QgRkVDb2xvck1hdHJpeCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJ
SW1hZ2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFn
ZXMuYXQoMCk7Ci0KLSAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRG
bG9hdHMoZWZmZWN0LnZhbHVlcygpKTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAot
ICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1NBVFVSQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBv
bmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4
OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VO
S05PV046Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8g
RklYTUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0g
W0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1h
dHJpeEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdl
S2V5XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEU6IHsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2
ZWN0b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0g
VzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50
c1s0XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAg
ICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21w
b25lbnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJp
bnB1dEJWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAg
ICAgICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4
RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAg
ICAgICAgICAgICBaOjAgICAgICAgICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3Ii
XTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1sz
XV0gIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6
dmFsdWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVl
c1sxMF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlu
cHV0QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVj
dG9yIHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZh
bHVlc1sxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhG
aWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNb
OV0gIFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJd
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVy
Lm91dHB1dEltYWdlOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVu
dFRyYW5zZmVyJiBlZmZlY3QsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdl
cykKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJh
bnNmZXIgZnVuY3Rpb25zCi0gICAgQVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbihlZmZlY3QpKTsKLQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2Vz
LmF0KDApOwotICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lD
b2xvclBvbHlub21pYWwiXTsKLSAgICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2Uu
Z2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZp
Y2llbnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBmdW5jdGlvbikgewotICAgICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSKQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjow
IFc6MF0gZm9yS2V5OmtleV07Ci0gICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJl
ZENvZWZmaWNpZW50cyIsIGVmZmVjdC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVu
dHMoQCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0g
ICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVG
dW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRz
IiwgZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRw
dXRJbWFnZTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVu
ZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBw
b3J0c0NvcmVJbWFnZVJlbmRlcmluZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAg
IGlmICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdD
SUZpbHRlcnMoKmluKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6b3V0cHV0KCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
IDw8ICJSZW5kZXJpbmcgIiA8PCB0aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICBy
ZXR1cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
bGFtcGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBt
X291dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVk
U2l6ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3Vs
dENvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1h
Z2VCdWZmZXIpIHsKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2Uu
Z2V0KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNl
KCkgYm91bmRzOmRlc3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1
bHRDb2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZl
Y3QmIGxhc3RFZmZlY3QpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZl
Y3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVm
ZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0Owot
fQotCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17
Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9
IG51bGxwdHI7Ci19Ci0KLUZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZSgpCi0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19
Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUlt
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
SW1hZ2VDb3JlSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzRjNThhYjY2YTI4MTA1MDMwNmNmOTY3OGJi
NzU4ZGE5YTIwZDNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUltYWdlLmgKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lN
QUdFKQorCisjaW1wb3J0ICJGaWx0ZXJJbWFnZS5oIgorCitPQkpDX0NMQVNTIENJSW1hZ2U7CitP
QkpDX0NMQVNTIENJQ29udGV4dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0
ZXJJbWFnZUNvcmVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJJbWFnZSB7CitwdWJsaWM6CisgICAgdXNp
bmcgRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoUmV0YWlu
UHRyPENJSW1hZ2U+JiYpOworICAgIAorcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgb3ZlcnJpZGU7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gbV9pbWFnZTsKKyAg
ICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVy
SW1hZ2VDb3JlSW1hZ2UpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZp
bHRlckltYWdlJiByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUltYWdl
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlcklt
YWdlQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxOWZlMDU4OGZmMDU1NGU5YjIxMjJjOGM2MWU1
NjMzNjY0YzcxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSw3MyBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkZp
bHRlckltYWdlQ29yZUltYWdlLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAi
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorI2ltcG9ydCA8Q29yZUltYWdlL0NJQ29udGV4dC5oPgor
I2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgUmV0YWluUHRyPENJQ29udGV4dD4gc2hhcmVkQ0lDb250ZXh0
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNp
Q29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdpdGhPcHRpb25zOkB7IGtDSUNvbnRleHRXb3Jr
aW5nQ29sb3JTcGFjZTogYnJpZGdlX2lkX2Nhc3QoYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVX
aXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpKS5nZXQoKSB9XTsKKyAgICByZXR1cm4gY2lDb250
ZXh0OworfQorCit2b2lkIEZpbHRlckltYWdlQ29yZUltYWdlOjpzZXRJbWFnZShSZXRhaW5QdHI8
Q0lJbWFnZT4mJiBpbWFnZSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UpOworICAgIG1faW1hZ2UgPSBX
VEZNb3ZlKGltYWdlKTsKK30KKworUmVmUHRyPEltYWdlQnVmZmVyPiYgRmlsdGVySW1hZ2VDb3Jl
SW1hZ2U6OmltYWdlQnVmZmVySWZFeGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
OworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2VDb3JlSW1hZ2U6OmltYWdlQnVmZmVyKCkK
K3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIu
Z2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIGRlc3RSZWN0ID0gRmxvYXRSZWN0IHsgRmxvYXRQb2ludCgpLCBt
X2xvZ2ljYWxTaXplIH07CisgICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjogbV9p
bWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpt
X2ltYWdlQnVmZmVyKS5zdXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdCBjb2xvclNw
YWNlOm1fY29sb3JTcGFjZS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07CisgICAgCisgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFn
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yMDlkNmVhZDFiZjI1NDg4NWJiNTNlNzI2OGU4MGFiMzNiNmJkMWMz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSw2MSBAQAorLyoKKyog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdXJjZUdyYXBo
aWMuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0ICJGaWx0ZXJJbWFnZS5oIgor
I2ltcG9ydCAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5
Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMu
c2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAg
YXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFn
ZTsKKyAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCppbnB1dEltYWdlKSkKKyAgICAg
ICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNl
SW1hZ2VCdWZmZXI+KCppbnB1dEltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNl
CisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTppbnB1dEltYWdlLT5j
b3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpXTsKKworICAgIGlmICghaW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBkb3duY2FzdDxGaWx0ZXJJbWFn
ZUNvcmVJbWFnZT4ob3VwdXQpLnNldEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPUkVf
SU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUv
YXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDI2MTEwY2RmYjBiYjZjZjQ5
MDQ1ODM4Nzc4N2FjMTBmYTE3MWNmMTguLjExODE5ZTU3OWNlYzkyYTdjZTcxZjUwNjVhYjY5ODMw
ODQwYTBmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0yNSw4ICsyNSw3IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRkVCbGVuZE5FT05faAotI2RlZmluZSBG
RUJsZW5kTkVPTl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKIApAQCAtMTA3LDE1ICsxMDYsMTggQEAgcHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVC
bGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKEZpbHRlclJlc3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZl
Y3RvciYgc3RhY2ssIEltYWdlQnVmZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAg
IGF1dG8gaW4yID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1
bHRzLmdldCh7ICp0aGlzIH0pKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gcmVzdWx0ID0gZmlsdGVyKCkuY3JlYXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRS
ZWN0KCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVz
dWx0LT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsK
ICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LT5kYXRhKCk7CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjks
NyArMTMxLDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAg
aWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5
TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgp
LCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9
CiAgICAgLy8gSWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4K
ICAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Miw4
IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5k
RGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+
ZGF0YSgpKVswXTsKICAgICBwbGF0Zm9ybUFwcGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3Qp
LCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVsw
XSA9IHNvdXJjZUJBbmREZXN0WzBdOworCisgICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9
CiAKIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBk
c3RQaXhlbEFycmF5LApAQCAtMjA1LDUgKzIwOSwzIEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1B
cHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNy
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBIQVZFKEFSTV9ORU9OX0lOVFJJ
TlNJQ1MpCi0KLSNlbmRpZiAvLyBGRUJsZW5kTkVPTl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHAKaW5kZXggNDc3OTQyMWY0M2Q2Y2E5MDkzZmJjNWY1ZjMzMmZmNDA5
OWE1M2E2MS4uNzYzMTYzZWFjNDUzZGU2ZmJmZjczODI3NGZiNTYyYzlkNWQ3NjhlYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMTgyLDYgKzE4MiwxNCBA
QCB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdAogICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlLnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCit2b2lk
IFJlY29yZGVyOjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIoRmlsdGVyJiwgSW1hZ2VCdWZmZXIqLCBz
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpCit7CisvLyAgICBpZiAobV9kZWxlZ2F0
ZSkKKy8vICAgICAgICBtX2RlbGVnYXRlLT5yZWNvcmRJbWFnZUJ1ZmZlclVzZSgqc291cmNlSW1h
Z2UpOworLy8gICAgcmVjb3JkRmlsdGVyVXNlKGZpbHRlcik7CisvLyAgICBhcHBlbmQ8RHJhd0Zp
bHRlckltYWdlQnVmZmVyPihmaWx0ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIHNv
dXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZ2VvbWV0cnkpOworfQor
CiB2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsKICAgICByZWNvcmRTYXZlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAwNjA1ZDZmMjRiZjQ1MzI0N2E0YThlODhm
ZTNiZGMyNjA3NzYwNzQ0Li5jYmZmMWQzZjkyY2Q3MzFmYzNiMjNjMTljYjJlODU0ZjI4NzVlNWQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTIyOSw2ICsyMjks
OCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEZpbHRlciYsIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
c3RkOjp1bmlxdWVfcHRyPEZpbHRlckdlb21ldHJ5PiYmKSBmaW5hbDsKKwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCBjZGVhYTY1ZTY3MDRjZDY3ZmIwYTdhZmU5
YWYxOGZiYjYyYzJjZWQ5Li4zNzY4NWFjMDg2NzliMmZhZmRjNDY1ODZiNjRkYmUwNjQ2MjAwNjA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5jcHAKQEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjUsNjQgKzI2LDMyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRkVCbGVuZC5oIgogCi0jaW5jbHVkZSAiRkVCbGVuZE5FT04uaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRl
ciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6OkJsZW5kKQotICAgICwgbV9tb2RlKG1vZGUpCitSZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3Jl
YXRlKEJsZW5kTW9kZSBtb2RlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQo
bW9kZSkpOwogfQogCi1SZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
LCBCbGVuZE1vZGUgbW9kZSkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAg
OiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVCbGVuZCkKKyAgICAsIG1fbW9kZShtb2RlKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2RlKSk7CiB9CiAKLWJvb2wg
RkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQorRmlsdGVySW1hZ2VWZWN0b3Ig
RkVCbGVuZDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fbW9kZSA9PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2Rl
ID0gbW9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIp
OworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCksIHN0YWNrLnRha2VMYXN0KCkgfTsKIH0K
IAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVm
ZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKLX0K
LSNlbmRpZgotCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitU
ZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltm
ZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9XCIiIDw8IChtX21vZGUgPT0gQmxlbmRN
b2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJl
YW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0
KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0
dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5
ZTc5NjYuLjQ3MTU0YjUxNGRhNWJmMjc2ZmEyY2VkZThmMGU1OTg5MzU2Yzc4ZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBA
IC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMyArMjQsMjgg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAg
c3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKIAotICAgIEJsZW5kTW9kZSBi
bGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIHNldEJsZW5kTW9k
ZShCbGVuZE1vZGUpOworICAgIHZvaWQgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKSB7IG1f
bW9kZSA9IG1vZGU7IH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQiOyB9CisgICAgRkVCbGVuZChCbGVuZE1vZGUp
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNp
Z25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEs
IHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFy
cmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0
aCk7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBGRUJsZW5kKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEJsZW5kTW9kZSBtX21v
ZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChGRUJsZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMzgwNjVj
Yjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1NC4uNTZmMDJlOWM0MzI2YjJhYzBmYjVk
NDY2ZDAxODA5MDQzYjM3ZjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMywzMDMgKzI0LDY1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVDb2xvck1hdHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1h
dHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBt
X3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCi17Ci19Ci0KLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBW
ZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29s
b3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotYm9vbCBGRUNv
bG9yTWF0cml4OjpzZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQotewotICAgIGlmIChtX3R5
cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKK1JlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4
OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7
Ci0gICAgaWYgKG1fdmFsdWVzID09IHZhbHVlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdmFsdWVzID0gdmFsdWVzOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLXsKLSAgICBmbG9hdCByID0g
cmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9h
dCBhID0gYWxwaGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFd
ICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1
OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVz
IFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAg
ICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZh
bHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1
XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEg
KyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0
ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29t
cG9uZW50cykKK0ZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlIGNv
bG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKKyAgICA6IEZpbHRlckVmZmVj
dChUeXBlOjpGRUNvbG9yTWF0cml4KQorICAgICwgbV9jb2xvck1hdHJpeFR5cGUoY29sb3JNYXRy
aXhUeXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQogewotICAgIGZsb2F0IHIg
PSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAg
cmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29t
cG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9u
ZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9uZW50
c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CiB9CiAKLS8vIEZJ
WE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9y
THVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdy
ZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQog
ewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBi
bHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4gPSAwOwotICAgIGJsdWUgPSAwOworICAgIGNv
bXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzFd
ID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAt
IDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7CisgICAg
Y29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNb
Nl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzddID0gKDAuNzE1
IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICog
dmFsdWUpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5
cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21w
b25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQog
ewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICog
NCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4
NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JN
YXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5v
bi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAh
PSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2Owot
ICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVp
Z2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXpl
LndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2SW1hZ2VfQnVm
ZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAgICBkZXN0
LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZl
clNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAgIHN3aXRjaCAo
ZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDogewotICAg
ICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNvcikpLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29y
KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE1XSAq
IGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0KLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2aXNvcikpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgN10gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEy
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwK
LSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywg
JmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3Mp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKLSAgICAg
ICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzZdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzddICogZGl2aXNv
cikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2aXNvcikpLAot
ICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVs
bHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewotICAgICAgICBj
b25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
MC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VN
YXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxs
cHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9h
dCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBz
aW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcx
NSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAq
IDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29z
SHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRdID0gMC43MTUg
KyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAw
LjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29tcG9uZW50c1s2
XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25l
bnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNv
bXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7CiB9
Ci0jZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVm
ZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQorYm9vbCBGRUNvbG9yTWF0cml4Ojppc0Fs
cGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdAogewotICAgIGZsb2F0IGNv
bXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
U0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9u
ZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotCi0gICAg
dW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSAgICBpZiAoZWZmZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBl
PihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUpKQotICAgICAgICBy
ZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShidWZmZXJTaXplKTsKLSNlbmRpZgotCi0g
ICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0
ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAg
ICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCAr
IDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhLCB2YWx1ZXMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAz
LCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRl
T2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAg
ICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAg
ICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsg
MSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQs
IGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAg
ICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1fY29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOwogfQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbG9yTWF0cml4Ojp0
YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIGlmIChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBm
b3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBpbWFnZVJlY3Qo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwot
ICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHBpeGVs
QXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwotCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBu
b3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNP
TE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1l
bnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FU
VVJBVEU6IAotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4o
cGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0
VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBp
eGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5
RGltZW5zaW9ucyk7Ci0gICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZl
ciwgaW1hZ2VSZWN0KTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJu
IHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQorc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlw
ZSYgY29sb3JNYXRyaXhUeXBlKQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAo
Y29sb3JNYXRyaXhUeXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoK
ICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTMzOSwxMSArMTAy
LDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFt
JiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNv
bG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbG9yTWF0
cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHlwZSA8PCAiXCIiOworICAg
IHRzIDw8ICIgdHlwZT1cIiIgPDwgbV9jb2xvck1hdHJpeFR5cGUgPDwgIlwiIjsKICAgICBpZiAo
IW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0cyA8PCAiIHZhbHVlcz1cIiI7CiAgICAg
ICAgIFZlY3RvcjxmbG9hdD46OmNvbnN0X2l0ZXJhdG9yIHB0ciA9IG1fdmFsdWVzLmJlZ2luKCk7
CkBAIC0zNTcsOSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb24KICAgICAgICAgdHMg
PDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAgCi0gICAgVGV4dFN0cmVhbTo6
SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1Mzk3MDNhYzRkYjU1MjRlZmE0
YzEyM2YuLjQzNTBkYWNmNWEzMzUwN2FlM2ZlZGI1MDJjODYzNTBmNDQ4NTFiMjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2MiArMzcsMzUgQEAgZW51bSBDb2xvck1hdHJp
eFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgQ29s
b3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwotCi0gICAgQ29sb3JNYXRyaXhUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldFR5cGUoQ29sb3JNYXRy
aXhUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJp
eFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CiAKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQotICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxmbG9hdD4mKTsKKyAgICB2b2lkIHNldENvbG9yTWF0cml4VHlwZShDb2xvck1hdHJp
eFR5cGUgY29sb3JNYXRyaXhUeXBlKSB7IG1fY29sb3JNYXRyaXhUeXBlID0gY29sb3JNYXRyaXhU
eXBlOyB9CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKSB7
IG1fdmFsdWVzID0gdmFsdWVzOyB9CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRl
U2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNv
bXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0
ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMg
dm9pZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9h
dCB2YWx1ZSk7CisgICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpOwogCiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgo
RmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JN
YXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQor
ICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIENvbG9yTWF0cml4VHlwZSBtX3R5cGU7Ci0gICAgVmVjdG9yPGZs
b2F0PiBtX3ZhbHVlczsKLX07CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlDb3Jl
SW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCi1pbmxp
bmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMg
KyAwLjc4NyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2
YWx1ZSk7Ci0gICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOwotICAg
IGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s1XSA9ICgwLjA3
MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOwotfQotCi1pbmxpbmUg
dm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBj
b21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBmbG9hdCBjb3NIdWUgPSBjb3ModmFsdWUg
KiBwaUZsb2F0IC8gMTgwKTsKLSAgICBmbG9hdCBzaW5IdWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0
IC8gMTgwKTsKLSAgICBjb21wb25lbnRzWzBdID0gMC4yMTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNp
bkh1ZSAqIDAuMjEzOwotICAgIGNvbXBvbmVudHNbMV0gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1
IC0gc2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50c1syXSA9IDAuMDcyIC0gY29zSHVlICog
MC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKLSAgICBjb21wb25lbnRzWzNdID0gMC4yMTMgLSBjb3NI
dWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwotICAgIGNvbXBvbmVudHNbNF0gPSAwLjcxNSAr
IGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4xNDA7Ci0gICAgY29tcG9uZW50c1s1XSA9IDAu
MDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUgKiAwLjI4MzsKLSAgICBjb21wb25lbnRzWzZd
ID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNpbkh1ZSAqIDAuNzg3OwotICAgIGNvbXBvbmVu
dHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1ICsgc2luSHVlICogMC43MTU7Ci0gICAgY29t
cG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICogMC45MjggKyBzaW5IdWUgKiAwLjA3MjsKLX0K
KyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCisgICAgQ29sb3JN
YXRyaXhUeXBlIG1fY29sb3JNYXRyaXhUeXBlOworICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7
Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJpeCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJF
ZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0
cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4u
NTg0ZWQ5MGZmODk5ODhiZjk1OWQxNmVlMWU1YjNiZWQ4OWU2YTgzOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTggKzI1LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVDb21wb25lbnRUcmFuc2Zlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
ICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVu
dFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiByZWRGdW5jdGlvbiwKLSAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVl
bkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb25lbnRUcmFuc2ZlcikKK1JlZjxGRUNvbXBv
bmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJs
dWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlv
bikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKHJlZEZ1
bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsKK30K
KworRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Ymx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0
aW9uKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCiAgICAg
LCBtX3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQogICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVu
RnVuY3Rpb24pCiAgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCkBAIC00MywxMTkg
KzQ0LDEwIEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAKLVJlZjxGRUNvbXBvbmVu
dFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBv
bmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJsdWVGdW5j
dGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbXBvbmVudFRyYW5zZmVyOjp0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLX0KLQotdm9pZCBGRUNvbXBv
bmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxl
VmFsdWVzOwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4g
PCAxKQotICAgICAgICByZXR1cm47ICAgICAgICAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgYyA9IGkgLyAyNTUu
MDsgICAgICAgICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYyAqIChuIC0gMSkpOwotICAgICAgICBkb3VibGUgdjEgPSB0YWJsZVZhbHVlc1trXTsK
LSAgICAgICAgZG91YmxlIHYyID0gdGFibGVWYWx1ZXNbc3RkOjptaW4oKGsgKyAxKSwgKG4gLSAx
KSldOwotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodjEgKyAoYyAqIChuIC0gMSkgLSBr
KSAqICh2MiAtIHYxKSk7Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1
LjAsIHZhbCkpOwotICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwp
OwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFs
dWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFi
bGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgdW5z
aWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigoaSAqIG4pIC8gMjU1LjApOwotICAgICAg
ICBrID0gc3RkOjptaW4oaywgbiAtIDEpOwotICAgICAgICBkb3VibGUgdmFsID0gMjU1ICogdGFi
bGVWYWx1ZXNba107Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAs
IHZhbCkpOwotICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOwot
ICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGluZWFyVGFibGUo
TG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJh
bnNmZXJGdW5jdGlvbikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0aW9uLnNsb3Bl
ICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OwotICAgICAgICB2YWwgPSBz
dGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGRvdWJsZSBl
eHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24uZXhwb25lbnQ7IC8vIFJDVlQgZG9lc24ndCBsaWtl
IHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxvYXQgdG8gcG93LCBzbyBwcm9tb3RlIHRoaXMgdG8g
ZG91YmxlCi0gICAgICAgIGRvdWJsZSB2YWwgPSAyNTUuMCAqICh0cmFuc2ZlckZ1bmN0aW9uLmFt
cGxpdHVkZSAqIHBvdygoaSAvIDI1NS4wKSwgZXhwb25lbnQpICsgdHJhbnNmZXJGdW5jdGlvbi5v
ZmZzZXQpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwp
KTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9
Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
LXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAgIExvb2t1cFRhYmxlIGdyZWVu
VGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAgIExvb2t1cFRhYmxlIGFscGhh
VGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1
ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2lu
Z1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWduZWQgZGVzdGluYXRpb25Q
aXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVp
bnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwotICAgIGZvciAodW5z
aWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9
IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCAr
IDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwotICAgICAgICBkYXRhW3Bp
eGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKLSAgICAg
ICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsg
M11dOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTG9va3Vw
VGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExv
b2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVk
VGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxlW2ldID0gYWxwaGFUYWJsZVtpXSA9
IGk7Ci0KLSAgICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2b2lkICgqKShMb29rdXBUYWJsZSYsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBUcmFuc2ZlclR5cGUgY2FsbEVm
ZmVjdFtdID0gewotICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAv
LyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkKLSAgICAgICAgY29tcHV0ZVRhYnVs
YXJUYWJsZSwgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFCi0gICAgICAgIGNv
bXB1dGVEaXNjcmV0ZVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVU
RQotICAgICAgICBjb21wdXRlTGluZWFyVGFibGUsICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSCi0gICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlICAgICAgIC8vIEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9HQU1NQQotICAgIH07Ci0KLSAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBX
VEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdU
Rl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZf
QVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9B
UlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9u
LnR5cGVdKHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5G
dW5jdGlvbi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZl
Y3RbbV9ibHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAg
Y2FsbEVmZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0
aW9uKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2su
dGFrZUxhc3QoKSB9OwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUpCkBAIC0yMDksMTAgKzEwMSw5IEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFt
JiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFt
JiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZUNvbXBvbmVudFRyYW5zZmVyIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiXG4iOwogICAgIHsKICAg
ICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIDIpOwpAQCAtMjIx
LDkgKzExMiw2IEBAIFRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VuCiAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAie2JsdWU6ICIgPDwgbV9ibHVlRnVuY3Rpb24gPDwgIn1cbiI7CiAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAie2FscGhhOiAiIDw8IG1fYWxwaGFGdW5jdGlvbiA8PCAifV1cbiI7CiAgICAg
fQotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDJi
NTg2ZGVmN2ZiNDJhMzdiMmUxMjNlZGE4NzExOWM0ZWIzNDhhNTEuLjhhMDg3MjkwNGQ2N2FhNDQz
NTZkNjhmOTNlZGM4YWFmZmYzNDllMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw5
ICsyNCw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBl
bnVtIENvbXBvbmVudFRyYW5zZmVyVHlwZSB7CkBAIC01MywzMyArNTEsMjEgQEAgc3RydWN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVu
dFRyYW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBhbHBoYUZ1bmMpOwotCi0gICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5j
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KLSAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rp
b247IH0KLSAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGJsdWVGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fYmx1ZUZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CisgICAg
c3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVG
dW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbik7
CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9Ci0KLSAgICB1c2luZyBMb29r
dXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKyAgICBGRUNvbXBvbmVudFRyYW5z
ZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGFscGhhRnVuY3Rpb24pOwogCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5
VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0g
ICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3Jl
dGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
LSAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1h
VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Cisg
ICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2sp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRh
YmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVl
VGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBw
bHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
IGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgog
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gbV9yZWRGdW5jdGlvbjsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fZ3Jl
ZW5GdW5jdGlvbjsKQEAgLTg5LDYgKzc1LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXIpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRl
ckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkg
PT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjsgfQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJf
RUZGRUNUKEZFQ29tcG9uZW50VHJhbnNmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZk
ZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLmE2MmEwNDU0NTY1NzJjNDQxNzQ2YjE3
YjY2Njk3NzY3MDczOGEwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDIxIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRl
QXJpdGhtZXRpY05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdl
b21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxv
YXQgazMsIGZsb2F0IGs0KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9z
aXRlKQotICAgICwgbV90eXBlKHR5cGUpCitSZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpj
cmVhdGUoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZs
b2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVDb21wb3NpdGUoY29tcG9zaXRlT3BlcmF0b3IsIGsxLCBrMiwgazMsIGs0KSk7Cit9CisKK0ZF
Q29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKKyAgICA6IEZpbHRl
ckVmZmVjdChUeXBlOjpGRUNvbXBvc2l0ZSkKKyAgICAsIG1fY29tcG9zaXRlT3BlcmF0b3IoY29t
cG9zaXRlT3BlcmF0b3IpCiAgICAgLCBtX2sxKGsxKQogICAgICwgbV9rMihrMikKICAgICAsIG1f
azMoazMpCkBAIC00MiwyNjQgKzQ3LDMwIEBAIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvCiB7CiB9
CiAKLVJlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb3Np
dGUoZmlsdGVyLCB0eXBlLCBrMSwgazIsIGszLCBrNCkpOwotfQotCi1ib29sIEZFQ29tcG9zaXRl
OjpzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQorRmxvYXRSZWN0IEZF
Q29tcG9zaXRlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwot
fQorICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNl
cyB0aGUgcmVzdWx0IG9mCisgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRo
ZSBhYnNvbHV0ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCisgICAgaWYg
KG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4gfHwgbV9jb21w
b3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QKQorICAgICAgICByZXR1
cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0c1sxXS0+aW1hZ2VS
ZWN0KCksIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAKLWJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZs
b2F0IGsxKQotewotICAgIGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9rMSA9IGsxOwotICAgIHJldHVybiB0cnVlOwotfQorICAgIC8vIEFyaXRobWV0aWMgbWF5
IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4n
dAorICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9jb21w
b3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgICAg
ICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lv
bik7CiAKLWJvb2wgRkVDb21wb3NpdGU6OnNldEsyKGZsb2F0IGsyKQotewotICAgIGlmIChtX2sy
ID09IGsyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMiA9IGsyOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChpbnB1
dHMsIGdlb21ldHJ5LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1ib29sIEZFQ29tcG9zaXRl
OjpzZXRLMyhmbG9hdCBrMykKLXsKLSAgICBpZiAobV9rMyA9PSBrMykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fazMgPSBrMzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNv
bXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCi17Ci0gICAgaWYgKG1fazQgPT0gazQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2s0ID0gazQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYg
KG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotfQotICAgIAotc3Rh
dGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVD
b21wb3NpdGU6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewot
ICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihj
KSwgMjU1LCAwIH07Ci0gICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7
Ci0gICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07
Ci19Ci0KLXRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21w
dXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIq
IGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgZmxvYXQgc2NhbGVkSzE7Ci0gICAgZmxvYXQgc2Nh
bGVkSzQ7Ci0gICAgaWYgKGIxKQotICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOwotICAg
IGlmIChiNCkKLSAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKLQotICAgIHdoaWxlICgt
LXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNv
dXJjZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKLSAgICAgICAg
ZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7Ci0gICAgICAgIGlmIChiMSkKLSAgICAg
ICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7Ci0gICAgICAgIGlmIChiNCkKLSAg
ICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKLQotICAgICAgICAqZGVzdGluYXRpb24gPSBj
bGFtcEJ5dGUocmVzdWx0KTsKLSAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRp
b247Ci0gICAgfQotfQotCi0vLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBh
IGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9u
IGNhc2Ugd2hlcmUgY2xhbXBpbmcKLS8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBh
Z2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlv
bi4KLXRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVk
IGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgZmxvYXQgc2NhbGVkSzE7Ci0gICAgZmxv
YXQgc2NhbGVkSzQ7Ci0gICAgaWYgKGIxKQotICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBm
OwotICAgIGlmIChiNCkKLSAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKLQotICAgIHdo
aWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGkx
ID0gKnNvdXJjZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKLSAg
ICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7Ci0gICAgICAgIGlmIChiMSkK
LSAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7Ci0gICAgICAgIGlmIChi
NCkKLSAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKLQotICAgICAgICAqZGVzdGluYXRp
b24gPSByZXN1bHQ7Ci0gICAgICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwot
ICAgIH0KLX0KLQotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi1zdGF0aWMgaW5saW5l
IHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3RkOjpt
YXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMpICsg
azQ7Ci0gICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6bWlu
KDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OwotICAgIGlmICgoazQgPj0gMC4w
ZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQgPD0g
MS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7Ci0g
ICAgICAgIGlmIChrNCkgewotICAgICAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24s
IHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4
ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGs0KSB7Ci0gICAgICAgIGlmIChr
MSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwgZGVz
dGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBkZXN0
aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEs
IDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwg
MD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQp
OwotICAgIH0KKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7IHN0
YWNrLnRha2VMYXN0KCksIHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KLSNlbmRpZgogCi1pbmxpbmUg
dm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGRUNvbXBvc2l0ZU9wZXJhdG9yJiBjb21w
b3NpdGVPcGVyYXRvcikKIHsKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwotICAg
IEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkp
OwotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHlu
YW1pY2FsbHkuCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIEFTU0VSVCghKGxl
bmd0aCAmIDB4MykpOwotICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwg
ZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNlbHNlCi0gICAg
YXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FUT1A6Ci0gICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1
c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0
LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVj
dCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgot
ICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJp
bWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50
IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBG
aWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
Ci17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBpZiAobV90eXBlID09IEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgICAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICgh
c291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRSZWN0
IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpz
b3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMs
IG1fazQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
KQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIg
PSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1h
Z2VCdWZmZXIyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3Rl
ZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRl
UGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsK
LSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9h
dFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsK
LSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9h
dFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsg
Q29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dp
Y2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFn
ZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAg
IHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3IpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBA
IC0zMjgsMTggKzk5LDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlCiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8
PCAiW2ZlQ29tcG9zaXRlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIG9wZXJhdGlvbj1cIiIgPDwgbV90
eXBlIDw8ICJcIiI7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklU
SE1FVElDKQorICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX2NvbXBvc2l0ZU9wZXJhdG9y
IDw8ICJcIiI7CisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQykKICAgICAgICAgdHMgPDwgIiBrMT1cIiIgPDwgbV9rMSA8PCAiXCIg
azI9XCIiIDw8IG1fazIgPDwgIlwiIGszPVwiIiA8PCBtX2szIDw8ICJcIiBrND1cIiIgPDwgbV9r
NCA8PCAiXCIiOwogICAgIHRzIDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMz
Li4wZWY4NDBhMmRhMmFlZmZlYTk5Yjk3NGNkNjU5NTY5MTMzMDhkNzdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5o
CkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MywxMiArMjQsOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1lbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgeworZW51bSBGRUNvbXBvc2l0
ZU9wZXJhdG9yIHsKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOICAgID0gMCwgCiAg
ICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiAgICAgICA9IDEsCiAgICAgRkVDT01QT1NJVEVf
T1BFUkFUT1JfSU4gICAgICAgICA9IDIsCkBAIC00MSw0NyArMzksMjkgQEAgZW51bSBDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRmlsdGVy
JiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0KTsKLQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSk7Ci0KLSAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazE7IH0KLSAgICBib29s
IHNldEsxKGZsb2F0KTsKLQotICAgIGZsb2F0IGsyKCkgY29uc3QgeyByZXR1cm4gbV9rMjsgfQot
ICAgIGJvb2wgc2V0SzIoZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0
ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CiAKLSAgICBmbG9hdCBrMygpIGNvbnN0IHsgcmV0dXJuIG1fazM7IH0KLSAgICBib29s
IHNldEszKGZsb2F0KTsKLQotICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9rNDsgfQot
ICAgIGJvb2wgc2V0SzQoZmxvYXQpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1aXJlc1Zh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVy
YXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKSB7IG1fY29tcG9zaXRl
T3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRvcjsgfQorICAgIHZvaWQgc2V0SzEoZmxvYXQgazEp
IHsgbV9rMSA9IGsxOyB9CisgICAgdm9pZCBzZXRLMihmbG9hdCBrMikgeyBtX2syID0gazI7IH0K
KyAgICB2b2lkIHNldEszKGZsb2F0IGszKSB7IG1fazMgPSBrMzsgfQorICAgIHZvaWQgc2V0SzQo
ZmxvYXQgazQpIHsgbV9rNCA9IGs0OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb3NpdGUoRmls
dGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IGZsb2F0KTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVDb21wb3NpdGUiOyB9Ci0KLSAgICB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5l
ZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZTsKKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbmxpbmUgdm9pZCBwbGF0
Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlcklt
YWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9OX0lO
VFJJTlNJQ1MpCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworICAgIGJvb2wgYXBwbHlBcml0aG1l
dGljU29mdHdhcmUoRmlsdGVySW1hZ2UmLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0OworICAgIGJvb2wgYXBwbHlOb25Bcml0aG1l
dGljU29mdHdhcmUoRmlsdGVySW1hZ2UmLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0OworICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGlu
bGluZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEs
IGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotI2VuZGlmCisgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUg
bV90eXBlOworICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAg
ICBmbG9hdCBtX2sxOwogICAgIGZsb2F0IG1fazI7CiAgICAgZmxvYXQgbV9rMzsKQEAgLTkwLDMg
KzcwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb3NpdGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAppbmRleCAzYmJlNzgzNTk4ZDcwOTM1YTk1YzZmMTU2ZWMyOTMzYzBlOTlmMDUwLi42
ZmNhZmZiNTcyNDBkMWZmODc1MmE3MTk0NTRhYzEwMDVjOTViNDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3pl
ZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUs
MTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4Lmgi
CiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1
ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisjaW5j
bHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNv
bnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0
ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9s
dmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29y
LCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2Vy
dmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2VybmVsU2l6ZSwgZGl2aXNvciwgYmlh
cywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBo
YSwga2VybmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25z
dCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpG
RUNvbnZvbHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBt
X2Rpdmlzb3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMzg5ICs1MSwxNSBA
QCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VSVChtX2tlcm5lbFNpemUuaGVpZ2h0KCkg
PiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBk
aXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwg
Ym9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5l
bFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRM
ZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOwotfQotCi12b2lk
IEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6
ZSkKLXsKLSAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKGtl
cm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKLSAgICBtX2tlcm5lbFNpemUgPSBrZXJuZWxTaXplOwot
fQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbChjb25zdCBWZWN0b3I8ZmxvYXQ+
JiBrZXJuZWwpCi17Ci0gICAgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IAotfQotCi1ib29sIEZF
Q29udm9sdmVNYXRyaXg6OnNldERpdmlzb3IoZmxvYXQgZGl2aXNvcikKLXsKLSAgICBBU1NFUlQo
ZGl2aXNvcik7Ci0gICAgaWYgKG1fZGl2aXNvciA9PSBkaXZpc29yKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9kaXZpc29yID0gZGl2aXNvcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKGZsb2F0IGJpYXMpCi17Ci0gICAgaWYgKG1f
YmlhcyA9PSBiaWFzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iaWFzID0gYmlhczsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRUYXJnZXRP
ZmZzZXQoY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCkKLXsKLSAgICBpZiAobV90YXJnZXRP
ZmZzZXQgPT0gdGFyZ2V0T2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90YXJn
ZXRPZmZzZXQgPSB0YXJnZXRPZmZzZXQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVD
b252b2x2ZU1hdHJpeDo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAg
IGlmIChtX2VkZ2VNb2RlID09IGVkZ2VNb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29u
dm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYga2VybmVs
VW5pdExlbmd0aCkKK0Zsb2F0UmVjdCBGRUNvbnZvbHZlTWF0cml4OjpjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEFT
U0VSVChrZXJuZWxVbml0TGVuZ3RoLngoKSA+IDApOwotICAgIEFTU0VSVChrZXJuZWxVbml0TGVu
Z3RoLnkoKSA+IDApOwotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGggPT0ga2VybmVsVW5pdExl
bmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fa2VybmVsVW5pdExlbmd0aCA9IGtl
cm5lbFVuaXRMZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdlb21ldHJ5Lm1h
eFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1ib29sIEZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQorRmlsdGVy
SW1hZ2VWZWN0b3IgRkVDb252b2x2ZU1hdHJpeDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3Rv
ciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSA9PSBwcmVzZXJ2ZUFs
cGhhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9wcmVzZXJ2ZUFscGhhID0gcHJlc2Vy
dmVBbHBoYTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgot
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJl
Y3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgQSAgICAgICAgICB8Ci0gICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAg
IHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgRSAgICAgICAg
ICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBj
b250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQg
d2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxl
OgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVy
IChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDog
eDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBp
bnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAgICAgICAgLi4uCi0gICAgICAgIC4uLgotICAg
ICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRoZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUg
dGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHky
KSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgotICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1
bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgotICAgICAgICAgICAgb25seSB0aG9zZSAo
eCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAg
ICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjog
eDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0gICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAz
LCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24gRDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHky
OiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0
eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0
aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAgYSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0
ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3Ro
ZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBp
eGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBh
IHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2VybmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0
aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24u
Ci0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJ
IGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1vbiBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5j
ZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBp
dCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgotKi8KLQotc3RhdGljIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFy
IG1heCA9IDI1NSkKLXsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7Ci0gICAgcmV0dXJu
IGNoYW5uZWw7Ci19Ci0KLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZ
U19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhl
bCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcykKLXsKLSAgICB1bnNp
Z25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdC
QVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFs
dWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7Ci0KLSAgICBpZiAocHJl
c2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNl
UGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwotfQotCi0jaWYgQ09NUElMRVIo
TVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0
b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVz
aCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCi0KLS8vIE9ubHkgZm9y
IHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlT
dGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVz
ZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdE
YXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3Jl
YXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53
aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBv
bmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEp
XTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lw
IHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xp
cEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAg
IGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2Ug
KyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+
IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4g
MDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2Vy
bmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFy
dEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRo
KCk7Ci0KLSAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMV0g
PSAwOwotICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2Vy
dmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAg
ICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1sw
XSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0
PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsK
LSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBh
aW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAg
ICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAg
dG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4
ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwotICAgICAgICAgICAgICAgIC0t
a2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAg
ICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVB
bHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQ
aXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsK
LSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBw
aXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNl
OwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4
ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAg
IGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBh
aW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAv
LyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RV
UExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAg
IGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50
aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAw
OwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAg
ICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50
aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAg
ICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAg
ICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAg
ICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGlu
Z0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4
KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0
ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RT
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEs
IGludCB4MiwgaW50IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53
aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAgaW50IHdpZHRo
ID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zm
c2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsK
LSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zmc2V0LnkoKTsKLSAg
ICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7Ci0gICAg
Ly8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFs
c1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29y
IGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAg
ICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAt
LXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Ci0gICAgICAg
ICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAt
IDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0g
ICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAg
ICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90
YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3Rh
bHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAg
ICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1
ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVl
KHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwotICAgICAgICAgICAg
ICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBd
ICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOwotICAg
ICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0g
Kz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1
ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAg
ICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFs
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICAr
K2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUu
d2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywg
bV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICArK3N0YXJ0S2VybmVs
UGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAg
c3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICAgICAgKytzdGFydEtl
cm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJu
aW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lk
IEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlF
bmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMg
YW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4g
dGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0g
ICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdo
dCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJ
bnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20s
IHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4
OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQg
eTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2Fu
IGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBi
ZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlm
IChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWlu
dGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRl
clBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Ci0KLXZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVj
dCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291
cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFy
cmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhlbEFycmF5LAot
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgp
LAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAg
ICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKLSAgICB9OwotCi0gICAgLy8g
RHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNp
emUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0g
cGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNs
aXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRp
b24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWlu
dGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29s
dXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8g
c19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRv
bSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBz
dHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBs
eShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0
ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50
PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldElu
dGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQs
IHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhl
bHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwot
Ci0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRv
bSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkg
PiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6
ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFp
bnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAg
IGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWlu
dGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlw
Qm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAg
IHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55
KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlz
RW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBl
JiB0eXBlKQpAQCAtNDUzLDEwICs4MSw5IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CitUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZlTWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG9yZGVy
PVwiIiA8PCBtX2tlcm5lbFNpemUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsTWF0cml4PVwi
IiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwgIlwiICIKICAgICAgICA8PCAiZGl2aXNvcj1cIiIgPDwg
bV9kaXZpc29yIDw8ICJcIiAiCkBAIC00NjUsOSArOTIsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbnZv
bHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNl
bnRhdAogICAgICAgIDw8ICJlZGdlTW9kZT1cIiIgPDwgbV9lZGdlTW9kZSA8PCAiXCIgIgogICAg
ICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGggPDwgIlwi
ICIKICAgICAgICA8PCAicHJlc2VydmVBbHBoYT1cIiIgPDwgbV9wcmVzZXJ2ZUFscGhhIDw8ICJc
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdk
NGM2NTY3ZmNlNmIyN2VlNWFiODk1YTZlMWU1MDA1NGUxM2RiYS4uMWUxMDZmNjFlNDBhOWU1NTQ5
OTc0MmQyZDc0MzZlOTFjNmUwNGE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTMsNiAr
Myw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcw
ICszOCwyNyBAQCBlbnVtIEVkZ2VNb2RlVHlwZSB7CiAKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXgg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29udm9s
dmVNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwKLSAgICAgICAgICAgIGZs
b2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9p
bnQmLAotICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgIHN0YXRp
YyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQs
IEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBw
cmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAg
SW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxTaXplOyB9Ci0gICAg
dm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmKTsKLQotICAgIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsTWF0cml4OyB9Ci0gICAgdm9p
ZCBzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgZmxvYXQgZGl2aXNvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZGl2aXNvcjsgfQotICAgIGJvb2wgc2V0RGl2aXNvcihmbG9hdCk7
Ci0KLSAgICBmbG9hdCBiaWFzKCkgY29uc3QgeyByZXR1cm4gbV9iaWFzOyB9Ci0gICAgYm9vbCBz
ZXRCaWFzKGZsb2F0KTsKLQotICAgIEludFBvaW50IHRhcmdldE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFyZ2V0T2Zmc2V0OyB9Ci0gICAgYm9vbCBzZXRUYXJnZXRPZmZzZXQoY29uc3QgSW50
UG9pbnQmKTsKLQotICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRnZU1vZGU7IH0KLSAgICBib29sIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBG
bG9hdFBvaW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRM
ZW5ndGg7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYp
OwotCi0gICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFs
cGhhOyB9Ci0gICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOworICAgIHZvaWQgc2V0S2Vy
bmVsU2l6ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplKSB7IG1fa2VybmVsU2l6ZSA9IGtlcm5l
bFNpemU7IH0KKyAgICB2b2lkIHNldERpdmlzb3IoZmxvYXQgZGl2aXNvcikgeyBtX2Rpdmlzb3Ig
PSBkaXZpc29yOyB9CisgICAgdm9pZCBzZXRCaWFzKGZsb2F0IGJpYXMpIHsgbV9iaWFzID0gYmlh
czsgfQorICAgIHZvaWQgc2V0VGFyZ2V0T2Zmc2V0KGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQpIHsgbV90YXJnZXRPZmZzZXQgPSB0YXJnZXRPZmZzZXQ7IH0KKyAgICB2b2lkIHNldEVkZ2VN
b2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KKyAg
ICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCkgeyBtX2tlcm5lbFVuaXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgdm9p
ZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkgeyBtX3ByZXNlcnZlQWxwaGEg
PSBwcmVzZXJ2ZUFscGhhOyB9CisgICAgdm9pZCBzZXRLZXJuZWxNYXRyaXgoY29uc3QgVmVjdG9y
PGZsb2F0PiYga2VybmVsTWF0cml4KSB7IG1fa2VybmVsTWF0cml4ID0ga2VybmVsTWF0cml4OyB9
CiAKIHByaXZhdGU6CisgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxT
aXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJv
b2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAot
ICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJy
YXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxv
YXQgYmlhczsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQot
ICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9h
dCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4IjsgfQot
Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2
ZUFscGhhVmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhl
bHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3Rh
cnQsIGludCB5RW5kKTsKLQotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIHZvaWQgZmFzdFNl
dE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5
Mik7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMKLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQg
eTEsIGludCB4MiwgaW50IHkyKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2Um
IG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0cwot
ICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDAp
OyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVsU2l6
ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTUsMyArNzIsNCBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VG
RkVDVChGRUNvbnZvbHZlTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCBl
ZWIxNzI4ZGIzNWU4YWMzMDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5Li5hMzlkZGRhZDQ2ZjM5OTFj
YTliYjIxYmUxZTIzZmZiZjcwNjBjYWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywz
NiArMjgsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpZmZ1c2VMaWdodGluZzo6
RkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0Nv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgRGlmZnVzZUxpZ2h0aW5n
LCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwg
VHlwZTo6RGlmZnVzZUxpZ2h0aW5nKQorUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VM
aWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKIHsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZm
dXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92
ZShzb3VyY2UpKSk7CiB9CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRp
bmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdo
dFNvdXJjZSkKK0ZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xv
ciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiBzb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIGRp
ZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKHNvdXJjZSksIFR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwg
c3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVEaWZmdXNlTGlnaHRp
bmc6On5GRURpZmZ1c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQotYm9vbCBGRURpZmZ1c2VMaWdo
dGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFudCkKLXsKLSAgICBp
ZiAobV9kaWZmdXNlQ29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9kaWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIEZFRGlmZnVzZUxpZ2h0aW5nOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50
YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7
CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVEaWZmdXNlTGlnaHRpbmciOwotICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRz
IDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAg
IDw8ICJkaWZmdXNlQ29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNvbnN0YW50IDw8ICJcIiAiCiAg
ICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2VybmVsVW5pdExlbmd0aFggPDwg
IiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaWZmdXNlTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAppbmRleCBkZjYxMTRkMGZiOGUyZjNlMTEyOGI4NDI2
MTVlNDc1MTNhMGRkZGMzLi5kOGU1ZmFmYTEzZjYxOWYzOTg5NjRhYzZiOTNiODM2ZjA0ZTE3ZGIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDIxICsyNiwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIExpZ2h0U291cmNlOwotCiBjbGFzcyBGRURpZmZ1c2VMaWdodGluZyA6
IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxp
Z2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRURpZmZ1c2VMaWdo
dGluZygpOwotCi0gICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9k
aWZmdXNlQ29uc3RhbnQ7IH0KLSAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7Ci0K
LSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVm
PEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiBwcml2YXRlOgotICAg
IEZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVEaWZmdXNlTGlnaHRpbmco
Y29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGln
aHRTb3VyY2U+JiYpOworICAgIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3Zl
cnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChGRURpZmZ1c2VMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIyODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2M2ZhMS4u
ZWRhMTI0OThjYmUyNDBjNTE5OTgwNmM5M2U0OTYwNDk0NWZiMzMyMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDEzMiArMjUsNDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRURp
c3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKworI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJ
bWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAoRmls
dGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVudE1hcCkKLSAgICAsIG1feENoYW5uZWxT
ZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFu
bmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxlKHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFw
PiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2Fs
ZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5l
bFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwogfQogCi1SZWY8RkVEaXNwbGFj
ZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5u
ZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBl
IHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRGlzcGxhY2VtZW50TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxT
ZWxlY3Rvciwgc2NhbGUpKTsKLX0KLQotYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5u
ZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCi17
Ci0gICAgaWYgKG1feENoYW5uZWxTZWxlY3RvciA9PSB4Q2hhbm5lbFNlbGVjdG9yKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3Rv
cjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WUNo
YW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Ip
Ci17Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hhbm5lbFNlbGVjdG9yKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVjdG9yID0geUNoYW5uZWxTZWxl
Y3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0
U2NhbGUoZmxvYXQgc2NhbGUpCitGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXAo
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBl
IHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6
OkZFRGlzcGxhY2VtZW50TWFwKQorICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2Vs
ZWN0b3IpCisgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKKyAgICAs
IG1fc2NhbGUoc2NhbGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJikKK2NvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgRkVEaXNwbGFj
ZW1lbnRNYXA6OmltYWdlQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
KSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJz
JyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8v
IGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNv
dXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNl
LgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2Ug
aXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0
OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkp
OwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCBpbmRleCkKLXsKLSAgICAvLyBEbyBub3QgdHJh
bnNmb3JtIHRoZSBmaXJzdCBwcmltaXRpdmUgaW5wdXQsIGFzIHBlciB0aGUgc3BlYy4KLSAgICBp
ZiAoaW5kZXgpCi0gICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgcmV0
dXJuIGlucHV0c1swXS0+Y29sb3JTcGFjZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVk
IGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5
dGVzKQorRmxvYXRSZWN0IEZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIGNvbnN0IHVu
c2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCAr
IHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9u
KHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRURpc3BsYWNlbWVudE1hcDo6
dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5w
dXRFZmZlY3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxf
VU5LTk9XTik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05P
V04pOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVm
ZmVjdEFEcmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKA
mGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVl
cy4KLSAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3Bs
YWNlbWVudEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+
bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKLQotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclgg
PSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2Fs
ZS5oZWlnaHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2Fs
ZS53aWR0aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5o
ZWlnaHQoKSAqIDAuNTsKLSAgICAKLSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hh
bm5lbEluZGV4KCk7Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRl
eCgpOwotCi0gICAgaW50IHJvd0J5dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBp
bnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5dGVzOwotCi0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgaW50IGRlc3Rp
bmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAq
IGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRD
aGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0
YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShk
ZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5h
dGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6
ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0g
ICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAwOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqZGVzdGluYXRpb25QaXhl
bFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsg
Ynl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7IHN0YWNrLnRh
a2VMYXN0KCksIHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUp
CkBAIC0xNzQsMTcgKzg5LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogICAgIHJldHVybiB0
czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBz
Y2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4Q2hhbm5lbFNlbGVjdG9y
PVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAgICA8PCAieUNoYW5uZWxT
ZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVm
ZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAg
IHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3
M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLmUzOTQ4NTNhODFmYjQzNWY2MzhlY2EwMWQy
YWNmNzQzMzg4N2UzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNywzMyArMzYsMjcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xh
c3MgRkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFw
PiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2Vs
ZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAotICAgIENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxT
ZWxlY3RvcjsgfQotICAgIGJvb2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2Vs
ZWN0b3JUeXBlKTsKLQotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvcjsgfQotICAgIGJvb2wgc2V0WUNoYW5u
ZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKLQotICAgIGZsb2F0IHNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwot
Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0WENoYW5uZWxTZWxlY3Rv
cihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpIHsgbV94Q2hhbm5l
bFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsgfQorICAgIHZvaWQgc2V0WUNoYW5uZWxTZWxl
Y3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IpIHsgbV95Q2hh
bm5lbFNlbGVjdG9yID0geUNoYW5uZWxTZWxlY3RvcjsgfQorICAgIHZvaWQgc2V0U2NhbGUoZmxv
YXQgc2NhbGUpIHsgbV9zY2FsZSA9IHNjYWxlOyB9CiAKIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFj
ZW1lbnRNYXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBD
aGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3Bs
YWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworCisgICAgaW50IHhD
aGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Cisg
ICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3Ig
LSAxOyB9CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgaW1hZ2VDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1
dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENoYW5uZWxT
ZWxlY3RvclR5cGUgbV94Q2hhbm5lbFNlbGVjdG9yOwogICAgIENoYW5uZWxTZWxlY3RvclR5cGUg
bV95Q2hhbm5lbFNlbGVjdG9yOwpAQCAtNzIsMyArNjUsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChG
RURpc3BsYWNlbWVudE1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4
ZGQ1NDI2ZDk2NWJiZmU3ODlmNmJiZGQ4Li4yNmVhMTcwNDcxNGU3ZDhhZTUzYmE1NWUzZDcyNmU1
MjZkMTdkZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDE5ICsyMywyMyBAQAogCiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAi
RmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUg
IlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9w
U2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0
ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBz
aGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRv
dykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwgbV9zdGRZKHN0ZFkpCisKK1JlZjxGRURyb3BT
aGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0
ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRHJv
cFNoYWRvdyhzdGREZXZpYXRpb25YLCBzdGREZXZpYXRpb25ZLCBkeCwgZHksIHNoYWRvd0NvbG9y
LCBzaGFkb3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0
IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRvdykKKyAgICAsIG1fc3RkRGV2aWF0aW9uWChzdGRE
ZXZpYXRpb25YKQorICAgICwgbV9zdGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblkpCiAgICAgLCBt
X2R4KGR4KQogICAgICwgbV9keShkeSkKICAgICAsIG1fc2hhZG93Q29sb3Ioc2hhZG93Q29sb3Ip
CkBAIC00MiwxMDAgKzQ3LDQ2IEBAIEZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYg
ZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvCiB7CiB9CiAKLVJl
ZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9h
dCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFk
b3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKK0ludE91dHNldHMgRkVEcm9wU2hhZG93Ojpj
YWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURy
b3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dP
cGFjaXR5KSk7Ci19Ci0KLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCi17Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLQotICAgIEZs
b2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50
UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0ZVBh
aW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgYWJzb2x1dGVQYWludFJl
Y3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwotCi0gICAgSW50U2l6ZSBrZXJuZWxT
aXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOwotCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQg
bXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGlt
ZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBh
YnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7
CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNl
dFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2aWF0aW9uWSB9KTsKKyAgICByZXR1cm4g
eworICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwK
KyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKKyAg
ICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpICsgbV9keSksCisgICAg
ICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCkKKyAgICB9Owog
fQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVj
dCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0g
aW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7CisgICAgaW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVzb2x2ZVRvRmlsdGVyQ29vcmRp
bmF0ZXMoeyBtX2R4LCBtX2R5IH0pKTsKICAgICAKLSAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9
IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRT
aXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5
IH0pOwotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Z2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7Ci0gICAgZHJhd2luZ1JlZ2lvbldpdGhPZmZz
ZXQubW92ZShvZmZzZXQpOwotCi0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gaW4tPmlt
YWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7Ci0g
ICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVn
aW9uV2l0aE9mZnNldCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYSgxKTsKLQotICAgIFNo
YWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3Ip
OwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkg
fTsKLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRh
dGEoKTsKLSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXku
ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0
aCgpKTsKKyAgICBpbWFnZVJlY3QudW5pdGUoaW5wdXRzWzBdLT5pbWFnZVJlY3QoKSk7CiAgICAg
Ci0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJl
YSk7Ci0KLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9y
KTsKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKyAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZp
YXRpb25ZIH0pOworICAgIAorICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5k
IG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRp
bWVzLgorICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41
Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41
Zik7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNl
SW1hZ2UsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmlt
aXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRP
dXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CitGaWx0ZXJJbWFnZVZlY3RvciBG
RURyb3BTaGFkb3c6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAog
ewotICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRz
ZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjpt
YXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSksCi0gICAgICAgIHN0ZDo6bWF4
PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCksCi0gICAgICAgIHN0ZDo6bWF4PGlu
dD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+
KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCi0gICAgfTsKKyAgICBBU1NFUlQoIXN0YWNr
LmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0
U3RyZWFtJiBGRURyb3BTaGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8IltmZURyb3BTaGFkb3ciOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwi
IiA8PCBtX3N0ZFggPDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiIGR4PVwiIiA8PCBtX2R4IDw8ICJc
IiBkeT1cIiIgPDwgbV9keSA8PCAiXCIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRpb25G
b3JSZW5kZXJUcmVlQXNUZXh0KG1fc2hhZG93Q29sb3IpIDw8IlwiIGZsb29kLW9wYWNpdHk9XCIi
IDw8IG1fc2hhZG93T3BhY2l0eSA8PCAiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNj
b3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwi
IiA8PCBtX3N0ZERldmlhdGlvblggPDwgIiwgIiA8PCBtX3N0ZERldmlhdGlvblkgPDwgIlwiIGR4
PVwiIiA8PCBtX2R4IDw8ICJcIiBkeT1cIiIgPDwgbV9keSA8PCAiXCIgZmxvb2QtY29sb3I9XCIi
IDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KG1fc2hhZG93Q29sb3IpIDw8Ilwi
IGZsb29kLW9wYWNpdHk9XCIiIDw8IG1fc2hhZG93T3BhY2l0eSA8PCAiXVxuIjsKICAgICByZXR1
cm4gdHM7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJmZWRiN2I3N2JmM2Uw
NTczNGVlODhhMjllZmYzODRjLi44MjE0NTUzNzM4ZDYwMGY2NWY2N2MwNmFlYTU0NjhhNTgwZWYx
OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNTMgKzIxLDQyIEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFRHJvcFNoYWRvdyA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hh
ZG93PiBjcmVhdGUoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENv
bG9yJiwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUoZmxvYXQg
c3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBj
b25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCi0gICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9h
dCBzdGRYKSB7IG1fc3RkWCA9IHN0ZFg7IH0KLQotICAgIGZsb2F0IHN0ZERldmlhdGlvblkoKSBj
b25zdCB7IHJldHVybiBtX3N0ZFk7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQg
c3RkWSkgeyBtX3N0ZFkgPSBzdGRZOyB9Ci0KLSAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJu
IG1fZHg7IH0KKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3RkRGV2aWF0aW9uWCkg
eyBtX3N0ZERldmlhdGlvblggPSBzdGREZXZpYXRpb25YOyB9CisgICAgdm9pZCBzZXRTdGREZXZp
YXRpb25ZKGZsb2F0IHN0ZERldmlhdGlvblkpIHsgbV9zdGREZXZpYXRpb25ZID0gc3RkRGV2aWF0
aW9uWTsgfQogICAgIHZvaWQgc2V0RHgoZmxvYXQgZHgpIHsgbV9keCA9IGR4OyB9Ci0KLSAgICBm
bG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQotCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKICAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7IH0KLQot
ICAgIGZsb2F0IHNoYWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd09wYWNpdHk7
IH0KICAgICB2b2lkIHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0eSkgeyBtX3No
YWRvd09wYWNpdHkgPSBzaGFkb3dPcGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVEcm9wU2hh
ZG93KEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZs
b2F0KTsKKyAgICBGRURyb3BTaGFkb3coZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2
aWF0aW9uWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkp
OwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RURyb3BTaGFkb3ciOyB9CisgICAgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwor
ICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
IGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhG
aWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0
cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRl
ckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgZmxvYXQgbV9zdGRYOwotICAgIGZsb2F0IG1fc3RkWTsKKyAgICBmbG9hdCBt
X3N0ZERldmlhdGlvblg7CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25ZOwogICAgIGZsb2F0IG1f
ZHg7CiAgICAgZmxvYXQgbV9keTsKICAgICBDb2xvciBtX3NoYWRvd0NvbG9yOwogICAgIGZsb2F0
IG1fc2hhZG93T3BhY2l0eTsKIH07Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRHJvcFNoYWRvdykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
CmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYzYjZiMDEuLjI4ODc5MzU3
MmNjYThhMjNiMmY2MzAwOGMxNDQzODllYWYwZDM3YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMyw2ICszLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNCw1NiArMjUsMzQgQEAKICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNp
bmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwg
ZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxv
b2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKLSAgICAsIG1fZmxvb2RPcGFjaXR5
KGZsb29kT3BhY2l0eSkKLXsKLX0KLQotUmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkK
K1JlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBv
cGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoZmlsdGVyLCBmbG9v
ZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29k
KGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKG1fZmxvb2RDb2xvciA9PSBjb2xvcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmxvb2RDb2xvciA9IGNvbG9yOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNp
dHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9v
ZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVGbG9vZCkKKyAgICAsIG1fZmxv
b2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQog
ewotICAgIGlmIChtX2Zsb29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0eTsKLSAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRS
ZWN0IEZFRmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgY29sb3IpOworICAgIHJldHVybiBnZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJp
bWl0aXZlU3VicmVnaW9uKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0
aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CiAgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBm
bG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoZmxvb2RD
b2xvcigpKSA8PCAiXCIgIgotICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBmbG9vZE9w
YWNpdHkoKSA8PCAiXCJdXG4iOworICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KG1fZmxvb2RDb2xvcikgPDwgIlwiICIKKyAgICAg
ICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9mbG9vZE9wYWNpdHkgPDwgIlwiXVxuIjsKICAg
ICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0Njgy
ZmEwNjE3MzQ4ZS4uNGQ4MGE3YWJlMTJiMDE1YWQ2M2IyMmIyZGM5MDVkMGM5MDFmM2RlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsMzggKzIzLDMxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwg
ZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxv
YXQgb3BhY2l0eSk7CiAKLSAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fZmxvb2RDb2xvcjsgfQotICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYp
OworICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9mbG9vZENv
bG9yID0gY29sb3I7IH0KKyAgICB2b2lkIHNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNp
dHkpIHsgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7IH0KIAotICAgIGZsb2F0IGZsb29k
T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFjaXR5OyB9Ci0gICAgYm9vbCBzZXRG
bG9vZE9wYWNpdHkoZmxvYXQpOworcHJpdmF0ZToKKyAgICBGRUZsb29kKGNvbnN0IENvbG9yJiwg
ZmxvYXQgb3BhY2l0eSk7CiAKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3Qg
cGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlz
IGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2Yg
dGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUg
eyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0K
ICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBm
bG9hdCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFRmxvb2QiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJy
aWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZp
bHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgQ29sb3IgbV9mbG9vZENvbG9yOwogICAgIGZsb2F0IG1fZmxvb2RPcGFj
aXR5OwpAQCAtNjEsMyArNTUsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUZsb29kKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcAppbmRleCAwOGU4NWEwOGFhMDFiMDgxMjIzZjM2ZWJiNmJiYjhhYjM2Mzk0
MzY1Li5iZTE2NWFkMjg0OGIwZDlmOWIyYzgwZjAxODllNTE5NGQ4MzU2NDRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEs
IFMuTC4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw0
NTAgKzI2LDQxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJs
dXIuaCIKIAotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgotI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9B
Y2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0KLXN0YXRpYyBp
bmxpbmUgZmxvYXQgZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKQotewotICAgIHJldHVybiAzIC8gNC5m
ICogc3FydGYoMiAqIHBpRmxvYXQpOwotfQotCi1zdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxT
aXplID0gNTAwOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSB2b2lkIGtlcm5lbFBv
c2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVm
dCwgaW50JiBkZWx0YVJpZ2h0KQorUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6
Y3JlYXRlKGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSkKIHsKLSAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcv
ZmlsdGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KLSAgICBzd2l0
Y2ggKGJsdXJJdGVyYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGlmICghKHJhZGl1cyAl
IDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyIC0gMTsKLSAgICAgICAg
ICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOwotICAgICAgICAgICAgZGVsdGFSaWdo
dCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBj
YXNlIDE6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxl
ZnQrKzsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQtLTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAg
ICBkZWx0YVJpZ2h0Kys7Ci0gICAgICAgICAgICByYWRpdXMrKzsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIo
c3RkRGV2aWF0aW9uWCwgc3RkRGV2aWF0aW9uWSwgZWRnZU1vZGUpKTsKIH0KIAotRkVHYXVzc2lh
bkJsdXI6OkZFR2F1c3NpYW5CbHVyKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpH
YXVzc2lhbkJsdXIpCi0gICAgLCBtX3N0ZFgoeCkKLSAgICAsIG1fc3RkWSh5KQorRkVHYXVzc2lh
bkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlh
dGlvblksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpG
RUdhdXNzaWFuQmx1cikKKyAgICAsIG1fc3RkRGV2aWF0aW9uWChzdGREZXZpYXRpb25YKQorICAg
ICwgbV9zdGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblkpCiAgICAgLCBtX2VkZ2VNb2RlKGVkZ2VN
b2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0ZXIsIHgsIHks
IGVkZ2VNb2RlKSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgo
ZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAg
IG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwg
aW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZl
Y3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAgICBjb25zdCB1aW50OF90
KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9
IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJHQkEs
IHplcm8taW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9
IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQotICAgICAgICAvLyBGaWxs
IHRoZSBrZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsK
LSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0g
ICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQmx1cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsr
eCkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBz
dHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSAr
IHBpeGVsQnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAg
ICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZz
ZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgc3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4
ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcmln
aHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAg
ICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5z
aWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRl
TGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2Us
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBjb25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9
IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJbWFnZSkKLSAg
ICAgICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJh
eSwgZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgs
IGVmZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNE
YXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBp
eGVsQXJyYXkuZGF0YSgpOwotCi0gICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVu
Z3RoOiBpdCBpcyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2Yg
cGl4ZWxzIHdpbGwgYmUKLSAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBs
aW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW1SID0gMCwgc3VtRyA9IDAsIHN1
bUIgPSAwLCBzdW1BID0gMDsKLQotICAgICAgICBpZiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9O
RSkgewotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1
aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bVIg
Kz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOwotICAgICAg
ICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNy
Y1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAgICAg
ICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0Owot
Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAv
IGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dW1HIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0g
ICAgICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0
T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIg
LT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZl
Y3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBp
eGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0g
c3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKLSAgICAg
ICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yICd3cmFwJyBoZXJlLgotICAgICAgICAgICAgLy8gR2V0IGVkZ2UgdmFsdWVz
IGZvciBlZGdlTW9kZSAnZHVwbGljYXRlJy4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVk
Z2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAobGluZSArIChlZmZlY3RXaWR0aCAtIDEpICog
c3RyaWRlKTsKLQotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwgZHhSaWdodDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgdmFsdWVzIG9mICdpJz8KLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotCi0gICAg
ICAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRn
ZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVMZWZ0
WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
UiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdl
VmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdo
dFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQ
dHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9
ICpzcmNQdHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lk
dGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxp
bmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERh
dGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0
aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0
cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAq
ZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAg
ICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA8IGR4TGVmdCkgewot
ICAgICAgICAgICAgICAgICAgICBzdW1SIC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IGVk
Z2VWYWx1ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0
cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0
YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRy
WzNdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdo
dCA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1
ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFd
OwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAg
ICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4
ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAg
ICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBz
cmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAg
ICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLWlu
bGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBz
dHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKLXsKLSAgICBpZiAoIWlv
QnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZWZmZWN0V2lk
dGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgewotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdl
IG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgotICAgIGlmIChrZXJuZWxTaXplICUgMiAh
PSAxKQotICAgICAgICBrZXJuZWxTaXplICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGVmZmVj
dEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4o
aW9CdWZmZXIuZGF0YSgpKTsKLSAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRo
OwotICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RJ
bkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0T3V0
QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5kYXRhKCk7Ci0g
ICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0T3V0QnVm
ZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RPdXRCdWZmZXIucm93Qnl0ZXMg
PSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1wb3JhcnkgYnVm
ZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFsIGZsYWcuIHZJ
bWFnZSB3aWxsIHJldHVybgotICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4gZXJyb3IgKHdo
aWNoIGFyZSBhbGwgbmVnYXRpdmUpLgotICAgIHNpemVfdCB0bXBCdWZmZXJTaXplID0gdkltYWdl
Qm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCAw
LCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCB8IGt2
SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUgPD0gMCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxvYyh0bXBCdWZm
ZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIs
ICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6
ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4
KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJu
ZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgdkltYWdlQm94
Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBC
dWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5k
KTsKLSAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVz
dWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlvQnVmZmVyLmxl
bmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1ZmZlci5kYXRh
KCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0jZW5kaWYKLQot
aW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlz
QWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGludCBkeExlZnQgPSAw
OwotICAgIGludCBkeFJpZ2h0ID0gMDsKLSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAgICBpbnQgZHlS
aWdodCA9IDA7Ci0gICAgCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9C
dWZmZXI7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7Ci0K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAoa2VybmVsU2l6
ZVgpIHsKLSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVYLCBkeExlZnQs
IGR4UmlnaHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlm
ICghaXNBbHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVy
LCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFp
bnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXpl
WCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNp
emUuaGVpZ2h0KCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVy
KCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQs
IHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgaXNBbHBoYUlt
YWdlLCBlZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVy
LCB0b0J1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKLSAg
ICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQp
OwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlmICghaXNBbHBo
YUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZm
ZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhl
aWdodCgpLCBwYWludFNpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0
LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRo
KCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVm
ZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwg
cGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgaXNBbHBoYUltYWdlLCBlZGdl
TW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZl
cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBi
ZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7
Ci0gICAgICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgo
KSk7Ci0gICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwg
aW9CdWZmZXIubGVuZ3RoKCkpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQotewotICAgIGludCBzdHJpZGUg
PSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAo
a2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9O
RSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAgICAgYWNjZWxl
cmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUs
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVs
QXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxw
aGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZv
cm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAg
ICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0
KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0
ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Ci19Ci0K
LWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQor
c3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7Ci0jaWYgIVVTRShB
Q0NFTEVSQVRFKQotICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLSAg
ICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAgIGludCBvcHRp
bWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgp
KSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lk
dGgoKSk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RG
OjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxh
dGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgaW50IGpv
YnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2JzID4gMSkg
ewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQg
am9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2Vy
IHNpbmNlCi0gICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBU
aGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIu
Ci0gICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkg
LyBqb2JzOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUu
aGVpZ2h0KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAgICAg
ICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAg
ICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFt
ZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotCi0gICAg
ICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdo
dDsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxv
Y2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgaW50IGVuZFkgPSBq
b2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7Ci0KLSAg
ICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7
Ci0gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1z
LmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRt
cFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJy
YXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFs
aXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4
ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxv
Y2tTaXplKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMud2lk
dGggPSBwYWludFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0g
ZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJu
ZWxTaXplWDsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXpl
WTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsK
LQotICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgot
ICAgICAgICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsg
am9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAg
ICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uT2Zm
c2V0OwotICAgICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgICAgIGludCBhZGp1
c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6
IGJsb2NrSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0ZWRCbG9j
a0hlaWdodDsKLSAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdodCAqIHNj
YW5saW5lOwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBz
Y2FubGluZTsKLSAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNj
YW5saW5lOwotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3Rp
bmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQs
IHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLSNlbmRp
ZgotCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBk
eW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhp
b0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNp
emUpOworICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAqIHBpRmxvYXQpOwogfQogCiBzdGF0
aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAgLy8gTGltaXQg
dGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcg
ZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZsYXRlcyB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmly
ZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUw
MDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41Zikp
KTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KLSAgICAKLUludFNpemUgRkVHYXVzc2lhbkJs
dXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQor
CitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29u
c3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgQVNTRVJUKHN0ZERldmlhdGlvbi53
aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwogICAgIEludFNpemUg
a2VybmVsU2l6ZTsKQEAgLTQ4MywxMiArNzQsMTIgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6
Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAg
cmV0dXJuIGtlcm5lbFNpemU7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24p
CitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5l
bFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKTsKKyAg
ICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbiAvKmZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSovKTsKIH0KIAotSW50U2l6
ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0
aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxh
dGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDcyICs4Nyw0MyBA
QCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBz
dGREZXZpYXRpb24pCiAgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMg
KiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIEludFNp
emUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1f
c3RkRGV2aWF0aW9uWSB9KTsKKyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9
OworfQogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCkt
PmFic29sdXRlUGFpbnRSZWN0KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdAoreworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKICAg
ICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZl
Y3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsK
LSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBh
aW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9
IEVER0VNT0RFX05PTkUpCisgICAgICAgIHJldHVybiBpbWFnZVJlY3Q7CiAKLSAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWlu
dFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKyAgICBhdXRv
IGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRl
ckNvb3JkaW5hdGVzKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSkpOwogCi0g
ICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJz
ZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVj
dC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVs
IHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVy
IHRocmVlIHRpbWVzLgorICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0
aCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdo
dCgpICogMC41Zik7CiAKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFByaW1p
dGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQg
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFR2F1c3NpYW5C
bHVyOjppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAg
IEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmls
dGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAga2VybmVsU2l6ZS5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxl
KCkpOwotICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1wSW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhl
aWdodCgpLCBwYWludFNpemUpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFnZSgp
OwogfQogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKK0ZpbHRl
ckltYWdlVmVjdG9yIEZFR2F1c3NpYW5CbHVyOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9y
JiBzdGFjaykgY29uc3QKIHsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRz
ZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWln
aHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXpl
LndpZHRoKCkgfTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsg
c3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJl
cHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlR2F1c3NpYW5CbHVyIjsKLSAgICBGaWx0ZXJF
ZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0
cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRYIDw8ICIsICIgPDwgbV9zdGRZIDw8ICJc
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0
aW9uKTsKKyAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGREZXZpYXRpb25YIDw8
ICIsICIgPDwgbV9zdGREZXZpYXRpb25ZIDw8ICJcIl1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3
Y2JiMmQzZS4uN2YxZTcyOGQ2ODk1MzJkZTY4ZDMyOGQ0NzEyNTRjMmU2ODRhYjRkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMiw2NCArMjMsNDEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVD
b252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFu
Qmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBz
dGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxv
YXQgc3RkRGV2aWF0aW9uWSwgRWRnZU1vZGVUeXBlKTsKIAotICAgIGZsb2F0IHN0ZERldmlhdGlv
blgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblgo
ZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCBzdGREZXZpYXRpb25YKSB7
IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlhdGlvblg7IH0KKyAgICB2b2lkIHNldFN0ZERldmlh
dGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkgeyBtX3N0ZERldmlhdGlvblkgPSBzdGREZXZpYXRp
b25ZOyB9CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpIHsgbV9l
ZGdlTW9kZSA9IGVkZ2VNb2RlOyB9CiAKLSAgICBmbG9hdCBzdGREZXZpYXRpb25ZKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0KTsKLQot
ICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0K
LSAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBzdGF0aWMgSW50U2l6
ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYsIEZsb2F0U2l6ZSBzdGREZXZpYXRp
b24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9h
dFNpemUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRT
aXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0
ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJ
bnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERl
dmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHN0ZERldmlhdGlvbik7CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIo
RmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwotCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsg
Ly8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKKyAgICBGRUdh
dXNzaWFuQmx1cihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdl
TW9kZVR5cGUpOwogCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAg
ICAgRkVHYXVzc2lhbkJsdXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBpb1BpeGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1w
UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAg
ICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7
Ci0gICAgfTsKKyAgICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cygp
IGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVy
SW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBs
eVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVm
ZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUm
IHBhaW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7Cisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGZsb2F0IG1f
c3RkWDsKLSAgICBmbG9hdCBtX3N0ZFk7CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25YOworICAg
IGZsb2F0IG1fc3RkRGV2aWF0aW9uWTsKICAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxU
RVJfRUZGRUNUKEZFR2F1c3NpYW5CbHVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggZGYxNzZmOGUwNzBh
NDE4YzIwODUxODA5MGVlN2E2Y2ExMTNlNTZmNS4uZGFkYzJhY2ZlYTViMjBiNWQzMWRkZDdmYTA4
NDcyMGE0NjlmMDk1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNDcwICsyOCwzMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIkNv
bG9yQ29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCi0jaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAi
RmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIs
IExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2Us
IFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xp
Z2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGln
aHRTb3VyY2UpKQotICAgICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0
aW5nOjpGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSwgRmlsdGVyRWZmZWN0OjpUeXBlIHR5cGUp
CisgICAgOiBGaWx0ZXJFZmZlY3QodHlwZSkKKyAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgLCBt
X3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFudChkaWZm
dXNlQ29uc3RhbnQpCiAgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25zdGFudCkK
ICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwgbV9rZXJu
ZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0
aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkpCiB7
CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2Fs
ZSkKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIGlmIChtX3N1cmZhY2VTY2Fs
ZSA9PSBzdXJmYWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fc3VyZmFj
ZVNjYWxlID0gc3VyZmFjZVNjYWxlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFTGln
aHRpbmc6OnNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCi17Ci0g
ICAgaWYgKG1fbGlnaHRpbmdDb2xvciA9PSBsaWdodGluZ0NvbG9yKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBtX2xpZ2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYKQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtl
cm5lbFVuaXRMZW5ndGhYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVu
aXRMZW5ndGhYID0ga2VybmVsVW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0
aFkpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJu
ZWxVbml0TGVuZ3RoWTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0ZXhwciBp
bnQgY1BpeGVsU2l6ZSA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zm
c2V0ID0gMzsKLXN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PigweEZGKTsKLQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBj
b2VmZmljaWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2
MyA9IC0yIC8gMy5mOwotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJv
dHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAq
IGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAq
IGNlbnRlciAtIHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVm
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICog
bGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLWxl
ZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRv
bVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAt
MiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLWxl
ZnQgLSAyICogY2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwo
aW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVy
ICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0g
dG9wUmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OworICAgIHJldHVybiBn
ZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChp
bnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0CitGaWx0ZXJJbWFnZVZl
Y3RvciBGRUxpZ2h0aW5nOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29u
c3QKIHsKLSAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0OwotICAgIAotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUpKTsKLQotICAgIGludCBsZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgpOwotICAgIGludCB0
b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOwotICAgIGludCB0b3AgPSBhbHBoYVdpbmRv
dy50b3AoKTsKLQotICAgIGludCBib3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgp
OwotICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5ib3R0b20oKTsKLQotICAgIC8vIFRoZSBh
bHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdo
dCBjb2x1bW4uCi0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BSaWdodDsKLSAgICBh
bHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzJd
WzJdID0gYm90dG9tUmlnaHQ7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5k
b3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1jaGVja3MuCi0gICAgQVNTRVJUKGFscGhhV2lu
ZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0
Ci0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9w
Ci0KLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQg
KyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC10b3BMZWZ0
IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20gKyBib3R0b21S
aWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCAr
IHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCi0gICAg
ICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCi0gICAgfTsK
LX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0g
MiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIg
KiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAg
aW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
aW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICog
cmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgbGVmdCArIDIg
KiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgLXRvcExlZnQgKyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10
b3BMZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAyICogY2VudGVyCi0gICAgfTsKLX0KLQotdm9pZCBG
RUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9y
KQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgs
IHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBm
bG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9h
dCBhbHBoYSkKLXsKLSAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRhLnN1cmZhY2VTY2FsZTsKLSAg
ICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGlnaHRpbmdEYXRhID0gbV9saWdo
dFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7
Ci0KLSAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwotICAgIGlmIChub3JtYWwyRFZlY3Rvci5pc1pl
cm8oKSkgewotICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgwLCAwLCAxKS4gVGhpcyBpcyBh
IHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxp
Z2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9k
aWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEZsb2F0
UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
LnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpICsgbGln
aHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAg
ZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7Ci0gICAg
ICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAgICAgICAgICAgICAgbGln
aHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3IueigpIC8gaGFs
ZndheVZlY3Rvckxlbmd0aDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdo
dFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAv
IGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yID0gewotICAgICAg
ICAgICAgZmFjdG9yWCAqIG5vcm1hbDJEVmVjdG9yLndpZHRoKCkgKiBkYXRhLnN1cmZhY2VTY2Fs
ZSwKLSAgICAgICAgICAgIGZhY3RvclkgKiBub3JtYWwyRFZlY3Rvci5oZWlnaHQoKSAqIGRhdGEu
c3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgMS4wZgotICAgICAgICB9OwotICAgICAgICBmbG9h
dCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7Ci0KLSAgICAgICAg
aWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAg
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3Ig
KiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
RmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkg
KyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhh
bGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3Nw
ZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChu
b3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgbV9zcGVjdWxhckV4cG9u
ZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsaWdodFN0cmVuZ3RoID4gMSkKLSAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7Ci0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPCAwKQotICAg
ICAgICBsaWdodFN0cmVuZ3RoID0gMDsKLQotICAgIHVpbnQ4X3QgcGl4ZWxWYWx1ZVszXSA9IHsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0
YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90
PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLnkoKSAqIDI1NS4wZiks
Ci0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0Rh
dGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQotICAgIH07Ci0gICAgCi0gICAgZGF0YS5waXhl
bHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Ci19Ci0KLS8vIFRoaXMgYXBwZWFy
cyB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0
IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBj
aGFubmVscy4KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0
YXJ0WSBpcyA+IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxv
b3AuCi0gICAgQVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0g
ICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93
U3RhcnRPZmZzZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAg
ICAgaW50IHByZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9m
ZnNldCArIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxw
aGFXaW5kb3cgaXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZp
bGwgdGhlIHR3byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0
aGUgY2VudGVyIGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVh
Y2ggcm93IGxlZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2lu
ZG93IGFscGhhV2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMt
Pml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAg
YWxwaGFXaW5kb3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFy
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFX
aW5kb3cuc2V0Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVs
cy0+aXRlbShyb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5l
eHRSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cu
c2V0Qm90dG9tUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3Rh
cnRPZmZzZXQgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAg
ICAgICAgYWxwaGFXaW5kb3cuc2hpZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwo
b2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFk
aXY0LCBkYXRhLmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRv
dy5jZW50ZXIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzKQotewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVy
aWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFt
ZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgdW5zaWduZWQgcm93
c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOwotICAgIHVuc2lnbmVk
IG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFs
VGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51
bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICAv
LyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxh
dGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlH
ZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRo
ZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYiA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRo
ZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBu
ZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8geVN0ZXAgKiBq
b2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5k
ZXIgImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0gcm93c1Rv
UHJvY2VzcyAvIGpvYjsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJhID0gcm93
c1RvUHJvY2VzcyAlIGpvYjsKLQotICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Ci0gICAgICAg
ICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0
ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50
aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMueVN0YXJ0ID0g
eVN0YXJ0OwotICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8g
eVN0ZXAgKyAxIDogeVN0ZXA7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnlFbmQgPSB5U3RhcnQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmds
ZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
ZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKLX0KLQot
aW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEm
IGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsK
LSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFt
aWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotI2lmIENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9U
UkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0gICAgcGxhdGZvcm1BcHBs
eU5lb24oZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbHNlCi0gICAgcGxhdGZvcm1BcHBseUdlbmVy
aWMoZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbmRpZgotfQotCi1ib29sIEZFTGlnaHRpbmc6OmRy
YXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCi17Ci0gICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAg
TGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRo
IG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2Vz
IG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAg
aWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3Vy
ZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
PSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lk
dGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwotCi0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJ
bkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaW5p
dGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKLQot
ICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7
Ci0KLSAgICAvLyBUb3AgbGVmdC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRp
djMsIGRhdGEudG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIFRvcCByaWdodC4KLSAg
ICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsK
LSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5v
cm1hbChvZmZzZXQpKTsKLQotICAgIC8vIEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0
Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhl
aWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJk
aXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgaWYgKHdpZHRoID49
IDMpIHsKLSAgICAgICAgLy8gVG9wIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsr
eCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEu
dG9wUm93Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAg
IG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBk
YXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAg
ICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9t
Um93Tm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0gMykgewotICAg
ICAgICAvLyBMZWZ0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAs
IHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zm
c2V0KSk7Ci0KLSAgICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICog
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZv
ciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQg
Kz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHks
IGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNl
dCkpOwotICAgIH0KLQotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Ci0gICAg
ICAgIC8vIEludGVyaW9yIHBpeGVscy4KLSAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWlu
dGluZ0RhdGEpOwotICAgIH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZm
dXNlTGlnaHRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7
IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxz
LT5zZXQoaSwgY09wYXF1ZUFscGhhKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICB1aW50
OF90IGExID0gZGF0YS5waXhlbHMtPml0ZW0oaSk7Ci0gICAgICAgICAgICB1aW50OF90IGEyID0g
ZGF0YS5waXhlbHMtPml0ZW0oaSArIDEpOwotICAgICAgICAgICAgdWludDhfdCBhMyA9IGRhdGEu
cGl4ZWxzLT5pdGVtKGkgKyAyKTsKLSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8g
bWF4KGExLCBhMiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+
PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFs
c2UpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVs
VW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUg
VzMKLSAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIg
YnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZh
cmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlh
YmxlLgotICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhl
IGltcGxlbWVudGF0aW9uCi0KLSAgICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0
KCkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50
YWtlTGFzdCgpIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXgg
MGZmZmNkMDY0Mzk2ZDhmNGI2NDA4MjI2OWNjMjA3NGY3YzlkYmRiYy4uYTYyOTQzYjZjYzBhNGYy
MmY1YmExN2EyMDk4OTZlOWUzN2NlNGJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNywxNDIgKzI4LDQyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0K
LS8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxh
ckxpZ2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWlu
dGluZ0RhdGFGb3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQotCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJm
YWNlU2NhbGU7IH0KLSAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CisgICAgdm9pZCBz
ZXRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisgICAgdm9p
ZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0g
c3VyZmFjZVNjYWxlOyB9CisgICAgdm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVz
ZUNvbnN0YW50KSB7IG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OyB9CiAKLSAg
ICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdD
b2xvcjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZv
aWQgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3Vs
YXJDb25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFyRXhw
b25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVj
dWxhckV4cG9uZW50OyB9CiAKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5n
dGhYKGZsb2F0KTsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYKSB7IG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsgfQor
ICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpIHsg
bV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOyB9CiAKLSAgICBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0K
LSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKLQotICAgIGNvbnN0IExpZ2h0
U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7
IH0KKyAgICBjb25zdCBMaWdodFNvdXJjZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2UuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFs
UmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBh
cmFsbGVsIGpvYnMKLQotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlmZnVzZUxp
Z2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1
Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2Ug
Y29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25z
dCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50OF90IGxl
ZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQotICAgICAg
ICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsw
XTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tKCkg
Y29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9
Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1b
MV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAg
ICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVp
bnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBz
ZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9Ci0g
ICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0g
PSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFb
M10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0gICAgICAg
ICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2
b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwot
ICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxw
aGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewot
ICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNh
ZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAgZmxv
YXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7
Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVpZ2h0RGVj
cmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwo
aW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUg
cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRT
aXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJ
bnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5l
IEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsKKyAg
ICBGRUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmLCBGaWx0ZXJFZmZlY3Q6OlR5cGUpOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOworICAgIEZsb2F0UmVj
dCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0
ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyogZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEg
ZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0g
ICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAgIGludCB5RW5kOwotICAgIH07CisgICAgRmlsdGVy
SW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxh
dGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1B
cHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb24qKTsKKyAgICBib29s
IGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IEZFTGlnaHRpbmcoRmlsdGVyJiwgTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJiwgVHlw
ZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFTGlnaHRpbmciOyB9Ci0KLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJh
eSYsIGludCwgaW50KTsKLQotICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQg
eSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IpOwot
ICAgIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxwaGEp
OwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBz
dGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0jaWYg
Q1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09N
UEFUSUJMRSkKLSAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4cG9u
ZW50KTsKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0jZW5kaWYKLQotICAgIExp
Z2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRT
b3VyY2U7Ci0KLSAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CisgICAgQ29sb3IgbV9jb2xvcjsK
ICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsK
ICAgICBmbG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9u
ZW50OwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxV
bml0TGVuZ3RoWTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IG1fc291cmNlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCAwYTIwMDAxYjE3M2JkOGZkZjZiYmE2MzZj
ZDIzY2U0NzAyNmU3YjNmLi40YjQ2OTU1MDI2NWVkMjVhNWMwMzc3M2RjZGYxM2M4ZWU4MWZhOTI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIyLDUxICsyMywzOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFTWVyZ2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVy
Z2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJn
ZSkKK1JlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShudW1iZXJPZkVmZmVj
dElucHV0cykpOwogfQogCi1SZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmls
dGVyKQorRkVNZXJnZTo6RkVNZXJnZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cykKKyAg
ICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1lcmdlKQorICAgICwgbV9udW1iZXJPZkVmZmVjdElu
cHV0cyhudW1iZXJPZkVmZmVjdElucHV0cykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RU1lcmdlKGZpbHRlcikpOworICAgIEFTU0VSVChtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKIH0K
IAotdm9pZCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVySW1hZ2VWZWN0
b3IgRkVNZXJnZTo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJU
KHNpemUgPiAwKTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IG1fbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAg
VmVjdG9yPFJlZjxGaWx0ZXJJbWFnZT4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6
ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1
dHMuYXBwZW5kKHN0YWNrLnRha2VMYXN0KCkpOwogCi0KLSAgICBHcmFwaGljc0NvbnRleHQmIGZp
bHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KGkpOwotICAgICAgICBpZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdl
QnVmZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKLSAgICB9CisgICAgcmV0dXJuIGlucHV0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVN
ZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRp
b25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7Ci0gICAgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdW5zaWdu
ZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAwKTsK
LSAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwiXVxuIjsKLQotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBpbnB1dEVmZmVjdChpKS0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIgbWVyZ2VOb2Rl
cz1cIiIgPDwgbV9udW1iZXJPZkVmZmVjdElucHV0cyA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0
czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTljZWNlZDUwNzNlNTdiMDE5NGViY2YxOGYyNjA3
Li4yNjZhMzMwZTliNmVjODU4N2VhODI3OGI1MzY0ODU0ZWJhZDk2M2IxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjMgKzIz
LDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNy
ZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBt
X251bWJlck9mRWZmZWN0SW5wdXRzKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYp
OworICAgIEZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQor
ICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0
IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1lcmdlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUu
LjU1YzgwYmYwMTVhMTdhN2UwM2M3MTEwNWIwODVhN2NiZjIzOWI5MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUg
SW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjUsMjY1ICsyNSw1MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9y
cGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29s
b3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xv
Z3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1v
cnBob2xvZ3kpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQot
ICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCi17Ci19Ci0KLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9y
cGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5
cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwotfQot
Ci1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWChmbG9hdCByYWRpdXNYKQotewotICAgIGlmIChtX3Jh
ZGl1c1ggPT0gcmFkaXVzWCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWCA9
IHJhZGl1c1g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNZKGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgaWYgKG1fcmFkaXVzWSA9PSByYWRpdXNZKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNZID0gcmFkaXVzWTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29s
dXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAg
ICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9y
YWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAg
IHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50
IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkKLXsKLSAgICByZXR1cm4g
KHkgKiB3aWR0aCArIHgpICogNDsKLX0KLQotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEg
cGl4ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsK
LX0KLQotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29t
cG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCi17
Ci0gICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JB
PHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OwotfQotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBt
aW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiYgYikKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBwZXJDb21wb25lbnRNaW4oYSwgYik7
Ci0KLSAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIpOwotfQotCi10ZW1wbGF0ZTxNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCi17Ci0gICAg
YXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOwotCi0g
ICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKLSAgICAgICAgYXV0
byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6
UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5k
YXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKLSAgICAgICAgZXh0cmVt
dW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwpOwotICAgIH0KLSAgICByZXR1cm4g
ZXh0cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBp
bnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9ycGhv
bG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFk
aXVzWSkKIHsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0g
ICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+
KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNv
bHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXks
IHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVj
dG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCi17Ci0g
ICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8
IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihl
eHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlT
X0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3Qg
Q29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0g
ICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1
cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwot
Ci0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+
KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17
Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxB
cnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFy
cmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1
c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50
aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0
aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFT
U0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQo
c3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBD
b2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsg
Kyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVz
WSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVz
WSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0
YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1gg
Y29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAg
ICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5
UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBL
ZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGgg
LSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVt
KHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdp
ZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAg
ICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBp
eGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsg
cGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0g
bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEs
IG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFTW9ycGhvbG9neShtb3JwaG9sb2d5T3BlcmF0b3IsIHJhZGl1c1gsIHJhZGl1c1kpKTsK
IH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBs
eVBhcmFtZXRlcnMqIHBhcmFtKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9n
eU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1vcnBob2xvZ3kpCisgICAgLCBtX21vcnBo
b2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IpCisgICAgLCBtX3JhZGl1c1gocmFkaXVz
WCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRm
b3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJh
bS0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBs
aW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQg
MC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNY
ICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUo
KSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiAK
LSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8vIEVtcGly
aWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWduZWQgbWF4
TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVkIG9wdGlt
YWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAq
IHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51
bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBX
VEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWRO
dW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAgICAgIC8v
IFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcg
am9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAv
LyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBi
eSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBqb2JTaXpl
ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBq
b2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKLSAgICAg
ICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1P
ZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9y
bUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0g
ICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJh
bS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAgICAgIHBh
cmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEg
PSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxsZWxKb2Jz
LmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBG
YWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAgfQorICAgIGltYWdlUmVjdC5pbmZs
YXRlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9yYWRpdXNYLCBtX3Jh
ZGl1c1kgfSkpOwogCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBw
YWludGluZ0RhdGEuaGVpZ2h0KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0
aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotYm9vbCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBk
c3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQg
cmFkaXVzWSkKK2Jvb2wgRkVNb3JwaG9sb2d5Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVz
WSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlu
cHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVNb3JwaG9sb2d5Ojp0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlv
blBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0Fs
cGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotCi0gICAgSW50U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNp
emUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJh
dGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndpZHRo
KCksIHJhZGl1cy5oZWlnaHQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZpbHRlciYgZmls
dGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBy
YWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsg
bV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKLSAgICBpbnQgcmFk
aXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhl
aWdodCgpKTsKLQotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBp
eGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50
aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICBwYWlu
dGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpICogZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihlZmZlY3RE
cmF3aW5nUmVjdC5oZWlnaHQoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGlu
Z0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1ggKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZICogZmlsdGVyLmZpbHRlclNj
YWxlKCkpOwotCi0gICAgcGxhdGZvcm1BcHBseShwYWludGluZ0RhdGEpOworICAgIEFTU0VSVCgh
c3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAK
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvciYgbW9ycGhvbG9neU9wZXJh
dG9yKQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJh
dG9yKSB7CiAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAg
dHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTI5NywxNSArODIsMTEgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZF
TW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3JwaG9s
b2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3kiOwot
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigpIDw8
ICJcIiAiCi0gICAgICAgPDwgInJhZGl1cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwgcmFk
aXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRT
Y29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG9wZXJhdG9yPVwiIiA8PCBtX21vcnBob2xv
Z3lPcGVyYXRvciA8PCAiXCIgIgorICAgICAgIDw8ICJyYWRpdXM9XCIiIDw8IG1fcmFkaXVzWCA8
PCAiLCAiIDw8IG1fcmFkaXVzWSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWExMS4u
YmE1YmEzNTBiZGFlYzUxMWFlMjUxM2NmZGE0N2U5OTk2NDk4MmYwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
CkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MiwxMSArMjMsMTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIHsKK2VudW0gTW9ycGhvbG9neU9wZXJhdG9yIHsKICAgICBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFID0gMSwKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgpAQCAtMzQs
NTUgKzM0LDMwIEBAIGVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZFTW9y
cGhvbG9neSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RkVNb3JwaG9sb2d5PiBjcmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+
IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kp
OwogCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlKTsKLQotICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVy
biBtX3JhZGl1c1g7IH0KLSAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwotCi0gICAgZmxvYXQg
cmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWTsgfQotICAgIGJvb2wgc2V0UmFkaXVz
WShmbG9hdCk7CisgICAgdm9pZCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJh
dG9yIG1vcnBob2xvZ3lPcGVyYXRvcikgeyBtX21vcnBob2xvZ3lPcGVyYXRvciA9IG1vcnBob2xv
Z3lPcGVyYXRvcjsgfQorICAgIHZvaWQgc2V0UmFkaXVzWChmbG9hdCByYWRpdXNYKSB7IG1fcmFk
aXVzWCA9IHJhZGl1c1g7IH0KKyAgICB2b2lkIHNldFJhZGl1c1koZmxvYXQgcmFkaXVzWSkgeyBt
X3JhZGl1c1kgPSByYWRpdXNZOyB9CiAKIHByaXZhdGU6Ci0gICAgRkVNb3JwaG9sb2d5KEZpbHRl
ciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kp
OwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RU1vcnBob2xvZ3kiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwot
Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRkVNb3JwaG9s
b2d5KE1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAK
LSAgICBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQ
aXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFk
aXVzWSk7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0cnVjdCBQYWludGlu
Z0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgaW50IHJhZGl1c1g7Ci0gICAgICAg
IGludCByYWRpdXNZOwotICAgIH07CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGxhdGZv
cm1BcHBseVBhcmFtZXRlcnMgewotICAgICAgICBGRU1vcnBob2xvZ3kqIGZpbHRlcjsKLSAgICAg
ICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgICAgIGNvbnN0IFBhaW50aW5n
RGF0YSogcGFpbnRpbmdEYXRhOwotICAgIH07CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlu
cHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwor
ICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZv
aWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwg
aW50IGVuZFkpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKKyAgICBNb3JwaG9sb2d5T3BlcmF0
b3IgbV9tb3JwaG9sb2d5T3BlcmF0b3I7CiAgICAgZmxvYXQgbV9yYWRpdXNYOwogICAgIGZsb2F0
IG1fcmFkaXVzWTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTW9ycGhvbG9neSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMDI3
MGRiOTI0ODFhMzM5MmQzZDVhMWU5MTdjMmQ2NWFhNDE0MGY2OS4uZjM1ZmU1ZTQzNWFjMjMzYmFi
NTVmMGFiOWI1MzJhZTRhYTQyZmIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3MSArMjUsNTAgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRU9mZnNldC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFT2Zmc2V0OjpGRU9mZnNldChGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zm
c2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU9mZnNl
dCkKICAgICAsIG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+
IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1Jl
ZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6
c2V0RHgoZmxvYXQgZHgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAg
IG1fZHggPSBkeDsKLX0KKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRv
IGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnNl
dER5KGZsb2F0IGR5KQotewotICAgIG1fZHkgPSBkeTsKKyAgICBpbWFnZVJlY3QubW92ZShnZW9t
ZXRyeS5yZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyh7IG1fZHgsIG1fZHkgfSkpOworCisgICAg
cmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkKK2Jvb2wgRkVPZmZzZXQ6OmlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBpbnB1
dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRo
aXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJl
c29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAg
ICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBpbnB1dHNb
MF0tPmlzQWxwaGFJbWFnZSgpOwogfQogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVPZmZzZXQ6OnRha2VJbnB1dHMoRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9u
KHsgbV9keCwgbV9keSB9KSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1w
dHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0U3RyZWFt
JiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVPZmZzZXQ6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsKLSAgICBGaWx0
ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAg
ICB0cyA8PCAiIGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4i
OwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CisgICAgdHMgPDwgIiBkeD1cIiIgPDwgbV9keCA8PCAiXCIgZHk9XCIiIDw8IG1fZHkgPDwgIlwi
XVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAppbmRleCA2NWFiZGE5MGE0N2IxYmZlNzZh
ZTVjNzRhYWI1YWExNjdmYjFlNjllLi4wOWNhYTJmZTI1OWEwN2RlMDE2MDhjNzY0MjY1MWU4NmJm
NTFjMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMiwzNCArMjMsNTkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRkVPZmZzZXQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFT2Zmc2V0PiBjcmVhdGUoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFT2Zmc2V0PiBjcmVhdGUoZmxvYXQg
ZHgsIGZsb2F0IGR5KTsKIAotICAgIGZsb2F0IGR4KCkgY29uc3QgeyByZXR1cm4gbV9keDsgfQot
ICAgIHZvaWQgc2V0RHgoZmxvYXQpOworICAgIHZvaWQgc2V0RHgoZmxvYXQgZHgpIHsgbV9keCA9
IGR4OyB9CisgICAgdm9pZCBzZXREeShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7IH0KIAotICAgIGZs
b2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOwor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8Rmls
dGVyRWZmZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU9mZnNldChG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9h
dCBkeSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFT2Zmc2V0IjsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIAotICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlckltYWdlVmVjdG9y
IHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZs
b2F0IG1fZHg7CiAgICAgZmxvYXQgbV9keTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIEZFT2Zmc2V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5OworfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RmlsdGVyRWZmZWN0Pj4gRkVPZmZzZXQ6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR4Owor
ICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5OworICAgIGRlY29kZXIgPj4gZHk7
CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVPZmZzZXQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggNTk5NzIzMDY4ODZhNjNmYTQxMmI1YjcxNDFm
NzRmOWM0ODdhMTQ0Yy4uNjk5MjQ0MzNmOTNmZTRmMjFmZWJiYWJmNDg0NDU4NzY2ZWVlNmM5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDkgKzIzLDI2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVTcGVjdWxhckxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJM
aWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhG
aWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJM
aWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50
LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFks
IFdURk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorUmVmPEZFU3Bl
Y3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKIHsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRVNwZWN1bGFyTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJD
b25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRM
ZW5ndGhZLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFU3BlY3VsYXJMaWdodGluZz4g
RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBs
aWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorRkVTcGVj
dWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
UmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZh
Y2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5p
dExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJjZSksIFR5cGU6OkZFU3Bl
Y3VsYXJMaWdodGluZykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVNwZWN1bGFyTGln
aHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3Rh
bnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVT
cGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQotewotICAgIGlmICht
X3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9u
ZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVu
dCA9PSBzcGVjdWxhckV4cG9uZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVj
dWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
VGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitU
ZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNl
U2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxD
b25zdGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNw
ZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0g
ICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZm
ZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVk
MWU0NzM1ZDlmNDk3OThkMzk4MThiZjNiMjQ5NThhLi41ZGU5MzM5ZGMzMDY2YTM4ZWU3YmExYmU2
NDhiMTk3NWViZjhjMTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1Ymxp
YyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGlu
Zz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJM
aWdodGluZygpOwotCi0gICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3BlY3VsYXJDb25zdGFudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9h
dCk7Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVj
dWxhckV4cG9uZW50OyB9Ci0gICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKLQot
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZWY8
RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKIAogcHJpdmF0ZToKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29u
c3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNv
dXJjZT4mJik7CisgICAgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJik7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJy
aWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVTcGVjdWxhckxpZ2h0aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2Ji
MjI5ZGVlOTY0MmRjMWU3ZGNhMGM1ZGIyZmNhYzIwYWQuLjk4N2EwMTQ3Njc3OTA3ZjE1ZDZiMGRh
ZjMyZDMzZmZlMzdmNDU1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsODAgKzIyLDQzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRkVUaWxlLmgiCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNW
R1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVU
aWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpUaWxlKQorUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogeworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFVGlsZSgpKTsKIH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIpCitGRVRpbGU6OkZFVGlsZSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVUaWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShmaWx0ZXIpKTsK
IH0KIAotdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVU
aWxlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAogewotLy8gRklYTUU6IFNlZSBidWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRv
IHdvcmsgYXJvdW5kIGEgY29tcGlsZSBmYWlsdXJlLCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9y
IG90aGVyd2lzZS4KLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAg
IGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
ZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIC8vIFNvdXJjZSBpbnB1
dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdp
b24gYnV0IGdpdmVzIHRoZQotICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBi
YWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4K
LSAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpbi0+bWF4RWZmZWN0UmVjdCgpOwotICAgIEZsb2F0
UG9pbnQgaW5NYXhFZmZlY3RMb2NhdGlvbiA9IHRpbGVSZWN0LmxvY2F0aW9uKCk7Ci0gICAgRmxv
YXRQb2ludCBtYXhFZmZlY3RMb2NhdGlvbiA9IG1heEVmZmVjdFJlY3QoKS5sb2NhdGlvbigpOwot
ICAgIGlmIChpbi0+ZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJ
bnB1dCkgewotICAgICAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgICAg
ICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICAgICAgdGlsZVJlY3Quc2Nh
bGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1
dGlvbigpLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCksIGZpbHRlcigpLnJlbmRlcmluZ01vZGUoKSk7Ci0gICAg
aWYgKCF0aWxlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYg
dGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNv
bnRleHQudHJhbnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9j
YXRpb24ueSgpKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOwotCi0gICAgYXV0byB0aWxl
SW1hZ2VDb3B5ID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxl
SW1hZ2UpKTsKLSAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zvcm0u
dHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7Ci0KLSAg
ICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9u
TnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZp
bHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7Ci0gICAgZmlsdGVy
Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSkpOworICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBkcmF3aW5nUmVjdCBm
b3IgPGZlVGlsZT4uCisgICAgcmV0dXJuIGdlb21ldHJ5Lm1heFByaW1pdGl2ZVN1YnJlZ2lvbihw
cmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1UZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKK2Jvb2wgRkVUaWxlOjppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cykgY29uc3QKIHsKLSAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGUiOwot
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHRzIDw8ICJdXG4iOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFn
ZSgpOworfQogCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwot
ICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRh
dGlvbik7CitGaWx0ZXJJbWFnZVZlY3RvciBGRVRpbGU6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VW
ZWN0b3ImIHN0YWNrKSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07Cit9CiAKK1RleHRTdHJlYW0mIEZFVGlsZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0Cit7CisgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlXVxuIjsKICAgICByZXR1
cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3
MTQuLjg2ZjY1MmViZWZhYzZiNDk4MzgwYmQ5YmNhNTdjOTMxYzJkZDY5YjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjcgKzIz
LDI3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4g
Y3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJp
dmF0ZToKLSAgICBGRVRpbGUoRmlsdGVyJik7CisgICAgRkVUaWxlKCk7CiAKLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVGlsZSI7IH0KKyAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZl
Y3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVRpbGU7IH0K
KyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdCht
YXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYg
b3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxU
RVJfRUZGRUNUKEZFVGlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCBhYzIzNDZlOGE0YmE1OGFh
YTkyNGE2ZDY3YmQ1ZTRiNzdkZDIyNjhmLi4xZTQzMTI0YzY1MzY3NjNiNGVlODZkZmEzNWUyMjA1
ZWUzYWZiNzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KICAqIENvcHly
aWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBs
ZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDMxICsyNiwxOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRy
eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0vKgotICAgIFByb2R1Y2VzIHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAt
IDJdLiBBbGdvcml0aG0gaXM6Ci0gICAgciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRB
bXBsaXR1ZGUgPSAxNjgwNyBhbmQKLSAgICBtID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAy
MTQ3NDgzNjQ3LCByID0gc2VlZC4KLSAgICBTZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4g
MzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4OAotICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0g
c2hvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdCAxMDQzNjE4MDY1Ci0gICAgYXMgdGhlIDEwLDAwMHRo
IGdlbmVyYXRlZCBudW1iZXIgaWYgdGhlIG9yaWdpbmFsIHNlZWQgaXMgMS4KLSovCi1zdGF0aWMg
Y29uc3QgaW50IHNfcGVybGluTm9pc2UgPSA0MDk2Owotc3RhdGljIGNvbnN0IGxvbmcgc19yYW5k
TWF4aW11bSA9IDIxNDc0ODM2NDc7IC8vIDIqKjMxIC0gMQotc3RhdGljIGNvbnN0IGludCBzX3Jh
bmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotc3RhdGlj
IGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQotc3RhdGljIGNvbnN0IGludCBz
X3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKK1JlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6
Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGls
ZXMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VG
cmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMp
KTsKK30KIAotRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1
bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5
WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpUdXJidWxlbmNlKQotICAgICwgbV90eXBlKHR5cGUp
CitGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSB0dXJidWxlbmNlVHlw
ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0
YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRlckVmZmVjdChU
eXBlOjpGRVR1cmJ1bGVuY2UpCisgICAgLCBtX3R1cmJ1bGVuY2VUeXBlKHR1cmJ1bGVuY2VUeXBl
KQogICAgICwgbV9iYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZy
ZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCiAgICAgLCBtX251bU9jdGF2ZXMobnVtT2N0YXZlcykK
QEAgLTU5LDQwNSArNDcsOSBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZp
bHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQogewogfQogCi1SZWY8
RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVl
bmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Ci19
Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlIHR5cGUpCi17Ci0g
ICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBl
ID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldEJh
c2VGcmVxdWVuY3lZKGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotewotICAgIGlmIChtX2Jhc2VGcmVx
dWVuY3lZID09IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9i
YXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgp
Ci17Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVggPT0gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVxdWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRTZWVkKGZsb2F0IHNl
ZWQpCi17Ci0gICAgaWYgKG1fc2VlZCA9PSBzZWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9zZWVkID0gc2VlZDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVu
Y2U6OnNldE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpCi17Ci0gICAgaWYgKG1fbnVtT2N0YXZl
cyA9PSBudW1PY3RhdmVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9udW1PY3RhdmVz
ID0gbnVtT2N0YXZlczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6
OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQotewotICAgIGlmIChtX3N0aXRjaFRpbGVzID09
IHN0aXRjaCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3RpdGNoVGlsZXMgPSBzdGl0
Y2g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9u
IGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEu
MSBzcGVjaWZpY2F0aW9uOgotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5o
dG1sI2ZlVHVyYnVsZW5jZQotCi0vLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5s
aW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9u
ZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAq
IChzZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQg
Kz0gc19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0
ICogdCAqICgzIC0gMiAqIHQpOwotfQotCi1pbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlv
bihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0g
YSk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEpCi17Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKLQotICAgIC8vIFRo
ZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgot
ICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2Vl
ZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAg
aWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50
aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCogZ3JhZGllbnQ7
Ci0gICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0gICAgICAgICAg
ICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAgICAgIGdyYWRp
ZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAgICAgICAgZG8g
ewotICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWlu
dGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBz
X2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZs
b2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9j
a1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0g
JiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6
Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFsw
XSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9y
bWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBz
X2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5k
b20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNT
RVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07Ci0gICAgICAg
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0
OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
WzBdOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tT
aXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6
OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lY
LCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0aXRjaFRpbGVz
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUu
d2lkdGgoKTsKLSAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAg
QVNTRVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOwotCi0gICAgLy8gV2hlbiBz
dGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0
ZWQKLSAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgot
ICAgIGlmIChiYXNlRnJlcXVlbmN5WCkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBm
bG9vcmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwotICAgICAgICBm
bG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8g
dGlsZVdpZHRoOwotICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRp
dmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lY
IC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQotICAgICAg
ICAgICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKLSAgICB9Ci0gICAgaWYgKGJh
c2VGcmVxdWVuY3lZKSB7Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxl
SGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgZmxvYXQgaGln
aEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVp
Z2h0OwotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLQotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICBz
dGl0Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKLSAg
ICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7Ci0g
ICAgc3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZ
KTsKLSAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVp
Z2h0OwotCi0gICAgcmV0dXJuIHN0aXRjaERhdGE7Ci19Ci0KLS8vIFRoaXMgaXMgdGFrZW4gMTox
IGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNm
ZVR1cmJ1bGVuY2VFbGVtZW50LgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVu
Y2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRj
aERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAot
ewotICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKLSAgICAgICAgaW50IGluZGV4OyAvLyBieDAs
IGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5
MSBpbiB0aGUgc3BlYyB0ZXh0LgotICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAg
aW4gdGhlIHNwZWMgdGV4dC4KLQotICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVu
dCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOwotICAg
ICAgICAgICAgLy8gIGJ4MCA9IChpbnQpdDsKLSAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsK
LSAgICAgICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0OwotICAgICAgICAgICAgZmxvYXQgcG9z
aXRpb24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOwotICAgICAgICAgICAgaW5kZXggPSBz
dGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKLSAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4
ICsgMTsKLSAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBY
KQotICAgICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAg
ICAgIGlmIChpbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXpl
OwotCi0gICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAg
ICAgICAgICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYg
KG5leHRJbmRleCA+PSB3cmFwU2l6ZSkKLSAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6
ZTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZl
Y3Rvci54KCkpOwotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7Ci0K
LSAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4K
LSAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERh
dGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwotICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRj
aERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKLSAgICB9Ci0KLSAgICAvLyBieDAgJj0g
Qk07Ci0gICAgLy8gYngxICY9IEJNOwotICAgIC8vIGJ5MCAmPSBCTTsKLSAgICAvLyBieTEgJj0g
Qk07Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWC5uZXh0SW5k
ZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAg
IG5vaXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0KLSAgICAvLyBpID0gdUxhdHRpY2VT
ZWxlY3RvcltieDBdOwotICAgIC8vIGogPSB1TGF0dGljZVNlbGVjdG9yW2J4MV07Ci0gICAgaW50
IGxhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLmluZGV4
XTsKLSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3Jbbm9pc2VYLm5leHRJbmRleF07Ci0KLSAgICAvLyBzeCA9IGRvdWJsZShzX2N1cnZlKHJ4MCkp
OwotICAgIC8vIHN5ID0gZG91YmxlKHNfY3VydmUocnkwKSk7Ci0gICAgZmxvYXQgc3ggPSBzbW9v
dGhDdXJ2ZShub2lzZVguZnJhY3Rpb24pOwotICAgIGZsb2F0IHN5ID0gc21vb3RoQ3VydmUobm9p
c2VZLmZyYWN0aW9uKTsKLQotICAgIGF1dG8gbm9pc2VGb3JDaGFubmVsID0gWyZdKGludCBjaGFu
bmVsKSB7Ci0gICAgICAgIC8vIGIwMCA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MF0KLSAgICAg
ICAgaW50IGIwMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsg
bm9pc2VZLmluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVti
MDBdOyB1ID0gcngwICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBx
ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMF07Ci0gICAgICAgIGZsb2F0IHUg
PSBub2lzZVguZnJhY3Rpb24gKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLQotICAg
ICAgICAvLyBiMTAgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTBdOwotICAgICAgICBpbnQgYjEw
ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZ
LmluZGV4XTsKLSAgICAgICAgLy8gcngxID0gcngwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZH
cmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTBdOyB2ID0gcngxICogcVswXSArIHJ5MCAqIHFbMV07
Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjEwXTsKLSAgICAg
ICAgZmxvYXQgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyBub2lzZVkuZnJhY3Rp
b24gKiBxWzFdOwotICAgICAgICAvLyBhID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0
IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyBiMDEgPSB1
TGF0dGljZVNlbGVjdG9yW2kgKyBieTFdOwotICAgICAgICBpbnQgYjAxID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAg
ICAgLy8gcnkxID0gcnkwIC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JD
aGFubmVsXVtiMDFdOyB1ID0gcngwICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAxXTsKLSAgICAgICAgdSA9IG5vaXNlWC5m
cmFjdGlvbiAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotCi0gICAgICAg
IC8vIGIxMSA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MV07Ci0gICAgICAgIGludCBiMTEgPSBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubmV4
dEluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTFdOyB2
ID0gcngxICogcVswXSArIHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbY2hhbm5lbF1bYjExXTsKLSAgICAgICAgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAq
IHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOwotICAgICAgICAvLyBiID0gbGVy
cChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1
LCB2KTsKLQotICAgICAgICAvLyByZXR1cm4gbGVycChzeSwgYSwgYik7Ci0gICAgICAgIHJldHVy
biBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsK
LSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDApLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMSks
Ci0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgyKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDMp
Ci0gICAgfTsKLX0KLQotLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwj
ZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNv
bXBvbmVudHMuCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1
aW50OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3RhdGljIGlu
bGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50
cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCitGbG9h
dFJlY3QgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6
Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMF0gKiAyNTUp
LCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4o
ZmxvYXRDb21wb25lbnRzWzFdICogMjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1
aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1syXSAqIDI1NSksIDAsIDI1
NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENv
bXBvbmVudHNbM10gKiAyNTUpLCAwLCAyNTUpLAotICAgIH07Ci19Ci0KLUNvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBv
aW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERh
dGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIENvbG9yQ29tcG9uZW50
czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0OwotICAgIEZsb2F0UG9pbnQgbm9p
c2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55
KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOwotICAgIGZsb2F0IHJhdGlvID0gMTsK
LSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZl
KSB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkK
LSAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5n
RGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87Ci0KLSAgICAgICAgbm9p
c2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9pc2VWZWN0b3Iu
c2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsKLQotICAgICAg
ICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1
ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBh
bmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0
cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOwotICAg
ICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJs
aW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAg
ICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSAr
IDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5j
ZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0g
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7Ci0KLSAgICByZXR1cm4gdG9J
bnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOwotfQotCi12
b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJh
eSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFy
dFkpOwotCi0gICAgSW50UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgIGZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9h
dFBvaW50IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwotICAgIGludCBpbmRl
eE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwot
ICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnNlVHJhbnNmcm9tID0gZmlsdGVyKCkuYWJzb2x1dGVU
cmFuc2Zvcm0oKS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpOwotCi0gICAg
Zm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBwb2ludC5zZXRZ
KHBvaW50LnkoKSArIDEpOwotICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwot
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsK
LSAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50IGxvY2FsUG9pbnQgPSBpbnZlcnNlVHJhbnNmcm9tLm1hcFBvaW50KHBvaW50KTsKLSAg
ICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
cGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKLSAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxD
aGFubmVsKTsKLSAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJl
Z2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5m
aWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdE
YXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRl
cnMtPmVuZFkpOwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKLXsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0
ZXJTY2FsZSgpKTsKLQotICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEludFNpemUgdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKS5zaXplKCkpOwotCi0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBtX2Jhc2VG
cmVxdWVuY3lYOwotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZID0gbV9iYXNlRnJlcXVlbmN5WTsK
LSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGEgPSBjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBi
YXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVkpOwotCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YShtX3NlZWQsIHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVkp
OwotICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOwotCi0gICAgYXV0byBhcmVhID0gcmVzdWx0
U2l6ZS5hcmVhKCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnQgaGVpZ2h0ID0gcmVzdWx0U2l6ZS5oZWlnaHQoKTsKLQotICAgIHVuc2ln
bmVkIG1heE51bVRocmVhZHMgPSBoZWlnaHQgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJl
YWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIHNfbWluaW1hbFJlY3REaW1lbnNp
b24sIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewot
ICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxGaWxsUmVnaW9uUGFyYW1ldGVycz4gcGFyYWxsZWxK
b2JzKCZXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIsIG9wdGltYWxUaHJl
YWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAgICAg
ICBhdXRvIG51bUpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlm
IChudW1Kb2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJzdGVw
WSItc2l6ZWQgam9icywgZGlzdHJpYnV0aW5nIHRoZSBleHRyYSByb3dzIGludG8gdGhlIGZpcnN0
ICJqb2JzV2l0aEV4dHJhIiBqb2JzLgotICAgICAgICAgICAgdW5zaWduZWQgc3RlcFkgPSBoZWln
aHQgLyBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgam9ic1dpdGhFeHRyYSA9IGhlaWdo
dCAlIG51bUpvYnM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFydFkgPSAwOwotCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0
ZXIoaSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgICAg
ICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKLSAgICAgICAgICAgICAgICBw
YXJhbXMuc3RhcnRZID0gc3RhcnRZOwotCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgam9iSGVp
Z2h0ID0gKGkgPCBqb2JzV2l0aEV4dHJhKSA/IHN0ZXBZICsgMSA6IHN0ZXBZOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5lbmRZID0gcGFyYW1zLnN0YXJ0WSArIGpvYkhlaWdodDsKLSAgICAgICAg
ICAgICAgICBzdGFydFkgKz0gam9iSGVpZ2h0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhl
cmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBz
bWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIHJldHVybiBnZW9tZXRyeS5tYXhQcmltaXRp
dmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC00NzYs
MTUgKzY4LDE0IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBUdXJidWxlbmNlVHlwZSB0eXBlKQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYg
RkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVR1cmJ1
bGVuY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVHVyYnVsZW5jZSI7
Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRh
dGlvbik7Ci0gICAgdHMgPDwgIiB0eXBlPVwiIiA8PCB0eXBlKCkgPDwgIlwiICIKLSAgICAgICA8
PCAiYmFzZUZyZXF1ZW5jeT1cIiIgPDwgYmFzZUZyZXF1ZW5jeVgoKSA8PCAiLCAiIDw8IGJhc2VG
cmVxdWVuY3lZKCkgPDwgIlwiICIKLSAgICAgICA8PCAic2VlZD1cIiIgPDwgc2VlZCgpIDw8ICJc
IiAiCi0gICAgICAgPDwgIm51bU9jdGF2ZXM9XCIiIDw8IG51bU9jdGF2ZXMoKSA8PCAiXCIgIgot
ICAgICAgIDw8ICJzdGl0Y2hUaWxlcz1cIiIgPDwgc3RpdGNoVGlsZXMoKSA8PCAiXCJdXG4iOwor
ICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgbV90dXJidWxlbmNlVHlwZSA8PCAiXCIgIgorICAgICAg
IDw8ICJiYXNlRnJlcXVlbmN5PVwiIiA8PCBtX2Jhc2VGcmVxdWVuY3lYIDw8ICIsICIgPDwgbV9i
YXNlRnJlcXVlbmN5WSA8PCAiXCIgIgorICAgICAgIDw8ICJzZWVkPVwiIiA8PCBtX3NlZWQgPDwg
IlwiICIKKyAgICAgICA8PCAibnVtT2N0YXZlcz1cIiIgPDwgbV9udW1PY3RhdmVzIDw8ICJcIiAi
CisgICAgICAgPDwgInN0aXRjaFRpbGVzPVwiIiA8PCBtX3N0aXRjaFRpbGVzIDw8ICJcIl1cbiI7
CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5
MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi5kMDZiZWQxYmVjZDllMDVlNzYzMGQzZGFmMTQ1MTdm
N2M2NTQ0NzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0j
aW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsOTEgKzM2
LDI1IEBAIGVudW0gY2xhc3MgVHVyYnVsZW5jZVR5cGUgewogCiBjbGFzcyBGRVR1cmJ1bGVuY2Ug
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVHVyYnVs
ZW5jZT4gY3JlYXRlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwg
ZmxvYXQsIGJvb2wpOworICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoVHVyYnVs
ZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50
IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpOwogCi0gICAgVHVyYnVs
ZW5jZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIGJvb2wgc2V0VHlw
ZShUdXJidWxlbmNlVHlwZSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVg7IH0KLSAgICBib29sIHNldEJhc2VGcmVxdWVuY3lYKGZs
b2F0KTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZKCkgY29uc3QgeyByZXR1cm4gbV9iYXNl
RnJlcXVlbmN5WTsgfQotICAgIGJvb2wgc2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQpOwotCi0gICAg
ZmxvYXQgc2VlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlZDsgfQotICAgIGJvb2wgc2V0U2VlZChm
bG9hdCk7Ci0KLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtT2N0YXZl
czsgfQotICAgIGJvb2wgc2V0TnVtT2N0YXZlcyhpbnQpOwotCi0gICAgYm9vbCBzdGl0Y2hUaWxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RpdGNoVGlsZXM7IH0KLSAgICBib29sIHNldFN0aXRjaFRp
bGVzKGJvb2wpOworICAgIHZvaWQgc2V0VHVyYnVsZW5jZVR5cGUoVHVyYnVsZW5jZVR5cGUgdHVy
YnVsZW5jZVR5cGUpIHsgbV90dXJidWxlbmNlVHlwZSA9IHR1cmJ1bGVuY2VUeXBlOyB9CisgICAg
dm9pZCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkgeyBtX2Jhc2VGcmVx
dWVuY3lYID0gYmFzZUZyZXF1ZW5jeVg7IH0KKyAgICB2b2lkIHNldEJhc2VGcmVxdWVuY3lZKGZs
b2F0IGJhc2VGcmVxdWVuY3lZKSB7IG1fYmFzZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsg
fQorICAgIHZvaWQgc2V0TnVtT2N0YXZlcyhpbnQgbnVtT2N0YXZlcykgeyBtX251bU9jdGF2ZXMg
PSBudW1PY3RhdmVzOyB9CisgICAgdm9pZCBzZXRTZWVkKGZsb2F0IHNlZWQpIHsgbV9zZWVkID0g
c2VlZDsgfQorICAgIHZvaWQgc2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2hUaWxlcykgeyBtX3N0
aXRjaFRpbGVzID0gc3RpdGNoVGlsZXM7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qg
aW50IHNfYmxvY2tTaXplID0gMjU2OwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja01hc2sg
PSBzX2Jsb2NrU2l6ZSAtIDE7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3RE
aW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFs
bGVsIGpvYnMuCi0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgUGFpbnRpbmdE
YXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUsIGZsb2F0
IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgICAgIDogc2Vl
ZChwYWludGluZ1NlZWQpCi0gICAgICAgICAgICAsIGZpbHRlclNpemUocGFpbnRpbmdTaXplKQot
ICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgICAg
ICwgYmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgIHsKLSAgICAgICAgfQot
Ci0gICAgICAgIGxvbmcgc2VlZDsKLSAgICAgICAgaW50IGxhdHRpY2VTZWxlY3RvclsyICogc19i
bG9ja1NpemUgKyAyXTsKLSAgICAgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXpl
ICsgMl1bMl07Ci0gICAgICAgIEludFNpemUgZmlsdGVyU2l6ZTsKLSAgICAgICAgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVg7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZOwotCi0gICAgICAgIGlu
bGluZSBsb25nIHJhbmRvbSgpOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgU3RpdGNoRGF0YSB7Ci0g
ICAgICAgIFN0aXRjaERhdGEoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgaW50IHdpZHRoIHsgMCB9
OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hpbmcuCi0gICAgICAg
IGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgotICAgICAgICBpbnQg
aGVpZ2h0IHsgMCB9OwotICAgICAgICBpbnQgd3JhcFkgeyAwIH07Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQot
ICAgIHN0cnVjdCBGaWxsUmVnaW9uUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFVHVyYnVsZW5jZSog
ZmlsdGVyOwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKLSAgICAgICAg
UGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0
YTsKLSAgICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqKTsKLQot
ICAgIEZFVHVyYnVsZW5jZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBp
bnQsIGZsb2F0LCBib29sKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVUdXJidWxlbmNlIjsgfQorICAgIEZFVHVyYnVsZW5jZShUdXJidWxl
bmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQg
bnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0
UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKElu
dFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVu
Y3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZh
bHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25z
dDsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmls
dGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBUdXJidWxlbmNlVHlw
ZSBtX3R5cGU7CisgICAgVHVyYnVsZW5jZVR5cGUgbV90dXJidWxlbmNlVHlwZTsKICAgICBmbG9h
dCBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVk7CiAgICAgaW50
IG1fbnVtT2N0YXZlczsKQEAgLTEzMiwzICs2NCw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVHVy
YnVsZW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDg5M2ViNjcyZTgyODljMTFjMGUwZTJhOTBlNDll
OTQyNWRmOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZpbHRlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVk
ZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp0dXBsZTxS
ZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IEZpbHRlcjo6YXBwbHkoSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYgZ2VvbWV0cnkp
IGNvbnN0Cit7CisgICAgRmlsdGVySW1hZ2VWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyUmVzdWx0
IHJlc3VsdChyZW5kZXJpbmdNb2RlKCkpOworCisgICAgaWYgKHNvdXJjZUltYWdlKSB7CisgICAg
ICAgIGF1dG8gaW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGdlb21ldHJ5LT5maWx0ZXJSZWdp
b24oKSwgZ2VvbWV0cnktPnNvdXJjZUltYWdlUmVjdCgpLCB7ICpzb3VyY2VJbWFnZSB9KTsKKyAg
ICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHN0YWNr
LmFwcGVuZChpbWFnZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBpZiAoIWFwcGx5
KHJlc3VsdCwgc3RhY2ssICpnZW9tZXRyeSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBB
U1NFUlQoc3RhY2suc2l6ZSgpID09IDEpOworICAgIGF1dG8gaW1hZ2UgPSBzdGFjay50YWtlTGFz
dCgpOworICAgIGltYWdlLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkpOworICAgIHJldHVybiB7IGltYWdlLT5pbWFnZUJ1ZmZlcigpLCBnZW9tZXRy
eS0+Y29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhpbWFnZS0+aW1hZ2VSZWN0KCkpIH07Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGEyZDk5NzkzYjBkYjIyNThiYzQ3NmRk
Y2MyOWMwY2UyNjExMGJjMWYuLmRlMGVlNDZmNTFjNGEyZDIxZDU2ZmYyMWRlODdmOTVlZmY0ZWMy
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw1OSArMjEs
MjIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
IkZpbHRlckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmlsdGVy
RWZmZWN0OworY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKKyAgICB1c2lu
ZyBGaWx0ZXJGdW5jdGlvbjo6YXBwbHk7CiAKLWNsYXNzIEZpbHRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEZpbHRlcj4gewogcHVibGljOgotICAgIEZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtLCBmbG9hdCBmaWx0ZXJTY2FsZSA9IDEpCi0gICAgICAgIDogbV9h
YnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAgICAgLCBtX2ZpbHRlclNj
YWxlKGZpbHRlclNjYWxlKQotICAgIHsgfQotICAgIHZpcnR1YWwgfkZpbHRlcigpID0gZGVmYXVs
dDsKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIHZvaWQgc2V0U291cmNl
SW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2Ug
PSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsgfQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgp
IHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KLQotICAgIEZsb2F0U2l6ZSBmaWx0ZXJS
ZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgdm9p
ZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikg
eyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9Ci0KLSAgICBmbG9hdCBm
aWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7IH0KLSAgICB2b2lkIHNl
dEZpbHRlclNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBzY2FsZTsgfQotCi0g
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07IH0KLQotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQotICAgIHZvaWQgc2V0UmVu
ZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJpbmdNb2Rl
ID0gcmVuZGVyaW5nTW9kZTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7IHJldHVybiBzaXplICogbV9maWx0
ZXJSZXNvbHV0aW9uOyB9Ci0gICAgCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VS
ZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgp
IGNvbnN0ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1
ZmZlcj4sIEZsb2F0UmVjdD4gYXBwbHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBzdGQ6OnVu
aXF1ZV9wdHI8RmlsdGVyR2VvbWV0cnk+JiYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhw
bGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAg
OiBtX2ZpbHRlclJlc29sdXRpb24oZmlsdGVyUmVzb2x1dGlvbikKLSAgICB7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKLSAgICBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRl
VHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07Cisg
ICAgdXNpbmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4NjcwMTFj
NDk0OTkyNWI3YWVmODNkNjZiZTAwNzA3MTU5YjczYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJC
b3VuZGFyeVNldCB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBGbGFncyB7CisgICAgICAgIEhh
c1ggICAgICA9IDEgPDwgMCwKKyAgICAgICAgSGFzWSAgICAgID0gMSA8PCAxLAorICAgICAgICBI
YXNXaWR0aCAgPSAxIDw8IDIsCisgICAgICAgIEhhc0hlaWdodCA9IDEgPDwgMworICAgIH07CisK
KyAgICBGaWx0ZXJCb3VuZGFyeVNldCgpID0gZGVmYXVsdDsKKworICAgIEZpbHRlckJvdW5kYXJ5
U2V0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRhcmllcywgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykK
KyAgICAgICAgOiBtX2JvdW5kYXJpZXMoYm91bmRhcmllcykKKyAgICAgICAgLCBtX2ZsYWdzKGZs
YWdzKQorICAgIHsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNYKSkKKyAgICAg
ICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMueCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1kpKQorICAgICAgICAgICAg
cmV0dXJuIG1fYm91bmRhcmllcy55KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gd2lkdGgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1dpZHRoKSkKKyAgICAgICAgICAg
IHJldHVybiBtX2JvdW5kYXJpZXMud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBoZWlnaHQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc0hlaWdodCkpCisgICAg
ICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLmhlaWdodCgpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGFyaWVz
OworICAgIE9wdGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisgICAgCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVj
N2Y2M2U0Y2M5MjdkYjEwOC4uMGIzMjViNmY4OTA5NWE0ZDMzOGIxMzczNGE0MWEyNjYxYmI0NDI1
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjQsNjYwICsyNCwxMDkgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNs
dWRlICJGaWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5j
bHVkZSA8YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRlciwgVHlwZSB0eXBl
KQotICAgIDogbV9maWx0ZXIoZmlsdGVyKQotICAgICwgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGUo
dHlwZSkKLXsKLX0KLQotRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkgPSBkZWZhdWx0Owot
Ci12b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRS
ZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29u
c3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIG1fYWJzb2x1
dGVQYWludFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0
RWZmZWN0cykKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlZmZlY3QtPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotfQorICAgIC8v
IFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVm
ZmVjdHMtMS8jRmlsdGVyUHJpbWl0aXZlU3ViUmVnaW9uLgorICAgIEZsb2F0UmVjdCBkZWZhdWx0
UHJpbWl0aXZlU3VicmVnaW9uOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFp
bnRSZWN0KCkKLXsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJy
ZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAg
ICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhF
ZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRl
KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmls
dGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJT
cGFjZVBvaW50KSBjb25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IG1hcFBv
aW50KHVzZXJTcGFjZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0
ZVVuY2xpcHBlZFN1YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoLW1fYWJzb2x1
dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7Ci19Ci0K
LUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
Y29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBsb2NhdGlv
biA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlvbi5tb3ZlQnko
LWVmZmVjdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAot
ewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAg
SW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2Fs
ZSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2Fs
ZShzY2FsZSkudHJhbnNsYXRlKC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAg
IHJldHVybiB0cmFuc2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRl
ckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBG
RVRpbGUsIEZFVHVyYnVsZW5jZSwgRkVGbG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRh
a2UgdGhlIGZpbHRlciByZWdpb24gYXMgdW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVn
aW9uOwotICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0
cygpLnNpemUoKSkgewotICAgICAgICBzdWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlu
cHV0UHJpbWl0aXZlU3VicmVnaW9uID0gaW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJp
bWl0aXZlU3VicmVnaW9uKTsKLSAgICAgICAgfQorICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQn
cyBzdWJyZWdpb24gZm9yIDxmZVRpbGU+LgorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0
eXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24u
dW5pdGUoaW5wdXQtPnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9IGVsc2UKLSAgICAgICAg
c3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8v
IEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0
YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAg
ICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAg
ICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAg
YXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQot
ICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRo
KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAg
IGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVz
LmhlaWdodCgpKTsKLQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24p
OwotCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNm
b3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1f
ZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShm
aWx0ZXJSZXNvbHV0aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdl
IGNhbiB1c2UgaXQgdG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVm
ZmVyIGNvb3JkaW5hdGVzLgotICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29s
dXRlU3VicmVnaW9uKTsKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21l
dHJ5LmZpbHRlclJlZ2lvbigpOwogCi0gICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRv
IHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24g
PSBtX2ZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lv
bi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNl
Y3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVT
dWJyZWdpb247CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAg
ICByZXR1cm4gc3VicmVnaW9uOwotfQorICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRYKGJvdW5k
YXJ5U2V0LngoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLngoKSkpOworICAg
IHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRZKGJvdW5kYXJ5U2V0LnkoKS52YWx1ZV9vcihkZWZhdWx0
UHJpbWl0aXZlU3VicmVnaW9uLnkoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRXaWR0
aChib3VuZGFyeVNldC53aWR0aCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24u
d2lkdGgoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcnlTZXQu
aGVpZ2h0KCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi5oZWlnaHQoKSkpOwog
Ci1GaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVy
KSBjb25zdAotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8
IG1faW5wdXRFZmZlY3RzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51
bWJlcikuZ2V0KCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBG
aWx0ZXJFZmZlY3QqZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZl
Y3RzKQotewotICAgIGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IGVmZmVjdC0+bnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlu
cHV0RWZmZWN0KGkpOwotICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0g
ICAgfQotICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVy
RWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0
PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZl
Y3RzKHRoaXMsIGFsbEVmZmVjdHMpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9
CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0Ojpj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3QKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1f
aW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpOwotICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAg
aWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRy
YXdpbmdSZWN0LnVuaXRlKGlucHV0LT5pbWFnZVJlY3QoKSk7CiAKLSAgICAgICAgLy8gQ29udmVy
dCBpbnB1dCByZXN1bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAg
ICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKLSAgICB9Ci0KLSAgICBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVy
YXRpbmdDb2xvclNwYWNlKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFw
cGx5KCk6XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmll
cyA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xp
cHBlZFN1YnJlZ2lvbiA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBh
aW50UmVjdCA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxu
ICBmaWx0ZXIgc2NhbGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpIDw8ICJcbiAgZmlsdGVy
IHJlc29sdXRpb24gIiA8PCBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgaWYg
KG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVj
dChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8v
IEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVh
cmxpZXIuCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisgICAgcmV0dXJuIGdlb21ldHJ5
LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlckltYWdlJiBvdXRw
dXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25zdAogewotICAgIC8v
IE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNh
bm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGltYWdlQXJyYXkgPSBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGlt
YWdlQXJyYXkuZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5s
ZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5k
IGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0K
LSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGgg
Pj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVs
QXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3Jl
bWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5Q
aXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52
YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxb
M10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVu
UGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVl
blBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBp
eGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4
ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4
ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7
Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhcHBseUNvcmVJbWFnZShvdXRw
dXQsIGlucHV0cywgZ2VvbWV0cnkpOwogI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4
ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hl
Y2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQot
ICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0
dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7
Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50
IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkg
ewotICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhl
bERhdGEgPSBhOwotICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gSW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAg
cmV0dXJuIGFwcGx5U29mdHdhcmUob3V0cHV0LCBpbnB1dHMsIGdlb21ldHJ5KTsKIH0KIAotdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseShG
aWx0ZXJSZXN1bHQmIHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9
IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsK
LSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1
cm4gYXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnksIEZpbHRlckJvdW5kYXJ5U2V0KCkpOwog
fQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKK2Jvb2wgRmls
dGVyRWZmZWN0OjphcHBseShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5k
YXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywg
cmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4g
Q2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBp
ZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBz
aXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJl
c3VsdHNSZWN1cnNpdmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQoKQotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwg
IkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdl
QnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJS
ZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gaW5wdXRzID0gdGFrZUlucHV0cyhzdGFjayk7
CiAKLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5n
TW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4
ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJl
c3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJy
YXk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0
aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0
LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2Nh
bGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4o
KSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBp
eGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQot
Ci12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2Fs
ZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVk
UGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRo
ZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVy
ZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJl
Y3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
IHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAg
ICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0K
LSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGgg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0
Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
IHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERl
c3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2lu
OwotICAgICAgICB4T3JpZ2luID0gMDsKKyAgICBpZiAoYXV0byBpbWFnZSA9IHJlc3VsdC5pbWFn
ZXMoKS5nZXQoeyAqdGhpcyB9KSkgeworICAgICAgICBzdGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3Qu
bWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAg
IHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKIAotICAgIGludCB5T3JpZ2luID0gc2Nh
bGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsK
LSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQot
ICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQ
YWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJy
ZWdpb24oaW5wdXRzLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOworICAgIGlmIChwcmltaXRpdmVT
dWJyZWdpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgc2l6
ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0g
c2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQ
YWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRl
c3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3Qp
ICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAo
KHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisgICAg
YXV0byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJp
bWl0aXZlU3VicmVnaW9uKTsKKyAgICBhdXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gZ2VvbWV0cnku
Y29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhpbWFnZVJlY3QpOwogCi0gICAgd2hpbGUgKHlP
cmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQ
aXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2Fu
bGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsr
eU9yaWdpbjsKLSAgICB9Ci19CisgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0LmlzRW1wdHkoKSB8
fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1zdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlp
bmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Cisg
ICAgYXV0byBpc0FscGhhSW1hZ2UgPSB0aGlzLT5pc0FscGhhSW1hZ2UoaW5wdXRzKTsKKyAgICBh
dXRvIGltYWdlQ29sb3JTcGFjZSA9IHRoaXMtPmltYWdlQ29sb3JTcGFjZShpbnB1dHMpOwogCi0g
ICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMg
PSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJj
ZS5kYXRhKCkpOworICAgIGF1dG8gaW1hZ2UgPSByZXN1bHQuY3JlYXRlRmlsdGVySW1hZ2UocHJp
bWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgYWJzb2x1dGVJbWFnZVJl
Y3Quc2l6ZSgpLCBpbWFnZUNvbG9yU3BhY2UpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0g
aW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7
Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHlQbGF0Zm9ybSgpOiIKKyAgICAgICAgPDwgIlxu
ICBwcmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwg
IlxuICBtYXhQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBnZW9tZXRyeS5tYXhQcmltaXRpdmVTdWJy
ZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICAgICA8PCAiXG4gIGltYWdlUmVjdCAiIDw8
IGltYWdlUmVjdAorICAgICAgICA8PCAiXG4gIGFic29sdXRlSW1hZ2VnUmVjdCAiIDw8IGFic29s
dXRlSW1hZ2VSZWN0CisgICAgICAgIDw8ICJcbiAgZ2VvbWV0cnkgcmVzb2x1dGlvbiAiIDw8IGdl
b21ldHJ5LnJlc29sdXRpb24oKSk7CiAKLSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4
ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhf
dCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBl
bmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0g
ICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Cisg
ICAgaWYgKCFhcHBseVBsYXRmb3JtKCppbWFnZSwgaW5wdXRzLCBnZW9tZXRyeSwgcmVzdWx0LnJl
bmRlcmluZ01vZGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHdoaWxlIChzb3Vy
Y2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50
WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhh
IC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3Rh
dGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUm
IGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMg
PSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBz
cmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3Qu
aGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRl
czsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5k
YXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29t
cG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VD
b21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCog
ZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNv
dXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25l
bnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBh
bHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8
aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJd
KSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0g
PSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOwotICAgICAgICB9
Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJj
ZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAg
IH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKLXsKLSAgICAv
LyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2Ug
Y29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgotCi0gICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsK
LSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0
aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3Rv
cmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmls
dGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwot
ICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGJ1ZmZl
ci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0
dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVm
ZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFscGhhRm9ybWF0KTsK
LX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1h
Z2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRD
b2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCi17Ci0gICAgLy8gRklY
TUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZl
cnNpb24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGgg
dGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmls
dGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBp
ZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBz
dGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgcmVzdWx0LmltYWdlcygpLmFkZCh7ICp0aGlz
IH0sIFJlZjxGaWx0ZXJJbWFnZT4oKmltYWdlKSk7CiAKLSAgICAvLyBDb2xvciBzcGFjZSBjb252
ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVm
ZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9y
U3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQor
VGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAg
ICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5k
IHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29u
dmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsICptX2ltYWdlQnVmZmVyUmVz
dWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0sIG91dHB1dEZv
cm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0
aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4
ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBk
YXRhIHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0
aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZm
ZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxCdWZmZXIpOwotICAgIGlmICghY29udmVy
dGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252
ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7
Ci0gICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGll
ZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBi
dWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09
IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0
LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAg
ICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNj
YWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBB
U1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6
OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsK
LSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNv
cHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNw
YWNlKQotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBi
dWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAg
ICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZl
ciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFn
ZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252
ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdl
QnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAg
ICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07
Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAg
ICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXpl
KSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQo
KS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1h
dCwgaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5
aW5nQWxwaGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNl
KSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Ci19Ci0KLUltYWdlQnVm
ZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKLXsKLSAgICBMT0co
RmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHgl
ZCIsIGZpbHRlck5hbWUoKSwgdGhpcywgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkud2lkdGgo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgLy8gT25seSBv
bmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAg
ICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9k
ZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9y
bWF0OjpCR1JBOCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0K
LXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAl
cCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0K
LSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFz
UmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAg
ICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRD
b2xvclNwYWNlIH07Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVy
Ojp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVy
cywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBm
aWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxs
b3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50
U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0
U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwot
ICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotYm9vbCBGaWx0ZXJF
ZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lm
IFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVk
IHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBv
bmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRp
ZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVs
YXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVz
dWx0Q29sb3JTcGFjZSgpICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQotICAgIC8v
IEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1D
RwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotICAgIHJldHVybiBm
YWxzZTsKLSNlbmRpZgotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3Rt
ZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBX
ZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252
ZXJzaW9uIGJ5IGFkZGluZwotICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZv
ciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KLSAgICBpbWFnZUJ1ZmZlclJlc3VsdCgp
LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLQotICAgIG1f
cmVzdWx0Q29sb3JTcGFjZSA9IGRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLQotICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0jZW5kaWYKLX0KLQotVGV4dFN0cmVhbSYgRmlsdGVy
RWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgZHVtcCB0aGUgc3ViUmVnaW9ucyBvZiB0aGUgZmlsdGVyIHByaW1pdGl2ZXMgaGVyZSBs
YXRlci4gVGhpcyBpc24ndAotICAgIC8vIHBvc3NpYmxlIGF0IHRoZSBtb21lbnQsIGJlY2F1c2Ug
d2UgbmVlZCBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9ucyBmcm9tIHRoZSB0YXJnZXQgb2JqZWN0
LgotICAgIAotICAgIGlmIChyZXByZXNlbnRhdGlvblR5cGUgPT0gUmVwcmVzZW50YXRpb25UeXBl
OjpEZWJ1Z2dpbmcpIHsKKyAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gRmlsdGVyUmVwcmVzZW50
YXRpb246OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2UiLCBtX2Fs
cGhhSW1hZ2UpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBjb2xvcnNwYWNl
IiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN1
bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7CiAgICAgICAgIHRzIDw8ICJcbiIg
PDwgaW5kZW50OwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyKQotewotICAg
IC8vIFVzZSBhIG5ldyBzdHJlYW0gYmVjYXVzZSB3ZSB3YW50IG11bHRpbGluZSBtb2RlIGZvciBs
b2dnaW5nIGZpbHRlcnMuCi0gICAgVGV4dFN0cmVhbSBmaWx0ZXJTdHJlYW07Ci0gICAgZmlsdGVy
LmV4dGVybmFsUmVwcmVzZW50YXRpb24oZmlsdGVyU3RyZWFtLCBGaWx0ZXJFZmZlY3Q6OlJlcHJl
c2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKTsKLSAgICAKLSAgICByZXR1cm4gdHMgPDwgZmlsdGVy
U3RyZWFtLnJlbGVhc2UoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKaW5kZXggMTJkZWQyNjVhNjU1YzM3ZTc3ZTJjZjA1YjUyNzczZjJiOTZiNDcxYy4uMmFkNmM2
MjZkMGE2ZDg3OGU4YmRkNmVhOTM2NTUyMDdhMTYxN2Q5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0y
MiwyMzcgKzIyLDU4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1
ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7
Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRl
cjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi10eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwotCi1lbnVtIEZp
bHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3duLAotICAgIEZpbHRl
ckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwKLSAgICBGaWx0ZXJF
ZmZlY3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldDsKIAotY2xh
c3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFz
cyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIGVu
dW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JN
YXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0g
ICAgICAgIENvbnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAg
IERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0g
ICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAot
ICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAg
ICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAotICAgICAgICBUdXJidWxlbmNl
LAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0g
ICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7Ci0g
ICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJl
bXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2
b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9
IHN0ZDo6bnVsbG9wdCk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7
IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQotICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3Qo
dW5zaWduZWQpIGNvbnN0OwotICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29u
c3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxO
dW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBpbWFnZUNvbG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBj
b25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KICAgICAKLSAgICBpbmxpbmUg
Ym9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBu
ZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlz
IG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJS
ZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAg
ICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIH0KLQotICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICBJ
bnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5wdXRzLgotICAgIEZsb2F0UmVjdCBk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIC8vIFNvbGlkIGJsYWNr
IGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KLSAgICBib29sIGlzQWxwaGFJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQotICAgIHZvaWQgc2V0SXNBbHBoYUlt
YWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2UgPSBhbHBoYUltYWdlOyB9Ci0KLSAg
ICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVBh
aW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYg
YWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRS
ZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAK
LQotICAgIHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxz
LCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAg
IC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBm
aWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRo
bWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4K
LSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLQotICAgIHZpcnR1
YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgeyByZXR1cm4gRmls
dGVyRWZmZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRz
KCkgY29uc3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0KLSAgICBlbnVtIGNsYXNzIFJlcHJl
c2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwotICAgIHZpcnR1YWwgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7
Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgU1ZHIHNwZWNpZmljIGFuZCB3
aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgLy8gU2Vl
IGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2MTQuCi0gICAg
Ym9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgdm9pZCBzZXRIYXNYKGJv
b2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzWSgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShib29sIHZhbHVlKSB7IG1faGFzWSA9
IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNXaWR0
aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dpZHRoID0gdmFs
dWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNIZWlnaHQ7
IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0ID0gdmFs
dWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJu
IG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0RWZmZWN0Qm91bmRhcmllcyhjb25z
dCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZlY3RCb3VuZGFyaWVzID0gZWZm
ZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJy
ZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24g
PSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZl
cihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBlIGZpbHRlckVmZmVjdENsYXNzVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9Ci0KLSAgICBGaWx0
ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0gICAgY29uc3QgRmlsdGVyJiBmaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0gICAgYm9vbCBjbGlwc1RvQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9Ci0gICAgdm9pZCBzZXRDbGlwc1Rv
Qm91bmRzKGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRzID0gdmFsdWU7IH0KLQogICAgIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVy
YXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkg
eyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0gICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1
bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fcmVzdWx0Q29sb3JTcGFj
ZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwotICAgIAotICAg
IHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVz
KHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVk
RmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Ci0gICAg
fQorICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Q7
CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOworICAgIHVzaW5nIEZpbHRlckZ1
bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbjsKICAgICAKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29uc3Q7CiAKLSAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBv
biB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVh
Y2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVp
cmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdDsKIAotICAgIC8vIElmIGEgcHJlLW11bHRpcGxpZWQgaW1hZ2UsIGNo
ZWNrIGV2ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQgY29ycmVjdCBpZiBuZWNlc3NhcnkuCi0g
ICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOworICAgIHZpcnR1YWwgYm9v
bCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgdm9pZCBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICB2aXJ0dWFs
IEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7
IHJldHVybiB7IH07IH0KIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgPSAwOwotCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVz
dGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5
Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4
ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVy
Jik7CisgICAgdmlydHVhbCBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwg
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBj
b25zdCA9IDA7CiAgICAgCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIGFw
cGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAotICAg
IEZpbHRlciYgbV9maWx0ZXI7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3Rz
OwotCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0K
LSAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIG1heGlt
dW0gc2l6ZSBvZiBhIGZpbHRlciBwcmltaXRpdmUuIEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRp
dmUgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgLy8gVGhlIGFi
c29sdXRlIHBhaW50IHJlY3Qgc2hvdWxkIG5ldmVyIGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0
UmVjdC4KLSAgICBGbG9hdFJlY3QgbV9tYXhFZmZlY3RSZWN0OwotICAgIAotICAgIC8vIFRoZSBz
dWJyZWdpb24gb2YgYSBmaWx0ZXIgcHJpbWl0aXZlIGFjY29yZGluZyB0byB0aGUgU1ZHIEZpbHRl
ciBzcGVjaWZpY2F0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaXMgU1ZH
IHNwZWNpZmljIGFuZCBuZWVkcyB0byBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLgotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBi
b29sIGFwcGx5UGxhdGZvcm0oRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBSZW5kZXJpbmdNb2RlKSBjb25z
dDsKIAotICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVhbCBTVkdGRSpF
bGVtZW50LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2YgdGhlCi0gICAg
Ly8gZmlsdGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxvYXRSZWN0IG1fZWZm
ZWN0Qm91bmRhcmllczsKKyAgICBib29sIGFwcGx5KEZpbHRlclJlc3VsdCYsIEZpbHRlckltYWdl
VmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKICAgICAK
LSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3Jk
aW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBl
ZFN1YnJlZ2lvbjsKLQotICAgIGJvb2wgbV9hbHBoYUltYWdlIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07Ci0K
LSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBv
ciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KLSAgICBi
b29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQotI2lmIEVOQUJMRShERVNUSU5BVElPTl9D
T0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVy
YXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgfTsK
LSNlbHNlCiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0jZW5kaWYKLSAgICBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkgfTsKLSAgICAKLSAgICBjb25zdCBUeXBlIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOwog
fTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVyRWZmZWN0KQor
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbiYgZnVu
Y3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzRmlsdGVyRWZmZWN0KCk7IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoQ2xhc3NOYW1lKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkNsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LnR5cGUoKSA9PSBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkNsYXNzTmFtZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2ZjMzFlNWI5ZTlhOWVjNjA1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLQotI2lm
IFVTRShDT1JFX0lNQUdFKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUoYm9vbCBh
Y2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQsIEZpbHRlckVmZmVjdCYgbGFzdEVmZmVj
dCkKLXsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoYWNjZWxlcmF0ZWRGaWx0ZXJSZW5k
ZXJpbmdFbmFibGVkKQotICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnRyeUNyZWF0ZShsYXN0RWZmZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFjY2Vs
ZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxhc3RFZmZl
Y3QpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQotfSAvLyBuYW1zcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBh
cmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJl
cj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNSZXN1bHQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSA9IDA7Ci0gICAgCi0gICAg
dmlydHVhbCB+RmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgCi1wcm90ZWN0
ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCB2
b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgPSAwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzVm
NGM4MzJjZTNhZTE2ZDllYTkyMDljZjg3MmVkYjc4YzBjYjc5MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVj
dG9yLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJFZmZlY3Q7CisKK3VzaW5nIEZpbHRl
ckVmZmVjdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj47CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYThjMzAwM2JlMjc3
YTU3YjJjOTM0ZTNkNWMxYjkxMTFkNmQ2ODQ4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCisKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKFR5cGUgdHlwZSkKKyAgICA6IG1f
dHlwZSh0eXBlKQoreworfQorCitzdGF0aWMgaW5saW5lIGF1dG8mIGZpbHRlck5hbWVzKCkKK3sK
KyAgICB1c2luZyBGaWx0ZXJOYW1lTWFwID0gSGFzaE1hcDxGaWx0ZXJGdW5jdGlvbjo6VHlwZSwg
QXRvbVN0cmluZywgV1RGOjpJbnRIYXNoPEZpbHRlckZ1bmN0aW9uOjpUeXBlPiwgV1RGOjpTdHJv
bmdFbnVtSGFzaFRyYWl0czxGaWx0ZXJGdW5jdGlvbjo6VHlwZT4+OworCisgICAgc3RhdGljIGF1
dG8gZmlsdGVyTmFtZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10geworICAgICAgICBGaWx0ZXJO
YW1lTWFwIGZpbHRlck5hbWVzID0geworICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6Q1NTRmlsdGVyLCAgICAgICAgICAgIkNTU0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlciwgICAgICAgICAgICJTVkdG
aWx0ZXIiX3MgICAgICAgICAgIH0sCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHsgRmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsICAgICAgICAgICAgICJGRUJsZW5kIl9zICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4
LCAgICAgICAiRkVDb2xvck1hdHJpeCJfcyAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwgIkZFQ29tcG9uZW50VHJhbnNmZXIi
X3MgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLCAg
ICAgICAgICJGRUNvbXBvc2l0ZSJfcyAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4LCAgICAiRkVDb252b2x2ZU1hdHJpeCJfcyAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmcsICAgIkZFRGlmZnVzZUxpZ2h0aW5nIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwLCAgICJGRURpc3BsYWNlbWVudE1hcCJfcyAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csICAg
ICAgICAiRkVEcm9wU2hhZG93Il9zICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVGbG9vZCwgICAgICAgICAgICAgIkZFRmxvb2QiX3MgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyLCAg
ICAgICJGRUdhdXNzaWFuQmx1ciJfcyAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUltYWdlLCAgICAgICAgICAgICAiRkVJbWFnZSJfcyAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwgICAgICAgICAg
ICAgIkZFTWVyZ2UiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFTW9ycGhvbG9neSwgICAgICAgICJGRU1vcnBob2xvZ3kiX3MgICAgICAgIH0s
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNldCwgICAgICAgICAg
ICAiRkVPZmZzZXQiX3MgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLCAgIkZFU3BlY3VsYXJMaWdodGluZyJfcyAgfSwK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZSwgICAgICAgICAgICAg
ICJGRVRpbGUiX3MgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRVR1cmJ1bGVuY2UsICAgICAgICAiRkVUdXJidWxlbmNlIl9zICAgICAgICB9LAor
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VBbHBoYSwgICAgICAg
ICAiU291cmNlQWxwaGEiX3MgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6U291cmNlR3JhcGhpYywgICAgICAgIlNvdXJjZUdyYXBoaWMiX3MgICAgICAgfQor
CisgICAgICAgIH07CisgICAgICAgIHJldHVybiBmaWx0ZXJOYW1lczsKKyAgICB9KCkpOworICAg
IAorICAgIHJldHVybiBmaWx0ZXJOYW1lcy5nZXQoKTsKK30KKworQXRvbVN0cmluZyBGaWx0ZXJG
dW5jdGlvbjo6ZmlsdGVyTmFtZShUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGZpbHRlck5hbWVz
KCkuZ2V0KHR5cGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTUwZTFjMmE0NGYyNzg0MDE0MWMxZTQ1MDUzNTExNjE3NTc1NzVhMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50YXRpb24uaCIKKyNp
bmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3Mg
VGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9t
ZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsKK2NsYXNzIEltYWdlQnVmZmVyOworCitjbGFzcyBG
aWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJs
aWM6CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIENTU0ZpbHRlciwK
KyAgICAgICAgU1ZHRmlsdGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKworICAgICAgICBGRUJs
ZW5kID0gRkVNaW5pbXVtLAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAgICAgICBGRUNvbXBv
bmVudFRyYW5zZmVyLAorICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAgRkVDb252b2x2ZU1h
dHJpeCwKKyAgICAgICAgRkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZFRGlzcGxhY2VtZW50
TWFwLAorICAgICAgICBGRURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2QsCisgICAgICAgIEZF
R2F1c3NpYW5CbHVyLAorICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1lcmdlLAorICAgICAg
ICBGRU1vcnBob2xvZ3ksCisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBGRVNwZWN1bGFyTGln
aHRpbmcsCisgICAgICAgIEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNlLAorICAgICAgICBT
b3VyY2VBbHBoYSwKKyAgICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAgICBGRU1heGltdW0g
PSBTb3VyY2VHcmFwaGljCisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9uKFR5cGUpOworICAg
IHZpcnR1YWwgfkZpbHRlckZ1bmN0aW9uKCkgPSBkZWZhdWx0OworCisgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IFR5cGU6OkNTU0ZpbHRlcjsgfQorICAgIGJvb2wgaXNTVkdGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9v
bCBpc0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpDU1NGaWx0ZXIgfHwg
bV90eXBlID09IFR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0ZXJFZmZlY3QoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPj0gVHlwZTo6RkVNaW5pbXVtICYmIG1fdHlwZSA8PSBUeXBl
OjpGRU1heGltdW07IH0KKworICAgIHN0YXRpYyBBdG9tU3RyaW5nIGZpbHRlck5hbWUoVHlwZSk7
CisgICAgc3RhdGljIEF0b21TdHJpbmcgc291cmNlQWxwaGFOYW1lKCkgeyByZXR1cm4gZmlsdGVy
TmFtZShUeXBlOjpTb3VyY2VBbHBoYSk7IH0KKyAgICBzdGF0aWMgQXRvbVN0cmluZyBzb3VyY2VH
cmFwaGljTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlR3JhcGhpYyk7IH0K
KyAgICBBdG9tU3RyaW5nIGZpbHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1f
dHlwZSk7IH0KKworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4g
eyB9OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0gRmlsdGVyUmVwcmVzZW50YXRpb246OlRl
c3RPdXRwdXQpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZSwKKworICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6Q1NTRmls
dGVyLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyLAor
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kLAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1hdHJpeCwKKyAgICAgICAg
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZSwKKyAgICAgICAg
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgsCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEcm9wU2hhZG93LAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZCwKKyAgICAgICAgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyLAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFTWVyZ2UsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRU1vcnBob2xvZ3ksCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRU9mZnNldCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
U3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFVGlsZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVs
ZW5jZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFscGhh
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhpYwor
ICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYmQ0OGY0YTM1ODZhODhhYzcyYTczM2I1YzdhMDFiY2UzZjRmNWMyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJH
ZW9tZXRyeS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJCb3VuZGFyeVNldC5oIgorI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnkoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0KQorICAgICAgICA6IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAgICAgLCBt
X3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgfkZpbHRlckdlb21ldHJ5KCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IGZpbHRl
clJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgRmxvYXRSZWN0
IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisK
KyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgRmxvYXRTaXplIHJlc29sdXRpb24oKSBjb25zdCB7
IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIEZpbHRlckJvdW5kYXJ5U2V0IGJvdW5kYXJ5U2V0
KEZpbHRlckVmZmVjdDo6VHlwZSwgdW5zaWduZWQpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisg
ICAgdmlydHVhbCBGbG9hdFJlY3QgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBG
bG9hdFJlY3QmIGltYWdlUmVjdCkgY29uc3QgeyByZXR1cm4gaW1hZ2VSZWN0OyB9CisgICAgdmly
dHVhbCBGbG9hdFNpemUgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSkgY29uc3QgeyByZXR1cm4gaW1hZ2VTaXplOyB9CisKKyAgICBGbG9hdFJl
Y3QgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbkltYWdlUmVjdCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gc291cmNlSW1hZ2VSZWN0OworICAgICAgICBp
bWFnZVJlY3QubW92ZUJ5KC1kZXN0aW5hdGlvbkltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1hZ2VSZWN0KTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyhjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSkgY29uc3QgeyByZXR1cm4gaW1hZ2VTaXplOyB9CisgICAg
CisgICAgdmlydHVhbCBGbG9hdFNpemUgcmVzb2x2ZVRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gcmVzb2x2
ZWRJbWFnZVNpemUgPSByZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRlcyhJbWFnZVNpemUpOworICAg
ICAgICByZXR1cm4gY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhyZXNvbHZlZEltYWdlU2l6
ZSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG1heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8g
bWF4RWZmZWN0UmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICAgICAgbWF4RWZmZWN0UmVj
dC5pbnRlcnNlY3QobV9maWx0ZXJSZWdpb24pOworICAgICAgICByZXR1cm4gbWF4RWZmZWN0UmVj
dDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjbGlwVG9QcmltaXRpdmVTdWJyZWdp
b24oY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCA9IDA7CisKKyAgICBGbG9hdFJlY3QgY2xpcFRvTWF4UHJpbWl0aXZl
U3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjbGlwVG9Qcmlt
aXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBtYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZl
U3VicmVnaW9uKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgRmxvYXRSZWN0IG1fZmlsdGVy
UmVnaW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JhNTEwMDI0NmNmOTk3
NjUwMGZlOTRjZTg2NTFkOTgxZjY0MDI5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0wLDAgKzEs
Mzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorCisjaW5jbHVkZSAi
RmlsdGVySW1hZ2VTb2Z0d2FyZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKworI2lmIFVT
RShDT1JFX0lNQUdFKQorI2luY2x1ZGUgIkZpbHRlckltYWdlQ29yZUltYWdlLmgiCisjZW5kaWYK
KworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgor
I2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2Vs
ZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJJ
bWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlKQoreworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgpIHx8IGltYWdlUmVj
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobG9naWNhbFNpemUpKTsKKyNpZiBVU0UoQ09SRV9J
TUFHRSkKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVySW1hZ2VDb3JlSW1hZ2UocHJp
bWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgbG9naWNhbFNpemUsIHJl
bmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkpOworI2VuZGlmCisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVySW1hZ2VTb2Z0d2FyZShwcmltaXRpdmVTdWJyZWdp
b24sIGltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4g
RmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIFJlZjxJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZl
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZVNvZnR3YXJlKHByaW1p
dGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOworfQorCitG
aWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSkKKyAgICA6IG1fcHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAs
IG1faW1hZ2VSZWN0KGltYWdlUmVjdCkKKyAgICAsIG1faXNBbHBoYUltYWdlKGlzQWxwaGFJbWFn
ZSkKKyAgICAsIG1fbG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01v
ZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2Fs
ZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitzdGF0aWMgdm9pZCBj
b3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkK
K3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUu
d2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBp
bnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwor
ICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Cisg
ICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5w
dXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0
LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisg
ICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJj
ZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlu
cHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlv
bkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21w
b25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwor
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1
OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZv
aWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0
U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1
dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0
ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAg
ICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkp
OworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50
ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25l
bnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3Vy
Y2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50
WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxw
aGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGlu
dD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkg
KiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
MDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VD
b21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9
CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7
CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVs
QnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBt
X2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJ
ZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXplKG1fbG9naWNhbFNpemUpIH0pOwor
ICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50
U2l6ZSBzY2FsZWRTaXplKG1fbG9naWNhbFNpemUpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNy
ZWF0ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgY29weVByZW11bHRpcGx5
aW5nQWxwaGEocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOwor
ICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEocGl4ZWxC
dWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKS0+ZGF0
YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKworICAgIHJldHVybiAmcGl4
ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJJ
bWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Cisg
ICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNoZWNr
ZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAo
Y2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgY29weVBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxw
aGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKK30K
KworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJz
aW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25z
dAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhl
ciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAg
ICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNw
YWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBp
cyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVybiBjb2xvclNwYWNlICYmIG1fY29s
b3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAgLy8gQWRkaXRpb25hbCBjb2xvciBz
cGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCisgICAgVU5VU0VEX1BBUkFN
KGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIEZpbHRl
ckltYWdlOjpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOworICAgIHNjYWxlZFJlY3Quc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9sb2dp
Y2FsU2l6ZSk7CisgICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNr
LCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgorICAgIGlmIChzY2FsZWRS
ZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWlu
dFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRl
c3RpbmF0aW9uLmxlbmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBk
b2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChzY2FsZWRSZWN0Lm1h
eFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0g
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRT
aXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeE9yaWdpbiA9IHNjYWxl
ZFJlY3QueCgpOworICAgIGludCB4RGVzdCA9IDA7CisgICAgaWYgKHhPcmlnaW4gPCAwKSB7Cisg
ICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CisgICAgICAgIHhPcmlnaW4gPSAwOworICAgIH0KKyAg
ICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOworICAgIGlmICh4RW5kID4gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsK
KworICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7CisgICAgaW50IHlEZXN0ID0gMDsK
KyAgICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKKyAgICAg
ICAgeU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7
CisgICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHlFbmQg
PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9y
aWdpbikgKiA0OworICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0
aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgo
KSAqIDQ7CisgICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEo
KSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKKyAgICBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisKKyAgICB3aGlsZSAoeU9yaWdp
biA8IHlFbmQpIHsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVs
LCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5l
OworICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKKyAgICAgICAgKyt5T3Jp
Z2luOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6
OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGNsYW1w
ZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICAvLyBD
cmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRp
bGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIGF1dG8gY29udmVy
dGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFw
cGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5v
dGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBo
YUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNv
bnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworfQorCitz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxC
dWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFs
cGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAg
ICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKKyAgICByZWN0
LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIENyZWF0
ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8g
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZm
ZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKK30KKwordm9pZCBGaWx0ZXJJbWFn
ZTo6Y29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgYXV0
byogcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KSA/ICZwaXhl
bEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAgIGlm
ICghcGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgLy8gV2UgcHJlZmVyIGEg
Y29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAgICAgICBpZiAoYXV0byBp
bWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICAgICAgICAgIElu
dFJlY3QgcmVjdCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfTsK
KyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZl
cnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsICpjb2xvclNw
YWNlKSkKKyAgICAgICAgICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxC
dWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBpeGVsQnVmZmVyID0g
dGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICghcGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgaWYgKGF1dG8gY29udmVy
dGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGFs
cGhhRm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252
ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcyhwaXhlbEJ1ZmZlci0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcnJlY3RQ
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUt
bXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4
ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
UGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7
CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0
ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7
CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVu
Z3RoICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBp
eGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0g
dmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0g
dm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAg
ICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52
YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMu
dmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFs
WzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Cisg
ICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8
IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAg
ICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAv
LyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBj
b2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAw
KSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAg
IHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29t
cG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERh
dGEgPiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytw
aXhlbERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAg
ICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBV
U0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5h
bGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9y
U3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTog
V2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29u
dmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBm
b3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZm
ZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3Jt
Q29sb3JTcGFjZShtX2NvbG9yU3BhY2UsIGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNwYWNl
ID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpu
dWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0Owor
I2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NGZhODdjMDcyYmI3NmM1Y2I2ODkwOTMwMGE4ZjBjYmYwNWViZDY0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgUGl4ZWxC
dWZmZXI7CisKK2NsYXNzIEZpbHRlckltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVySW1h
Z2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VS
ZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGUoY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBS
ZWY8SW1hZ2VCdWZmZXI+JiYpOworCisgICAgdmlydHVhbCB+RmlsdGVySW1hZ2UoKSA9IGRlZmF1
bHQ7CisKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wcmltaXRpdmVTdWJyZWdpb247IH0KKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZVJlY3Q7IH0KKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNBbHBoYUltYWdlOyB9CisKKyAgICBGbG9hdFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNw
YWNlOyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZF
eGlzdHMoKSA9IDA7CisgICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSA9IDA7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgcGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBQaXhlbEJ1ZmZlciogcGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIHZv
aWQgY29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgCisgICAgdm9pZCBjb3JyZWN0UHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0NvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJvdGVjdGVkOgorICAgIEZpbHRlckltYWdlKGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdl
UmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZv
aWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25D
b2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252
ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVT
dWJyZWdpb247CisgICAgRmxvYXRSZWN0IG1faW1hZ2VSZWN0OworICAgIGJvb2wgbV9pc0FscGhh
SW1hZ2UgeyBmYWxzZSB9OworCisgICAgRmxvYXRTaXplIG1fbG9naWNhbFNpemU7CisgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7
CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmE3NTM1OTJhN2M2YTlkMmY2ZmM1NDllNGQ3ZWY5NGNmNzIwMDhmOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1h
Z2VWZWN0b3IuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckltYWdlOworCit1c2luZyBG
aWx0ZXJJbWFnZVZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVySW1hZ2U+PjsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRk
YmZmN2Q4MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTliMjAxMWNlZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2Vu
dGF0aW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gY2xhc3MgRmlsdGVyUmVwcmVzZW50YXRpb24gOiB1aW50OF90IHsKKyAgICBUZXN0T3V0cHV0
LAorICAgIERlYnVnZ2luZworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1
bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZkMjg3ZDE1M2MwNDFiMjk5ODFhNjlkYWZlM2E2NDllOTc1NGMz
MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyUmVz
dWx0OjpGaWx0ZXJSZXN1bHQoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogbV9y
ZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4g
RmlsdGVyUmVzdWx0OjpjcmVhdGVGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5nUmVjdCwgYm9vbCBpc0FscGhhSW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICByZXR1cm4gRmlsdGVySW1hZ2U6OmNyZWF0ZShwcmlt
aXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBpc0FscGhhSW1hZ2UsIGxvZ2ljYWxTaXplLCBt
X3JlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlclJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZGM4ODM0Zjc3ZmY5ZDNlZGNjZjBhYjI4MWY4
MjEyMzNlODhjNzIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRnVuY3Rpb247CitjbGFzcyBGaWx0ZXJH
ZW9tZXRyeTsKK2NsYXNzIEZpbHRlckltYWdlOworCitjbGFzcyBGaWx0ZXJSZXN1bHQgeworcHVi
bGljOgorICAgIHVzaW5nIEltYWdlcyA9IEhhc2hNYXA8UmVmPGNvbnN0IEZpbHRlckZ1bmN0aW9u
PiwgUmVmPEZpbHRlckltYWdlPj47CisKKyAgICBGaWx0ZXJSZXN1bHQoUmVuZGVyaW5nTW9kZSk7
CisKKyAgICBJbWFnZXMmIGltYWdlcygpIHsgcmV0dXJuIG1faW1hZ2VzOyB9CisgICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9
CisKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZUZpbHRlckltYWdlKGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBi
b29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VzIG1faW1hZ2VzOwor
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKaW5kZXggMWFiNWUxOWUxMWE0ZjM2ZWEy
YTQyNmE3NTAzODc5MTI4ZjU0YjQ0Yi4uNGJjNmJjNzFjODVkZmIxYWUzOTFkZWIyNDNkYzgxNDU3
NWRiMGMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNiwxMiArMzYsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWlu
dGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYp
Cit2b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZm
ZWN0JiwgUGFpbnRpbmdEYXRhJikKIHsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRl
ckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9u
Lnh5KCkpKTsKLSAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgotICAgIEZsb2F0UG9pbnQg
bWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1f
dXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNw
YWNlUG9zaXRpb24ueSgpIH0pOwotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngo
KSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKKy8vICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFko
ZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9z
aXRpb24ueHkoKSkpOworLy8gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZy
b20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KKy8vICAgIEZs
b2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCks
IG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOworLy8gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRa
KG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwogfQogCiBMaWdodFNvdXJjZTo6
Q29tcHV0ZWRMaWdodGluZ0RhdGEgUG9pbnRMaWdodFNvdXJjZTo6Y29tcHV0ZVBpeGVsTGlnaHRp
bmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZs
b2F0IHopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCmluZGV4IDc2NDlmMDU4YWM4NjliNTU0YWYwZGM1
MDdmZmY5MDkwYWQ2Y2YzYTMuLmMwN2Q5MDdiYmRjMDljNzVhZjFiNDQ0M2Q5MWFjMTEwOTY5ODhl
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMCw2MCArMjEsMzEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3Vy
Y2VBbHBoYS5oIgogCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VW
ZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFs
cGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQorUmVm
PFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTb3VyY2VBbHBoYSgpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6
OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKCkKKyAgICA6IEZpbHRlckVm
ZmVjdChUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsK
IH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmls
dGVySW1hZ2VWZWN0b3IgU291cmNlQWxwaGE6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQotewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgw
KS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0
LCBDb2xvcjo6YmxhY2spOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOwot
fQotCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmls
dGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
c291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCku
YXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uZmI2
NmRiOGRjZGM5N2ZiMTQwMGVjMjY0NjNlYjZlZjVmZWVlN2Y3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0j
ZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAg
ICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0KLSAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBSZWY8U291
cmNlQWxwaGE+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhh
KEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQor
ICAgIFNvdXJjZUFscGhhKCk7CisKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZp
bHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQorICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNl
QWxwaGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIw
Mjc0YzExMDdkNzgzOTJlOS4uZTYyMmVhOWQzNzliNWU2MDkwYzYyNzJiZWJiYjAyNTI2Y2M5MzRl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMCw0NyArMjEsMzQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
b3VyY2VHcmFwaGljLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBo
aWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMo
ZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0K
IAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VH
cmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VH
cmFwaGljKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VHcmFwaGljIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291
cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IFNvdXJj
ZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0g
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRS
ZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCku
aGVpZ2h0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgcmV0dXJuIGlu
cHV0c1swXS0+aW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK0ZpbHRlckltYWdlVmVjdG9yIFNvdXJjZUdyYXBoaWM6OnRha2VJbnB1
dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZp
bHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIEFTU0VSVCghc3RhY2suaXNF
bXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKLVRleHRTdHJl
YW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdyYXBoaWNdXG4iOwogICAg
IHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEz
MjhlZjIxMDZiN2ZjYTViZi4uM2VhMzVhMWMwNzcwNDZmZTZhYWU5YjYyNDFkYzM3NjcwNGUwOTFi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0xOCw0MSArMTksMzEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlR3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYXBo
aWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VHcmFwaGlj
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVm
PFNvdXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsKLQotICAgIHN0YXRpYyBjb25zdCBBdG9t
U3RyaW5nJiBlZmZlY3ROYW1lKCk7CisgICAgc3RhdGljIFJlZjxTb3VyY2VHcmFwaGljPiBjcmVh
dGUoKTsKIAogcHJpdmF0ZToKLSAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQotICAg
ICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCi0gICAgewot
ICAgICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9CisgICAgU291cmNlR3JhcGhpYygpOwogCi0gICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRl
ckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZp
bHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0
YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLX0g
Ly9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYg
b3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlNvdXJjZUdyYXBoaWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xh
c3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAg
Ym9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICBib29sIGFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQw
MTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBmNGYz
NDJiYmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCBy
ZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAw
LjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZp
bHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3Zv
aWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYs
IFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZl
Y3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgp
KSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3Bh
Y2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBl
ZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJT
cGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBv
c2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBt
X2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZl
Y3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBh
aW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGlt
aXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9
IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1Ry
ZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0g
bV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4w
ZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwot
ICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0
aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGlt
aXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAg
cGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0
IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBj
b21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVu
dCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2Ug
aWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEu
MGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAgbV9i
dWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9C
dWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBaLCBt
YXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVj
dGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAgICBt
X2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7
CisvLworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9p
bnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlv
blZlY3Rvci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUp
IHsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8vICAg
ICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKy8v
ICAgIH0gZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0
aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYpCisv
LyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOworLy8g
ICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBsaW1p
dGluZ0NvbmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2Zm
TGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8vICAg
ICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2Zm
TGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRpbWl6
YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFtX3Nw
ZWN1bGFyRXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQg
PSAwOworLy8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAgICAg
ICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJdCBp
cyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJF
eHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBTcG90
TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5k
U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhYmJjNjVlZGYzZTQ4ZWJj
MmJhMmUwZWRkYWQ0M2FhYjk5MzlmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1ZGUg
IkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1h
Z2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVy
R2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09
IDIpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0
MiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdl
QnVmZmVyKCk7CisgICAgYXV0byBpbnB1dDJJbWFnZSA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghaW5wdXRJbWFnZSB8fCAhaW5wdXQySW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGltYWdl
UmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW5wdXQuaW1hZ2VS
ZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisgICAgYXV0byBpbWFnZVJlY3QyID0gZ2VvbWV0
cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1
dC5pbWFnZVJlY3QoKSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBv
dXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIAorICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbnB1dDJJbWFnZSwgaW1hZ2VSZWN0Mik7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGltYWdlUmVjdCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxv
Z2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0p
OworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yODc2OWM2MDI5YTJhMjU4ZTFkOGYzYmI0ZmZiNGM2ZTk1N2M4ODcxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgor
CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworaW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQm
IGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQoreworICAg
IGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVl
OworICAgIGZsb2F0IGEgPSBhbHBoYTsKKworICAgIHJlZCAgICAgPSB2YWx1ZXNbIDBdICogciAr
IHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZhbHVl
c1sgNF0gKiAyNTU7CisgICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVzWyA2XSAq
IGcgKyB2YWx1ZXNbIDddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAqIDI1NTsK
KyAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sx
Ml0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OworICAgIGFscGhhICAg
PSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1
ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Cit9CisKK2lubGluZSB2b2lkIHNhdHVyYXRl
QW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGNvbnN0
IGZsb2F0KiBjb21wb25lbnRzKQoreworICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQgZyA9
IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVlOworCisgICAgcmVkICAgICA9IHIgKiBjb21wb25l
bnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50c1syXTsKKyAgICBncmVl
biAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0XSArIGIgKiBjb21wb25l
bnRzWzVdOworICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRz
WzddICsgYiAqIGNvbXBvbmVudHNbOF07Cit9CisKKy8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2Ug
dGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCitpbmxpbmUg
dm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxv
YXQmIGFscGhhKQoreworICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3JlZW4g
KyAwLjA3MjEgKiBibHVlOworICAgIHJlZCA9IDA7CisgICAgZ3JlZW4gPSAwOworICAgIGJsdWUg
PSAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUg
ZmlsdGVyVHlwZT4KK2Jvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25l
bnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgQVNTRVJUKHBpeGVsQXJyYXkubGVu
Z3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKKyAgICAKKyAgICBpZiAoZmlsdGVyVHlw
ZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7CisgICAgICAgIC8vIHZJbWFnZU1hdHJp
eE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRo
ZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAgICAgIC8v
IGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFnZSBjb2RlLgorICAgICAgICBpZiAo
dmFsdWVzWzRdIHx8IHZhbHVlc1s5XSB8fCB2YWx1ZXNbMTRdIHx8IHZhbHVlc1sxOV0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgaW50MzJfdCBkaXZpc29y
ID0gMjU2OworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKKworICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKKyAg
ICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIHNyYy5kYXRhID0gZGF0YTsKKyAgICAKKyAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
KyAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgZGVzdC5kYXRhID0gZGF0YTsKKworICAg
IHN3aXRjaCAoZmlsdGVyVHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE1XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCisK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
N10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
IHsKKyAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0geworICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3Ip
KSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzdd
ICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAs
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgZGl2aXNvciwKKyAgICAgICAgfTsKKyAgICAg
ICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2
aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewor
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAorCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAorCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAorCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICB9OworICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordGVtcGxh
dGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Cit2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFt
cGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6
ZSBidWZmZXJTaXplKQoreworICAgIGZsb2F0IGNvbXBvbmVudHNbOV07CisKKyAgICBpZiAoZmls
dGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisgICAgICAgIEZFQ29sb3JN
YXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0p
OworICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFU
RSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhj
b21wb25lbnRzLCB2YWx1ZXNbMF0pOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9
IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBpZiAoZWZm
ZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBv
bmVudHMsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm47CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShidWZmZXJTaXplKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Cisg
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1
ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZs
b2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAg
ICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1ZXMpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsg
cGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVl
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxv
YXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAg
ICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsK
KyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAg
ICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAg
ICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBw
aXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkg
eworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQg
KyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQg
KyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1ZlY3Rv
cjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVl
cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tp
XSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJp
eDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNb
MF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKGltYWdlQnVmZmVy
KSB7CisgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVD
b29yZGluYXRlcyhpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICAg
ICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBp
bWFnZVJlY3QpOworICAgIH0KKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBv
dXRwdXQuY29sb3JTcGFjZSgpIH07CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwg
b3V0cHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBvdXRw
dXRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOworICAgIGlmICghcGl4
ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHBpeGVsQXJyYXkg
PSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBw
aXhlbEJ1ZmZlci0+c2l6ZSgpOworCisgICAgYXV0byB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRz
KG1fdmFsdWVzKTsKKworICAgIHN3aXRjaCAobV9jb2xvck1hdHJpeFR5cGUpIHsKKyAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJ
WF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgor
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJh
eSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlE
aW1lbnNpb25zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TFVNSU5BTkNFVE9BTFBIQToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVf
TFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9u
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG91dHB1dEltYWdlLT5wdXRQaXhlbEJ1
ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTUxNTkzMDA2MDVlN2E5
MzBmYTZiYzY2ZmM5M2M2NTgwN2E4YTJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVy
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgi
CisKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9y
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj47CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCit7Cit9CisKK3N0
YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1
ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAgICBpZiAobiA8IDEp
CisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOworICAgICAgICB1bnNp
Z25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKKyAgICAgICAgZG91
YmxlIHYxID0gdGFibGVWYWx1ZXNba107CisgICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVz
W3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4w
ICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOworICAgICAgICB2YWwgPSBz
dGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFsdWVzW2ldID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1
dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0
PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2ln
bmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1
cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICogbikgLyAyNTUu
MCk7CisgICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAgIGRvdWJsZSB2YWwg
PSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6
Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9v
a3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNm
ZXJGdW5jdGlvbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlICog
aSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OworICAgICAgICB2YWwgPSBzdGQ6
Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFsdWVzW2ldID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2Zl
ckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91Ymxl
IGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQorICAgICAgICBk
b3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkg
LyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKKyAgICAgICAg
dmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVl
c1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0aWMgTG9v
a3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGZ1bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAgICAgdGFibGVbaV0g
PSBpOworCisgICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgVHJhbnNmZXJUeXBlIGNhbGxF
ZmZlY3RbXSA9IHsKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisgICAgICAgIGNvbXB1
dGVJZGVudGl0eVRhYmxlLAorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLAorICAgICAgICBj
b21wdXRlRGlzY3JldGVUYWJsZSwKKyAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLAorICAgICAg
ICBjb21wdXRlR2FtbWFUYWJsZQorICAgIH07CisKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PihmdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOworICAg
IGNhbGxFZmZlY3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsKKworICAgIHJldHVy
biB0YWJsZTsKK30KKworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseVNvZnR3YXJlKEZp
bHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNp
emUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1
dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0g
b3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7
CisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNv
b3JkaW5hdGVzKG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VSZWN0KCkpOworCisgICAg
aW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChvdXRwdXRJbWFnZVJlY3Qp
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworCisgICAgTG9va3VwVGFibGUgcmVkVGFibGUgPSBj
b21wdXRlTG9va3VwVGFibGUobV9yZWRGdW5jdGlvbik7CisgICAgTG9va3VwVGFibGUgZ3JlZW5U
YWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2dyZWVuRnVuY3Rpb24pOworICAgIExvb2t1cFRh
YmxlIGJsdWVUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2JsdWVGdW5jdGlvbik7CisgICAg
TG9va3VwVGFibGUgYWxwaGFUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2FscGhhRnVuY3Rp
b24pOworCisgICAgdW5zaWduZWQgb3V0cHV0UGl4ZWxBcnJheUxlbmd0aCA9IG91dHB1dFBpeGVs
QXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCogZGF0YSA9IG91dHB1dFBpeGVsQXJyYXkuZGF0
YSgpOworCisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwg
b3V0cHV0UGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKKyAgICAgICAgZGF0
YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwor
ICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNl
dCArIDJdXTsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRh
W3BpeGVsT2Zmc2V0ICsgM11dOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWI3MjRkNjNlM2NiN2IxYTgwYmZkYzE0NjI0ODg3
MzM4YzNmNzA5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCAr
MSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCit7CisgICAgdW5zaWduZWQgY2hhciBi
dWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKKyAgICB1
bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKKyAgICByZXR1cm4gYnVmZlsh
ISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKK30KKwordGVtcGxhdGUgPGlu
dCBiMSwgaW50IGI0Pgorc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
K3sKKyAgICBmbG9hdCBzY2FsZWRLMTsKKyAgICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEp
CisgICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBz
Y2FsZWRLNCA9IGs0ICogMjU1LjBmOworCisgICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+
PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNp
Z25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAq
IGkxICsgazMgKiBpMjsKKyAgICAgICAgaWYgKGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEsxICogaTEgKiBpMjsKKyAgICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9
IHNjYWxlZEs0OworCisgICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwor
ICAgICAgICArK3NvdXJjZTsKKyAgICAgICAgKytkZXN0aW5hdGlvbjsKKyAgICB9Cit9CisKKy8v
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2Yg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGlu
ZworLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBv
cHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgordGVtcGxhdGUgPGludCBi
MSwgaW50IGI0Pgorc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24s
IGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRLMTsKKyAgICBmbG9hdCBzY2FsZWRLNDsKKyAgICBp
ZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7CisgICAgaWYgKGI0KQorICAg
ICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOworCisgICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxl
bmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOworICAgICAg
ICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOworICAgICAgICBmbG9hdCByZXN1bHQg
PSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAgICAgaWYgKGIxKQorICAgICAgICAgICAgcmVzdWx0
ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAgICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmVz
dWx0ICs9IHNjYWxlZEs0OworCisgICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKKyAgICAg
ICAgKytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRpb247CisgICAgfQorfQorCisjaWYgIUhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29m
dHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQoreworICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6
Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKKyAgICBmbG9hdCBsb3dl
ckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjpt
aW4oMC4wZiwgazMpICsgazQ7CisgICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYm
ICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1p
dCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsKKyAgICAgICAgaWYgKGs0KSB7Cisg
ICAgICAgICAgICBpZiAoazEpCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoazQpIHsKKyAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJh
eUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
dXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGsxKQor
ICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5h
dGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0
aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgfQorfQorI2VuZGlm
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQoreworICAgIGludCBsZW5n
dGggPSBzb3VyY2UubGVuZ3RoKCk7CisgICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxp
bnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7CisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2
ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseS4KKyNpZiBIQVZFKEFSTV9ORU9OX0lO
VFJJTlNJQ1MpCisgICAgQVNTRVJUKCEobGVuZ3RoICYgMHgzKSk7CisgICAgcGxhdGZvcm1Bcml0
aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEs
IGsyLCBrMywgazQpOworI2Vsc2UKKyAgICBhcml0aG1ldGljU29mdHdhcmUoc291cmNlLmRhdGEo
KSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbmRpZgor
fQorCitib29sIEZFQ29tcG9zaXRlOjphcHBseUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0g
Mik7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW5wdXQy
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1
dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAg
ICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAg
IGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGlu
YXRlcyhvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0LmltYWdlUmVjdCgpKTsKKyAgICBhdXRvIGlu
cHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKKyAgICBpZiAoIWlucHV0UGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBvdXRwdXQySW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJz
b2x1dGVDb29yZGluYXRlcyhvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0Mi5pbWFnZVJlY3QoKSk7
CisgICAgaW5wdXQyLmNvcHlQaXhlbEJ1ZmZlcihvdXRwdXRQaXhlbEFycmF5LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlbmNsb3NpbmdJbnRSZWN0KG91dHB1dDJJbWFn
ZVJlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworCisgICAgcGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUoKmlucHV0UGl4ZWxBcnJheSwgb3V0cHV0UGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwg
bV9rMywgbV9rNCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFw
cGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbnB1dCA9
IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0uZ2V0KCk7CisK
KyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGF1dG8gaW5w
dXQySW1hZ2UgPSBpbnB1dDIuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UgfHwg
IWlucHV0MkltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dElt
YWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0g
b3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBnZW9t
ZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGlucHV0LmltYWdlUmVjdCgpLCBvdXRw
dXQuaW1hZ2VSZWN0KCkpOworICAgIGF1dG8gaW5wdXQySW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29u
dmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFn
ZVJlY3QoKSk7CisKKyAgICBzd2l0Y2ggKG1fY29tcG9zaXRlT3BlcmF0b3IpIHsKKyAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5w
dXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlu
cHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9JTjogeworICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGlu
dGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJl
Y3QoKTsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QyID0gaW5wdXQyLmltYWdlUmVjdCgpOworICAg
ICAgICBhdXRvIG91dHB1dFJlY3QgPSBvdXRwdXQuaW1hZ2VSZWN0KCk7CisKKyAgICAgICAgYXV0
byBkZXN0aW5hdGlvblJlY3QgPSBpbWFnZVJlY3Q7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoaW1hZ2VSZWN0Mik7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qo
b3V0cHV0UmVjdCk7CisgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9
IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5
KC1vdXRwdXRSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVj
dCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoYWRqdXN0ZWREZXN0aW5h
dGlvblJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsK
KyAgICAgICAgc291cmNlUmVjdC5tb3ZlQnkoLWltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAg
ICAgc291cmNlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoc291
cmNlUmVjdCk7CisKKyAgICAgICAgYXV0byBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsK
KyAgICAgICAgc291cmNlMlJlY3QubW92ZUJ5KC1pbWFnZVJlY3QyLmxvY2F0aW9uKCkpOworICAg
ICAgICBzb3VyY2UyUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMo
c291cmNlMlJlY3QpOworCisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bnB1dDJJbWFnZSwgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QsIHNvdXJjZTJSZWN0KTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGFkanVzdGVkRGVz
dGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
T1VUOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwg
aW5wdXRJbWFnZVJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dDJJ
bWFnZS0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0MkltYWdlLCBpbnB1dDJJ
bWFnZVJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJ
bWFnZSwgaW5wdXRJbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW5wdXRJbWFnZS0+bG9n
aWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6CisgICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1h
Z2VSZWN0LCBJbnRSZWN0KEludFBvaW50KCksIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpLCBD
b21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0
MkltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1
dEltYWdlLCBpbnB1dEltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dEltYWdlLT5s
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6
OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAg
IGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVU
SUMpCisgICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0
cywgZ2VvbWV0cnkpOworICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShvdXRw
dXQsIGlucHV0cywgZ2VvbWV0cnkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWRkZjhhZmU1MGYwZTE4ZGM0NDJjNTYyNTE0ZWNkYWNjOWQ5YzcyMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJj
emVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29udm9sdmVN
YXRyaXguaCIKKworI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgorICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgVGhlIGltYWdlIHJlY3RhbmdsZSBp
cyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKKworICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKKyAgICAgIHwgICAgICAgICAgQSAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKworICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKKyAgICAgIHwgQiB8ICAg
ICAgQyAgICAgIHwgRCB8CisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAorICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8CisgICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0
aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcworICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBj
cm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLgorCisgICBFeGFtcGxlOgorICAgICAg
SW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEwCisKKyAgICAgIE9yZGVyIChrZXJuZWwg
bWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQKKyAgICAgIFRhcmdldDogeDoxLCB5OjMK
KworICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhl
IGtlcm5lbCBtYXRyaXg6CisKKyAgICAgICAgLi4uCisgICAgICAgIC4uLgorICAgICAgICAuLi4K
KyAgICAgICAgLlguCisKKyAgIFRoZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxv
d2luZzoKKyAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUg
Ym90dG9tLXJpZ2h0IGNvcm5lcgorICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMg
bm90IHBhcnQgb2YgdGhlIHJlZ2lvbgorICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4
ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9IHkgPCB5MgorCisgICAgICBSZWdpb24g
QTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCisgICAgICBSZWdpb24gQjogeDE6IDAsIHkx
OiAzLCB4MjogMSwgeTI6IDEwCisgICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwg
eTI6IDEwCisgICAgICBSZWdpb24gRDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAorICAg
ICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24p
CisKKyAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxz
LCB3ZSBpbXBsZW1lbnRlZAorICAgYSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2
YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMuCisgICBGb3Igb3RoZXIgcmVnaW9u
cywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUs
CisgICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0
dWF0aW9ucywgd2hlbgorICAga2VybmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2Us
IGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhpcworICAgZnVuY3Rpb24uCisKKyAgIEFs
dGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQg
bm90IHRvIG1ha2UKKyAgIGNvbW1vbiBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBh
cmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCisgICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkg
aGFyZCB0byB1bmRlcnN0YW5kLgorKi8KKworLy8gUGFyYWxsZWxpemF0aW9uIHBhcnRzCitzdGF0
aWMgY29uc3RleHByIGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisKK3N0cnVjdCBQYWludGlu
Z0RhdGEgeworICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OworICAg
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OworICAgIGludCB3aWR0aDsKKyAgICBp
bnQgaGVpZ2h0OworICAgIAorICAgIEludFNpemUga2VybmVsU2l6ZTsKKyAgICBmbG9hdCBkaXZp
c29yOworICAgIGZsb2F0IGJpYXM7CisgICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0OworICAgIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZTsKKyAgICBib29sIHByZXNlcnZlQWxwaGE7CisgICAgVmVjdG9y
PGZsb2F0PiBrZXJuZWxNYXRyaXg7Cit9OworCitzdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25l
ZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgbWF4ID0g
MjU1KQoreworICAgIGlmIChjaGFubmVsIDw9IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChjaGFubmVsID49IG1heCkKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICByZXR1cm4gY2hhbm5l
bDsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQgdG90YWxzWzRdLCBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCit7CisgICAgdW5zaWduZWQgY2hh
ciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0
b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyAr
K2kpCisgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFs
c1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworCisgICAgaWYgKHByZXNlcnZlQWxw
aGFWYWx1ZXMpIHsKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVscy5p
dGVtKHBpeGVsKSk7CisgICAgICAgICsrcGl4ZWw7CisgICAgfSBlbHNlCisgICAgICAgIGRlc3RQ
aXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQoreworICAgIC8v
IGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCisgICAgaW50IHBpeGVsID0g
KHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgcGFp
bnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkpICogNDsKKyAgICBpbnQga2VybmVsSW5jcmVhc2Ug
PSBjbGlwUmlnaHQgKiA0OworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLmtlcm5l
bFNpemUud2lkdGgoKSAtIDEpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihh
KSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gbV9kaXZpc29yIGNh
bm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKKyAgICBB
U1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOworCisgICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhj
bGlwQm90dG9tIC0geUVuZCknIGxpbmVzCisgICAgcGl4ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKKyAgICBpbnQgc3RhcnRLZXJu
ZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNsaXBSaWdodCAr
IDEpICogNCk7CisKKyAgICBmb3IgKGludCB5ID0geUVuZCArIDE7IHkgPiB5U3RhcnQ7IC0teSkg
eworICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0teCkgeworICAg
ICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXpl
KCkgLSAxOworICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJuZWxQaXhlbDsK
KyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7
CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMV0gPSAw
OworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7
CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVs
UGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2Vy
bmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICB0b3Rh
bHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNf
Y2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsr
KSk7CisgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSkKKyAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKKyAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwor
ICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKCEtLXdp
ZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNl
OworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndp
ZHRoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdE
YXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOworICAgICAgICAg
ICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0OworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSB4SW5jcmVhc2U7CisgICAgfQor
fQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQoreworICAgIGlmICh4ID49IDAgJiYgeCA8IHBh
aW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCisg
ICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7CisKKyAgICBz
d2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdlTW9kZSkgeworICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RF
X05PTkUKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgor
ICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgZWxzZSBpZiAo
eCA+PSBwYWludGluZ0RhdGEud2lkdGgpCisgICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndp
ZHRoIC0gMTsKKyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAgICAgeSA9IDA7CisgICAgICAg
IGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgICAgIHkgPSBwYWlu
dGluZ0RhdGEuaGVpZ2h0IC0gMTsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndp
ZHRoICsgeCkgPDwgMjsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAgIHdoaWxlICh4
IDwgMCkKKyAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB4ICU9
IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgd2hpbGUgKHkgPCAwKQorICAgICAgICAgICAg
eSArPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWln
aHQ7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Cisg
ICAgfQorfQorCisvLyBGb3Igb3RoZXIgcmVnaW9ucyB0aGFuIEMKK3N0YXRpYyB2b2lkIHNldE91
dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpCit7CisgICAgaW50IHBpeGVsID0gKHkxICogcGFpbnRpbmdEYXRhLndpZHRo
ICsgeDEpICogNDsKKyAgICBpbnQgaGVpZ2h0ID0geTIgLSB5MTsKKyAgICBpbnQgd2lkdGggPSB4
MiAtIHgxOworICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0gcGFpbnRpbmdEYXRhLnRh
cmdldE9mZnNldC54KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQ
aXhlbFg7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBwYWludGluZ0RhdGEudGFy
Z2V0T2Zmc2V0LnkoKTsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAt
IHdpZHRoKSAqIDQ7CisgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50
cworICAgIGZsb2F0IHRvdGFsc1s0XTsKKworICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwg
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50
aW5nRGF0YS5kaXZpc29yKTsKKworICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkp
IHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CisgICAgICAgICAg
ICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7
CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CisgICAg
ICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgICAgICAg
ICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOworCisgICAgICAg
ICAgICB0b3RhbHNbMF0gPSAwOworICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKKyAgICAgICAg
ICAgIHRvdGFsc1syXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbM10gPSAwOworCisgICAgICAg
ICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAgIGludCBwaXhl
bEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVs
UGl4ZWxZKTsKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKHBpeGVsSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50
aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0ocGl4ZWxJbmRleCArIDIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDApCisgICAg
ICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS5pdGVtKHBpeGVsSW5kZXggKyAzKSk7CisgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFg7
CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIS0t
d2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQ
aXhlbFg7CisgICAgICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOworICAgICAgICAgICAg
ICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBp
eGVscyhwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJy
YXksIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlh
cywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOworICAgICAgICAgICAgKytzdGFydEtlcm5l
bFBpeGVsWDsKKyAgICAgICAgfQorICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CisgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7CisgICAgICAgICsrc3RhcnRL
ZXJuZWxQaXhlbFk7CisgICAgfQorfQorCitib29sIEZFQ29udm9sdmVNYXRyaXg6OmFwcGx5U29m
dHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChp
bnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOwor
CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihtX3ByZXNl
cnZlQWxwaGEgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFy
cmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VS
ZWN0ID0gSW50UmVjdChnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKG91dHB1
dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VSZWN0KCkpKTsKKworICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gaW5wdXRQaXhlbEFycmF5OworICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCisg
ICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIGVsc2UKKyAgICAgICAgaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQu
Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgb3V0
cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworCisgICAgaWYgKCFpbnB1dFBp
eGVsQXJyYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFNpemUgcGFpbnRTaXpl
ID0gSW50U2l6ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CisKKyAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhID0geworICAgICAgICAqaW5wdXRQaXhlbEFycmF5LAorICAgICAgICBvdXRwdXRQ
aXhlbEFycmF5LAorICAgICAgICBwYWludFNpemUud2lkdGgoKSwKKyAgICAgICAgcGFpbnRTaXpl
LmhlaWdodCgpLAorICAgICAgICAKKyAgICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rp
dmlzb3IsCisgICAgICAgIG1fYmlhcyAqIDI1NSwKKyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisg
ICAgICAgIG1fZWRnZU1vZGUsCisgICAgICAgIG1fcHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVD
b2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICB9OworCisg
ICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBw
YWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90
dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworCisgICAg
aWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8gUmFyZSBz
aXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaW50IGl0ZXJhdGlv
bnMgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbikgeworICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJh
dGlvbnM7CisgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAx
KSAvIHN0cmlkZTsKKworICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0Nv
dW50LCBbJl0oc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlk
ZSAqIGluZGV4KTsKKyAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUg
KiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRp
bmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xp
cFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBtX3Rh
cmdldE9mZnNldC55KCkgKyAxOworICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgp
LCBtX3RhcmdldE9mZnNldC55KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0
b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX3Rh
cmdldE9mZnNldC54KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsK
KyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9OyAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIwNzYxYjA0OWZlN2ZjNmIwMDhk
MGYzNDk5OTFkMDA1M2FjMWEzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQoreworICAgIGNvbnN0
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhl
bCArIHkgKiByb3dCeXRlczsKK30KKworYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0
d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
eENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworICAgIEFTU0VSVChtX3lDaGFu
bmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKKyAgICAKKyAgICBBU1NFUlQoaW5wdXRz
LnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKyAgICBh
dXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVm
ZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNv
bHV0ZUNvb3JkaW5hdGVzKG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VSZWN0KCkpOwor
ICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZlciA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0ludFJlY3Qob3V0cHV0SW1h
Z2VSZWN0KSk7CisgICAgCisgICAgYXV0byBvdXRwdXQySW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29u
dmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0Mi5pbWFn
ZVJlY3QoKSk7CisgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVz
IGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29s
b3IgdmFsdWVzLgorICAgIGF1dG8gaW5wdXQyUGl4ZWxCdWZmZXIgPSBpbnB1dDIuZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBlbmNsb3NpbmdJ
bnRSZWN0KG91dHB1dDJJbWFnZVJlY3QpKTsKKworICAgIGlmICghaW5wdXRQaXhlbEJ1ZmZlciB8
fCAhaW5wdXQyUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VS
VChpbnB1dFBpeGVsQnVmZmVyLT5sZW5ndGgoKSA9PSBpbnB1dDJQaXhlbEJ1ZmZlci0+bGVuZ3Ro
KCkpOworCisgICAgYXV0byBwYWludFNpemUgPSBleHBhbmRlZEludFNpemUob3V0cHV0LmxvZ2lj
YWxTaXplKCkpOworCisgICAgYXV0byBzY2FsZSA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRl
Q29vcmRpbmF0ZXMoeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIGZsb2F0IHNjYWxlRm9yQ29s
b3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0g
c2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0g
c2NhbGUud2lkdGgoKSAqIDAuNTsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2Nh
bGUuaGVpZ2h0KCkgKiAwLjU7CisgICAgCisgICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0g
eENoYW5uZWxJbmRleCgpOworICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVs
SW5kZXgoKTsKKworICAgIGludCByb3dCeXRlcyA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKKwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAg
ICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsKKworICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGludCBk
ZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xv
clggKiBpbnB1dDJQaXhlbEJ1ZmZlci0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2Vt
ZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkg
KyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogaW5wdXQyUGl4ZWxCdWZmZXItPml0
ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNl
dFkpOworCisgICAgICAgICAgICB1bnNpZ25lZCogb3V0cHV0UGl4ZWxQdHIgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbklu
ZGV4KTsKKyAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0
aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7CisgICAgICAg
ICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCkgKyBieXRlT2Zmc2V0
T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ2Njc2ODI2
NDY0ODJmOTdiODQ1MjczZTIyOGNkNjc3MWJkOTk5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNv
ZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQo
aW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsK
KworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFp
bnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdl
ID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBibHVyUmFkaXVzID0gMiAqIGdlb21ldHJ5LnJlc29s
dmVUb0Fic29sdXRlQ29vcmRpbmF0ZXMoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2aWF0aW9u
WSB9KTsKKyAgICBhdXRvIG9mZnNldCA9IGdlb21ldHJ5LnJlc29sdmVUb0Fic29sdXRlQ29vcmRp
bmF0ZXMoeyBtX2R4LCBtX2R5IH0pOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGlucHV0
LmltYWdlUmVjdCgpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJz
b2x1dGVDb29yZGluYXRlcyhpbnB1dEltYWdlUmVjdCwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKwor
ICAgIGF1dG8gaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0ID0gaW5wdXRJbWFnZVJlY3Q7CisgICAg
aW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKworICAgIGF1dG8mIG91dHB1
dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIG91dHB1dENvbnRleHQuc2V0
QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKKyAgICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0KTsKKyAgICBvdXRwdXRDb250
ZXh0LnNldEFscGhhKDEpOworCisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRp
dXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CisKKyAgICBhdXRvIGZvcm1hdCA9IFBpeGVsQnVm
ZmVyRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBvdXRwdXQuY29sb3JTcGFjZSgpIH07CisgICAgYXV0byBzaGFkb3dBcmVh
ID0gSW50UmVjdCB7IEludFBvaW50KCksIG91dHB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpIH07Cisg
ICAgYXV0byBzaGFkb3dQaXhlbEJ1ZmZlciA9IG91dHB1dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIHNoYWRvd0FyZWEpOworICAgIGlmICghc2hhZG93UGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgc2hhZG93UGl4ZWxBcnJheSA9IHNoYWRvd1Bp
eGVsQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzaGFk
b3dQaXhlbEFycmF5LmRhdGEoKSwgc2hhZG93UGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHNoYWRv
d1BpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CisKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4
ZWxCdWZmZXIoKnNoYWRvd1BpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKKworICAgIG91dHB1dENv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7
CisgICAgb3V0cHV0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRw
dXQubG9naWNhbFNpemUoKSksIG1fc2hhZG93Q29sb3IpOworICAgIG91dHB1dENvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwor
CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1h
Z2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyYmVh
ZTEwYmU1MGVlY2YxOTk0YjdlZjVjOTRhZDUxZjYwOTU4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RT
b2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRkVGbG9vZC5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNs
dWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUZsb29k
OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIGF1dG8gb3V0cHV0SW1h
Z2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGNvbG9yID0gbV9mbG9vZENvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KG1fZmxvb2RPcGFjaXR5KTsKKyAgICBvdXRwdXRJbWFnZS0+Y29u
dGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dEltYWdlLT5sb2dp
Y2FsU2l6ZSgpKSwgY29sb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNDQ4YzI0OWNlMjYwMTg1N2RjYmUzZWRlMjU2M2VlNGE4ZmVi
MzdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDQ1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwu
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVHYXVz
c2lhbkJsdXIuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmls
dGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24o
aW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQm
IGRlbHRhUmlnaHQpCit7CisgICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2Zp
bHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMuCisgICAgc3dpdGNo
IChibHVySXRlcmF0aW9uKSB7CisgICAgY2FzZSAwOgorICAgICAgICBpZiAoIShyYWRpdXMgJSAy
KSkgeworICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7CisgICAgICAgICAg
ICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKKyAgICAgICAgICAgIGRlbHRhUmlnaHQg
PSByYWRpdXMgLSBkZWx0YUxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAxOgorICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgeworICAgICAgICAgICAgZGVsdGFMZWZ0
Kys7CisgICAgICAgICAgICBkZWx0YVJpZ2h0LS07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSAyOgorICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgeworICAgICAgICAgICAg
ZGVsdGFSaWdodCsrOworICAgICAgICAgICAgcmFkaXVzKys7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCisvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxw
aGEgY2hhbm5lbC4KK3N0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4
ZWxBcnJheSwKKyAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50
JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RI
ZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKK3sKKyAgICBjb25zdCB1aW50OF90KiBz
cmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7CisgICAgdWludDhfdCogZHN0RGF0YSA9IGRz
dFBpeGVsQXJyYXkuZGF0YSgpOworICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJHQkEsIHpl
cm8taW5kZXggYmFzZWQuCisgICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOworCisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgeworICAgICAgICBpbnQgbGluZSA9IHkg
KiBzdHJpZGVMaW5lOworICAgICAgICBpbnQgc3VtID0gMDsKKworICAgICAgICAvLyBGaWxsIHRo
ZSBrZXJuZWwuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytp
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKKyAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisgICAg
ICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Qmx1cnJpbmcuCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkg
eworICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJp
ZGUgKyBjaGFubmVsOworICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBp
eGVsQnl0ZU9mZnNldDsKKyAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW0gLyBkeCk7CisKKyAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KKyAgICAgICAgICAg
IGlmICh4ID49IGR4TGVmdCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQg
PSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgY29u
c3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgc3VtIC09ICpzcmNQdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh4ICsg
ZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRP
ZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKKyAgICAg
ICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAorICAg
IHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0
cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUlt
YWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAgY29uc3QgaW50IG1heEtlcm5lbFNp
emUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7CisgICAgaWYgKGFscGhhSW1hZ2Up
CisgICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQXJyYXksIGRzdFBpeGVs
QXJyYXksIGR4LCBkeExlZnQsIGR4UmlnaHQsIHN0cmlkZSwgc3RyaWRlTGluZSwgIGVmZmVjdFdp
ZHRoLCBlZmZlY3RIZWlnaHQsIG1heEtlcm5lbFNpemUpOworCisgICAgY29uc3QgdWludDhfdCog
c3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOworICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBk
c3RQaXhlbEFycmF5LmRhdGEoKTsKKworICAgIC8vIENvbmNlcm5pbmcgdGhlIGFycmF5IHdpZHRo
L2xlbmd0aDogaXQgaXMgRWxlbWVudCBzaXplICsgTWFyZ2luICsgQm9yZGVyLiBUaGUgbnVtYmVy
IG9mIHBpeGVscyB3aWxsIGJlCisgICAgLy8gUCA9IHdpZHRoICogaGVpZ2h0ICogY2hhbm5lbHMu
CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgeworICAgICAgICBp
bnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOworICAgICAgICBpbnQgc3VtUiA9IDAsIHN1bUcgPSAw
LCBzdW1CID0gMCwgc3VtQSA9IDA7CisKKyAgICAgICAgaWYgKGVkZ2VNb2RlID09IEVER0VNT0RF
X05PTkUpIHsKKyAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgY29u
c3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKKyAgICAgICAgICAgICAgICBz
dW1SICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKKyAg
ICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICBzdW1BICs9
ICpzcmNQdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEJsdXJyaW5nLgorICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Cisg
ICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNl
dDsKKworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1
bVIgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtRyAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1CIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdW1BIC8gZHgpOworCisgICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVs
LgorICAgICAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgeworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRl
OworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsg
bGVmdE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07CisgICAg
ICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOworICAgICAgICAgICAgICAgICAgICBz
dW1CIC09IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwg
ZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQg
PSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAgICAgICBzdW1H
ICs9IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07Cisg
ICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgaGVyZS4KKyAgICAgICAgICAgIC8vIEdldCBlZGdlIHZh
bHVlcyBmb3IgZWRnZU1vZGUgJ2R1cGxpY2F0ZScuCisgICAgICAgICAgICBjb25zdCB1aW50OF90
KiBlZGdlVmFsdWVMZWZ0ID0gc3JjRGF0YSArIGxpbmU7CisgICAgICAgICAgICBjb25zdCB1aW50
OF90KiBlZGdlVmFsdWVSaWdodCAgPSBzcmNEYXRhICsgKGxpbmUgKyAoZWZmZWN0V2lkdGggLSAx
KSAqIHN0cmlkZSk7CisKKyAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSBkeExlZnQgKiAtMTsgaSA8IGR4UmlnaHQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIC8vIElzIHRoaXMgcmlnaHQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBvZiAnaSc/Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7CisgICAg
ICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKKwor
ICAgICAgICAgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IGVkZ2VWYWx1ZUxlZnRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVl
TGVmdFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVMZWZ0WzJdOwor
ICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZUxlZnRbM107CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChpID49IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAg
IHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0g
ZWRnZVZhbHVlUmlnaHRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVl
UmlnaHRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSAq
c3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOworICAgICAg
ICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgc3Vt
QSArPSAqc3JjUHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gQmx1cnJpbmcuCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVj
dFdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSBsaW5lICsgeCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBk
c3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OworCisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOworICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7CisgICAgICAgICAgICAg
ICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisgICAgICAgICAgICAgICAgaWYgKHggPCBkeExlZnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBlZGdlVmFsdWVMZWZ0WzBdOworICAgICAg
ICAgICAgICAgICAgICBzdW1HIC09IGVkZ2VWYWx1ZUxlZnRbMV07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUIgLT0gZWRnZVZhbHVlTGVmdFsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSAt
PSBlZGdlVmFsdWVMZWZ0WzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQg
KiBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNy
Y0RhdGEgKyBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clsw
XTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07CisgICAgICAgICAgICAg
ICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNy
Y1B0clszXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoeCArIGR4
UmlnaHQgPj0gZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdl
VmFsdWVSaWdodFswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdo
dFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKKyAg
ICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9
IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcg
Kz0gc3JjUHRyWzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKKyAg
ICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUp
CitzdGF0aWMgaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQorewor
ICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChlZmZlY3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCByYWRpdXMuCisgICAgaWYgKGtlcm5l
bFNpemUgJSAyICE9IDEpCisgICAgICAgIGtlcm5lbFNpemUgKz0gMTsKKworICAgIHZJbWFnZV9C
dWZmZXIgZWZmZWN0SW5CdWZmZXI7CisgICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IHN0YXRpY19j
YXN0PHZvaWQqPihpb0J1ZmZlci5kYXRhKCkpOworICAgIGVmZmVjdEluQnVmZmVyLndpZHRoID0g
ZWZmZWN0V2lkdGg7CisgICAgZWZmZWN0SW5CdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0Owor
ICAgIGVmZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOworCisgICAgdkltYWdlX0J1ZmZl
ciBlZmZlY3RPdXRCdWZmZXI7CisgICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVy
LmRhdGEoKTsKKyAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKKyAgICBl
ZmZlY3RPdXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OworICAgIGVmZmVjdE91dEJ1ZmZl
ci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIC8vIERldGVybWluZSB0aGUgc2l6ZSBvZiBhIHRl
bXBvcmFyeSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gZmlyc3Qgd2l0aCBhIHNwZWNp
YWwgZmxhZy4gdkltYWdlIHdpbGwgcmV0dXJuCisgICAgLy8gdGhlIHNpemUgbmVlZGVkLCBvciBh
biBlcnJvciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCisgICAgc2l6ZV90IHRtcEJ1ZmZlclNp
emUgPSB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RP
dXRCdWZmZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdl
RXh0ZW5kIHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsKKyAgICBpZiAodG1wQnVmZmVyU2l6
ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICB2b2lkKiB0bXBCdWZmZXIgPSBmYXN0TWFs
bG9jKHRtcEJ1ZmZlclNpemUpOworICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZl
Y3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXpl
LCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7CisgICAgdkltYWdlQm94Q29udm9s
dmVfQVJHQjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVjdEluQnVmZmVyLCB0bXBCdWZmZXIs
IDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAg
ICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRC
dWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQpOworICAgIFdURjo6ZmFzdEZyZWUodG1wQnVmZmVyKTsKKworICAgIC8vIFRo
ZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KKyAgICBBU1NFUlQo
aW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5ndGgoKSk7CisgICAgbWVtY3B5KGlv
QnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKK30K
KyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYg
cGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorewor
ICAgIGludCBkeExlZnQgPSAwOworICAgIGludCBkeFJpZ2h0ID0gMDsKKyAgICBpbnQgZHlMZWZ0
ID0gMDsKKyAgICBpbnQgZHlSaWdodCA9IDA7CisgICAgCisgICAgVWludDhDbGFtcGVkQXJyYXkq
IGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIHRvQnVmZmVy
ID0gJnRlbXBCdWZmZXI7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAg
ICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKKyAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtl
cm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQpOworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKKyAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQorICAgICAgICAgICAgICAgIGJveEJs
dXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4Umln
aHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRv
QnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6
ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VNb2RlKTsKKyNlbHNlCisg
ICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBk
eExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5o
ZWlnaHQoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CisjZW5kaWYKKyAgICAgICAgICAgIHN0
ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
a2VybmVsU2l6ZVkpIHsKKyAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZ
LCBkeUxlZnQsIGR5UmlnaHQpOworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICAg
ICAgICAgIGlmICghaXNBbHBoYUltYWdlKQorICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpm
cm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlk
ZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBr
ZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQo
KSwgcGFpbnRTaXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKKyNlbHNlCisgICAgICAgICAg
ICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5
UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwg
aXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CisjZW5kaWYKKyAgICAgICAgICAgIHN0ZDo6c3dhcChm
cm9tQnVmZmVyLCB0b0J1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgZmlu
YWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisgICAgaWYgKCZpb0J1ZmZl
ciAhPSBmcm9tQnVmZmVyKSB7CisgICAgICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBm
cm9tQnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZy
b21CdWZmZXItPmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOworICAgIH0KK30KKworc3RhdGlj
IGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxw
aGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIGludCBzdHJpZGUgPSA0ICog
cGFpbnRTaXplLndpZHRoKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBpZiAoa2VybmVs
U2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVER0VNT0RFX05PTkUgfHwgZWRn
ZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgeworICAgICAgICBhY2NlbGVyYXRlQm94Qmx1
cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXpl
LndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2Vy
bmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBl
ZGdlTW9kZSk7Cit9CisKKyNpZiAhVVNFKEFDQ0VMRVJBVEUpCitzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAg
IEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQp
OworICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRl
cnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMt
Pmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKK30KKyNl
bmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9v
bCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyNpZiAhVVNFKEFDQ0VM
RVJBVEUpCisgICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOworICAgIGlu
dCBleHRyYUhlaWdodCA9IDMgKiBrZXJuZWxTaXplWSAqIDAuNWY7CisgICAgaW50IG9wdGltYWxU
aHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8g
KHNfbWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgp
KTsKKworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICBXVEY6OlBh
cmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9y
bUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKworICAgICAgICBpbnQgam9icyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKKyAgICAgICAgaWYgKGpvYnMgPiAxKSB7Cisg
ICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2Jz
IGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2lu
Y2UKKyAgICAgICAgICAgIC8vIGJsb2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNl
IGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KKyAg
ICAgICAgICAgIGNvbnN0IGludCBibG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpv
YnM7CisgICAgICAgICAgICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWln
aHQoKSAlIGpvYnM7CisKKyAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7CisgICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBqb2IrKykgeworICAgICAgICAgICAgICAg
IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGpvYik7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7CisKKyAgICAgICAg
ICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0Owor
ICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hl
aWdodCArIDEgOiBibG9ja0hlaWdodDsKKyAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9
PSBqb2JzIC0gMSA/IGN1cnJlbnRZIDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKKworICAgICAg
ICAgICAgICAgIGludCBibG9ja1NpemUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWpvYikgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9Q
aXhlbEFycmF5ID0gJmlvQnVmZmVyOworICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4
ZWxBcnJheSA9ICZ0bXBQaXhlbEFycmF5OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOworICAgICAgICAgICAgICAgICAgICBwYXJh
bXMudG1wUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVk
KGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFy
cmF5LT5kYXRhKCksIGlvQnVmZmVyLmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1Np
emUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9
IHBhaW50U2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZ
IC0gc3RhcnRZOworICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNp
emVYOworICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOworCisg
ICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCisgICAg
ICAgICAgICBjdXJyZW50WSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2Ig
PCBqb2JzOyBqb2IrKykgeworICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CisgICAgICAgICAgICAgICAg
aW50IHNvdXJjZU9mZnNldDsKKyAgICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7
CisgICAgICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICAgICAgaW50IGFkanVzdGVk
QmxvY2tIZWlnaHQgPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxv
Y2tIZWlnaHQ7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVp
Z2h0OworICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2Nhbmxp
bmU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5s
aW5lOworICAgICAgICAgICAgICAgIHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2Nhbmxp
bmU7CisKKyAgICAgICAgICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRp
b25PZmZzZXQsIHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCisgICAgfQorI2VuZGlmCisK
KyAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFt
aWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgorICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVm
ZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSwg
aXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7Cit9CisKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmFwcGx5
U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VS
VChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgp
OworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFy
cmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICAKKyAgICBhdXRvIG91dHB1dElt
YWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMob3V0cHV0Lmlt
YWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZm
ZXIob3V0cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgZW5jbG9zaW5nSW50UmVjdChvdXRwdXRJbWFnZVJlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNl
KCkpOworICAgIGlmICghbV9zdGREZXZpYXRpb25YICYmICFtX3N0ZERldmlhdGlvblkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVs
U2l6ZShnZW9tZXRyeS5yZXNvbHZlVG9BYnNvbHV0ZUNvb3JkaW5hdGVzKHsgbV9zdGREZXZpYXRp
b25YLCBtX3N0ZERldmlhdGlvblkgfSkpOworICAgIGF1dG8gcGFpbnRTaXplID0gSW50U2l6ZShv
dXRwdXQubG9naWNhbFNpemUoKSk7CisKKyAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xh
bXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsK
KyAgICBpZiAoIXRtcEltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcGxh
dGZvcm1BcHBseShvdXRwdXRQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndp
ZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSwgb3V0cHV0LmlzQWxwaGFJbWFn
ZSgpLCBtX2VkZ2VNb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg3OTgzN2I0ZmEwNWE2MmFjYzBhZGMzNWExYjhhNTExMDAxMjdlZTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGRUxpZ2h0aW5nLmgiCisKKyNpbmNsdWRlICJMaWdodGluZ0RhdGEuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1h
Z2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVy
R2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09
IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBvdXRw
dXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxC
dWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29u
dmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0LmltYWdl
UmVjdCgpKTsKKworICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcihvdXRwdXRQaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KG91dHB1dEltYWdl
UmVjdCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICAvLyBGSVhNRTogc3VwcG9ydCBr
ZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0
IHRoZSBXMworICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBv
dGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQorICAgIC8vIG91dHB1dCBm
b3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUg
cmVsaWFibGUuCisgICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVz
ZSB0aGUgaW1wbGVtZW50YXRpb24KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTU2NDI3YjY0ZWQ4Mzg5MDgxYjhjMWMzMGU2NzA5NzlhYjc5ZGM5NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVNZXJnZS5oIgorCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBGRU1lcmdlOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBy
ZXN1bHQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlucHV0cy5pc0VtcHR5KCkpOwor
CisgICAgYXV0byByZXN1bHRJbWFnZSA9IHJlc3VsdC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICgh
cmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1
dG8mIGlucHV0IDogaW5wdXRzKSB7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC0+
aW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRU
b0Fic29sdXRlQ29vcmRpbmF0ZXMoaW5wdXQtPmltYWdlUmVjdCgpLCByZXN1bHQuaW1hZ2VSZWN0
KCkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIs
IGltYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2Fy
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzcyZmFkMGM1OGMxMWFiY2RhOTU2NDZhMzNkNmZjY2Q2OWQyYTU1
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUg
SW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgi
CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8
d3RmL1BhcmFsbGVsSm9icy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBNb3Jw
aG9sb2d5UGFpbnRpbmdEYXRhIHsKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9w
ZXJhdG9yOworICAgIGludCByYWRpdXNYOworICAgIGludCByYWRpdXNZOworCisgICAgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkq
IGRzdFBpeGVsQXJyYXk7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7Cit9OworCitz
dHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgeworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChj
b25zdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhJiwgaW50LCBpbnQpPiBmaWxsUmVnaW9uOworICAg
IGludCBzdGFydFk7CisgICAgaW50IGVuZFk7CisgICAgY29uc3QgTW9ycGhvbG9neVBhaW50aW5n
RGF0YSogcGFpbnRpbmdEYXRhOworfTsKKwordXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4sIDE2PjsKKworc3RhdGljIGlubGluZSBpbnQgcGl4
ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKQoreworICAgIHJldHVybiAoeSAq
IHdpZHRoICsgeCkgKiA0OworfQorCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhl
bCkKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOworfQor
CitpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25l
bnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKK3sKKyAg
ICByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWlu
dDhfdD4+KGNvbXBvbmVudHMpIH07Cit9CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvciBt
b3JwaG9sb2d5T3BlcmF0b3I+CitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9w
ZXJhdG9yID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIHBl
ckNvbXBvbmVudE1pbihhLCBiKTsKKworICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7
Cit9CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitB
TFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQs
IGludCB5RW5kLCBpbnQgd2lkdGgpCit7CisgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNv
bXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5k
ZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOworCisgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7
IHkgPCB5RW5kOyArK3kpIHsKKyAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwg
eSwgd2lkdGgpKSB9KTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDxtb3JwaG9sb2d5T3Bl
cmF0b3I+KGV4dHJlbXVtLCBwaXhlbCk7CisgICAgfQorICAgIHJldHVybiBleHRyZW11bTsKK30K
KworQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVt
dW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9w
ZXJhdG9yKQoreworICAgIGlmIChtb3JwaG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX0VST0RFKQorICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZ
X09QRVJBVE9SX0VST0RFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsK
KworICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRF
PihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKK30KKwordGVtcGxhdGU8
TW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJl
bWEmIGtlcm5lbCkKK3sKKyAgICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOworICAgIGZvciAo
c2l6ZV90IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQorICAgICAgICBleHRyZW11bSA9
IG1pbk9yTWF4PG1vcnBob2xvZ3lPcGVyYXRvcj4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7CisKKyAg
ICByZXR1cm4gZXh0cmVtdW07Cit9CisKK0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9y
cGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKK3sKKyAgICBpZiAobW9ycGhvbG9n
eU9wZXJhdG9yID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJu
IGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKKwor
ICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihr
ZXJuZWwpOworfQorCitzdGF0aWMgdm9pZCBmaWxsUmVnaW9uKGNvbnN0IE1vcnBob2xvZ3lQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgQVNT
RVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBh
aW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OworCisgICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWlu
dGluZ0RhdGEucmFkaXVzWDsKKyAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5y
YWRpdXNZOworICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICBj
b25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKworICAgIEFTU0VSVChyYWRp
dXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQoc3RhcnRZID49
IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7CisKKyAgICBDb2x1bW5FeHRy
ZW1hIGV4dHJlbWE7CisgICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRp
dXNYICsgMSk7CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Cisg
ICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7CisgICAg
ICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwor
CisgICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOworCisgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRo
ZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4K
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCisgICAgICAgICAgICBl
eHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yKSk7
CisKKyAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1
bW4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAg
ICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVu
ZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0
LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpOwor
CisgICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5y
ZW1vdmUoMCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgo
eCwgeSwgd2lkdGgpKTsKKyAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZy
b21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLm1v
cnBob2xvZ3lPcGVyYXRvcikpLnZhbHVlOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkK
K3sKKyAgICBwYXJhbS0+ZmlsbFJlZ2lvbigqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0
YXJ0WSwgcGFyYW0tPmVuZFkpOworfQorCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0
IE1vcnBob2xvZ3lQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICAvLyBFbXBpcmlj
YWxseSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2Vy
bmVsIHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgorICAgIGZsb2F0IGtlcm5lbEZh
Y3RvciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkg
KiAwLjY1OworCisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjAp
OyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIAorICAgIHVu
c2lnbmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKKyAgICB1bnNp
Z25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0Rh
dGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxB
cmVhLCBtYXhOdW1UaHJlYWRzKTsKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsK
KyAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFs
bGVsSm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAg
ICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAg
ICAgICBpZiAobnVtT2ZUaHJlYWRzID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpv
YiBpbnRvICJqb2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVl
ZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAgIC8vIGpvYlNpemUgKiBq
b2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5k
ZXIgImpvYnNXaXRoRXh0cmEiLgorICAgICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0Rh
dGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEg
PSBwYWludGluZ0RhdGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGN1
cnJlbnRZID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7
IGpvYiA+PSAwOyAtLWpvYikgeworICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAg
ICBwYXJhbS5maWxsUmVnaW9uID0gZmlsbFJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbS5z
dGFydFkgPSBjdXJyZW50WTsKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2Jz
V2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOworICAgICAgICAgICAgICAgIHBhcmFt
LmVuZFkgPSBjdXJyZW50WTsKKyAgICAgICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAm
cGFpbnRpbmdEYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4
ZWN1dGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxs
YmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCisgICAgfQorCisgICAgZmlsbFJlZ2lvbihwYWlu
dGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCBwbGF0
Zm9ybUFwcGx5RGVnZW5lcmF0ZShGaWx0ZXJJbWFnZSYgaW4sIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
c3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQoreworICAg
IGlmIChyYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kp
KSB7CisgICAgICAgIGluLmNvcHlQaXhlbEJ1ZmZlcihkc3RQaXhlbEFycmF5LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QsIGNvbG9yU3BhY2UpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZF
TW9ycGhvbG9neTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQg
PSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0
LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
IGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1
dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAg
YXV0byBvdXRwdXRJbWFnZVJlY3QgPSBJbnRSZWN0KGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRl
Q29vcmRpbmF0ZXMob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSkpOworCisg
ICAgSW50U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBt
X3JhZGl1c1kpKTsKKyAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoaW5wdXQsIG91dHB1
dFBpeGVsQXJyYXksIG91dHB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIG91dHB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKKyAgICBpZiAoIWlucHV0UGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZ2VvbWV0cnkucmVzb2x2ZVRvQWJz
b2x1dGVDb29yZGluYXRlcyh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBpbnQgcmFk
aXVzWCA9IHN0ZDo6bWluKG91dHB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRo
KCkpOworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4ob3V0cHV0SW1hZ2VSZWN0LmhlaWdodCgp
IC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0
ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCksIHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0Rh
dGEubW9ycGhvbG9neU9wZXJhdG9yID0gbV9tb3JwaG9sb2d5T3BlcmF0b3I7CisgICAgcGFpbnRp
bmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVz
WSA9IGNlaWxmKHJhZGl1c1kpOworCisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBp
bnB1dFBpeGVsQXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAm
b3V0cHV0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihvdXRwdXRJ
bWFnZVJlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKG91dHB1
dEltYWdlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVP
ZmZzZXRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyYmNmNjdlNjEz
MmQyNTEyMjdiMThiMjQ1OWM0NDU5ZTQ3YzlmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBGRU9mZnNldDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBp
bnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
aW5wdXRJbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbnB1dEltYWdlUmVjdC5t
b3ZlKGdlb21ldHJ5LnJlc29sdmVUb0ZpbHRlckNvb3JkaW5hdGVzKHsgbV9keCwgbV9keSB9KSk7
CisgICAgaW5wdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5h
dGVzKGlucHV0SW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworCisgICAgb3V0cHV0SW1h
Z2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVRpbGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjExNGQ2OWRkYzRi
NGQxZDc2NTM3NDI5ZDgxNjE5NDRjNmZiODA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5j
cHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
UGF0dGVybi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVUaWxlOjphcHBseVNv
ZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQo
aW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsK
KworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFp
bnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdl
ID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGlucHV0LmltYWdlUmVj
dCgpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29y
ZGluYXRlcyhpbnB1dEltYWdlUmVjdCk7CisKKyAgICBhdXRvIHRpbGVSZWN0ID0gZ2VvbWV0cnku
bWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICB0
aWxlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXModGlsZVJlY3Qp
OworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBvdXRwdXQuaW1hZ2VSZWN0KCk7CisgICAg
b3V0cHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhv
dXRwdXRJbWFnZVJlY3QpOworCisgICAgYXV0byBtYXhPdXRwdXRSZWN0ID0gZ2VvbWV0cnkubWF4
UHJpbWl0aXZlU3VicmVnaW9uKG91dHB1dC5wcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgbWF4
T3V0cHV0UmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMobWF4T3V0
cHV0UmVjdCk7CisKKyAgICBhdXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUodGlsZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAo
IXRpbGVJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3ND
b250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0KCk7Cisg
ICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkpOworICAg
IHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdl
UmVjdC5sb2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNp
bmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBpZiAoIXRp
bGVJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHBh
dHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3Qu
bG9jYXRpb24oKSAtIG1heE91dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHBhdHRl
cm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwg
dHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgb3V0cHV0
Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRG
aWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKyAgICAKKyAgICBvdXRwdXRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dEltYWdlUmVjdC5zaXplKCkpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTJm
NjI0MGQ2OTVmMzFmMWRmMDM4NzU0OWE1M2YzZjdjOGViNDg1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1
bGVuY2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXJh
bGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdHVyYnVsZW5jZSBj
YWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4g
dGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzEx
L2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKKworLyoKKyAgICBQcm9kdWNlcyByZXN1bHRzIGlu
IHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAoYSAqIHIp
IG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9IHJhbmRN
YXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2VlIFtQYXJr
ICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKKyAgICBU
byB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2
NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBz
ZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKK3N0
YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEK
K3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1p
dGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAv
IGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0YXRpYyBj
b25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNr
ID0gc19ibG9ja1NpemUgLSAxOworCitzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1l
bnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVs
IGpvYnMuCisKK3N0cnVjdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhIHsKKyAgICBUdXJidWxlbmNl
UGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQs
IGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAgICAgICAg
OiB0dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkKKyAgICAgICAgLCBiYXNlRnJlcXVlbmN5
WChiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5
WSkKKyAgICAgICAgLCBudW1PY3RhdmVzKG51bU9jdGF2ZXMpCisgICAgICAgICwgc2VlZChzZWVk
KQorICAgICAgICAsIHN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKQorICAgICAgICAsIHBhaW50aW5n
U2l6ZShwYWludGluZ1NpemUpCisgICAgeworICAgIH0KKworICAgIC8vIENvbXB1dGUgcHNldWRv
IHJhbmRvbSBudW1iZXIuCisgICAgaW5saW5lIGxvbmcgcmFuZG9tKCkKKyAgICB7CisgICAgICAg
IGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFu
ZFIgKiAoc2VlZCAvIHNfcmFuZFEpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApCisgICAgICAg
ICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKKyAgICAgICAgc2VlZCA9IHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUdXJidWxlbmNlVHlwZSB0dXJidWxl
bmNlVHlwZTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNlRnJlcXVl
bmN5WTsKKyAgICBpbnQgbnVtT2N0YXZlczsKKyAgICBsb25nIHNlZWQ7CisgICAgYm9vbCBzdGl0
Y2hUaWxlczsKKyAgICBJbnRTaXplIHBhaW50aW5nU2l6ZTsKKworICAgIGludCBsYXR0aWNlU2Vs
ZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07CisgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNf
YmxvY2tTaXplICsgMl1bMl07Cit9OworCitzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAgU3RpdGNo
RGF0YSgpID0gZGVmYXVsdDsKKworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8g
c3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAgfTsgLy8g
TWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAgaW50IHdy
YXBZIHsgMCB9OworfTsKKworc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKKyAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0aXRjaERh
dGEsIGludCwgaW50KT4gZmlsbFJlZ2lvbjsKKyAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxB
cnJheTsKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJz
b2x1dGVUcmFuc2Zvcm07CisgICAgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRh
OworICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICBpbnQgc3RhcnRZOworICAgIGludCBl
bmRZOworfTsKKworaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCit7CisgICAgcmV0
dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Cit9CisKK2lubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBv
bGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgKyB0ICog
KGIgLSBhKTsKK30KKworc3RhdGljIHZvaWQgaW5pdFBhaW50KFR1cmJ1bGVuY2VQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOworCisg
ICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVt
IC0gMV0uCisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCisgICAgICAgIHBhaW50aW5n
RGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsg
MTsKKyAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKKyAgICAg
ICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKworICAgIGZsb2F0KiBn
cmFkaWVudDsKKyAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5l
bCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKKyAg
ICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOworICAgICAgICAg
ICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CisgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tT
aXplKSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkg
LSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCFncmFk
aWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOworICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3Rv
ciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGdy
YWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgICAgICBncmFkaWVudFsx
XSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChp
bnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpbnQgayA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGludCBqID0gcGFpbnRpbmdE
YXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7CisgICAgICAgIEFTU0VSVChqID49IDApOworICAg
ICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsK
KyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CisgICAgfQorCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hh
bm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50
W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hh
bm5lbF1baV1bMF07CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
c19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsx
XTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRj
aGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNl
RnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lk
dGgoKTsKKyAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgQVNT
RVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOworCisgICAgLy8gV2hlbiBzdGl0
Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQK
KyAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgorICAg
IGlmIChiYXNlRnJlcXVlbmN5WCkgeworICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9v
cmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICBmbG9h
dCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGls
ZVdpZHRoOworICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUg
YWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8g
bG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAg
ICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKKyAgICB9CisgICAgaWYgKGJhc2VG
cmVxdWVuY3lZKSB7CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVp
Z2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgZmxvYXQgaGlnaEZy
ZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0
OworICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVl
bmN5IC8gYmFzZUZyZXF1ZW5jeVkpCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0Zy
ZXF1ZW5jeTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdo
RnJlcXVlbmN5OworICAgIH0KKworICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICBzdGl0
Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKKyAgICBz
dGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAg
c3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsK
KyAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0
OworCisgICAgcmV0dXJuIHN0aXRjaERhdGE7Cit9CisKKy8vIFRoaXMgaXMgdGFrZW4gMToxIGZy
b20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2VFbGVtZW50Lgorc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2Uy
RChjb25zdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRj
aERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQoreworICAg
IHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKKyAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBp
biB0aGUgc3BlYyB0ZXh0LgorICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0
aGUgc3BlYyB0ZXh0LgorICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhl
IHNwZWMgdGV4dC4KKworICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOworICAgICAgICAg
ICAgLy8gIGJ4MCA9IChpbnQpdDsKKyAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKKyAgICAg
ICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0OworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24g
PSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsK
KyAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQorICAg
ICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSB3cmFwU2l6ZSkKKyAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOworCisg
ICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAg
ICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYgKG5leHRJ
bmRleCA+PSB3cmFwU2l6ZSkKKyAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54
KCkpOworICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7CisKKyAgICAv
LyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBp
ZiAocGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgIG5vaXNlWC5zdGl0Y2goc3Rp
dGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFwWCk7CisgICAgICAgIG5vaXNlWS5zdGl0Y2go
c3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOworICAgIH0KKworICAgIC8vIGJ4
MCAmPSBCTTsKKyAgICAvLyBieDEgJj0gQk07CisgICAgLy8gYnkwICY9IEJNOworICAgIC8vIGJ5
MSAmPSBCTTsKKyAgICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VYLm5l
eHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7
CisgICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKworICAgIC8vIGkgPSB1TGF0
dGljZVNlbGVjdG9yW2J4MF07CisgICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKKyAg
ICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgu
aW5kZXhdOworICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VT
ZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKKworICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUo
cngwKSk7CisgICAgLy8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKKyAgICBmbG9hdCBzeCA9
IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7CisgICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2
ZShub2lzZVkuZnJhY3Rpb24pOworCisgICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50
IGNoYW5uZWwpIHsKKyAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQor
ICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5k
ZXggKyBub2lzZVkuaW5kZXhdOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5u
ZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAgICAgY29uc3QgZmxv
YXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKKyAgICAgICAgZmxv
YXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwor
CisgICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07CisgICAgICAgIGlu
dCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBu
b2lzZVkuaW5kZXhdOworICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOworICAgICAgICAvLyBx
ID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICog
cVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwor
ICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5m
cmFjdGlvbiAqIHFbMV07CisgICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAg
ZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworCisgICAgICAgIC8vIGIw
MSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07CisgICAgICAgIGludCBiMDEgPSBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwor
ICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25D
b2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAg
cSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOworICAgICAgICB1ID0gbm9p
c2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisKKyAg
ICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKKyAgICAgICAgaW50IGIx
MSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNl
WS5uZXh0SW5kZXhdOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOworICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAt
IDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisgICAgICAgIC8vIGIg
PSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOworCisgICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKKyAgICAgICAg
cmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOworICAgIH07CisKKyAgICByZXR1
cm4geworICAgICAgICBub2lzZUZvckNoYW5uZWwoMCksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5l
bCgxKSwKKyAgICAgICAgbm9pc2VGb3JDaGFubmVsKDIpLAorICAgICAgICBub2lzZUZvckNoYW5u
ZWwoMykKKyAgICB9OworfQorCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29s
b3IgY29tcG9uZW50cy4KKy8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNS
R0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCitzdGF0
aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21w
b25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykK
K3sKKyAgICByZXR1cm4geworICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0
PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpj
bGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSks
IDAsIDI1NSksCisgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50Pihm
bG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1
KSwKKyAgICB9OworfQorCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFR1cmJ1bGVuY2VQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdDsKKyAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5n
RGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVu
Y3lZKTsKKyAgICBmbG9hdCByYXRpbyA9IDE7CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0
YXZlIDwgcGFpbnRpbmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChw
YWludGluZ0RhdGEudHVyYnVsZW5jZVR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lz
ZSkKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50
aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5n
RGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87CisKKyAgICAgICAg
bm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAgICAgbm9pc2VWZWN0
b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8gKj0gMjsKKworICAg
ICAgICBpZiAocGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRh
dGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11
bHRpcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1w
bGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndp
ZHRoICo9IDI7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEu
d3JhcFggLSBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0g
MjsKKyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAt
IHNfcGVybGluTm9pc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdmFsdWUgb2Yg
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisgICAgLy8gYW5kICh0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCisgICAgaWYgKHBhaW50
aW5nRGF0YS50dXJidWxlbmNlVHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQor
ICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAwLjVmICsgMC41ZjsKKworICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRz
KHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxSZWdpb24o
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgVHVyYnVs
ZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGlu
dCBzdGFydFksIGludCBlbmRZKQoreworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAg
IEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAgaW50
IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwg
Mik7CisgICAgQWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBhYnNvbHV0ZVRyYW5z
Zm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpOworCisgICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgeworICAgICAgICBwb2ludC5zZXRZKHBvaW50
LnkoKSArIDEpOworICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKKyAgICAg
ICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7CisgICAgICAgICAgICBGbG9hdFBvaW50
IGxvY2FsUG9pbnQgPSBpbnZlcnNlVHJhbnNmcm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRp
bmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVs
KTsKKyAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKKyAgICAgICAgfQorICAg
IH0KK30KKworc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVy
cyogcGFyYW1ldGVycykKK3sKKyAgICBwYXJhbWV0ZXJzLT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJz
LT5waXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5maWx0ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmFic29s
dXRlVHJhbnNmb3JtLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0
Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworfQorCitib29s
IEZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhl
bEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxB
cnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBJbnRTaXplIG91dHB1dFNp
emUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworICAgIEludFNpemUgdGlsZVNpemUgPSByb3VuZGVk
SW50U2l6ZShvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKKworICAgIGZsb2F0
IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNlRnJlcXVl
bmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29t
cHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBt
X3N0aXRjaFRpbGVzKTsKKworICAgIFR1cmJ1bGVuY2VQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
KG1fdHVyYnVsZW5jZVR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9udW1P
Y3RhdmVzLCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMsIHRpbGVTaXplKTsKKyAgICBpbml0UGFpbnQo
cGFpbnRpbmdEYXRhKTsKKworICAgIGF1dG8gYXJlYSA9IG91dHB1dFNpemUuYXJlYSgpOworICAg
IGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aW50IGhlaWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CisKKyAgICB1bnNpZ25lZCBtYXhOdW1U
aHJlYWRzID0gaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0g
c3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1U
aHJlYWRzKTsKKworICAgIEludFJlY3Qgb3V0cHV0SW1hZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKG91dHB1dC5pbWFnZVJlY3Qo
KSkpOworCisgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CisgICAgICAgIFdURjo6
UGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmZpbGxSZWdp
b25Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOworCisgICAgICAgIC8vIEZpbGwgdGhlIHBh
cmFtZXRlciBhcnJheQorICAgICAgICBhdXRvIG51bUpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVy
T2ZKb2JzKCk7CisgICAgICAgIGlmIChudW1Kb2JzID4gMSkgeworICAgICAgICAgICAgLy8gU3Bs
aXQgdGhlIGpvYiBpbnRvICJzdGVwWSItc2l6ZWQgam9icywgZGlzdHJpYnV0aW5nIHRoZSBleHRy
YSByb3dzIGludG8gdGhlIGZpcnN0ICJqb2JzV2l0aEV4dHJhIiBqb2JzLgorICAgICAgICAgICAg
dW5zaWduZWQgc3RlcFkgPSBoZWlnaHQgLyBudW1Kb2JzOworICAgICAgICAgICAgdW5zaWduZWQg
am9ic1dpdGhFeHRyYSA9IGhlaWdodCAlIG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBz
dGFydFkgPSAwOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9i
czsgKytpKSB7CisgICAgICAgICAgICAgICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9
IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbGxS
ZWdpb24gPSBzdGF0aWNfY2FzdDx2b2lkKCopKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFR1cmJ1bGVuY2VQYWludGluZ0Rh
dGEmLCBTdGl0Y2hEYXRhLCBpbnQsIGludCk+KCZmaWxsUmVnaW9uKTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMucGl4ZWxBcnJheSA9ICZvdXRwdXRQaXhlbEFycmF5OworICAgICAgICAgICAgICAg
IHBhcmFtcy5maWx0ZXJSZWdpb24gPSBvdXRwdXRJbWFnZVJlY3Q7CisgICAgICAgICAgICAgICAg
cGFyYW1zLmFic29sdXRlVHJhbnNmb3JtID0gZ2VvbWV0cnkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKKyAg
ICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKKyAg
ICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Cisg
ICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVk
IG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBh
cmVhIGlzIHRvbyBzbWFsbC4KKyAgICBmaWxsUmVnaW9uKG91dHB1dFBpeGVsQXJyYXksIG91dHB1
dEltYWdlUmVjdCwgZ2VvbWV0cnkuYWJzb2x1dGVUcmFuc2Zvcm0oKSwgcGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wMjVmZmMyZThlM2E1MzcxNzBmYTI5OGM5ZjRkMmM4N2M2YTc2YjQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU2IEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0
ZXJJbWFnZVNvZnR3YXJlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVySW1hZ2VT
b2Z0d2FyZTo6RmlsdGVySW1hZ2VTb2Z0d2FyZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIFJlZjxJbWFnZUJ1ZmZlcj4mJiBp
bWFnZUJ1ZmZlcikKKyAgICA6IEZpbHRlckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VS
ZWN0LCBmYWxzZSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCksIGltYWdlQnVmZmVyLT5yZW5k
ZXJpbmdNb2RlKCksIGltYWdlQnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUoKSwgaW1hZ2VCdWZmZXIt
PmNvbG9yU3BhY2UoKSkKKyAgICAsIG1faW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
Cit7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZVNvZnR3YXJlOjppbWFnZUJ1ZmZlcigp
Cit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
LmdldCgpOworCisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9sb2dp
Y2FsU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUs
IG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZm
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgSW50UG9p
bnQ6Onplcm8oKSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9OworCisgICAgaWYgKHBpeGVsQnVm
ZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAg
ICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpLCByZWN0KTsKKyAgICBlbHNlIGlm
IChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCksIHJlY3Qp
OworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzE2MjdlOGVkZGVkN2UyZTk1N2IxN2U5M2RlMjBkNDJlYjEwYjk5YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckltYWdlU29mdHdhcmUgOiBwdWJsaWMg
RmlsdGVySW1hZ2UgeworcHVibGljOgorICAgIHVzaW5nIEZpbHRlckltYWdlOjpGaWx0ZXJJbWFn
ZTsKKyAgICBGaWx0ZXJJbWFnZVNvZnR3YXJlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmKTsK
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdl
QnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdhcmUpCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckltYWdlJiByZXN1bHQpIHsgcmV0dXJuIHJl
c3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdodGluZ0RhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvTGln
aHRpbmdEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMwOWMxNjIzYTlkNzYwMjJiYTkyNzM3ZmNjYTg5Zjg5
ZTIzZjM2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvTGlnaHRpbmdEYXRhLmgKQEAgLTAsMCArMSwyMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6
ZSA9IDQ7CitzdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKK3N0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50OF90
PigweEZGKTsKKworc3RydWN0IEFscGhhV2luZG93IHsKKyAgICB1aW50OF90IGFscGhhWzNdWzNd
IHsgfTsKKyAgICAKKyAgICAvLyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBt
YWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4KKyAgICB1aW50OF90IHRvcExlZnQoKSBjb25z
dCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQorICAgIHVpbnQ4X3QgbGVmdCgp
IGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9CisgICAgdWludDhf
dCBib3R0b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KKwor
ICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBd
WzFdOyB9CisgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4g
YWxwaGFbMV1bMV07IH0KKyAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7
IHJldHVybiBhbHBoYVsyXVsxXTsgfQorCisgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkg
ICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRDZW50ZXIodWlu
dDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRC
b3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9CisKKyAg
ICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFs
dWU7IH0KKyAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFd
WzJdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7
IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KKworICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4
X3QgYWxwaGFbM10pCisgICAgeworICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOworICAgICAg
ICBhbHBoYVsxXSA9IGFscGhhWzJdOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNoaWZ0KCkKKyAg
ICB7CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKKyAgICAgICAgc2hpZnRSb3coYWxwaGFb
MV0pOworICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7CisgICAgfQorfTsKKworc3RydWN0IExp
Z2h0aW5nRGF0YSB7CisgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9u
bHkgKFNNUCBzYWZlKSBkYXRhCisgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKKyAgICBm
bG9hdCBzdXJmYWNlU2NhbGU7CisgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOworICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9u
ZTsKKworICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
KyAgICB7CisgICAgICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCByaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKKyAgICAgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGJvdHRvbVJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC0yICog
Y2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAgICAgICAt
MiAqIGNlbnRlciAtIHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgICAgIH07
CisgICAgfQorCisgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0CisgICAgeworICAgICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAg
IGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAg
aW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgICAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVm
dCArIGJvdHRvbVJpZ2h0LAorICAgICAgICAgICAgLWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQg
KyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgICAgIH07CisgICAg
fQorCisgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
KyAgICB7CisgICAgICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50
IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOworICAgICAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAg
IGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAtMiAqIGxl
ZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgICAgIC1sZWZ0
IC0gMiAqIGNlbnRlciArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCisgICAgICAgIH07CisgICAg
fQorCisgICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IHJpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgICAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgdG9wUmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgICAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOworICAgICAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgYm90dG9t
UmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
LXRvcCArIHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRv
bVJpZ2h0LAorICAgICAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBib3R0b20gKyBi
b3R0b21SaWdodAorICAgICAgICB9OworICAgIH0KKworICAgIGlubGluZSBJbnRTaXplIGludGVy
aW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKKyAg
ICB7CisgICAgICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQ7CisgICAgICAgIAorICAgICAgICBpbnQgcmlnaHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0KSk7CisgICAgICAgIGlu
dCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZz
ZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOworICAgICAgICBpbnQgYm90dG9tUmln
aHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0ICsgd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKKworICAgICAgICBpbnQgbGVmdCA9IGFscGhhV2lu
ZG93LmxlZnQoKTsKKyAgICAgICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50b3BMZWZ0KCk7
CisgICAgICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKKworICAgICAgICBpbnQgYm90
dG9tTGVmdCA9IGFscGhhV2luZG93LmJvdHRvbUxlZnQoKTsKKyAgICAgICAgaW50IGJvdHRvbSA9
IGFscGhhV2luZG93LmJvdHRvbSgpOworCisgICAgICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMg
YmVlbiBzaGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCisgICAg
ICAgIGFscGhhV2luZG93LmFscGhhWzBdWzJdID0gdG9wUmlnaHQ7CisgICAgICAgIGFscGhhV2lu
ZG93LmFscGhhWzFdWzJdID0gcmlnaHQ7CisgICAgICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJd
ID0gYm90dG9tUmlnaHQ7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBo
YVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29tZSBzcG90LWNoZWNrcy4KKyAgICAgICAgQVNTRVJU
KGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6
ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAv
LyB0b3BMZWZ0CisgICAgICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3AoKSA9PSBwaXhlbHMtPml0
ZW0ob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7IC8vIHRvcAorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAtdG9wTGVmdCAr
IHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQsCisgICAgICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgLSB0b3BSaWdodCArIGJvdHRvbUxl
ZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBp
bmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgY2VudGVy
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgICAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Cisg
ICAgICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IHRvcCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICAgICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
KyAgICAgICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQg
Ym90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLXRvcExlZnQgKyB0
b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAorICAgICAg
ICAgICAgLXRvcExlZnQgLSAyICogdG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBp
bnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBvZmZzZXQgLT0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCB0
b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAorICAgICAgICAgICAg
LTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAorICAgICAgICB9OworICAg
IH0KKworICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgICAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGlu
dCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IHRvcCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICAgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCwK
KyAgICAgICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBj
ZW50ZXIgKyByaWdodAorICAgICAgICB9OworICAgIH0KKworICAgIGlubGluZSBJbnRTaXplIGJv
dHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgbGVm
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHRvcExl
ZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50
ZXIsCisgICAgICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3AgKyBsZWZ0ICsgMiAqIGNlbnRlcgor
ICAgICAgICB9OworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291
cmNlQWxwaGFTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzNjI4
ZjA2ZjJjMzI3NmNhYmQ0Y2Q3Y2RiZWE1ZWY5YmZhNGExMjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFs
cGhhU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNvdXJjZUFscGhhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgU291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkuY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRl
cyhpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmZpbGxS
ZWN0KEZsb2F0UmVjdCB7IHsgfSwgaW5wdXRJbWFnZVJlY3Quc2l6ZSgpIH0sIENvbG9yOjpibGFj
ayk7CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1h
Z2UsIEludFBvaW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdy
YXBoaWNTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FhMGFk
YzRhYTc2ZDk4ODg3NzJjNzZjNzNmY2NjMTkwM2NkNjkzZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3Jh
cGhpY1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
U291cmNlR3JhcGhpYzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1
dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigp
OworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBGbG9hdFBvaW50KCkpOworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuY3BwCmluZGV4IGY0NGFlMTI5ZDA3MzhkMzBjNzZlNzEwODViMmFlYzA1YTdiNmYx
ZGEuLjFhOTM1Y2ZlOWJhNDc3Y2UxZmEzMDg2YzhmNTEzMDIwNjc0NDAwYTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDEyICsyOCwzMzUgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNWR0Rv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNs
dWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5j
bHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgog
I2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCi0jaW5jbHVkZSAiRkVNZXJnZS5oIgotI2luY2x1
ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRl
ICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNp
bmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotI2lu
Y2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdv
cml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotI2lmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8
Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0
ZXI6OmNyZWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBDU1NGaWx0ZXJHZW9t
ZXRyeTo6Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENTU0ZpbHRlcik7CisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZihuZXcgQ1NTRmls
dGVyKG9wZXJhdGlvbnMpKTsKKworICAgIGlmICghZmlsdGVyLT5idWlsZEZ1bmN0aW9ucyhyZW5k
ZXJlciwgb3BlcmF0aW9ucywgY2xpcE9wZXJhdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkICYmICFmaWx0ZXItPnN1cHBvcnRzQ29yZUltYWdlUmVu
ZGVyaW5nKCkpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOworI2VuZGlmCisgICAgICAgIAorICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShy
ZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gZmlsdGVyOwogfQogCi1DU1NGaWx0ZXI6OkNTU0Zp
bHRlcigpCi0gICAgOiBGaWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9zb3VyY2VH
cmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgqdGhpcykpCitSZWZQdHI8Q1NTRmlsdGVyPiBD
U1NGaWx0ZXI6OmNyZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiBmdW5jdGlvbnMs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU0ZpbHRlcihXVEZNb3ZlKGZ1bmN0aW9ucyksIHJlbmRlcmluZ01vZGUpKTsKIH0KIAotQ1NT
RmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0OworQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKKyAgICA6IEZpbHRlcihUeXBlOjpDU1NG
aWx0ZXIpCit7CisgICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhh
c0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRC
ZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCogQ1NT
RmlsdGVyOjppbnB1dENvbnRleHQoKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoVmVjdG9yPFJlZjxG
aWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUp
CisgICAgOiBGaWx0ZXIoVHlwZTo6Q1NTRmlsdGVyKQorICAgICwgbV9mdW5jdGlvbnMoV1RGTW92
ZShmdW5jdGlvbnMpKQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCiB7Ci0g
ICAgcmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVs
bHB0cjsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5j
ZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0Vm
ZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24pCitzdGF0aWMg
UmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVyKGNvbnN0IFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAg
ICBhdXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291
cmNlcygpLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgaWYgKCFmaWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWls
ZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcg
cGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKLSAgICAg
ICAgLy8gQWx0aG91Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQg
bWlnaHQgZXhpc3QgbGF0ZXIgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICAvLyBGSVhNRTogVGhp
cyBza2lwcyBhbm9ueW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEz
MTA4NT4KLSAgICAgICAgLy8gRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5nLgot
ICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAg
ICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZShmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgKmVsZW1lbnQpOworICAgIGF1dG8m
IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVz
b3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJj
ZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3Bl
cmF0aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQorICAgIAorICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxl
bWVudCk7Cit9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxk
ZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51
c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAs
IDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxl
L3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBp
bmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFt
ZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIg
LSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAg
ICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAr
IDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0g
MC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAg
ICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+PiByZWZlcmVuY2VFZmZlY3RzOworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0
ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9y
TWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8o
MSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBT
ZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4
Lmh0bWwjc2VwaWFFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRl
cnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0
cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKK30KIAotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZU
eXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQp
KSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwg
KnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVm
ZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVt
ZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykp
OworfQogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVj
dC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBF
TkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5z
dHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50
ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdC
KCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAg
ZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVt
ZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgq
ZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3Zl
KHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0Oworc3RhdGljIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8Zmxv
YXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwog
fQogCi1ib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQor
c3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbikKIHsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0
cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5
RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
dHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Cisg
ICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVuY3Rpb24sIG51bGxG
dW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoY29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24p
Cit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAg
IHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7
CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24u
aW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0
aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsK
K30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJG
dW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
Y29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rp
b24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41
ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVu
Y3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24p
OworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25z
dCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBDU1NGaWx0ZXJHZW9tZXRyeTo6
Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9
IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7Cisg
ICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRp
b24sIGNsaXBPcGVyYXRpb24gPT0gQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OlVu
aXRlID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CiAKLSAgICBtX2Vm
ZmVjdHMuY2xlYXIoKTsKLSAgICBtX291dHNldHMgPSB7IH07CitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlv
bi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9CisKK2Jvb2wgQ1NTRmls
dGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24g
Y2xpcE9wZXJhdGlvbikKK3sKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3Vy
Y2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0p
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdy
YXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAg
IGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmls
dGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2Fz
dDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0
LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZWZmZWN0KTsKKyAgICAgICAgc3dpdGNoIChvcGVy
YXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
OgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKGRvd25jYXN0PFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGVm
ZmVjdCA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xv
ck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQg
PSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwot
Ci0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxl
L3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAotICAgICAgICAgICAg
Ly8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3Rvcjxm
bG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcy
MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAu
MjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAu
NzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1v
dmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdS
QVlTQ0FMRToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNz
ZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0
ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43Njkg
LSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjgg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAw
LAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg
MSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNlcGlhRWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAg
ICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZ
UEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2F0
dXJhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQo
KSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywg
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
KworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgICAg
IGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAg
ICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFS
OwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1
bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0
aW9uLmludGVyY2VwdCA9IGFtb3VudDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGlu
IC1hcHBsZS1jb2xvci1maWx0ZXIuCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
dHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9h
dCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91
bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAg
ICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAg
ICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rp
b24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgICAgIGVmZmVjdCA9
IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAg
IGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAg
IHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21w
b25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRl
QnJpZ2h0bmVzc0VmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIGF1dG8m
IGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAg
ICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
c2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9
IC0wLjUgKiBhbW91bnQgKyAwLjU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0
ZUNvbnRyYXN0RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBhdXRvJiBibHVy
T3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgo
Ymx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7Ci0gICAgICAgICAgICBlZmZlY3QgPSBG
RUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwg
Y29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9O
RSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJMVVI6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJs
dXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9Q
X1NIQURPVzogewotICAgICAgICAgICAgYXV0byYgZHJvcFNoYWRvd09wZXJhdGlvbiA9IGRvd25j
YXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAg
ICAgICBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZSgqdGhpcywgZHJvcFNoYWRvd09wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwK
LSAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7CisKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAgICAgICAgICAgZWZmZWN0ID0gY3Jl
YXRlRHJvcFNoYWRvd0VmZmVjdChkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPigq
b3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChlZmZl
Y3QpIHsKLSAgICAgICAgICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1h
Z2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKLSAgICAgICAgICAgIC8vIHByb3Bl
cnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJl
Z2lvbnMuCi0gICAgICAgICAgICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0g
RmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0
T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRl
ck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgV1RGTW92ZShwcmV2aW91c0VmZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBt
X2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJl
dmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOworICAgICAgICAgICAgbV9m
dW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55
IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2Vm
ZmVjdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZWZm
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CisgICAgfQog
Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMobV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsKLSNpZiBVU0Uo
Q09SRV9JTUFHRSkKLSAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVy
UmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRp
bmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0
cy5sYXN0KCkuZ2V0KCkpOwotI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NT
RmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVj
dCkKKyNpZiBVU0UoQ09SRV9JTUFHRSkKK2Jvb2wgQ1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZygpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChmaWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVy
UmVjdCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAg
IGlmICghZnVuY3Rpb24tPnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQotCi12b2lkIENTU0Zp
bHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
IHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWlu
IGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4g
V2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBo
YXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURy
YXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUlt
YWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUs
IHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBt
b2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVu
ZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFw
aGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1f
ZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0
b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcg
c2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAg
c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQotfQotCi12b2lkIENTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCkKLXsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFy
UmVzdWx0KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEt
PmNsZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAg
ICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkK
LXsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0
cyhlZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsK
LSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci19CiAKLUxheW91dFJlY3QgQ1NT
RmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKK0ludE91dHNl
dHMgQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICAvLyBUaGUgcmVz
dWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0
aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRp
cnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAo
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91
dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0g
ICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwotfQorICAgIGlmICghbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMpCisgICAgICAgIHJldHVybiB7IH07CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6
Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJS
ZW5kZXJlci0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5v
dXRwdXQoKTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHM7CisgICAgZm9yIChhdXRvJiBmdW5jdGlv
biA6IG1fZnVuY3Rpb25zKQorICAgICAgICBvdXRzZXRzICs9IGZ1bmN0aW9uLT5jYWxjdWxhdGVP
dXRzZXRzKCk7CiAgICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVy
UmVzdWx0KCk7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCi17Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9u
ID0gc291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVj
dCk7Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGlj
c0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7CisgICAgcmV0dXJuIG91dHNldHM7CiB9CiAKLXZvaWQg
Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3Qp
Citib29sIENTU0ZpbHRlcjo6YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZpbHRlckltYWdl
VmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewot
ICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNldE1h
eEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Ci19Ci0KLUludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRS
ZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5n
ZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJS
ZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0gICAgICAgIHJldHVy
biBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsg
bV9maWx0ZXJSZWdpb24gfSk7Ci0gICAgCi0gICAgcmV0dXJuIHsgfTsKKyAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKCFmdW5jdGlvbi0+YXBwbHko
cmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMo
KSBjb25zdAorVGV4dFN0cmVhbSYgQ1NTRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKLSAgICBpZiAoIW1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291
dHNldHM7CisgICAgYXV0byBlbmQgPSBtX2Z1bmN0aW9ucy5yZW5kKCk7CisgICAgdW5zaWduZWQg
bGV2ZWwgPSAwOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9mdW5jdGlvbnMucmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRvIGZ1bmN0aW9uID0gKml0OworICAgICAgICBp
ZiAoZnVuY3Rpb24tPnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7
CisgICAgICAgICAgICBBU1NFUlQoaXQgIT0gZW5kKTsKKyAgICAgICAgICAgICsraXQ7CisgICAg
ICAgIH0KKyAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIGxl
dmVsKyspOworICAgICAgICBmdW5jdGlvbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOworICAgIH0KIAotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3Rz
KQotICAgICAgICBtX291dHNldHMgKz0gZWZmZWN0LT5vdXRzZXRzKCk7Ci0gICAgcmV0dXJuIG1f
b3V0c2V0czsKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3
NThlMzc1YzI1MmYyOWRiMGM1Li5jMTU3YjhjNjM1YWFlZTAyZWNmODEzMmMwNWUyMDkyN2NhOTA3
NjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsODMgKzI1LDUx
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ1NTRmlsdGVyR2VvbWV0cnkuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVkZSAi
TGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmlsdGVyRWZmZWN0Owot
Y2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXI7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwotY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOwogY2xh
c3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFNvdXJjZUFscGhhOwotY2xhc3MgU291cmNlR3JhcGhp
YzsKLQotZW51bSBjbGFzcyBGaWx0ZXJDb25zdW1lciB7IEZpbHRlclByb3BlcnR5LCBGaWx0ZXJG
dW5jdGlvbiB9OwogCiBjbGFzcyBDU1NGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJG
aWx0ZXJzOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoKTsKLQot
ICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQg
c2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVy
UmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29u
c3Q7CiAKLSAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRz
KCk7Ci0gICAgdm9pZCBhcHBseSgpOworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Q1NTRmls
dGVyPiBjcmVhdGUoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBSZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgQ1NTRmlsdGVyR2VvbWV0
cnk6OkNsaXBPcGVyYXRpb24gPSBDU1NGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6SW50
ZXJzZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3Jl
YXRlKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdNb2RlKTsKIAogICAg
IGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIo
KTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVu
ZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbiYpOworICAgIGNvbnN0IFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYgZnVu
Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KIAotICAgIHZvaWQgc2V0TWF4
RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2Rl
KFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSByZW5kZXJp
bmdNb2RlOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0
Q29udGV4dCgpOworICAgIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IGZpbmFs
OwogCi0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVjdCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpOwotCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Citwcml2
YXRlOgorICAgIENTU0ZpbHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgQ1NTRmls
dGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdNb2RlKTsKIAotICAg
IExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOworICAg
IGJvb2wgYnVpbGRGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmLCBDU1NGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbik7CiAKLSAgICBGbG9hdFJlY3Qg
bV9zb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyNp
ZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkg
Y29uc3QgZmluYWw7CisjZW5kaWYKIAotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9l
ZmZlY3RzOwotICAgIFJlZjxTb3VyY2VHcmFwaGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gbV9zb3VyY2VBbHBoYTsKKyAgICBib29sIGFwcGx5KEZpbHRlclJl
c3VsdCYsIEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBj
b25zdCBmaW5hbDsKIAotICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7CisgICAgVGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNo
ZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0
eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVj
dFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOworCisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5j
dGlvbj4+IG1fZnVuY3Rpb25zOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21l
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXJHZW9tZXRyeS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTFmNGQ3ZDMwNzI1ZDQ4ZDI2YmUxZjZjMDQxOGQ3ZWFjMWM3NjRhYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXJHZW9tZXRy
eS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVyR2Vv
bWV0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTRmls
dGVyR2VvbWV0cnk+IENTU0ZpbHRlckdlb21ldHJ5OjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBDbGlwT3BlcmF0
aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q1NTRmlsdGVyR2Vv
bWV0cnk+KGZpbHRlclJlZ2lvbiwgc291cmNlSW1hZ2VSZWN0LCBjbGlwT3BlcmF0aW9uKTsKK30K
KworQ1NTRmlsdGVyR2VvbWV0cnk6OkNTU0ZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgQ2xpcE9wZXJh
dGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDogRmlsdGVyR2VvbWV0cnkoZmlsdGVyUmVnaW9uLCBz
b3VyY2VJbWFnZVJlY3QpCisgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xpcE9wZXJhdGlvbikKK3sK
K30KKworRmxvYXRSZWN0IENTU0ZpbHRlckdlb21ldHJ5OjpjbGlwVG9QcmltaXRpdmVTdWJyZWdp
b24oY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAoreworICAgIGF1dG8gY2xpcHBlZEltYWdlUmVjdCA9IGltYWdlUmVj
dDsKKyAgICBpZiAobV9jbGlwT3BlcmF0aW9uID09IENsaXBPcGVyYXRpb246OkludGVyc2VjdCkK
KyAgICAgICAgY2xpcHBlZEltYWdlUmVjdC5pbnRlcnNlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsK
KyAgICBlbHNlCisgICAgICAgIGNsaXBwZWRJbWFnZVJlY3QudW5pdGUocHJpbWl0aXZlU3VicmVn
aW9uKTsKKyAgICByZXR1cm4gY2xpcHBlZEltYWdlUmVjdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlckdl
b21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyR2VvbWV0cnkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45OTY0MmY3ZmVmZjhmMDcyMTJjMGVkZmI3MWM2NzNmOWQ0OWVhYjc2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlckdlb21ldHJ5
LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMg
RmlsdGVyR2VvbWV0cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVyc2VjdCwgVW5pdGUgfTsKKyAgICAK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTU0ZpbHRlckdlb21ldHJ5PiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0KTsKKworICAgIENT
U0ZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgQ2xpcE9wZXJhdGlvbik7CisKK3ByaXZhdGU6CisgICAg
RmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OworCisgICAgQ2xpcE9wZXJhdGlvbiBtX2NsaXBPcGVyYXRpb247Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRl
eCAwMmM1YzE1Y2Y2ODc4MTkwYzVhMmUyMjI4MjI5M2M0ZmVjZDhhODBjLi5iY2Y5OTUwZjg3ZjI4
NWUwYzY2MjBhMTM3YWY4MGM3NmQ3ZWFkMWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKQEAgLTU1NzgsNyArNTU3OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogSW50T3V0c2V0cyBSZW5kZXJMYXllcjo6Zmls
dGVyT3V0c2V0cygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZmlsdGVycykKLSAgICAgICAgcmV0dXJu
IG1fZmlsdGVycy0+ZmlsdGVyKCkgPyBtX2ZpbHRlcnMtPmZpbHRlcigpLT5vdXRzZXRzKCkgOiBJ
bnRPdXRzZXRzKCk7CisgICAgICAgIHJldHVybiBtX2ZpbHRlcnMtPmZpbHRlcigpID8gbV9maWx0
ZXJzLT5maWx0ZXIoKS0+Y2FsY3VsYXRlT3V0c2V0cygpIDogSW50T3V0c2V0cygpOwogICAgIHJl
dHVybiByZW5kZXJlcigpLnN0eWxlKCkuZmlsdGVyT3V0c2V0cygpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDFiZjIyZTQyYzM1MTg2MTg3OWVmNWFmMGNm
MWVjMGI0NzE0OWI1ZWEuLjAwZjY2ZThhYjIxOGJlNGYwMWZhNzJiY2NjYWU5MWU3ZTg2M2EzNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC02Miw3ICs2Miw2IEBA
IGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTRmls
dGVyOwogY2xhc3MgQ2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3RzQ2FjaGU7CiBjbGFzcyBFdmVu
dFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4MThiNjFhMDVmOTViOTY0
YTQuLjI4MjIwMjk1MmIxYmY5MmM2MWYyMWRjNzA4ZThmNzFjNDdmM2JkNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCiAKICNpbmNsdWRlICJDU1NG
aWx0ZXIuaCIKKyNpbmNsdWRlICJDU1NGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkNhY2hl
ZFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0xMTYsMzkgKzExNyw1MSBAQCB2b2lkIFJlbmRlckxh
eWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAgICAgbV9pbnRlcm5h
bFNWR1JlZmVyZW5jZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1
aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxk
RmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQogewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBD
U1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2Nh
bGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdN
b2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFj
dG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0g
ICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9CisgICAg
bV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5m
aWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgQ1NTRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246
OlVuaXRlKTsKK30KKworR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0
Q29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+
Y29udGV4dCgpIDogbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9j
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0
YWNoZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsg
bV9zb3VyY2VJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIDEsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogCi0gICAg
Ly8gSWYgdGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVy
LiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJv
Y2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAg
ICAvLyBGSVhNRTogdGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBp
ZiB0aGUgZmlsdGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVp
bGQocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpG
aWx0ZXJQcm9wZXJ0eSkpCi0gICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICBtX2dyYXBo
aWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxh
eWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlv
bkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAg
ICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvJiBm
aWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNv
bXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0
KTsKKyAgICAKKyAgICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYg
KGZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgZmlsdGVyU291cmNl
UmVjdCArPSBmaWx0ZXIuY2FsY3VsYXRlT3V0c2V0cygpOworICAgIGZpbHRlclNvdXJjZVJlY3Qu
aW50ZXJzZWN0KGZpbHRlckJveFJlY3QpOworCiAgICAgaWYgKGZpbHRlclNvdXJjZVJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJvb2wgaGFzVXBkYXRlZEJh
Y2tpbmdTdG9yZSA9IGZpbHRlci51cGRhdGVCYWNraW5nU3RvcmVSZWN0KGZpbHRlclNvdXJjZVJl
Y3QpOworICAgIAorICAgIGlmIChmaWx0ZXJTb3VyY2VSZWN0ICE9IG1fc291cmNlSW1hZ2VSZWN0
KSB7CisgICAgICAgIG1fc291cmNlSW1hZ2VSZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKKyAgICAg
ICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlm
ICghZmlsdGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRS
ZWN0ID0gZGlydHlSZWN0OwogICAgIGVsc2UgewotICAgICAgICBpZiAoaGFzVXBkYXRlZEJhY2tp
bmdTdG9yZSkKKyAgICAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAg
ICAgICBtX3JlcGFpbnRSZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0OwpAQCAtMTU5LDExICsxNzIsOSBA
QCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3Qo
R3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3Vy
Y2VSZWN0LmxvY2F0aW9uKCk7CiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZp
bHRlci5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIGZpbHRlci5h
bGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgYXV0
byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gZmlsdGVyLmlucHV0Q29udGV4dCgpOwotICAgIGlm
ICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5
KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24o
KS5zaXplKCkpKQorICAgIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBhdXRv
KiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBpbnB1dENvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJj
ZUdyYXBoaWNzQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBUcmFu
c2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlzIGNh
cHR1cmVkIGluIHRoZSBvZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KQEAgLTE3NywyMyArMTg4LDE1
IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjph
cHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsK
LSAgICBBU1NFUlQobV9maWx0ZXItPmlucHV0Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaW5wdXRD
b250ZXh0KCkpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5S
ZW5kZXJMYXllckZpbHRlcnMgIiA8PCB0aGlzIDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAog
ICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKLSAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCkt
PnJlc3RvcmUoKTsKLQotICAgIGZpbHRlci5hcHBseSgpOwotCi0gICAgLy8gR2V0IHRoZSBmaWx0
ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCi0gICAgTGF5b3V0UmVjdCBkZXN0UmVj
dCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7Ci0gICAgZGVzdFJlY3QubW92ZShtX3BhaW50T2Zmc2V0
LngoKSwgbV9wYWludE9mZnNldC55KCkpOwotCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9
IGZpbHRlci5vdXRwdXQoKSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xh
eWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgaW5w
dXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAotICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJl
c3VsdHMoKTsKKyAgICBhdXRvIGdlb21ldHJ5ID0gQ1NTRmlsdGVyR2VvbWV0cnk6OmNyZWF0ZSht
X3NvdXJjZUltYWdlUmVjdCwgbV9zb3VyY2VJbWFnZVJlY3QsIENTU0ZpbHRlckdlb21ldHJ5OjpD
bGlwT3BlcmF0aW9uOjpVbml0ZSk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcihmaWx0ZXIsIG1fc291cmNlSW1hZ2UuZ2V0KCksIFdURk1vdmUoZ2VvbWV0cnkp
KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVy
RmlsdGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGEx
NDBhNWM4OGYxNTUzMTkwYjcwMDNkN2U3ODQ0YzkxOTQ1YmY3Li4yYWY2ZmI0N2UxODRmNjk0MDQ3
YzBlNzE1MjczYWMxNDJhYTViZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVycy5oCkBAIC0zNyw4ICszNywxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDYWNoZWRTVkdEb2N1bWVudDsKK2NsYXNzIENTU0ZpbHRlcjsKIGNsYXNzIEVs
ZW1lbnQ7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOworY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNs
YXNzIFJlbmRlckxheWVyRmlsdGVycyBmaW5hbCA6IHByaXZhdGUgQ2FjaGVkU1ZHRG9jdW1lbnRD
bGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjksMTQgKzcxLDE5IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJj
ZSYsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpIGZpbmFsOwogICAgIHZvaWQgcmVzZXREaXJ0
eVNvdXJjZVJlY3QoKSB7IG1fZGlydHlTb3VyY2VSZWN0ID0gTGF5b3V0UmVjdCgpOyB9CisgICAg
R3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoKTsKIAogICAgIFJlbmRlckxheWVyJiBtX2xheWVyOwogCiAgICAgVmVj
dG9yPFJlZlB0cjxFbGVtZW50Pj4gbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXM7CiAgICAgVmVjdG9y
PENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50Pj4gbV9leHRlcm5hbFNWR1Jl
ZmVyZW5jZXM7CiAKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7CisgICAg
RmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OwogICAgIFJlZlB0cjxDU1NGaWx0ZXI+IG1fZmls
dGVyOwogICAgIExheW91dFJlY3QgbV9kaXJ0eVNvdXJjZVJlY3Q7CisgICAgYm9vbCBtX2dyYXBo
aWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIAogICAgIC8vIERhdGEgdXNlZCBwZXIg
cGFpbnQKICAgICBMYXlvdXRQb2ludCBtX3BhaW50T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRl
eCAxOTUwOWQ5NzE4YWZmMTEwZjg0MWVjNDk3NmY5N2ZiMWE5MzRkOGE1Li5kNWE3YTAyMmY1NTFi
N2EyYTIzNjU1NzY5NmRmZWMyNTYwMDcwNDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtNCw2ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNiArMzgsOCBAQAogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC04Miw0NyArODUsMTEgQEAg
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRl
ckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xp
ZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVu
dE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRl
cj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZp
bHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5v
ZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBt
YXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRS
ZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAg
ICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VV
bmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwot
ICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVV
bml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGlu
Z0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0g
ICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIp
OwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZl
Y3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBi
dWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwg
ZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0
ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNW
R0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCks
IHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsK
LSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAg
ICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5z
dHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50
ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdC
KCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAg
ZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJl
c3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0K
LQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAg
ICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVz
b3VyY2VNb2RlKTsKIAotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIg
JXAgYXBwbHlSZXNvdXJjZSByZW5kZXJlciAlcCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KICAgICBp
ZiAobV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSkgewogICAgICAg
ICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0gbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZy
ZW5kZXJlcik7CiAgICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQ
YWludGluZ1NvdXJjZSB8fCBmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWlu
ZykKQEAgLTEzMCwxMDEgKzk3LDU4IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gQWxyZWFkeSBidWlsdCwgb3Igd2UncmUgaW4gYSBjeWNsZSwgb3Ig
d2UncmUgbWFya2VkIGZvciByZW1vdmFsLiBSZWdhcmRsZXNzLCBqdXN0IGRvIG5vdGhpbmcgbW9y
ZSBub3cuCiAgICAgfQogCisgICAgLy8gQnVpbGQgdGhlIFNWR0ZpbHRlcgogICAgIGF1dG8gZmls
dGVyRGF0YSA9IG1ha2VVbmlxdWU8RmlsdGVyRGF0YT4oKTsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0
Qm91bmRpbmdCb3ggPSByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpOwotCi0gICAgZmlsdGVy
RGF0YS0+Ym91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZH
RmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVu
aXRzKCksIHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICBpZiAoZmlsdGVyRGF0YS0+Ym91bmRhcmll
cy5pc0VtcHR5KCkpCisgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUo
ZmlsdGVyRWxlbWVudCgpKTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8gdGFyZ2V0Qm91bmRpbmdCb3ggPSByZW5kZXJl
ci5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBTVkdM
ZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJF
bGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0Jv
eCk7CiAKLSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZv
ciBmaWx0ZXIuIAotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGlu
YXRlU3lzdGVtKHJlbmRlcmVyKTsKLSAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0
aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFbGltaW5hdGUgc2hlYXIg
b2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBwcm9k
dWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgotICAgIGZpbHRlckRhdGEtPnNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNm
b3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgMCwgMCk7Ci0K
LSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgYm91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0
aGUgZHJhd2luZyByZWdpb24uCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QK
ICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdC
b3goKTsKICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRh
LT5ib3VuZGFyaWVzKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5k
cmF3aW5nUmVnaW9uKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAg
ICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQoKS5wcmltaXRp
dmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WDsKLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJn
ZXRCb3VuZGluZ0JveCwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgcHJpbWl0aXZlQm91bmRpbmdC
b3hNb2RlKTsKLQotICAgIC8vIENyZWF0ZSBhbGwgcmVsZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMu
Ci0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IGJ1aWxkUHJpbWl0aXZlcygqZmlsdGVyRGF0YS0+
ZmlsdGVyKTsKLSAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNp
emUgb2YgaW50ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4g
a01heEZpbHRlclNpemUuCi0gICAgRmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVE
cmF3aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6ZSBzY2FsZSgxLCAxKTsKLSAgICBJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0gICAg
dGVtcFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotCi0g
ICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBpbiBTVkdGaWx0ZXIuCi0gICAgZmlsdGVyRGF0YS0+
ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLQotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzID0gMTAwOwotICAgIEZpbHRlckVmZmVjdCog
bGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKLSAgICBpZiAo
IWxhc3RFZmZlY3QgfHwgbGFzdEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpID4g
bWF4VG90YWxPZkVmZmVjdElucHV0cykKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlVHJh
bnNmb3JtCisgICAgYXV0byBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRl
cmVyKTsKKyAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0
YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKKyAgICAvLyBFbGltaW5hdGUgc2hlYXIgb2YgdGhl
IGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBwcm9kdWNlIHVu
c2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgorICAgIGZpbHRlckRhdGEtPnNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhT
Y2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgMCwgMCk7CiAKLSAgICBs
YXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9h
dFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0
IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAotICAgIC8v
IHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAg
ICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNj
YWxlKSkgewotICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24o
c2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKTsKLSAgICB9CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBmaWx0ZXIgcmVzb2x1dGlvbgor
ICAgIGZpbHRlckRhdGEtPnNjYWxlID0gU1ZHRmlsdGVyR2VvbWV0cnk6OmNhbGN1bGF0ZVJlc29s
dXRpb24oZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywg
ZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgLy8gSWYgdGhl
IGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVy
PSIuLiIvPi4KLSAgICAvLyBFdmVuIGlmIHRoZSB0YXJnZXQgb2JqZWN0Qm91bmRpbmdCb3goKSBp
cyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3IHRoZSBsYXN0IGVmZmVjdCByZXN1bHQgaW1h
Z2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCi0gICAgaWYgKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdp
b24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAu
Y29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9
IGNvbnRleHQ7Ci0gICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVuZGVyZXIs
IFdURk1vdmUoZmlsdGVyRGF0YSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gQ2hhbmdlIHRoZSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQgdG8gdGhl
IGZpbHRlcmVkIGVsZW1lbnQgdG8gcmVmbGVjdCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZmlsdGVy
LgorICAgIC8vIENhbGN1bGF0ZSBlZmZlY3RpdmVUcmFuc2Zvcm0KICAgICBBZmZpbmVUcmFuc2Zv
cm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2Fs
ZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxl
KGZpbHRlckRhdGEtPnNjYWxlKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgYXV0byByZW5kZXJp
bmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAg
IGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpOwog
I2Vsc2UKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KTsKICNlbmRpZgotICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRy
YW5zZm9ybSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CisKKyAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgIGlmICghc291cmNl
R3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRh
aW5zKCZyZW5kZXJlcikpOwogICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250
ZXh0OwogICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZN
b3ZlKGZpbHRlckRhdGEpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAg
ICAvLyBTZXQgdGhlIHJlbmRlcmluZyBtb2RlIGZyb20gdGhlIHBhZ2UncyBzZXR0aW5ncy4KLSAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CiAK
KyAgICAvLyBTZXQgdGhlIHdvcmtpbmcgR3JhcGhpY0NvbnRleHQgdG8gdGhlIGZpbHRlciBzb3Vy
Y2VHcmFwaGljCiAgICAgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VHcmFwaGljQ29udGV4dCA9IHNv
dXJjZUdyYXBoaWMtPmNvbnRleHQoKTsKLSAgCisKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFw
aGljQnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZl
ZENvbnRleHQgPSBjb250ZXh0OwogCiAgICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4
dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRl
cmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92
ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY5LDM4ICsxOTMs
MTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZm
ZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlz
RW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmpl
Y3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFs
IGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0
IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRh
LnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0
ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVy
KSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0
IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICgh
bGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUg
PSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7
Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsK
LSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRh
LmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0
ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0
RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAg
ICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5z
Zm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICAgICAgY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLnNjYWxlLndpZHRoKCksIDEgLyBm
aWx0ZXJEYXRhLnNjYWxlLmhlaWdodCgpKSk7CiAKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxl
KEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0
aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSkp
OwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKCpyZXN1bHRJbWFnZSwgbGFz
dEVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2Fs
ZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpKTsKLQotICAgICAgICAgICAg
Y29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0p
OwotICAgICAgICB9CisgICAgICAgIGF1dG8gZ2VvbWV0cnkgPSBTVkdGaWx0ZXJHZW9tZXRyeTo6
Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRGF0YS5ib3VuZGFyaWVzLCBmaWx0ZXJEYXRh
LmRyYXdpbmdSZWdpb24sIHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCksIGZpbHRlckRhdGEu
c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGZpbHRlckRhdGEuc2NhbGUpOworICAgICAgICBj
b250ZXh0LT5kcmF3RmlsdGVySW1hZ2VCdWZmZXIoKmZpbHRlckRhdGEuZmlsdGVyLCBmaWx0ZXJE
YXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIuZ2V0KCksIFdURk1vdmUoZ2VvbWV0cnkpKTsKKyAgICAK
KyAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgICAgIGNvbnRl
eHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKICAg
ICB9Ci0gICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKLQotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmls
dGVyICIgPDwgdGhpcyA8PCAiIHBvc3RBcHBseVJlc291cmNlIGRvbmVcbiIpOwogfQogCiBGbG9h
dFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlc291cmNlQm91bmRpbmdCb3goY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QpCkBAIC0zMDgsMjcgKzIxMiwxMyBAQCBGbG9hdFJlY3QgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvYmplYwogICAgIHJldHVybiBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xl
PFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJFbGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0
ZXJVbml0cygpLCBvYmplY3Qub2JqZWN0Qm91bmRpbmdCb3goKSk7CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKK3ZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzKiBwcmltaXR2ZSA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyo+KG9iamVjdC0+bm9kZSgpKTsKLQotICAgIExPRyhGaWx0ZXJzLCAiUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCByZW5kZXJl
ciAlcCIsIHRoaXMsIG9iamVjdCk7Ci0KICAgICBmb3IgKGNvbnN0IGF1dG8mIG9iamVjdEZpbHRl
ckRhdGFQYWlyIDogbV9yZW5kZXJlckZpbHRlckRhdGFNYXApIHsKICAgICAgICAgY29uc3QgYXV0
byYgZmlsdGVyRGF0YSA9IG9iamVjdEZpbHRlckRhdGFQYWlyLnZhbHVlOwogICAgICAgICBpZiAo
ZmlsdGVyRGF0YS0+c3RhdGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKiBidWlsZGVyID0gZmlsdGVyRGF0YS0+
YnVpbGRlci5nZXQoKTsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBlZmZlY3QgPSBidWlsZGVyLT5l
ZmZlY3RCeVJlbmRlcmVyKG9iamVjdCk7Ci0gICAgICAgIGlmICghZWZmZWN0KQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIC8vIFNpbmNlIGFsbCBlZmZlY3RzIHNoYXJlcyB0aGUgc2Ft
ZSBhdHRyaWJ1dGUgdmFsdWUsIGFsbAotICAgICAgICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBi
ZSBjaGFuZ2VkLgotICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWls
ZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKLQogICAgICAgICAvLyBSZXBhaW50
IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0
aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaAppbmRleCA4Y2UwYzdhYmMxNDNiZGI2NTM4NTBjOTNlMzI5MmFjOWRhNDli
YmM3Li43MWU0ZDFmMzQ2YzMyNjJkN2Y0ZTAzM2M0YzNmODE5YzI4YzE4MWZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5oCkBAIC0yMywxMCArMjMsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQzLDggKzQyLDcgQEAgcHVi
bGljOgogCiAgICAgRmlsdGVyRGF0YSgpID0gZGVmYXVsdDsKIAotICAgIFJlZlB0cjxTVkdGaWx0
ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRl
cjsKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXI7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBz
b3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0IHsg
bnVsbHB0ciB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9y
bTsKQEAgLTcyLDggKzcwLDYgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91
bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYpIGNvbnN0
OwotCiAgICAgaW5saW5lIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgZmlsdGVyVW5pdHMoKSBj
b25zdDsKICAgICBpbmxpbmUgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0
cygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCmluZGV4IGFkZDcx
YTY2MzdhYjI0NWE5Y2M0NDJhZTBiZjNjOTg3MGU0YzkxYmMuLmU0Mjc3NDJmNTFmOTIzYmQwYzdj
ZGQ5OTNjNzRhNmE1OWM1Y2Q4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3Bw
CkBAIC01NSwyMiArNTUsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnMKIHsKICAgICBSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAot
ICAgIGF1dG8qIGZpbHRlciA9IHBhcmVudCgpOwotICAgIGlmICghZmlsdGVyKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2U6OkVxdWFsIHx8ICFvbGRT
dHlsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIG5ld1N0
eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgIGlmIChpczxTVkdGRUZsb29kRWxlbWVudD4o
ZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpKSkgewogICAgICAgICBpZiAobmV3U3R5bGUuZmxvb2RD
b2xvcigpICE9IG9sZFN0eWxlLT5zdmdTdHlsZSgpLmZsb29kQ29sb3IoKSkKLSAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPigqZmlsdGVyKS5wcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKHRoaXMsIFNWR05hbWVzOjpmbG9vZF9jb2xvckF0dHIpOworICAgICAgICAg
ICAgZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoU1ZH
TmFtZXM6OmZsb29kX2NvbG9yQXR0cik7CiAgICAgICAgIGlmIChuZXdTdHlsZS5mbG9vZE9wYWNp
dHkoKSAhPSBvbGRTdHlsZS0+c3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSkKLSAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPigqZmlsdGVyKS5wcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKHRoaXMsIFNWR05hbWVzOjpmbG9vZF9vcGFjaXR5QXR0cik7CisgICAgICAg
ICAgICBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChT
VkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpOwogICAgIH0gZWxzZSBpZiAoaXM8U1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50PihmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkpIHx8IGlzPFNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ+KGZpbHRlclByaW1pdGl2ZUVsZW1lbnQoKSkpIHsKICAg
ICAgICAgaWYgKG5ld1N0eWxlLmxpZ2h0aW5nQ29sb3IoKSAhPSBvbGRTdHlsZS0+c3ZnU3R5bGUo
KS5saWdodGluZ0NvbG9yKCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCh0aGlzLCBTVkdOYW1l
czo6bGlnaHRpbmdfY29sb3JBdHRyKTsKKyAgICAgICAgICAgIGZpbHRlclByaW1pdGl2ZUVsZW1l
bnQoKS5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0
dHIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZGU0OTMyODI2M2QwNjJhMjM1YmNkMmY0NjY3
ZWVmMDljMTJlYjNiMy4uNmY3NmYyMGM5YzlkY2RhNTIxMjA1MzI3NDA2YThlYzQxYTkzMGZjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5k
ZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC01Miw2ICs1Myw3IEBACiAj
aW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVs
cGVycy5oIgogI2luY2x1ZGUgIlNWR0VsbGlwc2VFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmls
dGVyLmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveElubGluZXMuaCIKICNpbmNsdWRlICJT
VkdMaW5lRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCkBAIC00MzEsMTMg
KzQzMyw5IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHdyaXRlTmFtZVZhbHVl
UGFpcih0cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkpOwogICAg
ICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRl
ciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1t
eVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZp
bmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0g
ICAgICAgIGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15Rmls
dGVyLmdldCgpKSkgeworICAgICAgICBpZiAoUmVmUHRyPEZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBT
VkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpKSkgewogICAgICAgICAgICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotCi0gICAgICAgICAgICBp
ZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQotICAg
ICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAg
ICAgICAgICAgZHVtbXlGaWx0ZXItPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVz
b3VyY2VUeXBlKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNsaXBwZXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXImPihyZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAppbmRleCA3YmNmMDQxODAwZjc5OWYxMTc0Y2ZlMDRi
ODIyZDZkMDY0MzFmNjg2Li4yZWYwN2U0ZDhkYTFmYmQ3ODgxM2RiZjExZTU3OTEzMDk3MjNkYmYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTczLDE2ICs3
Myw2IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wg
U1ZHRkVCbGVuZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
IGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVCbGVuZCog
YmxlbmQgPSBzdGF0aWNfY2FzdDxGRUJsZW5kKj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Om1vZGVBdHRyKQotICAgICAgICByZXR1cm4gYmxlbmQtPnNldEJsZW5kTW9k
ZShtb2RlKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bW9kZUF0dHIpIHsKQEAgLTEwMCwyMCArOTAsMjcgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVu
dDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0Cit2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFu
Z2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7
CisgICAgRkVCbGVuZCYgYmxlbmQgPSBkb3duY2FzdDxGRUJsZW5kPihlZmZlY3QpOworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCisgICAgICAgIGJsZW5kLnNldEJsZW5k
TW9kZShtb2RlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZm
ZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
KQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAg
YXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMigpKTsKIAogICAgIGlmICghaW5w
dXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZl
Y3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwotICAgIEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVm
ZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQx
KTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZl
Y3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQor
ICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSkpOworCisgICAg
cmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCksIGlucHV0
Mi5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVu
ZEVsZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2
Li42NTA4ODFmZTIyNmU1ZGFmYjU4MzdlOTFjNDIwYzU3MTQyNTVjMjE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJp
bmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQo
RmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwor
ICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZm
ZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5
UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0
ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKaW5kZXggMDUy
NDg1NzhjMjc0YzhmYTJiM2UxZjI0NGU0MzY3ODY4ZjQyYmE5Yy4uZjYzMDk5ZWM5YWY0NWYxNzZl
MTA1NjBkOWY4NjU0Yzg3MWM2MWViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC03MSwxOCArNzEsNiBAQCB2b2lkIFNWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdAogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFQ29sb3JNYXRyaXgqIGNvbG9yTWF0cml4
ID0gc3RhdGljX2Nhc3Q8RkVDb2xvck1hdHJpeCo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbG9yTWF0cml4LT5zZXRU
eXBlKHR5cGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQot
ICAgICAgICByZXR1cm4gY29sb3JNYXRyaXgtPnNldFZhbHVlcyh2YWx1ZXMoKSk7Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0ciB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewpAQCAtMTAwLDEzICs4OCwyNiBA
QCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0
JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byYgY29s
b3JNYXRyaXggPSBkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpOworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgICAgIGNvbG9yTWF0cml4LnNldENvbG9y
TWF0cml4VHlwZSh0eXBlKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2
YWx1ZXNBdHRyKQorICAgICAgICBjb2xvck1hdHJpeC5zZXRWYWx1ZXModmFsdWVzKCkpOworICAg
IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1
dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCisgICAgaWYg
KGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBp
bnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CisgICAgCiAgICAgVmVjdG9yPGZsb2F0PiBmaWx0
ZXJWYWx1ZXM7CiAgICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBlKCk7CiAKQEAg
LTEzNSwxNSArMTM2LDE1IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsCiAgICAgICAgIGlmICgo
ZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYICYmIHNpemUgIT0gMjApCiAg
ICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
ICYmIHNpemUgIT0gMSkKICAgICAgICAgICAgIHx8IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURSAmJiBzaXplICE9IDEpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAKICAgICAgICAgZmlsdGVyVmFs
dWVzID0gdmFsdWVzKCk7CiAgICAgICAgIGZpbHRlclZhbHVlcy5zaHJpbmtUb0ZpdCgpOwogICAg
IH0KIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgZmls
dGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHNldEZpbHRlckVmZmVj
dChGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMp
KSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51
bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3YWIxOThiMTJl
NzdiZTIwNmI5YzVjNDEwMjNmZC4uOGYzYTg4MTU0ODVlMmIzNDBjZWNlN2E4MzhjZTBlOTA3MzEw
NjYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgK
QEAgLTg1LDggKzg1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAK
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUo
dGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuY3BwCmluZGV4IDkwYTU1YjdlZmZmN2EzZmU2MDZhOWUwNTc5YTc2ZWRlOWY5
NjgwMTEuLjlkNDg0NzExMDBkYzI5NTU1MzFkNWVmYzczNTEyZDNmNTU1M2MwODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNw
cApAQCAtNjMsMTIgKzYzLDE0IEBAIHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJiBidWlsZGVyKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgCisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5h
bWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisg
ICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgp
IH0gfTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gcmVkOwogICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gZ3JlZW47CkBAIC04NSwxMCArODcsMTAgQEAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHQKICAgICAgICAgZWxzZSBpZiAoaXM8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxk
KSkKICAgICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxk
KS50cmFuc2ZlckZ1bmN0aW9uKCk7CiAgICAgfQotICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBl
ZmZlY3Q7CisKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRl
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3Qo
KSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5kZXggYmI1ODkz
NDdkODgyNmRmYjM2MDllZGFjNmU4Yjk5M2E0ZGQ1NDg2My4uNjVmNjk2MTEwYzMxYTI3YmI2ZGNl
YTMxMTMwNDBmYzkxMDY2NDNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAg
ICAvLyBGSVhNRTogc3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZvaWQgcGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlk
ZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvc2l0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5jcHAKaW5kZXggM2NhOTliODc1NzA4YmJkOGE2YmFmNjUzZGMwNmZlMjA1YWM5ODIz
NS4uYmQwNDAwOTYwNDQ1ZWQ3MjhkYTFiNGRjNmU5MTlhMzJkOWUxNjcyZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAg
aW5saW5lIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10g
ewogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpp
bkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4xPigpOwogICAgICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjppbjJBdHRyLCAmU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjptX2luMj4oKTsKLSAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0
ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
LCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIEZF
Q29tcG9zaXRlT3BlcmF0b3IsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fY29tcG9zaXRlT3Bl
cmF0b3I+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZH
TmFtZXM6OmsxQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMT4oKTsKICAgICAgICAg
UHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azJBdHRyLCAmU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjptX2syPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5Ojpy
ZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprM0F0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
Om1fazM+KCk7CkBAIC01Niw5ICs1Niw5IEBAIFJlZjxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ+IFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhCiB2b2lk
IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZH
TmFtZXM6Om9wZXJhdG9yQXR0cikgewotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHBy
b3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6
ZnJvbVN0cmluZyh2YWx1ZSk7CisgICAgICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgcHJvcGVydHlW
YWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojpmcm9tU3RyaW5n
KHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAgbV9z
dmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+KHBy
b3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9jb21wb3NpdGVPcGVyYXRvci0+c2V0QmFzZVZh
bEludGVybmFsPEZFQ29tcG9zaXRlT3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC05NSwyNSArOTUsNiBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRUNvbXBvc2l0ZSogY29tcG9zaXRlID0gc3RhdGljX2Nh
c3Q8RkVDb21wb3NpdGUqPihlZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRPcGVyYXRpb24oc3Zn
T3BlcmF0b3IoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0dHIpCi0gICAg
ICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsxKGsxKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6azJBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLMihrMigpKTsK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cikKLSAgICAgICAgcmV0dXJuIGNv
bXBvc2l0ZS0+c2V0SzMoazMoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprNEF0
dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEs0KGs0KCkpOwotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0KIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omsy
QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azNBdHRyIHx8IGF0dHJOYW1lID09IFNWR05h
bWVzOjprNEF0dHIpIHsKQEAgLTEzMSwyMCArMTEyLDM1IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9z
aXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVj
dEJ5SWQoaW4yKCkpOwotICAgIAorICAgIGF1dG8mIGNvbXBvc2l0ZSA9IGRvd25jYXN0PEZFQ29t
cG9zaXRlPihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JB
dHRyKQorICAgICAgICBjb21wb3NpdGUuc2V0Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0cikKKyAg
ICAgICAgY29tcG9zaXRlLnNldEsxKGsxKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjprMkF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRLMihrMigpKTsKKyAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azNBdHRyKQorICAgICAgICBjb21wb3NpdGUuc2V0
SzMoazMoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Oms0QXR0cikKKyAg
ICAgICAgY29tcG9zaXRlLnNldEs0KGs0KCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRF
ZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjIo
KSk7CisKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShmaWx0ZXIsIHN2Z09w
ZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVj
dHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAg
ICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVDb21wb3NpdGU6OmNyZWF0ZShjb21wb3NpdGVPcGVyYXRv
cigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKSk7CisgICAgCisgICAgcmV0dXJuIHsgZmlsdGVy
RWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCksIGlucHV0Mi5yZWxlYXNlTm9uTnVs
bCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9zaXRlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5oCmluZGV4IDgxYTc4Yzg2NTdhMGZhMzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLmVmYmNm
NWQxMzYwMjljNzU3Y2ExYmE4MWRlOTg4MDQwNGY0YTczYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKQEAgLTI3LDE1ICsyNywxNSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1pbmxpbmUgdW5zaWduZWQgU1ZHSURMRW51bUxpbWl0
czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6aGlnaGVzdEV4cG9zZWRFbnVtVmFsdWUoKSB7IHJl
dHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CitpbmxpbmUgdW5zaWduZWQg
U1ZHSURMRW51bUxpbWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6aGlnaGVzdEV4cG9zZWRFbnVt
VmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKIHRl
bXBsYXRlPD4KLXN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBl
PiB7CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj4gewogICAg
IHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVf
T1BFUkFUT1JfTElHSFRFUjsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhGRUNvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIHN3aXRjaCAoY29tcG9zaXRlT3BlcmF0b3IpIHsKICAgICAgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKQEAgLTU4
LDcgKzU4LDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5
cGU+IHsKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHN0YXRpYyBGRUNvbXBvc2l0ZU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAib3ZlciIpCiAgICAgICAgICAgICBy
ZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGlj
OgogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0dXJuIG1faW4xLT5jdXJyZW50VmFsdWUo
KTsgfQogICAgIFN0cmluZyBpbjIoKSBjb25zdCB7IHJldHVybiBtX2luMi0+Y3VycmVudFZhbHVl
KCk7IH0KLSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHN2Z09wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdmdPcGVyYXRvci0+Y3VycmVudFZhbHVlPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+
KCk7IH0KKyAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvci0+Y3VycmVudFZhbHVlPEZFQ29tcG9zaXRlT3Bl
cmF0b3I+KCk7IH0KICAgICBmbG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazEtPmN1cnJlbnRW
YWx1ZSgpOyB9CiAgICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVybiBtX2syLT5jdXJyZW50VmFs
dWUoKTsgfQogICAgIGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMy0+Y3VycmVudFZhbHVl
KCk7IH0KQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcm
IGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYg
aW4yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMjsgfQotICAgIFNWR0FuaW1hdGVkRW51bWVyYXRp
b24mIHN2Z09wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2Z09wZXJhdG9yOyB9CisgICAg
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgY29tcG9zaXRlT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0
dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazFBbmlt
YXRlZCgpIHsgcmV0dXJuIG1fazE7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazJBbmltYXRl
ZCgpIHsgcmV0dXJuIG1fazI7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgazNBbmltYXRlZCgp
IHsgcmV0dXJuIG1fazM7IH0KQEAgLTEwOCwxMyArMTA4LDEzIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3Qm
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2luMiB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRp
b246OmNyZWF0ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OworICAgIFJlZjxT
VkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2NvbXBvc2l0ZU9wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2sxIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0
ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMiB7IFNWR0FuaW1hdGVk
TnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazMg
eyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsCmluZGV4IDc4ZTQwMjA3ZjViMDJmNjcwZjA0MGIy
OTM3NWVhZDdjMmI0NTJkZTAuLmZjNjcwYzllYzU2YzQxYzEwOTI4NTQ4NDI3YzVmNmE4ZTE4NWIx
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsCkBA
IC0zOCw3ICszOCw3IEBACiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRTdHJp
bmcgICAgICBpbjE7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAg
ICAgaW4yOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1
dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRBcz1j
b21wb3NpdGVPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRp
b24gb3BlcmF0b3I7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAg
ICAgazE7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgazI7
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgazM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAppbmRl
eCBmNzUwNTgxNWRlY2FiYjRlYTM0YjQzNWI0N2VhNWE4MGM2YTI2ZGYxLi42NDgyMzIxMDViOWZl
NGMzNzUzYmI4NDkxNzk1NmJlNDIwZjY5NzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKQEAgLTEzOCwyOCArMTM4LDYgQEAgdm9p
ZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCog
ZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRUNvbnZvbHZl
TWF0cml4KiBjb252b2x2ZU1hdHJpeCA9IHN0YXRpY19jYXN0PEZFQ29udm9sdmVNYXRyaXgqPihl
ZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKQotICAg
ICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldEVkZ2VNb2RlKGVkZ2VNb2RlKCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIpCi0gICAgICAgIHJldHVybiBj
b252b2x2ZU1hdHJpeC0+c2V0RGl2aXNvcihkaXZpc29yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6Ymlhc0F0dHIpCi0gICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0
QmlhcyhiaWFzKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WEF0dHIp
Ci0gICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50
KHRhcmdldFgoKSwgdGFyZ2V0WSgpKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0
YXJnZXRZQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRUYXJnZXRPZmZz
ZXQoSW50UG9pbnQodGFyZ2V0WCgpLCB0YXJnZXRZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVN
YXRyaXgtPnNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgp
LCBrZXJuZWxVbml0TGVuZ3RoWSgpKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpw
cmVzZXJ2ZUFscGhhQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRQcmVz
ZXJ2ZUFscGhhKHByZXNlcnZlQWxwaGEoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
OnNldE9yZGVyKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgbV9vcmRlclgtPnNldEJhc2VWYWxJ
bnRlcm5hbCh4KTsKQEAgLTE5MSwxMyArMTY5LDM2IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvJiBjb252b2x2ZU1hdHJpeCA9IGRvd25j
YXN0PEZFQ29udm9sdmVNYXRyaXg+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjplZGdlTW9kZUF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNldEVkZ2VNb2RlKGVk
Z2VNb2RlKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaXZpc29yQXR0
cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0RGl2aXNvcihkaXZpc29yKCkpOworICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiaWFzQXR0cikKKyAgICAgICAgY29udm9sdmVN
YXRyaXguc2V0QmlhcyhiaWFzKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp0YXJnZXRYQXR0cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0VGFyZ2V0T2Zmc2V0KElu
dFBvaW50KHRhcmdldFgoKSwgdGFyZ2V0WSgpKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnRhcmdldFlBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRUYXJnZXRP
ZmZzZXQoSW50UG9pbnQodGFyZ2V0WCgpLCB0YXJnZXRZKCkpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpCisgICAgICAgIGNvbnZvbHZl
TWF0cml4LnNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgp
LCBrZXJuZWxVbml0TGVuZ3RoWSgpKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQWxwaGFBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRQcmVzZXJ2
ZUFscGhhKHByZXNlcnZlQWxwaGEoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KIAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVk
RWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAg
ICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0g
fTsKKyAgICAKICAgICBpbnQgb3JkZXJYVmFsdWUgPSBvcmRlclgoKTsKICAgICBpbnQgb3JkZXJZ
VmFsdWUgPSBvcmRlclkoKTsKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6b3JkZXJB
dHRyKSkgewpAQCAtMjA2LDIyICsyMDcsMjIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAg
ICB9CiAgICAgLy8gU3BlYyBzYXlzIG9yZGVyIG11c3QgYmUgPiAwLiBCYWlsIGlmIGl0IGlzIG5v
dC4KICAgICBpZiAob3JkZXJYVmFsdWUgPCAxIHx8IG9yZGVyWVZhbHVlIDwgMSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYga2VybmVsTWF0
cml4ID0gdGhpcy0+a2VybmVsTWF0cml4KCk7CiAgICAgaW50IGtlcm5lbE1hdHJpeFNpemUgPSBr
ZXJuZWxNYXRyaXguaXRlbXMoKS5zaXplKCk7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGlzIGlz
IGEgcmVxdWlyZW1lbnQsIGFuZCBzaG91bGQgYmFpbCBvdXQgaWYgZmFpbHMKICAgICBpZiAob3Jk
ZXJYVmFsdWUgKiBvcmRlcllWYWx1ZSAhPSBrZXJuZWxNYXRyaXhTaXplKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGludCB0YXJnZXRYVmFsdWUg
PSB0YXJnZXRYKCk7CiAgICAgaW50IHRhcmdldFlWYWx1ZSA9IHRhcmdldFkoKTsKICAgICBpZiAo
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRYQXR0cikgJiYgKHRhcmdldFhWYWx1ZSA8IDAg
fHwgdGFyZ2V0WFZhbHVlID49IG9yZGVyWFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2
YWx1ZSBpczogdGFyZ2V0WCA9IGZsb29yICggb3JkZXJYIC8gMiApKQogICAgIGlmICghaGFzQXR0
cmlidXRlKFNWR05hbWVzOjp0YXJnZXRYQXR0cikpCiAgICAgICAgIHRhcmdldFhWYWx1ZSA9IHN0
YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVyWFZhbHVlIC8gMikpOwogICAgIGlmIChoYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFlBdHRyKSAmJiAodGFyZ2V0WVZhbHVlIDwgMCB8fCB0YXJn
ZXRZVmFsdWUgPj0gb3JkZXJZVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlz
OiB0YXJnZXRZID0gZmxvb3IgKCBvcmRlclkgLyAyICkpCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnRhcmdldFlBdHRyKSkKICAgICAgICAgdGFyZ2V0WVZhbHVlID0gc3RhdGljX2Nh
c3Q8aW50PihmbG9vcmYob3JkZXJZVmFsdWUgLyAyKSk7CkBAIC0yMzQsMTEgKzIzNSwxMSBAQCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlID0g
MTsKICAgICB9CiAgICAgaWYgKGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUgPD0gMCB8fCBrZXJuZWxV
bml0TGVuZ3RoWVZhbHVlIDw9IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgZmxvYXQgZGl2aXNvclZhbHVlID0gZGl2aXNvcigpOwogICAgIGlm
IChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSAmJiAhZGl2aXNvclZhbHVlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAoIWhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6ZGl2aXNvckF0dHIpKSB7CiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwga2VybmVsTWF0cml4U2l6ZTsgKytpKQogICAgICAgICAgICAgZGl2aXNvclZhbHVl
ICs9IGtlcm5lbE1hdHJpeC5pdGVtcygpW2ldLT52YWx1ZSgpOwpAQCAtMjQ2LDkgKzI0NywxMiBA
QCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsK
ICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0
ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFz
KCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxv
YXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwg
cHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgYXV0byBrZXJuZWxTaXpl
ID0gSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUpOworICAgIGF1dG8gdGFyZ2V0T2Zm
c2V0ID0gSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpOworICAgIGF1dG8ga2Vy
bmVsVW5pdExlbmd0aCA9IEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVs
VW5pdExlbmd0aFlWYWx1ZSk7CisgICAgc2V0RmlsdGVyRWZmZWN0KEZFQ29udm9sdmVNYXRyaXg6
OmNyZWF0ZShrZXJuZWxTaXplLCBkaXZpc29yVmFsdWUsIGJpYXMoKSwgdGFyZ2V0T2Zmc2V0LCBl
ZGdlTW9kZSgpLCBrZXJuZWxVbml0TGVuZ3RoLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJp
eCkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25O
dWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3
ZTA0MzcwZDM1OTgyYTk1YjhkOTA0OWIzMzkuLjBlMDhlMjlhYzMxYzE1OGIwZGQwYzdiYjZkNWJl
MmI3YzE0NGMzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oCkBAIC0xMDIsOCArMTAyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
Jikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVk
U3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZkOGU5NWFlOTk1N2U2ZTIx
ZDZiZjJhMTBjNDU0YmRkNS4uNWU1ODhmZTk3MDYyMmE4MWFlZmQzMWJlMDMzYWVkOTY3Y2E0NTI2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5jcHAKQEAgLTgxLDUwICs4MSw2IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1l
LCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQotewotICAgIEZFRGlmZnVzZUxpZ2h0aW5nKiBkaWZmdXNlTGlnaHRpbmcg
PSBzdGF0aWNfY2FzdDxGRURpZmZ1c2VMaWdodGluZyo+KGVmZmVjdCk7Ci0KLSAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikgewotICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRl
cmVyKTsKLSAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBw
bHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29s
b3IoKSk7Ci0gICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldExpZ2h0aW5nQ29sb3Io
Y29sb3IpOwotICAgIH0KLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2Fs
ZUF0dHIpCi0gICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldFN1cmZhY2VTY2FsZShz
dXJmYWNlU2NhbGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaWZmdXNlQ29u
c3RhbnRBdHRyKQotICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXREaWZmdXNlQ29u
c3RhbnQoZGlmZnVzZUNvbnN0YW50KCkpOwotCi0gICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25z
dF9jYXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5nLT5saWdodFNvdXJjZSgpKTsKLSAg
ICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1l
bnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7Ci0gICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7Ci0K
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKQotICAgICAgICByZXR1
cm4gbGlnaHRTb3VyY2Uuc2V0QXppbXV0aChsaWdodEVsZW1lbnQtPmF6aW11dGgoKSk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQotICAgICAgICByZXR1cm4g
bGlnaHRTb3VyY2Uuc2V0RWxldmF0aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0aW9uKCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNv
dXJjZS5zZXRYKGxpZ2h0RWxlbWVudC0+eCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnlBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WShsaWdodEVsZW1lbnQt
PnkoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikKLSAgICAgICAgcmV0
dXJuIGxpZ2h0U291cmNlLnNldFoobGlnaHRFbGVtZW50LT56KCkpOwotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNl
LnNldFBvaW50c0F0WChsaWdodEVsZW1lbnQtPnBvaW50c0F0WCgpKTsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJj
ZS5zZXRQb2ludHNBdFkobGlnaHRFbGVtZW50LT5wb2ludHNBdFkoKSk7Ci0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3Vy
Y2Uuc2V0UG9pbnRzQXRaKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRaKCkpOwotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCi0gICAgICAgIHJldHVybiBs
aWdodFNvdXJjZS5zZXRTcGVjdWxhckV4cG9uZW50KGxpZ2h0RWxlbWVudC0+c3BlY3VsYXJFeHBv
bmVudCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xl
QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldExpbWl0aW5nQ29uZUFuZ2xlKGxp
Z2h0RWxlbWVudC0+bGltaXRpbmdDb25lQW5nbGUoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0ciB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0ciB8fCBhdHRyTmFtZSA9PSBT
VkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omxp
Z2h0aW5nX2NvbG9yQXR0cikgewpAQCAtMTUxLDI4ICsxMDcsODAgQEAgdm9pZCBTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZH
RkVMaWdodEUKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3Zv
aWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFu
Z2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OworICAgIGF1dG8mIGRpZmZ1c2VMaWdodGluZyA9IGRvd25jYXN0PEZFRGlmZnVzZUxpZ2h0aW5n
PihlZmZlY3QpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xv
ckF0dHIpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgICAgIENvbG9yIGNvbG9yID0gcmVu
ZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxl
KCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOworICAgICAgICBkaWZmdXNlTGlnaHRpbmcu
c2V0Q29sb3IoY29sb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKSB7CisgICAgICAgIGRpZmZ1c2VMaWdo
dGluZy5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50
QXR0cikgeworICAgICAgICBkaWZmdXNlTGlnaHRpbmcuc2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1
c2VDb25zdGFudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIGF1dG8mIGxpZ2h0
U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRpZmZ1c2VMaWdodGluZy5zb3VyY2Uo
KSk7CisgICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGln
aHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOworICAgIEFTU0VSVChsaWdodEVsZW1l
bnQpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cikKKyAgICAg
ICAgbGlnaHRTb3VyY2Uuc2V0QXppbXV0aChsaWdodEVsZW1lbnQtPmF6aW11dGgoKSk7CisgICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCisgICAgICAgIGxp
Z2h0U291cmNlLnNldEVsZXZhdGlvbihsaWdodEVsZW1lbnQtPmVsZXZhdGlvbigpKTsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNl
LnNldFgobGlnaHRFbGVtZW50LT54KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjp5QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0WShsaWdodEVsZW1lbnQtPnkoKSk7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnpBdHRyKQorICAgICAgICBsaWdo
dFNvdXJjZS5zZXRaKGxpZ2h0RWxlbWVudC0+eigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0UG9pbnRz
QXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRYKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRQb2ludHNB
dFkobGlnaHRFbGVtZW50LT5wb2ludHNBdFkoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFBvaW50c0F0
WihsaWdodEVsZW1lbnQtPnBvaW50c0F0WigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFNw
ZWN1bGFyRXhwb25lbnQobGlnaHRFbGVtZW50LT5zcGVjdWxhckV4cG9uZW50KCkpOworICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpCisgICAg
ICAgIGxpZ2h0U291cmNlLnNldExpbWl0aW5nQ29uZUFuZ2xlKGxpZ2h0RWxlbWVudC0+bGltaXRp
bmdDb25lQW5nbGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChp
bjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4geyB9OworCisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiAKICAg
ICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1l
bnQodGhpcyk7CiAgICAgaWYgKCFsaWdodEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdo
dEVsZW1lbnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291
cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShidWlsZGVyKTsKIAogICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgQ29sb3Ig
Y29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5k
ZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVm
ZmVjdCA9IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNj
YWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0
TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBzZXRGaWx0ZXJFZmZl
Y3QoRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1
c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBX
VEZNb3ZlKGxpZ2h0U291cmNlKSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsg
aW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2
YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uNWZhZDc1OTU0NTA2M2YzMmU1NDFmOWZkNDYwYTc5
MGZkYTAwOTdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuaApAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlk
ZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZk
NzIyZGZkMDUxNzNkOGMyLi5hODNiYWE0Y2ZiMDRiMzJjMzBkY2FlZjdiZmNlNDBiM2Y4MDJkNDU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcApAQCAtODQsMjAgKzg0LDYgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnMKICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUs
IHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAqIGRpc3BsYWNlbWVudE1hcCA9
IHN0YXRpY19jYXN0PEZFRGlzcGxhY2VtZW50TWFwKj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKQotICAgICAgICByZXR1cm4gZGlz
cGxhY2VtZW50TWFwLT5zZXRYQ2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0b3IoKSk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0cikKLSAgICAg
ICAgcmV0dXJuIGRpc3BsYWNlbWVudE1hcC0+c2V0WUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNl
bGVjdG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKQotICAg
ICAgICByZXR1cm4gZGlzcGxhY2VtZW50TWFwLT5zZXRTY2FsZShzY2FsZSgpKTsKLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5l
bFNlbGVjdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0
dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikgewpAQCAtMTE1LDIwICsxMDEs
MzEgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQo
RmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQorewor
ICAgIGF1dG8mIGRpc3BsYWNlbWVudE1hcCA9IGRvd25jYXN0PEZFRGlzcGxhY2VtZW50TWFwPihl
ZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0
dHIpCisgICAgICAgIGRpc3BsYWNlbWVudE1hcC5zZXRYQ2hhbm5lbFNlbGVjdG9yKHhDaGFubmVs
U2VsZWN0b3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVs
U2VsZWN0b3JBdHRyKQorICAgICAgICBkaXNwbGFjZW1lbnRNYXAuc2V0WUNoYW5uZWxTZWxlY3Rv
cih5Q2hhbm5lbFNlbGVjdG9yKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpzY2FsZUF0dHIpCisgICAgICAgIGRpc3BsYWNlbWVudE1hcC5zZXRTY2FsZShzY2FsZSgpKTsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCiB7
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwor
ICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBp
bnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0
MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gZWZmZWN0
ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IoKSwg
eUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJl
c2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAg
aW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAg
ICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAg
c2V0RmlsdGVyRWZmZWN0KEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoeENoYW5uZWxTZWxlY3Rv
cigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpKTsKKworICAgIHJldHVybiB7IGZpbHRl
ckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpLCBpbnB1dDIucmVsZWFzZU5vbk51
bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuaAppbmRleCBhYTkxZGYzOGIzNjI5OGYxMjFhMTQxMWM0ZDBhZTVlY2Q1
ODY2NWQzLi5kMTVmODhlOGUwOWFjM2VmOTY4NjBkOTNmNmVlMmUyYmQ2N2VkMjRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCkBAIC05
MCw4ICs5MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0
cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3Rh
bnRMaWdodEVsZW1lbnQuY3BwCmluZGV4IGE2ODZiYjhmYTM4ZDlkZGZhMjhlMDJhZWQ5NWU0MWIw
OGEzNmYyZjcuLjkxNmYwM2MwZjkxNTdlYzgyOGM5MmU5OWI2M2JkNjIyZTk1MjZhNDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCkBAIC0z
Niw3ICszNiw3IEBAIFJlZjxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+IFNWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAK
LVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShT
VkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsK
ICAgICByZXR1cm4gRGlzdGFudExpZ2h0U291cmNlOjpjcmVhdGUoYXppbXV0aCgpLCBlbGV2YXRp
b24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
LmgKaW5kZXggZmJkZjcxYzBlY2JkOWY5OTdkNjllYTY1NGI5ZjViYTAzMTdkNzFjYy4uYmJiZmU5
NDczOWI0NDM5YzA2MDZiYzEzODhlZDgwZjcyMjcyNTg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZH
RmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGln
aHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNW
R0ZFTGlnaHRFbGVtZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURyb3BTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFk
b3dFbGVtZW50LmNwcAppbmRleCAyMmJjZTFkMzMzMTdjOTU3MWZlNWQ3OWY0YjMyNmE4OWJmYzVi
NjgxLi5mZTIzMjhiNWNhNjYzYjRkNGM5Yjc3ZTkzMjc0Y2VjMGE4ZTFkZjQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCkBAIC04OCw3ICs4OCwx
MyBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0bwogCiB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7
Ci0gICAgaWYgKFByb3BlcnR5UmVnaXN0cnk6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmR5QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cikg
eworICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKKyAgICAg
ICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAg
ICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAgICAgICAgaW52YWxp
ZGF0ZSgpOwogICAgICAgICByZXR1cm47CkBAIC05NywyNyArMTAzLDQ0IEBAIHZvaWQgU1ZHRkVE
cm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6
ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CisgICAgYXV0byYgZmVEcm9wU2hhZG93ID0gZG93
bmNhc3Q8RkVEcm9wU2hhZG93PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6ZHhBdHRyKQorICAgICAgICBmZURyb3BTaGFkb3cuc2V0RHgoZHgoKSk7CisgICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgZmVEcm9wU2hhZG93LnNl
dER5KGR5KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRp
b25BdHRyKSB7CisgICAgICAgIGZlRHJvcFNoYWRvdy5zZXRTdGREZXZpYXRpb25YKHN0ZERldmlh
dGlvblgoKSk7CisgICAgICAgIGZlRHJvcFNoYWRvdy5zZXRTdGREZXZpYXRpb25ZKHN0ZERldmlh
dGlvblkoKSk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWls
ZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7Cisg
ICAgaWYgKCFpbnB1dDEpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaGFzRmlsdGVy
RWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxl
YXNlTm9uTnVsbCgpIH0gfTsKKwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3Rk
RGV2aWF0aW9uWSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpOwogICAgIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsK
ICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICBhdXRv
IGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGlmICgh
aW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVE
cm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCks
IGR5KCksIGNvbG9yLCBvcGFjaXR5KSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRHJvcFNoYWRv
dzo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCks
IGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBp
bnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgp
LCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1OGU3
MTJiNjIxYjhjYmU0MmY3NDUxZC4uNzZiZjkyNTMxNTk4MzE5YjI1MWU1OWZiMTdmN2ZlMzQzNWQz
MDI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBA
IC01Myw3ICs1Myw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRl
ckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBlMTYzZmY4N2QwYjRiY2Fi
ZDIyNDQ3NThmYzIuLjI3YzE1YjBmZTFjOGM3ZjY0NDNlYmY2M2FjMTI1YWYxZTg2M2Y1YzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApAQCAtNDIsMzQgKzQyLDM4
IEBAIFJlZjxTVkdGRUZsb29kRWxlbWVudD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZH
RkVGbG9vZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdGRUZsb29k
RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3ZvaWQgU1ZHRkVGbG9vZEVsZW1lbnQ6OmZp
bHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgRkVGbG9vZCogZmxvb2QgPSBz
dGF0aWNfY2FzdDxGRUZsb29kKj4oZWZmZWN0KTsKLQorICAgIAorICAgIGF1dG8mIGZsb29kID0g
ZG93bmNhc3Q8RkVGbG9vZD4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmZsb29kX2NvbG9yQXR0cikKLSAgICAgICAgcmV0dXJuIGZsb29kLT5zZXRGbG9vZENvbG9yKHN0
eWxlLnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmZsb29kX29wYWNpdHlBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNldEZsb29kT3Bh
Y2l0eShzdHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKTsKLQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZmxvb2Quc2V0Rmxvb2RDb2xv
cihzdHlsZS5zdmdTdHlsZSgpLmZsb29kQ29sb3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKQorICAgICAgICBmbG9vZC5zZXRGbG9vZE9w
YWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSk7CisgICAgZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVG
bG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29u
c3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZm
ZWN0Pj4+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikKIHsKKyAg
ICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgp
LCB7IH0gfTsKKwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigp
OwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorICAg
ICAgICByZXR1cm4geyB9OworCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVy
ZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xv
cigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAg
ICByZXR1cm4gRkVGbG9vZDo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIG9wYWNpdHkpOworICAgIHNl
dEZpbHRlckVmZmVjdChGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpKTsKKworICAgIHJl
dHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuaAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcyNDhhMWI2ZjVjZjUx
ZmVlOTExLi5hOWQ1MjNlYmNkMDg3MWYwMzRmZDRjZWIwNGRjNmEwNzM1OTc1ZDgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAtMzUsOCArMzUsOCBAQCBwcml2YXRl
OgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8
U1ZHRkVGbG9vZEVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47
CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgYm9vbCBzZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVj
dEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3Bw
CmluZGV4IDdhOTk4MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLjFkNTcxNTZh
NzgyZWE5NWM2MTY3ZTA2OTdlMjcyNDg4OGU5MGE1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC04Niw3ICs4NiwxMyBAQCB2b2lk
IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQQogCiB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBp
ZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgeworICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1
YXJkIGd1YXJkKCp0aGlzKTsKKyAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmluQXR0cikgewogICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJk
KCp0aGlzKTsKICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CkBAIC05NSwx
OCArMTAxLDMxIEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lCiAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0K
IAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3Zv
aWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2Vk
KEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwor
ICAgIGF1dG8mIGZlR2F1c3NpYW5CbHVyID0gZG93bmNhc3Q8RkVHYXVzc2lhbkJsdXI+KGVmZmVj
dCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7Cisg
ICAgICAgIGZlR2F1c3NpYW5CbHVyLnNldFN0ZERldmlhdGlvblgoc3RkRGV2aWF0aW9uWCgpKTsK
KyAgICAgICAgZmVHYXVzc2lhbkJsdXIuc2V0U3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKCkp
OworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikKKyAg
ICAgICAgZmVHYXVzc2lhbkJsdXIuc2V0RWRnZU1vZGUoZWRnZU1vZGUoKSk7CisgICAgZWxzZQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5w
dXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHN0ZERl
dmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgp
KQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZp
YXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSkpOwogCi0gICAgYXV0byBlZmZl
Y3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGRE
ZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0
KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIyYzUw
OWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4uMzg1NTE4ZmVmMmM4ZGQ2MTliYzk1MzA5NDk2NTFi
N2FiNDQwYTVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuaApAQCAtNTMsNyArNTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAg
ICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hh
bmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlMTQ2ODhhNWViMTc2ZjAyYTE2
YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi5kM2Y1NGRkMThhYjc3ZmIyMjNkYjcyMmY0NTQ2OTZmODhk
ODRhNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3NCwxNiArMTc1LDUzIEBAIHZvaWQg
U1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3Qg
TmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50UmVuZGVyZXIpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdGRUltYWdl
RWxlbWVudDo6aW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hl
ZEltYWdlKQotICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKGZpbHRlciwg
bV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSwgcHJlc2VydmVBc3Bl
Y3RSYXRpbygpKTsKLQogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRF
bGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgpKTsKKyAgICBpZiAoIWlzPFNW
R0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAg
ICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0LmVsZW1lbnQuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBGRUltYWdlOjpjcmVh
dGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVB
c3BlY3RSYXRpbygpKTsKKyAgICBhdXRvIGNvbnRleHROb2RlID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCk7CisgICAgYXV0byByZW5kZXJlciA9IGNvbnRl
eHROb2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQorICAgIGF1
dG8gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFu
c2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSgqcmVuZGVyZXIpOworICAgIGlm
ICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5z
Zm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFuc2Zvcm0u
eVNjYWxlKCksIDAsIDApOworCisgICAgYXV0byBzcmNSZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IHNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qoc3JjUmVjdCk7CisKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VSZWN0LCBz
aGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgY29udGV4dCA9IGltYWdlQnVmZmVy
LT5jb250ZXh0KCk7CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29u
dGV4dChjb250ZXh0LCAqcmVuZGVyZXIsIEFmZmluZVRyYW5zZm9ybSgpKTsKKworICAgIHJldHVy
biBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKQoreworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OworCisgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCisgICAg
ICAgIHNldEZpbHRlckVmZmVjdChGRUltYWdlOjpjcmVhdGUoUmVmPEltYWdlPiB7ICptX2NhY2hl
ZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpIH0sIHByZXNlcnZlQXNwZWN0UmF0
aW8oKSkpOworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlckZvckVmZmVj
dCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVJbWFnZTo6Y3JlYXRlKGltYWdlQnVmZmVy
LnJlbGVhc2VOb25OdWxsKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSkpOworCisgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojph
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKaW5kZXggZDkzZTBkMGRiOGI4ODY2
NTQ4MGYyMTAxNWEyNTZiYWRhMTU0YzVjNy4uNDcwN2ZlNjgwNmJhODk2NTEwNDlhNmY4OTRjOGE3
MWFlMjU4NTRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKQEAgLTU1
LDcgKzU1LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUo
KSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyRm9yRWZmZWN0KCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBmaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZSB7IH0KKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1ZXN0SW1h
Z2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAppbmRleCBj
ZDBiZmI5ZWRjZmQ3YjRlMWFmMzliNTVlZGJiYmQ3ODRhYWVhODlkLi4xY2IyN2RmMzE1MDQwMTdj
Njk5ZTAxMGNlZDRiMGQ1ZDYwMGJjNjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaApAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyOwogY2xhc3Mg
U1ZHRkVMaWdodEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChTVkdGRUxpZ2h0RWxlbWVudCk7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBSZWY8
TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCA9IDA7CiAgICAgc3RhdGljIFNWR0ZFTGlnaHRFbGVtZW50KiBmaW5kTGln
aHRFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQqKTsKIAogICAgIGZsb2F0IGF6aW11dGgoKSBjb25z
dCB7IHJldHVybiBtX2F6aW11dGgtPmN1cnJlbnRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAppbmRleCBiZTJmNmUwMzA3ZGM1NTE2MDA3OTBmZDViZjE4
MmYxZDk0NjIzZGQ2Li40NjQ3ZTQ2OTJkYWU4YzkyMGQyYmQ5YWNlNDQyOGZhYmUwYTY5NGNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKQEAgLTI2LDcgKzI2LDYg
QEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhl
bHBlcnMuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC00NSwyNCArNDQsMjUgQEAgUmVmPFNWR0ZFTWVyZ2VF
bGVtZW50PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
YnVpbGRlcikKIHsKLSAgICBhdXRvIGVmZmVjdCA9IEZFTWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwot
ICAgIGF1dG8mIG1lcmdlSW5wdXRzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKKyAgICBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1lcmdlSW5wdXRzOwogCiAgICAgZm9yIChhdXRvJiBtZXJn
ZU5vZGUgOiBjaGlsZHJlbk9mVHlwZTxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KCp0aGlzKSkgewot
ICAgICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZCht
ZXJnZU5vZGUuaW4xKCkpOworICAgICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChtZXJnZU5vZGUuaW4xKCkpOwogICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZN
b3ZlKG1lcmdlRWZmZWN0KSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBtZXJn
ZUlucHV0cy5hcHBlbmQobWVyZ2VFZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAg
ICAgbWVyZ2VJbnB1dHMuc2hyaW5rVG9GaXQoKTsKLQogICAgIGlmIChtZXJnZUlucHV0cy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisg
ICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFTWVy
Z2U6OmNyZWF0ZShtZXJnZUlucHV0cy5zaXplKCkpKTsKIAotICAgIHJldHVybiBlZmZlY3Q7Cisg
ICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIFdURk1vdmUobWVyZ2VJbnB1dHMpIH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1MDg2ODE2ZjY5
NzZjNjY5N2RjNTEwNzU4MDJkMjgzY2Y0ZTNjMi4uZTg4MGU2ZTk3YjNjZTJlMmNiZmYzMzJlMWQ5
M2ExMWQyNDZjOWYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKQEAg
LTM1LDcgKzM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZH
UHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHBy
b3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7
IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
Y3BwCmluZGV4IGQ2ZmI5NWM4ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQxNzk1ZDMyMWIuLjBhYjU1
YjJhYzFmODE4ZWMyZWY0NTYxNTRmNTQyZTk0YmM4Y2EzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5l
IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmEKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3Ry
eTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudDo6bV9pbjE+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVy
dHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgJlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9n
eU9wZXJhdG9yLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9tb3JwaG9sb2d5T3BlcmF0b3I+
KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6
OnJhZGl1c0F0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1gsICZTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1k+KCk7CiAgICAgfSk7CiB9CkBAIC01OSw5ICs1OSw5
IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVzKGZsb2F0IHgsIGZsb2F0
IHkpCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChu
YW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJh
dG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3Ig
cHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZy
b21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAg
ICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9y
VHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX21vcnBob2xvZ3lPcGVyYXRvci0+
c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgxLDIyICs4MSw2IEBAIHZvaWQgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRU1vcnBob2xvZ3kqIG1vcnBob2xvZ3kg
PSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0
TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cmFkaXVzQXR0cikgewotICAgICAgICAvLyBCb3RoIHNldFJhZGl1cyBmdW5jdGlv
bnMgc2hvdWxkIGJlIGV2YWx1YXRlZCBzZXBhcmF0ZWx5LgotICAgICAgICBib29sIGlzUmFkaXVz
WENoYW5nZWQgPSBtb3JwaG9sb2d5LT5zZXRSYWRpdXNYKHJhZGl1c1goKSk7Ci0gICAgICAgIGJv
b2wgaXNSYWRpdXNZQ2hhbmdlZCA9IG1vcnBob2xvZ3ktPnNldFJhZGl1c1kocmFkaXVzWSgpKTsK
LSAgICAgICAgcmV0dXJuIGlzUmFkaXVzWENoYW5nZWQgfHwgaXNSYWRpdXNZQ2hhbmdlZDsKLSAg
ICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
Om9wZXJhdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgewpAQCAt
MTE0LDIxICs5OCwzNCBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2
b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQo
RmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0g
ICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKLSAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVz
WSgpOworICAgIGF1dG8mIG1vcnBob2xvZ3kgPSBkb3duY2FzdDxGRU1vcnBob2xvZ3k+KGVmZmVj
dCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCisgICAgICAg
IG1vcnBob2xvZ3kuc2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcigpKTsK
KyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgeworICAgICAg
ICAvLyBCb3RoIHNldFJhZGl1cyBmdW5jdGlvbnMgc2hvdWxkIGJlIGV2YWx1YXRlZCBzZXBhcmF0
ZWx5LgorICAgICAgICBtb3JwaG9sb2d5LnNldFJhZGl1c1gocmFkaXVzWCgpKTsKKyAgICAgICAg
bW9ycGhvbG9neS5zZXRSYWRpdXNZKHJhZGl1c1koKSk7CisgICAgfSBlbHNlCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCisgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1
c1goKTsKKyAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOwogICAgIGlmICh4UmFkaXVzIDwg
MCB8fCB5UmFkaXVzIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJF
ZmZlY3QoRkVNb3JwaG9sb2d5OjpjcmVhdGUobW9ycGhvbG9neU9wZXJhdG9yKCksIHhSYWRpdXMs
IHlSYWRpdXMpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVNb3JwaG9sb2d5OjpjcmVhdGUoZmls
dGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsKLSAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7
IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZmNjZhYTY2OS4u
ODQwYjViYWFmMjgzNjBjNmY2NTlmM2U5OTc1NDcwNzE4OTM0YzdhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0yNiwxMiArMjYsMTIgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRz
PE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3Jw
aG9sb2d5T3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgp
IHsgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7IH0KIAotICAgIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorICAgIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKG1vcnBob2xvZ3lP
cGVyYXRvcikgewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgog
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlU
cmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBmcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1vcnBob2xvZ3lPcGVyYXRvciBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUg
PT0gImVyb2RlIikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REU7CkBAIC02MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVzKGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0
dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
c3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBob2xvZ3lPcGVyYXRvciBtb3Jw
aG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRvci0+Y3Vy
cmVudFZhbHVlPE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IHJhZGl1c1goKSBj
b25zdCB7IHJldHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgcmFk
aXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVudFZhbHVlKCk7IH0KIAogICAg
IFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9Ci0gICAg
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1f
c3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBtb3JwaG9sb2d5T3Bl
cmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CiAgICAgU1ZH
QW5pbWF0ZWROdW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWDsgfQog
ICAgIFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQoKSB7IHJldHVybiBtX3JhZGl1
c1k7IH0KIApAQCAtODAsMTIgKzgwLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fc3Zn
T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFKSB9OworICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBt
X21vcnBob2xvZ3lPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlz
LCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX3JhZGl1c1ggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3JhZGl1c1kgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3Jl
YXRlKHRoaXMpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuaWRsCmluZGV4IGEyYzE4MWYyZTYzN2NkMzkwOThlYmU2OWU2MDk4YWJlM2MzODVjZDEu
LjJkMjFmMmExZDg4OGQwMmVjMTc5ZGYxMGUyZGU0M2ZjNjUyOTdkNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKQEAgLTMzLDcgKzMzLDcgQEAK
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVkdfTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUg
ICA9IDI7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBp
bjE7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
VkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAgIFtJbXBsZW1lbnRlZEFzPW1vcnBo
b2xvZ3lPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24g
b3BlcmF0b3I7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAg
cmFkaXVzWDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBy
YWRpdXNZOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCmluZGV4
IDAzODI2OGI4OWIyZjE5ZjliZTU2ODczOWQxMjMwMzU0MTAwYTVlZTcuLjU5NDUwNmEzZWI2YmUw
YjZlNzVhMmY3MDRiYmFiNjg1YjZkNTA0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwCkBAIC03Miw3ICs3MiwxMyBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cgogCiB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmR4QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKSB7CisgICAgICAgIEluc3Rh
bmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOworICAgICAgICBwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIEluc3RhbmNlSW52YWxp
ZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTgxLDE2ICs4NywyNyBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAordm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQo
RmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgYXV0byYgZmVPZmZzZXQgPSBkb3duY2FzdDxGRU9mZnNldD4oZWZmZWN0KTsKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAgICAgZmVPZmZzZXQuc2V0RHgoZHgo
KSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAg
ZmVPZmZzZXQuc2V0RHkoZHkoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KIAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEo
KSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0Rmls
dGVyRWZmZWN0KEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSkpOwogCi0gICAgYXV0byBlZmZl
Y3QgPSBGRU9mZnNldDo6Y3JlYXRlKGZpbHRlciwgZHgoKSwgZHkoKSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcy
ZGI2N2IxMjVlYTJlZDQ2NWUzNWI1NzM3MDQ5YmVlLi45ZDNkYWYwOWRkNTMxYzRjMjNiNGUxYmFj
NjRmYjU1NDZhNGE0NGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5o
CkBAIC00Nyw3ICs0Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZp
bHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAppbmRleCA5ZmY4NDczMzhhMWI2YTU1
ZmNkYjgyMWEwOWYwYWNjM2MyMDdlYTgxLi42NDA2NGY1ZjY4MDg0OTRjZjdhYjEwZGQwMTljMGFh
ZDY5ODljZGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5o
IgogI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCkBAIC0zOSwxOSArMzgsMTkgQEAgUmVmPFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ+IFNWR0ZF
UG9pbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
KTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpsaWdodFNv
dXJjZShTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAorUmVmPExpZ2h0U291cmNlPiBT
VkdGRVBvaW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVy
JikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247Ci0gICAgaWYgKGJ1aWxkZXIu
cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFy
Z2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJl
bmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRp
b24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsK
LQotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBv
aW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5o
dG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkg
KiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJl
bmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotICAgIH0gZWxzZQot
ICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKKy8vICAgIGlm
IChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0g
ZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgo
cmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAg
ICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVp
Z2h0KCkpOworLy8KKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3Np
dGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNv
cm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7
CisvLyAgICB9IGVsc2UKKy8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHko
KSwgeigpKTsKICAgICAKICAgICByZXR1cm4gUG9pbnRMaWdodFNvdXJjZTo6Y3JlYXRlKHBvc2l0
aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCmlu
ZGV4IDMzYTViZDc0OTIwODI4Yzk5ODY0NWI3MjJmNzJhNzQ1ZTQ4ZGE3OWUuLmM0N2E2MDU2ZTg4
N2RhMDgxYTA0ZjNiOTUyYmRlNDViY2RhOWQ5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFUG9pbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKGNv
bnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0
KHNpemVvZihTVkdGRVBvaW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1l
bnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwCmluZGV4IDliN2NlNDBhYjk3MTZhZTRmMzM1ZjU0YjI0Y2RhNDU5YTg0Mjlh
NTkuLmJjODI1ZmE0YTQ1MTEwMzFiOTJhZTliYWQxZWIzN2JlMjlhZDBjZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKQEAg
LTg4LDUyICs4OCw2IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uCiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9
CiAKLWJvb2wgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKLXsKLSAgICBGRVNwZWN1bGFyTGlnaHRpbmcqIHNwZWN1bGFyTGlnaHRpbmcgPSBzdGF0aWNf
Y2FzdDxGRVNwZWN1bGFyTGlnaHRpbmcqPihlZmZlY3QpOwotCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJlcik7Ci0g
ICAgICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwot
ICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7
Ci0gICAgfQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikK
LSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFN1cmZhY2VTY2FsZShzdXJmYWNl
U2NhbGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50
QXR0cikKLSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFNwZWN1bGFyQ29uc3Rh
bnQoc3BlY3VsYXJDb25zdGFudCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNw
ZWN1bGFyRXhwb25lbnRBdHRyKQotICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0
U3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KCkpOwotCi0gICAgYXV0byYgbGlnaHRT
b3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJMaWdodGluZy0+bGlnaHRT
b3VyY2UoKSk7Ci0gICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNW
R0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwotICAgIEFTU0VSVChsaWdo
dEVsZW1lbnQpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cikK
LSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEF6aW11dGgobGlnaHRFbGVtZW50LT5hemlt
dXRoKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKLSAg
ICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEVsZXZhdGlvbihsaWdodEVsZW1lbnQtPmVsZXZh
dGlvbigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICBy
ZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WChsaWdodEVsZW1lbnQtPngoKSk7Ci0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFko
bGlnaHRFbGVtZW50LT55KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIp
Ci0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRaKGxpZ2h0RWxlbWVudC0+eigpKTsKLSAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCi0gICAgICAgIHJldHVy
biBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFgobGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQotICAgICAgICByZXR1
cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRZKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRZKCkpOwot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKLSAgICAgICAgcmV0
dXJuIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WihsaWdodEVsZW1lbnQtPnBvaW50c0F0WigpKTsK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQotICAg
ICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0U3BlY3VsYXJFeHBvbmVudChsaWdodEVsZW1lbnQt
PnNwZWN1bGFyRXhwb25lbnQoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1p
dGluZ0NvbmVBbmdsZUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRMaW1pdGlu
Z0NvbmVBbmdsZShsaWdodEVsZW1lbnQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpOwotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNl
U2NhbGVBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0ciB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CkBAIC0xNjAsMjggKzExNCw4NSBA
QCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6ZmlsdGVy
RWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvJiBzcGVjdWxhckxpZ2h0aW5nID0gZG93bmNh
c3Q8RkVTcGVjdWxhckxpZ2h0aW5nPihlZmZlY3QpOwogCi0gICAgaWYgKCFpbnB1dDEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRp
bmdfY29sb3JBdHRyKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5y
ZW5kZXJlcigpOworICAgICAgICBBU1NFUlQocmVuZGVyZXIpOworICAgICAgICBDb2xvciBjb2xv
ciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVy
LT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKKyAgICAgICAgc3BlY3VsYXJM
aWdodGluZy5zZXRDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBS
ZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQo
dGhpcyk7Ci0gICAgaWYgKCFsaWdodEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikgeworICAgICAg
ICBzcGVjdWxhckxpZ2h0aW5nLnNldFN1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpz
cGVjdWxhckNvbnN0YW50QXR0cikgeworICAgICAgICBzcGVjdWxhckxpZ2h0aW5nLnNldFNwZWN1
bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25zdGFudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgq
ZmlsdGVyQnVpbGRlcik7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4
cG9uZW50QXR0cikgeworICAgICAgICBzcGVjdWxhckxpZ2h0aW5nLnNldFNwZWN1bGFyRXhwb25l
bnQoc3BlY3VsYXJFeHBvbmVudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1
dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRp
bmcuc291cmNlKCkpOworICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQg
PSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKKyAgICBBU1NFUlQo
bGlnaHRFbGVtZW50KTsKKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0
dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldEF6aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRo
KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQor
ICAgICAgICBsaWdodFNvdXJjZS5zZXRFbGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24o
KSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICBs
aWdodFNvdXJjZS5zZXRYKGxpZ2h0RWxlbWVudC0+eCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVt
ZW50LT55KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAg
ICAgICAgbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVsZW1lbnQtPnooKSk7CisgICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNl
LnNldFBvaW50c0F0WChsaWdodEVsZW1lbnQtPnBvaW50c0F0WCgpKTsKKyAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uu
c2V0UG9pbnRzQXRZKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRZKCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5z
ZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2ludHNBdFooKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQorICAgICAgICBsaWdodFNv
dXJjZS5zZXRTcGVjdWxhckV4cG9uZW50KGxpZ2h0RWxlbWVudC0+c3BlY3VsYXJFeHBvbmVudCgp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVB
dHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRMaW1pdGluZ0NvbmVBbmdsZShsaWdodEVsZW1l
bnQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5h
bWVkRWZmZWN0KGluMSgpKTsKKyAgICBpZiAoIWlucHV0MSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZm
ZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OworICAgIAogICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorICAgICAgICByZXR1cm4geyB9OworCisgICAg
UmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50
KHRoaXMpOworICAgIGlmICghbGlnaHRFbGVtZW50KQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoYnVpbGRlcik7
CisKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsK
KyAgICAKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29s
b3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhwb25lbnQo
KSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdo
dFNvdXJjZSkpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3Bl
Y3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgp
LCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
aW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3Qo
KSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUx
NTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0N2IxNDYuLmZhNjg3OGZiNWNiNDc2NDZjNDJlZTNi
OTA3N2FmOGUxNzIwMTkyMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0
JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVTcG90TGlnaHRFbGVtZW50LmNwcAppbmRleCBkNmRhMzEwNjRjYjFiMzdlOGNjOTM4NzRlYTRh
YTljZjJkZmJmZmVlLi43NDEzMWY5MzRmY2MyMTJjMGNlODI1YTYwNjYwMjY5MzFjYzMzYWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcApAQCAtMjEs
NyArMjEsNiBAQAogI2luY2x1ZGUgIlNWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTcG90TGlnaHRTb3VyY2UuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMzksMjcgKzM4LDI3IEBAIFJlZjxTVkdGRVNwb3RM
aWdodEVsZW1lbnQ+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVTcG90TGlnaHRFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGln
aHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAor
UmVmPExpZ2h0U291cmNlPiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0
IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsK
ICAgICBGbG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVV
bml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkg
ewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGlu
Z0JveCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgp
ICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJl
ZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0
cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3Zp
ZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5E
aXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhN
YXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotCi0gICAgICAgIHBvaW50c0F0LnNldFgo
cmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwot
ICAgICAgICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJl
ZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9T
VkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAg
ICBwb2ludHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNl
Qm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNx
cnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9p
bnQzRCh4KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9p
bnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7Ci0gICAgfQorLy8KKy8vICAgIGlm
IChmaWx0ZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpIHsKKy8vICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0g
ZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7CisvLworLy8gICAgICAgIHBvc2l0aW9uLnNldFgo
cmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAg
ICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVp
Z2h0KCkpOworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5o
dG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcv
Y29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0aW9u
LnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVy
KCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8v
CisvLyAgICAgICAgcG9pbnRzQXQuc2V0WChyZWZlcmVuY2VCb3gueCgpICsgcG9pbnRzQXRYKCkg
KiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVu
Y2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOworLy8gICAg
ICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdo
dFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5p
dHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvaW50c0F0LnNldFoocG9pbnRzQXRa
KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVm
ZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8gICAgfSBl
bHNlIHsKKy8vICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsK
Ky8vICAgICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQzRChwb2ludHNBdFgoKSwgcG9pbnRzQXRZ
KCksIHBvaW50c0F0WigpKTsKKy8vICAgIH0KIAogICAgIHJldHVybiBTcG90TGlnaHRTb3VyY2U6
OmNyZWF0ZShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdD
b25lQW5nbGUoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50
LmgKaW5kZXggM2Y3NzE3YzEyNjVjNGYzMWY1MzA4ODY4ZDQ3Yzk3ODc5N2E3MzIxMS4uMDc0MzZj
YzAxNjYzYjUyMTU2MjRhNmUxMmQ3MTYwNjgxZTk2NTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaApAQCAtMzAsNyArMzAsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFNWR0ZFU3BvdExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2Uo
Y29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVt
ZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJk
Y2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi42MzdhMzJmOWNkZTI4ZDRjNjMy
ZTEzMWI3Mjk0ODhhYzhjY2JhMGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwCkBAIC03MCwxNiArNzAsMTYgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisg
ICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlu
cHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVUaWxl
OjpjcmVhdGUoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7
Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51
bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4
IDQ1YjMyNzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIyZGM0MmEzM2E5MWYuLmJlMzc5Njk5MDkzMDFk
Mjk2Y2ZmNWUwMTk3NDJkNDA1YTFiMTBmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVRpbGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuaApAQCAtNDIsNyArNDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAg
ICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgzZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRh
NGQuLjEyOTRiZjRhNTFhMDUyNGZjMzkyZjE4NDQ2ZGNlZTEzMzVkNDBhMWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKQEAgLTg4LDI0ICs4OCw2
IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRVR1cmJ1
bGVuY2UqIHR1cmJ1bGVuY2UgPSBzdGF0aWNfY2FzdDxGRVR1cmJ1bGVuY2UqPihlZmZlY3QpOwot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCi0gICAgICAgIHJldHVybiB0
dXJidWxlbmNlLT5zZXRUeXBlKHR5cGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpzdGl0Y2hUaWxlc0F0dHIpCi0gICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5zZXRTdGl0Y2hU
aWxlcyhzdGl0Y2hUaWxlcygpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VG
cmVxdWVuY3lBdHRyKQotICAgICAgICByZXR1cm4gKHR1cmJ1bGVuY2UtPnNldEJhc2VGcmVxdWVu
Y3lYKGJhc2VGcmVxdWVuY3lYKCkpIHx8IHR1cmJ1bGVuY2UtPnNldEJhc2VGcmVxdWVuY3lZKGJh
c2VGcmVxdWVuY3lZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNlZWRBdHRy
KQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0U2VlZChzZWVkKCkpOwotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpCi0gICAgICAgIHJldHVybiB0dXJi
dWxlbmNlLT5zZXROdW1PY3RhdmVzKG51bU9jdGF2ZXMoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKICAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKQEAgLTExNywxMSArOTksMzMgQEAgdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgYXV0
byYgdHVyYnVsZW5jZSA9IGRvd25jYXN0PEZFVHVyYnVsZW5jZT4oZWZmZWN0KTsKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQorICAgICAgICB0dXJidWxlbmNlLnNldFR1
cmJ1bGVuY2VUeXBlKHR5cGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN0aXRjaFRpbGVzQXR0cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRTdGl0Y2hUaWxlcyhzdGl0
Y2hUaWxlcygpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1
ZW5jeUF0dHIpIHsKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRCYXNlRnJlcXVlbmN5WChiYXNlRnJl
cXVlbmN5WCgpKTsKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRCYXNlRnJlcXVlbmN5WShiYXNlRnJl
cXVlbmN5WSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzZWVkQXR0
cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRTZWVkKHNlZWQoKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRyKQorICAgICAgICB0dXJidWxlbmNlLnNl
dE51bU9jdGF2ZXMobnVtT2N0YXZlcygpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikKIHsKICAgICBpZiAoYmFzZUZyZXF1ZW5jeVgoKSA8IDAgfHwgYmFzZUZyZXF1
ZW5jeVkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBGRVR1cmJ1
bGVuY2U6OmNyZWF0ZShmaWx0ZXIsIHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1
ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRD
SFRZUEVfU1RJVENIKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVy
RWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRVR1cmJ1bGVuY2U6OmNyZWF0ZSh0
eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMoKSwg
c2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCkpOworCisgICAg
cmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAppbmRleCBiZjlkYTIyYWQ0MmU0MTBhMTA0MzVl
MGE0MGUzNDI2Nzc2OWUxOThhLi4zOTllYjhhNTJmNjQ3ZmY2ZTVhMzFiNTc4OGEwMmY5YzJmY2Q0
YWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKQEAg
LTExOCw4ICsxMTgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRl
ckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVgg
eyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyRWxlbWVudC5jcHAKaW5kZXggNTU3OGI1MTlhMzYyMmJkNzA2YWQyN2JmZTRjNjAwMzkx
NDg1OGNhMC4uOWM0MzExMzRhODc3MDRmMDY0OWQ5MjJiYTk3MTYzNmRkMjVlMWM5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
SW5saW5lcy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcApp
bmRleCBmZjUyMjMwOTQ2NmIwNDBiZWYwODlkMTU3YjM4NmRmZmJiMDVjNjE5Li4zODY2ZDg5Y2Q3
ZTNmMDg0NWQ0YTU3YjM2ZmI5Zjk5ODdhMzJkNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcApA
QCAtMjUsOSArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NiwxMSAr
NjQsMTUgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG4KICAgICBTVkdFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpCit2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGUpCiB7Ci0gICAgLy8gV2hlbiBhbGwgZmlsdGVycyBzdXBwb3J0IHRoaXMgbWV0aG9kLCBp
dCB3aWxsIGJlIGNoYW5nZWQgdG8gYSBwdXJlIHZpcnR1YWwgbWV0aG9kLgotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fZWZmZWN0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKCptX2VmZmVj
dCwgYXR0cmlidXRlKTsKKworICAgIGlmIChhdXRvKiBwcmltaXRpdmVSZW5kZXJlciA9IHJlbmRl
cmVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlKj4ocHJpbWl0aXZlUmVuZGVyZXIpLT5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJp
YnV0ZSk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtOTMs
MjIgKzk1LDYgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNo
aWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2gKICAgICBpbnZhbGlkYXRlKCk7CiB9
CiAKLXZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKGZpbHRlckVmZmVjdCk7Ci0gICAgaWYgKCFmaWx0ZXJFZmZlY3QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKLSAgICAgICAgZmls
dGVyRWZmZWN0LT5zZXRIYXNYKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnlBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNZKHRydWUpOwotICAgIGlmICho
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+
c2V0SGFzV2lkdGgodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0
QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzSGVpZ2h0KHRydWUpOwotfQotCiBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikKIHsKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgKaW5kZXggYzk4YjEzZWQ5NjI3NmFmOWUxNGY2NDI4MTFhNmZkNzQ2NzcyYWNhNy4u
ZDdmZmRkYWQyNGIyYzM2YTc5N2RmMjIwYjg5ZTEyMjAxZmVkMmE4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaApAQCAtMzYsMTIgKzM2LDYgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50IHsK
ICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVy
RWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7Ci0gICAgLy8gUmV0dXJucyB0
cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgotICAg
IHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1By
b3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMs
IFNWR0VsZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHgoKSBjb25zdCB7IHJl
dHVybiBtX3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2ICs1MCw5IEBAIHB1YmxpYzoKICAg
ICBTVkdBbmltYXRlZExlbmd0aCYgaGVpZ2h0QW5pbWF0ZWQoKSB7IHJldHVybiBtX2hlaWdodDsg
fQogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiByZXN1bHRBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmVz
dWx0OyB9CiAKKyAgICB2b2lkIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSk7CisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCkBAIC02NCw3
ICs2MSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hp
bGRDaGFuZ2UmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIHZvaWQg
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0
ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgeyB9CisKKyAgICBib29sIGhhc0ZpbHRl
ckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0OyB9CisgICAgdm9pZCBzZXRGaWx0ZXJF
ZmZlY3QoUmVmPEZpbHRlckVmZmVjdD4gZWZmZWN0KSB7IG1fZWZmZWN0ID0gV1RGTW92ZShlZmZl
Y3QpOyB9CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZmlsdGVyRWZmZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9lZmZlY3Q7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGlzRmlsdGVyRWZmZWN0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNzMsNiArNzQsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRl
OwogICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1f
ZWZmZWN0OworICAgIAogICAgIC8vIFNwZWM6IElmIHRoZSB4L3kgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lm
aWVkLgogICAgIC8vIFNwZWM6IElmIHRoZSB3aWR0aC9oZWlnaHQgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVj
aWZpZWQuCiAgICAgUmVmPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3ggeyBTVkdBbmltYXRlZExlbmd0
aDo6Y3JlYXRlKHRoaXMsIFNWR0xlbmd0aE1vZGU6OldpZHRoLCAiMCUiKSB9OwpAQCAtOTAsMTIg
KzkzLDYgQEAgaW5saW5lIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjppbnZhbGlkYXRlKCkKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcHJpbWl0aXZlUmVuZGVyZXIpOwogfQogCi1p
bmxpbmUgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQotewotICAg
IGlmIChhdXRvKiBwcmltaXRpdmVSZW5kZXJlciA9IHJlbmRlcmVyKCkpCi0gICAgICAgIHN0YXRp
Y19jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKj4ocHJpbWl0aXZlUmVuZGVy
ZXIpLT5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZSk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4
YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjc1ZTdiYzY5YWUzMzY1YjU0NDA2YzNjMDJj
NGNlNDI5MWI3Mjc1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMzAg
KzI0LDc4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgog
Ci0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5j
bHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV9pbWFnZShpbWFn
ZSkKLSAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVm
PEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlLCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSwgcHJl
c2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVy
LCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1fdHJlZVNjb3BlKCZ0cmVlU2NvcGUp
Ci0gICAgLCBtX2hyZWYoaHJlZikKK0ZFSW1hZ2U6OkZFSW1hZ2UoU291cmNlSW1hZ2UmJiBzb3Vy
Y2VJbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFSW1hZ2UpCisgICAgLCBtX3NvdXJj
ZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
KHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVh
dGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0Zsb2F0UmVj
dCBGRUltYWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmls
dGVyLCBpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwotfQorICAgIGF1dG8gaW1hZ2VSZWN0
T2ZTb3VyY2VJbWFnZSA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgIFsmXShjb25zdCBSZWY8
SW1hZ2U+JiBpbWFnZSkgeworICAgICAgICAgICAgYXV0byBkcmF3aW5nUmVjdCA9IHByaW1pdGl2
ZVN1YnJlZ2lvbjsKKyAgICAgICAgICAgIGF1dG8gc3JjUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwg
aW1hZ2UtPnNpemUoKSB9OworICAgICAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5z
Zm9ybVJlY3QoZHJhd2luZ1JlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgcmV0dXJuIGdlb21l
dHJ5LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3Vi
cmVnaW9uKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4m
KSB7CisgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkubWF4UHJpbWl0aXZlU3VicmVnaW9uKHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgICAgIH0KKyAgICApOwogCi1SZWY8RkVJbWFnZT4gRkVJ
bWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0
cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsK
KyAgICByZXR1cm4gc3RkOjp2aXNpdChpbWFnZVJlY3RPZlNvdXJjZUltYWdlLCBtX3NvdXJjZUlt
YWdlKTsKIH0KIAotdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiti
b29sIEZFSW1hZ2U6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmls
dGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7
Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1Jl
Y3Q7Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2Ut
PnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBh
aW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVj
dC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVj
dC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1
dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gb3V0cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigp
OworICAgIGF1dG8mIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAg
IAorICAgIGF1dG8gZHJhd1NvdXJjZUltYWdlID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAg
WyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBhdXRvIHNyY1JlY3Qg
PSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfTsKKyAgICAgICAgICAgIG1fcHJlc2Vy
dmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGltYWdlUmVjdCwgc3JjUmVjdCk7CisgICAgICAg
ICAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGlt
YWdlUmVjdCwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICAgICAgICAgIG91dHB1dENvbnRleHQu
ZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3QsIHNyY1JlY3QpOworICAgICAgICB9LAorICAgICAg
ICBbJl0oY29uc3QgUmVmPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAg
IGltYWdlUmVjdCA9IGdlb21ldHJ5LmNvbnZlcnRUb0Fic29sdXRlQ29vcmRpbmF0ZXMoaW1hZ2VS
ZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICAgICAgb3V0cHV0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAg
fQorICAgICk7CiAKLVJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3RyZWVTY29wZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJ
U3RyaW5nKG1faHJlZiwgKm1fdHJlZVNjb3BlKTsKLSAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRh
cmdldC5lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHRhcmdl
dC5lbGVtZW50LT5yZW5kZXJlcigpOworICAgIHN0ZDo6dmlzaXQoZHJhd1NvdXJjZUltYWdlLCBt
X3NvdXJjZUltYWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUltYWdlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQorVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKTsKLSAgICBp
ZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGRUlt
YWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQot
ICAgIHNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIGF1dG8gc291cmNlSW1hZ2VTaXplID0gV1RGOjpt
YWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7IHJldHVy
biBleHBhbmRlZEludFNpemUoaW1hZ2UtPnNpemUoKSk7IH0sCisgICAgICAgIFsmXShjb25zdCBS
ZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeyByZXR1cm4gaW1hZ2VCdWZmZXItPmxvZ2lj
YWxTaXplKCk7IH0KKyAgICApOwogCi0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJl
bmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2Ut
PnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRl
c3RSZWN0LCBzcmNSZWN0KTsKLSAgICB9CisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IHN0ZDo6
dmlzaXQoc291cmNlSW1hZ2VTaXplLCBtX3NvdXJjZUltYWdlKTsKIAotICAgIEludFBvaW50IHBh
aW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgZGVzdFJl
Y3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7Ci0KLSAgICBh
dXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGlmIChyZW5kZXJl
cikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0g
ZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0o
YWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgICAgIFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRvd25j
YXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwotICAgICAgICBpZiAoY29udGV4
dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAgICAgICAgICBTVkdMZW5ndGhDb250
ZXh0IGxlbmd0aENvbnRleHQoY29udGV4dE5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgRmxvYXRT
aXplIHZpZXdwb3J0U2l6ZTsKLQotICAgICAgICAgICAgLy8gSWYgd2UncmUgcmVmZXJlbmNpbmcg
YW4gZWxlbWVudCB3aXRoIHBlcmNlbnRhZ2UgdW5pdHMsIGVnLiA8cmVjdCB3aXRoPSIzMCUiPiB0
aG9zZSB2YWx1ZXMgd2VyZSByZXNvbHZlZCBhZ2FpbnN0IHRoZSB2aWV3cG9ydC4KLSAgICAgICAg
ICAgIC8vIEJ1aWxkIHVwIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGZyb20gdGhlIHZpZXdw
b3J0IHNwYWNlIHRvIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHN1YnJlZ2lvbi4KLSAgICAgICAgICAg
IGlmIChsZW5ndGhDb250ZXh0LmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSkpCi0gICAg
ICAgICAgICAgICAgY29udGV4dC5jb25jYXRDVE0obWFrZU1hcEJldHdlZW5SZWN0cyhGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCB2aWV3cG9ydFNpemUpLCBkZXN0UmVjdCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICAgICAg
U1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVu
ZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjb250ZXh0LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOwotfQot
Ci1UZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgRmxv
YXRTaXplIGltYWdlU2l6ZTsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgaW1hZ2VTaXplID0g
bV9pbWFnZS0+c2l6ZSgpOwotICAgIGVsc2UgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBy
ZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgaW1hZ2VTaXplID0gZW5jbG9zaW5nSW50UmVj
dChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkuc2l6ZSgpOwogICAg
IHRzIDw8IGluZGVudCA8PCAiW2ZlSW1hZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgaW1hZ2Utc2l6
ZT1cIiIgPDwgaW1hZ2VTaXplLndpZHRoKCkgPDwgIngiIDw8IGltYWdlU2l6ZS5oZWlnaHQoKSA8
PCAiXCJdXG4iOwogICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBkdW1wIGFsc28gb2JqZWN0IHJl
dHVybmVkIGJ5IFNWR0ZFSW1hZ2U6OmltYWdlKCkgPwogICAgIHJldHVybiB0czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCBhYzE2
MGVkY2U3YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li5kYzdhYzY5NjYwZGQyZDZhN2Yy
YzI5NTRkMjhlMWM5NDk3NTA3NGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywz
NiArMjgsMjcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNs
YXNzIEltYWdlOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFRyZWVTY29wZTsKIAogY2xh
c3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJbWFnZT4s
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBSZWY8RkVJ
bWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICB1c2luZyBT
b3VyY2VJbWFnZSA9IHN0ZDo6dmFyaWFudDxSZWY8SW1hZ2U+LCBSZWY8SW1hZ2VCdWZmZXI+PjsK
IAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5GRUltYWdlKCkgPSBkZWZhdWx0OwotICAgIEZFSW1h
Z2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBzdGF0aWMgUmVmPEZFSW1h
Z2U+IGNyZWF0ZShTb3VyY2VJbWFnZSYmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUmKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVJbWFnZSI7IH0KK3ByaXZhdGU6CisgICAgRkVJbWFnZShTb3VyY2VJbWFnZSYmLCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUg
ZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVJ
bWFnZTsgfQorICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpCisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogCi0gICAgUmVuZGVyRWxlbWVu
dCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIGZpbmFsOwotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0
cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICAvLyBtX3RyZWVTY29wZSB3
aWxsIG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0gICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7
IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVmOworICAgIFNvdXJjZUltYWdlIG1fc291cmNl
SW1hZ2U7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RS
YXRpbzsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2Jj
ZTcuLmI0NTU3MThjYTczMWY2ODBhMGYzYWIzN2I2N2Y0ODdhNWEzYmFlYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxMTUg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1
ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNs
dWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIo
YWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihh
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRh
cmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAg
ICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNW
R0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAg
RmlsdGVyRWZmZWN0VmVjdG9yIGJ1aWx0aW5FZmZlY3RzID0geworICAgICAgICBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKSwKKyAgICAgICAgU291cmNlQWxwaGE6OmNyZWF0ZSgpCisgICAgfTsKKwor
ICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICBhdXRvIFtmaWx0ZXJFZmZlY3RzLCBl
eHByZXNzaW9uXSA9IGJ1aWxkZXIuYnVpbGRFZmZlY3RzKGZpbHRlckVsZW1lbnQsIGJ1aWx0aW5F
ZmZlY3RzKTsKKyAgICBpZiAoZmlsdGVyRWZmZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwg
V1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSk7Cit9CisKK1JlZlB0
cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRl
ckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uKQogewotICAgIG1fYWJz
b2x1dGVGaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlclJlZ2lv
bik7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGJ1aWx0aW5FZmZlY3RzID0geyBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpIH07CisgICAgcmV0dXJuIGNyZWF0
ZShXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92
ZShleHByZXNzaW9uKSk7CiB9CiAKLUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVy
UmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0Zp
bHRlcjo6Y3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZlY3RzLCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYgZXhwcmVz
c2lvbikKIHsKLSAgICBpZiAobV9lZmZlY3RCQm94TW9kZSkKLSAgICAgICAgc2l6ZSA9IHNpemUg
KiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R0ZpbHRlcihXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwg
V1RGTW92ZShleHByZXNzaW9uKSkpOworfQogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBt
X2ZpbHRlclJlZ2lvbi5zaXplKCk7CitTVkdGaWx0ZXI6OlNWR0ZpbHRlcihGaWx0ZXJFZmZlY3RW
ZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0
cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pCisgICAgOiBGaWx0ZXIoVHlwZTo6
U1ZHRmlsdGVyKQorICAgICwgbV9idWlsdGluRWZmZWN0cyhXVEZNb3ZlKGJ1aWx0aW5FZmZlY3Rz
KSkKKyAgICAsIG1fZmlsdGVyRWZmZWN0cyhXVEZNb3ZlKGZpbHRlckVmZmVjdHMpKQorICAgICwg
bV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCit7CisgICAgQVNTRVJUKG1fYnVpbHRp
bkVmZmVjdHMuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVCghbV9maWx0ZXJFZmZlY3RzLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKIH0KIAotUmVmPFNW
R0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQorUmVmPEZpbHRlckVmZmVjdD4gU1ZHRmls
dGVyOjppbmRleGVkRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlLCB1bnNpZ25lZCBpbmRl
eCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVU
cmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gs
IGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZl
Y3RzWzBdOworCisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBo
YSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHNbMV07CisKKyAgICBBU1NFUlQoaW5k
ZXggPCBtX2ZpbHRlckVmZmVjdHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Rz
W2luZGV4XTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjpsYXN0RWZmZWN0
KCkgY29uc3QKK3sKKyAgICBpZiAobV9leHByZXNzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA9IG1fZXhwcmVzc2lv
bi5sYXN0KCk7CisgICAgcmV0dXJuIGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOworfQorCiti
b29sIFNWR0ZpbHRlcjo6YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZpbHRlckltYWdlVmVj
dG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAg
IGlmICghbGFzdEVmZmVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8
RmlsdGVySW1hZ2U+IHNvdXJjZUltYWdlOworICAgIGlmICghc3RhY2suaXNFbXB0eSgpKQorICAg
ICAgICBzb3VyY2VJbWFnZSA9IHN0YWNrLnRha2VMYXN0KCk7CisKKyAgICBBU1NFUlQoc3RhY2su
aXNFbXB0eSgpKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gcmVzdWx0LmltYWdlcygpLmdldCh7
ICp0aGlzIH0pKSB7CisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICppbWFnZSB9KTsKKyAgICAgICAg
cmV0dXJuIGltYWdlOworICAgIH0KKworICAgIGZvciAoYXV0byBbdHlwZSwgaW5kZXgsIGxldmVs
XSA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBhdXRvIGVmZmVjdCA9IGluZGV4ZWRFZmZlY3Qo
dHlwZSwgaW5kZXgpOworICAgICAgICBhdXRvIGJvdW5kYXJ5U2V0ID0gZ2VvbWV0cnkuYm91bmRh
cnlTZXQodHlwZSwgaW5kZXgpOworCisgICAgICAgIGlmIChlZmZlY3QtPnR5cGUoKSA9PSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMpCisgICAgICAgICAgICBzdGFjay5hcHBlbmQo
eyAqc291cmNlSW1hZ2UgfSk7CisKKyAgICAgICAgaWYgKCFlZmZlY3QtPmFwcGx5KHJlc3VsdCwg
c3RhY2ssIGdlb21ldHJ5LCBib3VuZGFyeVNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1RleHRTdHJlYW0mIFNWR0ZpbHRlcjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRp
b24gcmVwcmVzZW50YXRpb24pIGNvbnN0Cit7CisgICAgYXV0byBlbmQgPSBtX2V4cHJlc3Npb24u
cmVuZCgpOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9leHByZXNzaW9uLnJiZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA9ICppdDsK
KyAgICAgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkKKyAg
ICAgICAgICAgICsraXQ7CisKKyAgICAgICAgYXV0byBlZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5
cGUsIGluZGV4KTsKKyAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUo
dHMsIGxldmVsKTsKKyAgICAgICAgZWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2Yu
LjFiZTg4ZDkzNWY4OGIwOTQ3ODExZjMxM2IwYjBkYWY3MzYwN2EwMmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDQxICsyMSw0NSBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CitjbGFzcyBTVkdGaWx0
ZXJHZW9tZXRyeTsKKwogY2xhc3MgU1ZHRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNW
R0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOworICAgIHN0YXRpYyBS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9y
JiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmKTsKKworICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJS
ZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9
Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJz
b2x1dGVGaWx0ZXJSZWdpb247IH0KKyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGZpbHRl
ckVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdHM7IH0KKyAgICBjb25zdCBT
VkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNz
aW9uOyB9CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6
ZSkgY29uc3QgZmluYWw7Citwcml2YXRlOgorICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBj
cmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVjdFZl
Y3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJik7CiAKLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNv
dXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CisgICAgU1ZHRmlsdGVyKEZpbHRl
ckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZlY3RzLCBGaWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0
ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYpOwogCi0gICAgYm9vbCBpc1NWR0ZpbHRl
cigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBSZWY8RmlsdGVyRWZmZWN0PiBp
bmRleGVkRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Owog
Ci1wcml2YXRlOgotICAgIFNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVz
dWx0JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IGZpbmFsOworCisgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgRmxvYXRS
ZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX3Rhcmdl
dEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwotICAg
IEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKLSAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7Cisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1fYnVpbHRpbkVmZmVjdHM7CisgICAgRmlsdGVyRWZmZWN0
VmVjdG9yIG1fZmlsdGVyRWZmZWN0czsKKyAgICBTVkdGaWx0ZXJFeHByZXNzaW9uIG1fZXhwcmVz
c2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpTVkdGaWx0ZXIpCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIuaXNTVkdGaWx0ZXIo
KTsgfQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzU1ZHRmlsdGVyKCk7IH0KIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggOTZmM2E4MDUwNDI5NTU1
ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uNzEyMmE0OWVlNmRhYmM4YzRlM2ZjZWFmNzIwYjEy
YWY3Zjc2MDAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjAsODcgKzIxLDE1NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgorI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIK
ICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2lmIEVOQUJM
RShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXJCdWlsZGVy
OjpTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCitz
dGQ6OnR1cGxlPEZpbHRlckVmZmVjdFZlY3RvciwgU1ZHRmlsdGVyRXhwcmVzc2lvbj4gU1ZHRmls
dGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpCit7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVy
RWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIHNldHVwQnVpbHRpbkVmZmVjdHMoYnVpbHRpbkVmZmVjdHMpOwor
CisgICAgRmlsdGVyRWZmZWN0c0lucHV0cyBlZmZlY3RzSW5wdXRzOworICAgIGlmICghYnVpbGRF
ZmZlY3RzKGZpbHRlckVsZW1lbnQsIGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKG1fZmlsdGVyRWZmZWN0cyksIFdURk1v
dmUobV9leHByZXNzaW9uKSB9OworfQorCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVp
bHRpbkVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cykKK3sK
KyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1l
KCksIGJ1aWx0aW5FZmZlY3RzWzBdKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChGaWx0ZXJF
ZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgpLCBidWlsdGluRWZmZWN0c1sxXSk7Cit9CisKK1JlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUdyYXBoaWMoKSBjb25zdAor
eworICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdy
YXBoaWNOYW1lKCkpOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVy
Ojpzb3VyY2VBbHBoYSgpIGNvbnN0CiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNl
R3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZl
Y3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpz
b3VyY2VHcmFwaGljKSk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKyAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKSk7CiB9CiAK
LXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBlZmZlY3QpCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZm
ZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKIHsK
LSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdDsK
KyAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0
LnB0cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVj
dHMuY29udGFpbnMoaWQpKQorICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKG5hbWUp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3Q7Ci0gICAgbV9u
YW1lZEVmZmVjdHMuc2V0KGlkLCBtX2xhc3RFZmZlY3QpOworICAgIG1fbGFzdEVmZmVjdCA9IGVm
ZmVjdC5wdHIoKTsKKyAgICBtX25hbWVkRWZmZWN0cy5zZXQobmFtZSwgV1RGTW92ZShlZmZlY3Qp
KTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6Z2V0RWZmZWN0
QnlJZChjb25zdCBBdG9tU3RyaW5nJiBpZCkgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpIGNvbnN0
CiB7Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgeworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgewog
ICAgICAgICBpZiAobV9sYXN0RWZmZWN0KQogICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVj
dDsKIAotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6
ZWZmZWN0TmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUdyYXBoaWMoKTsKICAgICB9CiAK
LSAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybiBt
X2J1aWx0aW5FZmZlY3RzLmdldChpZCk7CisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFp
bnMobmFtZSkpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChuYW1lKTsKIAot
ICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQoaWQpOworICAgIHJldHVybiBtX25hbWVkRWZm
ZWN0cy5nZXQobmFtZSk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0
VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgZWZmZWN0LCBSZW5kZXJP
YmplY3QqIG9iamVjdCkKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFS
X1NSR0IpCitzdGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9ySW50ZXJwb2xhdGlvbkZvckVs
ZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUg
YSBuZXdseSBjcmVhdGVkIGZpbHRlciBlZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVy
ZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZmZWN0
UmVuZGVyZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChl
ZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRF
ZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBpcyBu
b3QgcG9zc2libGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAgICAg
ICBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3QuZ2V0
KCkpOwotCi0gICAgLy8gSWYgb2JqZWN0IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQg
aXNuJ3QgYXR0YWNoZWQgZm9yIHNvbWUKLSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4gbWVh
biB0aGF0IGNlcnRhaW4gdHlwZXMgb2YgaW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8gd29y
ayAodGhlIExheW91dE9iamVjdCAtPiBGaWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBiZSBk
ZWZpbmVkKS4KLSAgICBpZiAob2JqZWN0KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChv
YmplY3QsIGVmZmVjdC5nZXQoKSk7CisgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJl
bmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNv
bG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhl
IHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZh
bHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQ
cm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9s
YXRpb246OkF1dG87CiB9CisjZW5kaWYKIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVm
ZmVjdHMoKQorYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxl
bWVudCYgZmlsdGVyRWxlbWVudCwgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cykK
IHsKLSAgICBtX2xhc3RFZmZlY3QgPSBudWxscHRyOwotICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFy
KCk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZW5kZXJl
ci5jbGVhcigpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CisgICAgZWZmZWN0c0lucHV0cy5z
ZXQoKnNvdXJjZUFscGhhKCksIEZpbHRlckVmZmVjdFZlY3RvciB7ICpzb3VyY2VHcmFwaGljKCkg
fSk7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAg
ICAgIGF1dG8gW2VmZmVjdCwgaW5wdXRzXSA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOwor
ICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVO
QUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGNv
bG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBv
bGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCisgICAg
CisgICAgICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVjdCB9LCBXVEZNb3ZlKGlucHV0cykp
OworICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZl
Y3QgfSk7CisKKyAgICAgICAgbV9maWx0ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3QucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQorYm9v
bCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVj
dD4mIGVmZmVjdCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmls
dGVyRWZmZWN0VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpCiB7Ci0gICAgaWYgKCFlZmZl
Y3QtPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CisgICAgLy8gQSBjeWNsZSBpcyBkZXRl
Y3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGVmZmVjdC5wdHIoKSA9PSBzb3VyY2VHcmFwaGljKCkpCisgICAgICAg
IG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBo
aWMsIDAsIGxldmVsIH0pOworICAgIGVsc2UgaWYgKGVmZmVjdC5wdHIoKSA9PSBzb3VyY2VBbHBo
YSgpKQorICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VBbHBoYSwgMSwgbGV2ZWwgfSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCht
X2ZpbHRlckVmZmVjdHMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAgIG1fZXhwcmVzc2lvbi5p
bnNlcnQoMCwgeyBlZmZlY3QtPnR5cGUoKSwgbV9maWx0ZXJFZmZlY3RzLmZpbmQoZWZmZWN0KSwg
bGV2ZWwgfSk7CisgICAgfQogCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIHN0YWNr
LmFwcGVuZChlZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdHNJ
bnB1dHMuZ2V0KGVmZmVjdCkpIHsKKyAgICAgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oaW5wdXRF
ZmZlY3QsIGVmZmVjdHNJbnB1dHMsIHN0YWNrLCBsZXZlbCArIDEpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoc3RhY2subGFzdCgpLnB0cigpID09IGVmZmVjdC5wdHIoKSk7CisKKyAgICBzdGFjay5y
ZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1
dHMpCit7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGZvciAoYXV0byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpKQotICAg
ICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKKyAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3Igc3RhY2s7CisgICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3Qg
fSwgZWZmZWN0c0lucHV0cywgc3RhY2ssIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2Zh
Ny4uOThlNmU4OGJkOWI3YWM5MTRlMDRkMjI2ZDYwZTM3MGE5MWM1NDBjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
aApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdz
IDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIwLDY4ICsyMSw0MyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZl
Y3Rvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVy
T2JqZWN0OwogY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKIAogY2xhc3MgU1ZHRmlsdGVyQnVpbGRl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBI
YXNoU2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKKyAgICBTVkdGaWx0ZXJCdWls
ZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgU1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAgICBzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdFZlY3Rvciwg
U1ZHRmlsdGVyRXhwcmVzc2lvbj4gYnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsKIAotICAgIHZvaWQgc2V0VGFy
Z2V0Qm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3gg
PSByOyB9Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRCb3VuZGluZ0JveDsgfQotICAgIAotICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzOyB9Ci0g
ICAgdm9pZCBzZXRQcmltaXRpdmVVbml0cyhTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHVuaXRz
KSB7IG1fcHJpbWl0aXZlVW5pdHMgPSB1bml0czsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IG5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpIGNvbnN0OwogCi0gICAgdm9pZCBh
ZGQoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKLQotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbVN0cmluZyYpIGNvbnN0
OwotICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVm
ZmVjdC5nZXQoKTsgfQotCi0gICAgdm9pZCBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMo
UmVmUHRyPEZpbHRlckVmZmVjdD4mJiwgUmVuZGVyT2JqZWN0Kik7Ci0KLSAgICBpbmxpbmUgRmls
dGVyRWZmZWN0U2V0JiBlZmZlY3RSZWZlcmVuY2VzKEZpbHRlckVmZmVjdCogZWZmZWN0KQotICAg
IHsKLSAgICAgICAgLy8gT25seSBhbGxvd2VkIGZvciBlZmZlY3RzIGJlbG9uZ3MgdG8gdGhpcyBi
dWlsZGVyLgotICAgICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVj
dCkpOwotICAgICAgICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+dmFs
dWU7Ci0gICAgfQorcHJpdmF0ZToKKyAgICB1c2luZyBGaWx0ZXJFZmZlY3RzSW5wdXRzID0gSGFz
aE1hcDxSZWY8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj47CiAKLSAg
ICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgYSBmaWx0ZXIgZHVyaW5n
IGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCi0gICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0
QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJl
ci5nZXQob2JqZWN0KTsgfQorICAgIHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBzb3VyY2VHcmFwaGljKCkgY29uc3Q7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNl
QWxwaGEoKSBjb25zdDsKIAotICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0gICAgdm9pZCBjbGVh
clJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CisgICAgdm9pZCBhZGROYW1lZEVmZmVj
dChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7CisgICAgYm9vbCBi
dWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdHNJbnB1dHMmKTsKIAot
cHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCi0gICAgewotICAg
ICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkpCi0gICAg
ICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkp
OwotICAgIH0KKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVyRWZmZWN0
PiYsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNr
LCB1bnNpZ25lZCBsZXZlbCk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVy
RWZmZWN0c0lucHV0cyYpOwogCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVy
RWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKLSAgICAvLyBUaGUgdmFsdWUgaXMgYSBs
aXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIgZWZmZWN0cywKLSAgICAvLyB3aGljaCBk
ZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KLSAgICBIYXNoTWFwPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZmZWN0UmVmZXJlbmNlczsKLSAgICBIYXNo
TWFwPFJlbmRlck9iamVjdCosIEZpbHRlckVmZmVjdCo+IG1fZWZmZWN0UmVuZGVyZXI7CisgICAg
RmlsdGVyRWZmZWN0VmVjdG9yIG1fZmlsdGVyRWZmZWN0czsKKyAgICBTVkdGaWx0ZXJFeHByZXNz
aW9uIG1fZXhwcmVzc2lvbjsKIAorICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVm
ZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWY8Rmls
dGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9s
YXN0RWZmZWN0OwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSB9OwogfTsKLSAgICAKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNTAyYWRhOTYyNzBlNTAxOTMy
YzZjMDdiNWY0Nzk1NjI0MDNiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKQEAgLTAsMCArMSwzNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBTVkdGaWx0ZXJFeHByZXNzaW9uID0g
VmVjdG9yPHN0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCwgdW5zaWduZWQ+
PjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyR2VvbWV0cnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIxOTI3OWEyODIxZmE2YTE4MzNmMzkzZWM1OTViNTE1MWE1YjE4MDgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRy
eS5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckdl
b21ldHJ5LmgiCisKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFw
aGljLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRTaXplIFNWR0ZpbHRlckdlb21l
dHJ5OjpjYWxjdWxhdGVSZXNvbHV0aW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
KQoreworICAgIGF1dG8gYWJzb2x1dGVGaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVRyYW5zZm9ybS5t
YXBSZWN0KGZpbHRlclJlZ2lvbik7CisgICAgYXV0byByZXNvbHV0aW9uID0gRmxvYXRTaXplIHsg
MSwgMSB9OworICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUZpbHRl
clJlZ2lvbi5zaXplKCksIHJlc29sdXRpb24pOworICAgIHJldHVybiByZXNvbHV0aW9uOworCisv
LyAgICBhdXRvIGFic29sdXRlU291cmNlSW1hZ2VSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFw
UmVjdChzb3VyY2VJbWFnZVJlY3QpOworLy8gICAgYXV0byBzY2FsZSA9IEZsb2F0U2l6ZSB7IDEs
IDEgfTsKKy8vICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZVNvdXJj
ZUltYWdlUmVjdC5zaXplKCksIHNjYWxlKTsKKy8vCisvLyAgICBhdXRvIGVmZmVjdGl2ZVRyYW5z
Zm9ybSA9IGFic29sdXRlVHJhbnNmb3JtOworLy8gICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxl
KHNjYWxlKTsKKy8vCisvLyAgICBhdXRvIGFic29sdXRlRmlsdGVyUmVnaW9uID0gZWZmZWN0aXZl
VHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyUmVnaW9uKTsKKy8vICAgIGF1dG8gcmVzb2x1dGlvbiA9
IEZsb2F0U2l6ZSB7IDEsIDEgfTsKKy8vICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhhYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCksIHJlc29sdXRpb24pOworLy8KKy8vICAgIHJl
dHVybiByZXNvbHV0aW9uICogc2NhbGU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJH
ZW9tZXRyeT4gU1ZHRmlsdGVyR2VvbWV0cnk6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0
ZXJFbGVtZW50LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYg
cmVzb2x1dGlvbikKK3sKKyAgICBhdXRvIHByaW1pdGl2ZVVuaXRzID0gZmlsdGVyRWxlbWVudC5w
cmltaXRpdmVVbml0cygpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBtYWtlVW5pcXVlPFNWR0ZpbHRl
ckdlb21ldHJ5PihmaWx0ZXJSZWdpb24sIHNvdXJjZUltYWdlUmVjdCwgdGFyZ2V0Qm91bmRpbmdC
b3gsIHByaW1pdGl2ZVVuaXRzLCBhYnNvbHV0ZVRyYW5zZm9ybSwgcmVzb2x1dGlvbik7CisgICAg
aWYgKCFnZW9tZXRyeSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnZW9tZXRyeS0+
YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoZmlsdGVyRWxlbWVudCk7CisgICAgcmV0dXJu
IGdlb21ldHJ5OworfQorCitTVkdGaWx0ZXJHZW9tZXRyeTo6U1ZHRmlsdGVyR2VvbWV0cnkoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFNpemUmIHJlc29sdXRpb24pCisgICAgOiBGaWx0ZXJHZW9t
ZXRyeShmaWx0ZXJSZWdpb24sIHNvdXJjZUltYWdlUmVjdCkKKyAgICAsIG1fdGFyZ2V0Qm91bmRp
bmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCisgICAgLCBtX3ByaW1pdGl2ZVVuaXRzKHByaW1pdGl2
ZVVuaXRzKQorICAgICwgbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKKyAg
ICAsIG1fcmVzb2x1dGlvbihyZXNvbHV0aW9uKQoreworfQorCit2b2lkIFNWR0ZpbHRlckdlb21l
dHJ5OjpidWlsZEZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0
ZXJFbGVtZW50KQoreworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZU
eXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkp
IHsKKyAgICAgICAgYXV0byBib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJl
Y3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVt
ZW50LCBtX3ByaW1pdGl2ZVVuaXRzLCBtX3RhcmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgCisg
ICAgICAgIE9wdGlvblNldDxGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M+IGZsYWdzOworICAgICAg
ICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAg
ICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gpOworCisgICAg
ICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAg
ICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWSk7CisKKyAg
ICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIp
KQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzV2lk
dGgpOworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
aGVpZ2h0QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZs
YWdzOjpIYXNIZWlnaHQpOworCisgICAgICAgIG1fRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzLmFw
cGVuZCh7IGJvdW5kYXJpZXMsIGZsYWdzIH0pOworICAgIH0KK30KKworRmlsdGVyQm91bmRhcnlT
ZXQgU1ZHRmlsdGVyR2VvbWV0cnk6OmJvdW5kYXJ5U2V0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBl
LCB1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgdHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJj
ZUFscGhhKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGlmIChpbmRleCA+PSBtX0Zp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0cy5zaXplKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIAorICAgIHJldHVybiBtX0Zp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0c1tpbmRleF07Cit9CisKK0Zsb2F0UmVjdCBTVkdGaWx0ZXJH
ZW9tZXRyeTo6Y29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0Cit7CisgICAgYXV0byBhYnNvbHV0ZVJlY3QgPSBtX2Fic29sdXRlVHJhbnNmb3Jt
Lm1hcFJlY3QocmVjdCk7CisgICAgYWJzb2x1dGVSZWN0LnNjYWxlKG1fcmVzb2x1dGlvbik7Cisg
ICAgcmV0dXJuIGFic29sdXRlUmVjdDsKK30KKworRmxvYXRTaXplIFNWR0ZpbHRlckdlb21ldHJ5
Ojpjb252ZXJ0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gc2l6ZSAqIG1fcmVzb2x1dGlvbiAqIEZsb2F0U2l6ZShtX2Fic29s
dXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBtX2Fic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpKTsKK30K
KworRmxvYXRTaXplIFNWR0ZpbHRlckdlb21ldHJ5OjpyZXNvbHZlVG9GaWx0ZXJDb29yZGluYXRl
cyhjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKG1fcHJpbWl0aXZlVW5p
dHMgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQorICAg
ICAgICByZXR1cm4gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIHJldHVy
biBzaXplOworfQorCitGbG9hdFJlY3QgU1ZHRmlsdGVyR2VvbWV0cnk6OmNsaXBUb1ByaW1pdGl2
ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgYXV0byBjbGlwcGVkSW1hZ2VSZWN0ID0g
aW1hZ2VSZWN0OworICAgIGNsaXBwZWRJbWFnZVJlY3QuaW50ZXJzZWN0KHByaW1pdGl2ZVN1YnJl
Z2lvbik7CisgICAgcmV0dXJuIGNsaXBwZWRJbWFnZVJlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMDFmNDVlOGRiYmMyMWU4NDEwZjY3
OTdjM2MzYzBhM2MyYjJlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJHZW9tZXRyeS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRmlsdGVy
RWxlbWVudDsKKworY2xhc3MgU1ZHRmlsdGVyR2VvbWV0cnkgOiBwdWJsaWMgRmlsdGVyR2VvbWV0
cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBG
bG9hdFNpemUgY2FsY3VsYXRlUmVzb2x1dGlvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0pOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTVkdG
aWx0ZXJHZW9tZXRyeT4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbik7CisKKyAgICBTVkdGaWx0
ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYgcmVzb2x1dGlvbik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBidWlsZEZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhTVkdGaWx0
ZXJFbGVtZW50Jik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9CisgICAgRmxvYXRT
aXplIHJlc29sdXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jlc29sdXRpb247IH0K
KworICAgIEZpbHRlckJvdW5kYXJ5U2V0IGJvdW5kYXJ5U2V0KEZpbHRlckVmZmVjdDo6VHlwZSwg
dW5zaWduZWQgaW5kZXgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IGNvbnZlcnRU
b0Fic29sdXRlQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBGbG9hdFNpemUgY29udmVydFRvQWJzb2x1dGVDb29yZGluYXRlcyhjb25zdCBGbG9hdFNp
emUmKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBGbG9hdFNpemUgcmVzb2x2ZVRvRmlsdGVy
Q29vcmRpbmF0ZXMoY29uc3QgRmxvYXRTaXplJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAg
RmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OworCisgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CisKKyAgICBTVkdVbml0VHlw
ZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZlVW5pdHM7CisgICAgVmVjdG9yPEZpbHRlckJvdW5k
YXJ5U2V0PiBtX0ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKworICAgIEFmZmluZVRyYW5zZm9y
bSBtX2Fic29sdXRlVHJhbnNmb3JtOworICAgIEZsb2F0U2l6ZSBtX3Jlc29sdXRpb247Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WFBhdGhHcmFtbWFyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIuY3BwCmlu
ZGV4IDBkNDg4NjdhOThmNmU0MzEyODJmMzIwNGRlNTBkNmYyMDk0MDM3NDMuLmE2ZDM3NjAwZjYx
NmE5MzI5NGM2ZjMzZTJmNDkyNzQzMzliNTg4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YUGF0aEdyYW1tYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1t
YXIuY3BwCkBAIC0xOTg2LDcgKzE5ODYsNyBAQCB5eXJlZHVjZToKICNsaW5lIDQxOSAiV2ViQ29y
ZS94bWwvWFBhdGhHcmFtbWFyLnkiCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3QoKHl5dnNwWygy
KSAtICgyKV0uZXhwcmVzc2lvblZlY3RvcikpOwotICAgICAgICAoeXl2YWwuZXhwcmVzc2lvbikg
PSBuZXcgRmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPigoeXl2c3BbKDEpIC0gKDIp
XS5leHByZXNzaW9uKSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKKyAgICAgICAgKHl5dmFs
LmV4cHJlc3Npb24pID0gbmV3IFhQYXRoOjpGaWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Np
b24+KCh5eXZzcFsoMSkgLSAoMildLmV4cHJlc3Npb24pKSwgV1RGTW92ZSgqcHJlZGljYXRlTGlz
dCkpOwogICAgIDt9CiAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aEdyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQppbmRl
eCA3NzY5OGZhNzY0ZjdhMTVhNDViYzVjMGU1ZDJkNjc3NTFiMWJlNzBmLi5kZDc4YTViZDlmODA2
NzM3MDJiZjQ0YzYwNzZkZDJkMmQwMGQxMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoR3JhbW1hci55
CkBAIC00MTUsNyArNDE1LDcgQEAgRmlsdGVyRXhwcjoKICAgICBQcmltYXJ5RXhwciBQcmVkaWNh
dGVMaXN0CiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxFeHByZXNzaW9uPj4+IHByZWRpY2F0ZUxpc3QoJDIpOwotICAgICAgICAkJCA9IG5ldyBG
aWx0ZXIoc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+KCQxKSwgV1RGTW92ZSgqcHJlZGljYXRl
TGlzdCkpOworICAgICAgICAkJCA9IG5ldyBYUGF0aDo6RmlsdGVyKHN0ZDo6dW5pcXVlX3B0cjxF
eHByZXNzaW9uPigkMSksIFdURk1vdmUoKnByZWRpY2F0ZUxpc3QpKTsKICAgICB9CiAgICAgOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggN2Q5MWYzODMzOTVhNTBlY2RjNjgxNjIxYjEy
NzFmYjNkOThlYTNlMS4uYjU3MDlmNjM2MWZhOTQ5YzFmN2ZkNzE3ZDZjZDhmM2FjN2ZhZDNmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCIKKyNp
bmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3Rl
SW1hZ2VCdWZmZXIuaCIKQEAgLTMwMiw2ICszMDQsMzUgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVu
dGkKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOwogfQogCit2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2Um
JiBmaWx0ZXJSZWZlcmVuY2UsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UmJiBnZW9tZXRy
eVJlZmVyZW5jZSwKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byBmaWx0ZXIgPSBmaWx0ZXJSZWZlcmVuY2UudGFrZUZpbHRl
cigpOworICAgIGF1dG8gZ2VvbWV0cnkgPSBnZW9tZXRyeVJlZmVyZW5jZS50YWtlR2VvbWV0cnko
KTsKKyAgICAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZdKCkg
eworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hl
ZEltYWdlQnVmZmVyKHsgaWRlbnRpZmllciwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53
ZWJQcm9jZXNzSWRlbnRpZmllcigpIH0pOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZpbHRl
cmVkSW1hZ2UoZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSk7CisgICAgICAgIGlmICghaW1hZ2Up
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2UtPnNp
emUoKTsKKyAgICAgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShJbnRTaXplKGltYWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9KTsK
KyAgICAgICAgaWYgKCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8g
Y29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdl
KCppbWFnZSwgRmxvYXRQb2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFu
ZGxlKTsKKyAgICB9KCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsK
K30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBuYXRpdmVJbWFnZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICAvLyBJbW1lZGlhdGVs
eSB0dXJuIHRoZSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgKHdoaWNoIGlzIGVycm9yLXBy
b25lKSB0byBhIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCmluZGV4IDFkMDI3Zjg4MDYxZjE0OGEzM2RhMjk0YjcyMWUwNzBkMDFlNzdkMWQu
LjUxMzE0YTllN2JkYmU3NWY3NDJjMDk2YWU1MWEwZGRhMjViMDM0ZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaApAQCAtNTksNiArNTksMTEgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9v
bDsKIAogfQogCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVyZW5jZTsKK2NsYXNz
IEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKQEAgLTEwOSw2ICsxMTQsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVy
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKICAgICB2b2lkIGdldFNoYXJlYWJsZUJpdG1hcEZv
ckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiYpPiYmKTsKKyAgICB2b2lkIGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIElQQzo6RmlsdGVyUmVm
ZXJlbmNlJiYsIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UmJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CiAgICAgdm9pZCBjYWNoZU5h
dGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6
Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCBhMTQyZjQ4OTY2ZjVjNDk3NTk0NTY1NDc3MmM3OWMz
MTk3NmY1M2RjLi4wYTQwNzBmNzA1OTFiMWVlNTgzYWRhMWI5OWY0ZGMwYmVhMDI2NjQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpAQCAtMzEsNiArMzEsNyBAQCBt
ZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsK
ICAgICBHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJpbmcgdXJsU3RyaW5nKSBT
eW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBlbnVtOnVp
bnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgLT4g
KFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBOb3RT
dHJlYW1FbmNvZGFibGVSZXBseQorICAgIEdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIElQQzo6Rmls
dGVyUmVmZXJlbmNlIGZpbHRlciwgSVBDOjpGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSBnZW9tZXRy
eSkgLT4gKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91
cyBOb3RTdHJlYW1FbmNvZGFibGVSZXBseQogICAgIENhY2hlTmF0aXZlSW1hZ2UoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIE5vdFN0cmVhbUVuY29kYWJs
ZQogICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkgTm90U3RyZWFtRW5jb2Rh
YmxlCiAgICAgRGVsZXRlQWxsRm9udHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY5YmVhZGUxYmEw
NzkwY2NkZDY5ZmNiZjAzOGI4Y2M0Nzc3YTJiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmgKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVjb2Rlci5oIgor
I2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlckdlb21ldHJ5Lmg+
CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeVJlZmVyZW5jZSB7Citw
dWJsaWM6CisgICAgRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2Uoc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OkZpbHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KQorICAgICAgICA6IG1fZ2VvbWV0cnkoV1RG
TW92ZShnZW9tZXRyeSkpCisgICAgeworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpGaWx0ZXJHZW9tZXRyeT4gdGFrZUdlb21ldHJ5KCkgeyByZXR1cm4gV1RGTW92ZShtX2dl
b21ldHJ5KTsgfQorCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVyR2VvbWV0cnlSZWZl
cmVuY2U+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRl
ckdlb21ldHJ5PiBtX2dlb21ldHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuY3BwIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MzU1YmZkMGViODc3ZDdiOWRhMzMxZjUyYmEzMWI0M2QzYzg0ODE4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmNwcApAQCAtMCww
ICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
aWx0ZXJSZWZlcmVuY2UuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXIuaCIKKyNpbmNsdWRl
ICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
RmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU9mZnNldC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmlsdGVyRWZmZWN0VmVjdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZpbHRlckV4cHJlc3Npb24uaD4KKworbmFtZXNwYWNlIElQ
QyB7CisKK0ZpbHRlclJlZmVyZW5jZTo6RmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0
ZXI+JiYgZmlsdGVyKQorICAgIDogbV9maWx0ZXIoV1RGTW92ZShmaWx0ZXIpKQoreworfQorCitz
dGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0
JiBlZmZlY3QsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAgQVNTRVJUKGVmZmVjdC50eXBlKCkg
Pj0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1pbmltdW0gJiYgZWZmZWN0LnR5cGUo
KSA8PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWF4aW11bSk7CisKKyAgICBlbmNv
ZGVyIDw8IGVmZmVjdC50eXBlKCk7CisKKyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXg6CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZToKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwOgor
ICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdzoKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyOgorICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2U6CisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGRvd25j
YXN0PFdlYkNvcmU6OkZFT2Zmc2V0PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1
bGFyTGlnaHRpbmc6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVU
aWxlOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5j
ZToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpTb3VyY2VBbHBoYToKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpTb3VyY2VHcmFwaGljOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKworc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+IGRl
Y29kZUZpbHRlckVmZmVjdChEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZSB0eXBlKQoreworICAgIGlmICghKHR5cGUgPj0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFTWluaW11bSAmJiB0eXBlIDw9IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRU1heGltdW0pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdGQ6
Om9wdGlvbmFsPFJlZjxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+PiBlZmZlY3Q7CisgICAgCisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVCbGVuZDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9y
TWF0cml4OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVD
b21wb3NpdGU6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252
b2x2ZU1hdHJpeDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZzoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RURpc3BsYWNlbWVudE1hcDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRURyb3BTaGFkb3c6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVGbG9vZDoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNz
aWFuQmx1cjoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdl
OgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2U6CisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5OgorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zm
c2V0OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU9mZnNldDo6ZGVjb2RlKGRlY29kZXIp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFU3BlY3VsYXJMaWdodGluZzoKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRVRpbGU6CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVUdXJidWxlbmNlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIGlmIChlZmZlY3QpCisgICAgICAgIHJl
dHVybiB7ICgqZWZmZWN0KS5wdHIoKSB9OworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0
YXRpYyB2b2lkIGVuY29kZVNWR0ZpbHRlcihjb25zdCBXZWJDb3JlOjpTVkdGaWx0ZXImIGZpbHRl
ciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNvZGVyIDw8IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7CisKKyAgICBhdXRvJiBmaWx0ZXJFZmZlY3RzID0gZmls
dGVyLmZpbHRlckVmZmVjdHMoKTsKKyAgICBlbmNvZGVyIDw8IGZpbHRlckVmZmVjdHMuc2l6ZSgp
OworCisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXJFZmZlY3RzKQorICAgICAgICBlbmNv
ZGVGaWx0ZXJFZmZlY3QoZWZmZWN0LCBlbmNvZGVyKTsKKyAgICAKKyAgICBhdXRvJiBleHByZXNz
aW9uID0gZmlsdGVyLmV4cHJlc3Npb24oKTsKKyAgICBlbmNvZGVyIDw8IGV4cHJlc3Npb24uc2l6
ZSgpOworCisgICAgZm9yIChhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdIDogZXhwcmVzc2lvbikg
eworICAgICAgICBlbmNvZGVyIDw8IHR5cGU7CisgICAgICAgIGVuY29kZXIgPDwgaW5kZXg7Cisg
ICAgICAgIGVuY29kZXIgPDwgbGV2ZWw7CisgICAgfQorfQorCitzdGF0aWMgUmVmUHRyPFdlYkNv
cmU6OlNWR0ZpbHRlcj4gZGVjb2RlU1ZHRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
c3RkOjpvcHRpb25hbDxzaXplX3Q+IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlm
ICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0VmVjdG9yIGZpbHRlckVmZmVjdHM7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsK
KyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgICAgIGF1dG8gZWZmZWN0ID0gZGVjb2RlRmlsdGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsK
KyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICAgICAgZmlsdGVyRWZmZWN0cy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIH0KKworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFdlYkNvcmU6OlNWR0ZpbHRlckV4cHJlc3Np
b24gZXhwcmVzc2lvbjsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyAr
K2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU+
IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBpbmRleDsKKyAgICAgICAgZGVjb2RlciA+PiBpbmRleDsKKyAgICAgICAgaWYg
KCFpbmRleCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IGxldmVsOworICAgICAgICBkZWNvZGVyID4+IGxldmVsOworICAgICAg
ICBpZiAoIWxldmVsKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgZXhw
cmVzc2lvbi5hcHBlbmQoeyAqdHlwZSwgKmluZGV4LCAqbGV2ZWwgfSk7CisgICAgfQorCisgICAg
cmV0dXJuIFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKFdURk1vdmUoZmlsdGVyRWZmZWN0cyks
IFdURk1vdmUoZXhwcmVzc2lvbikpOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVDU1NGaWx0ZXIo
Y29uc3QgV2ViQ29yZTo6Q1NTRmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29kZXIpCit7Cisg
ICAgZW5jb2RlciA8PCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6Q1NTRmlsdGVyOwor
ICAgIGVuY29kZXIgPDwgZmlsdGVyLmZ1bmN0aW9ucygpLnNpemUoKTsKKyAgICAKKyAgICBmb3Ig
KGF1dG8mIGZ1bmN0aW9uIDogZmlsdGVyLmZ1bmN0aW9ucygpKSB7CisgICAgICAgIGlmIChpczxX
ZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uKSkKKyAgICAgICAgICAgIGVuY29kZVNWR0ZpbHRl
cihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uLmdldCgpKSwgZW5jb2Rlcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kZUZpbHRlckVmZmVjdChkb3duY2FzdDxX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLmdldCgpKSwgZW5jb2Rlcik7CisgICAgfQor
ICAgIAorICAgIGVuY29kZXIgPDwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKTsKK30KKworc3RhdGlj
IFJlZlB0cjxXZWJDb3JlOjpDU1NGaWx0ZXI+IGRlY29kZUNTU0ZpbHRlcihEZWNvZGVyJiBkZWNv
ZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4g
c2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24+PiBmdW5jdGlvbnM7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAgICAg
ZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNWR0ZpbHRlcikgeworICAgICAgICAgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2Rl
U1ZHRmlsdGVyKGRlY29kZXIpKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChm
aWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gZWZmZWN0ID0gZGVjb2RlRmlsdGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAg
ICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
CisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAg
IH0KKyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHJlbmRl
cmluZ01vZGU7CisgICAgZGVjb2RlciA+PiByZW5kZXJpbmdNb2RlOworICAgIGlmICghcmVuZGVy
aW5nTW9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6
Q1NTRmlsdGVyOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbnMpLCAqcmVuZGVyaW5nTW9kZSk7Cit9
CisKK3N0YXRpYyB2b2lkIGVuY29kZUZpbHRlcihjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRl
ciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBpZiAoaXM8V2ViQ29yZTo6Q1NTRmlsdGVyPihm
aWx0ZXIpKQorICAgICAgICBlbmNvZGVDU1NGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6Q1NTRmls
dGVyPihmaWx0ZXIpLCBlbmNvZGVyKTsKKyAgICBlbHNlCisgICAgICAgIGVuY29kZVNWR0ZpbHRl
cihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZpbHRlciksIGVuY29kZXIpOworfQorCitz
dGF0aWMgUmVmUHRyPFdlYkNvcmU6OkZpbHRlcj4gZGVjb2RlRmlsdGVyKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4g
dHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6Q1NTRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlQ1NTRmlsdGVyKGRlY29kZXIp
OworCisgICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdG
aWx0ZXIpCisgICAgICAgIHJldHVybiBkZWNvZGVTVkdGaWx0ZXIoZGVjb2Rlcik7CisgICAgCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVGaWx0ZXIobV9maWx0ZXIsIGVuY29k
ZXIpOworfQorCitzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gRmlsdGVyUmVmZXJlbmNl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNv
ZGVGaWx0ZXIoZGVjb2RlcikpCisgICAgICAgIHJldHVybiB7IGZpbHRlci5yZWxlYXNlTm9uTnVs
bCgpIH07CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSVBD
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2Uu
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYwYzJmYTE0OGQ0YTVjYTA3MDk1YjcxZTJlNjNkNDZmYzdhMzdhN2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbHRlci5oPgorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgRW5jb2RlcjsKK2NsYXNz
IERlY29kZXI7CisKK2NsYXNzIEZpbHRlclJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVy
UmVmZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYpOworCisgICAgUmVmPFdlYkNvcmU6OkZp
bHRlcj4gdGFrZUZpbHRlcigpIHsgcmV0dXJuIFdURk1vdmUobV9maWx0ZXIpOyB9CisKKyAgICB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rmls
dGVyUmVmZXJlbmNlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIFJlZjxXZWJD
b3JlOjpGaWx0ZXI+IG1fZmlsdGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dl
YktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA2NTg0ZDFhZDdlMTU0ZWIwOTIw
MjMxMGRkZmE2YjVlMTIxYWQyYzM5Li4zMzJjNDMyZTAwOGNjZGJiOWVkODZmMjQ0OWM5MGY1ZWVi
YTQ2YmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI5
MCw3ICsyOTAsNiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgp
OgogICAgICAgICAnV2ViQ29yZTo6TWVkaWFLZXlTeXN0ZW1SZXF1ZXN0SWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6TWVkaWFTZXNzaW9uSWRlbnRpZmllcicsCi0gICAgICAgICdXZWJDb3JlOjpOYXRpdmVJbWFn
ZVJlZmVyZW5jZScsCiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJDb3JlOjpQbGF5YmFja1RhcmdldENsaWVudENvbnRleHRJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQb2xpY3knLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggZDg3
ZDE0ZjA1MWYxYWM2YjhkMDhhZDIyYzU4NmZkMjhkYmIxOTNkZi4uMWZkYWE3MjI3YjllYTM5MjEx
MGE2NDYxMmI5MDYxOThlOGFlZDIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNjMsNiArMTYzLDcgQEAg
UGxhdGZvcm0vSVBDL0RhZW1vbkRlY29kZXIuY3BwCiBQbGF0Zm9ybS9JUEMvRGFlbW9uRW5jb2Rl
ci5jcHAKIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcCBAbm8tdW5pZnkKIFBsYXRmb3JtL0lQQy9F
bmNvZGVyLmNwcCBAbm8tdW5pZnkKK1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuY3BwIEBu
by11bmlmeQogUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9y
bS9JUEMvTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5jcHAgQG5vLXVuaWZ5CiBQbGF0Zm9ybS9JUEMv
TWVzc2FnZVJlY2VpdmVyTWFwLmNwcCBAbm8tdW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRjZjRjMGY3YjhjNDY1ZWNhZTc1Mzc2
Y2I3ZjYzYzExOTIwYWExZTUuLjNmZTVmNGVmMzk3ZGM4MTM4OTRkMjQ5MGZkMGE3MzVhMGVlYWYz
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTM2MSw2ICsxMzYxLDkgQEAKIAkJNzFCQUE3MzMyNUZGRDA5ODAwRDdDRDVEIC8qIFdL
TW9kZWxWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUJBQTczMTI1RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLzsgfTsKIAkJNzFG
QjgxMEIyMjYwNjI3RTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3Bh
dGNoUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRz
RGlzcGF0Y2hQb2xpY3kuaCAqLzsgfTsKIAkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8qIFdl
YkNvbG9yUGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAq
LzsgfTsKKwkJNzJFRTc5QkIyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlCODI3
MEU1QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLzsgfTsKKwkJNzJFRTc5QkMy
NzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlckdlb21ldHJ5UmVmZXJlbmNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlCOTI3MEU1QUI5MDA0Q0U0
MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLzsgfTsKKwkJNzJFRTc5QkQyNzBFNUFC
OTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJl
ZmVyZW5jZS5oICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJzaXRl
RGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk3NUE4RDJENjE4N0Qx
QzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5
RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwogCQk3NjJCNzQ4RDEyMEJD
NzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDg0MTIwQkJBMkQwMDgxOTMzOSAv
KiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC00NzczLDYgKzQ3NzYsOSBAQAogCQk3MjhFODZGMDE3OTUx
ODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJCNTMxNTcyNTNDMUU0RDAwNDkyOTVBIC8qIFJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI1MzE1ODI1M0MxRTREMDA0
OTI5NUEgLyogUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90
ZVJlc291cmNlQ2FjaGVQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkVF
NzlCODI3MEU1QUIxMDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyRUU3OUI5MjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJHZW9t
ZXRyeVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJH
ZW9tZXRyeVJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkVFNzlC
QTI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyog
V0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0MjIsNiArNzQyOCw5IEBA
CiAJCQkJQkMwMzJEOUUxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCAqLywKIAkJCQlCQzAz
MkQ5RjEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5jcHAgKi8sCiAJCQkJQkMwMzJEQTAxMEY0
MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuaCAqLywKKwkJCQk3MkVFNzlCOTI3MEU1QUI5MDA0Q0U0
MEUgLyogRmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UuaCAqLywKKwkJCQk3MkVFNzlCODI3MEU1QUIx
MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCAqLywKKwkJCQk3MkVFNzlCQTI3MEU1QUI5
MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8sCiAJCQkJOUJEOEFCNDkyNTgyMEU1MjAw
NTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCAqLywKIAkJCQk0MTUxRTVDMzFGQkI5MEE5MDBFNDdF
MkQgLyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdFNzhEMDBCQzBF
QzQgLyogSGFuZGxlTWVzc2FnZS5oICovLApAQCAtMTIzMTQsNyArMTIzMjMsNiBAQAogCQkJCTdD
ODlEMjk0MUE2NzEyMkYwMDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRDg3ODYyNDFCREI1OEZGMDBEMDJBQkIgLyogQVBJVXNlclN0eWxlU2hlZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM1RTFBRkVEMTZCMjEwMTcwMDZDQzFGMiAvKiBBUElXZWJBcmNoaXZl
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTI3MTQ4MzI3MDI0RjAzMDAxOTcwMzQgLyogV2ViTm90
aWZpY2F0aW9uUHJvdmlkZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVFMUFGRUYxNkIy
MTAyOTAwNkNDMUYyIC8qIEFQSVdlYkFyY2hpdmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTc5RjFCRkMyM0M4MTFDRjAwQzdENEI0IC8qIEFQSVdlYkF1dGhlbnRpY2F0aW9uQXNzZXJ0
aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RUJFMjZBMjM0Njc2QzUwMDhEOEFG
OSAvKiBBUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywKQEAgLTEyNDI1
LDYgKzEyNDMzLDggQEAKIAkJCQk5MzEyQkFENjI2RjMzQzI5MDBGRERGNUYgLyogRmlsZVN5c3Rl
bVN0b3JhZ2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUI1NzlBMjZGNTE5MzMwMDhC
NDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzEyQkFENTI2RjMzQzI2MDBGRERGNUYgLyogRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkVFNzlCQzI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVy
R2VvbWV0cnlSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRUU3OUJEMjcwRTVBQjkw
MDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwQjk2NjFB
MThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkw
QzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAvKiBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLywKQEAgLTEzMDE2LDYgKzEzMDI2LDcgQEAKIAkJCQkzMUJBOTI0RTE0
ODgzMTI2MDA2MkVEQjUgLyogV2ViTm90aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMUEyRUM0QjE0ODk5N0MyMDA4MTBENzEgLyogV2ViTm90aWZpY2F0aW9u
TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM0RTE0ODk5N0MyMDA4MTBE
NzEgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMjcx
NDgzMjcwMjRGMDMwMDE5NzAzNCAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRlckNvY29hLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzg1N0Y4NTEyQjgyRDBCMDBFREVCMkUgLyogV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMURGRUE0MTJCMzFGODcwMDVE
RjczMCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzAzMkQ4RjEwRjQzN0EwMDA1OEMxNUEgLyogV2ViUGFnZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xMzg0MSw3ICsxMzg1Miw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQ
cm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlhdHRyaWJ1dGVz
ID0gewotCQkJCURlZmF1bHRCdWlsZFN5c3RlbVR5cGVGb3JXb3Jrc3BhY2UgPSBPcmlnaW5hbDsK
IAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVjayA9IDEzMDA7CiAJCQkJTGFzdFVwZ3JhZGVDaGVjayA9
IDExNDA7CiAJCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKQEAgLTE0NzI2LDYgKzE0NzM2LDcgQEAK
IAkJCQkyRDkyQTc4MDIxMkI2QTcxMDBGNDkzRkQgLyogRW5jb2Rlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDRENEQzk5RTI0OEZFOERBMDBBNjk1MjIgLyogRW5kb3dtZW50U3RhdGVUcmFja2Vy
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBNTc2MDIxNDk2Qjk3OTAwQTRFRTA2IC8qIEV2ZW50
RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3MkVFNzlC
QjI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNEQTkzREIxMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWNQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxQTE1MkQ3MjRFNUEyOUEwMDk3
OEM4QiAvKiBIYW5kbGVYUENFbmRwb2ludE1lc3NhZ2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Mjc0OUY2NDQyMTQ2NTYxQjAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggNjkzNGJiNDYx
NmNlMDBiZWFiMTQwYmFhOTQxMDliNmJhOTVmM2MyNC4uYWQ2YWQwYmVhYmY0ZTc0Njc2MjFmYzdk
MDE5OWZkNDYxMmM0MzJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTE5Nyw2
ICsxOTcsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFn
ZSgpOwogICAgIH0KIAorICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShj
b25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5PiYmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVm
ZmVyKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0
cnkpKTsKKyAgICB9CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBn
ZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVzdGluYXRp
b25Gb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZpbmFsCiAg
ICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCAyOGJiMjQ0
ODE2ODE5M2VlZTdkY2FjZWIzODFhOGYzZGUwOGRhMWFmLi5hZDg5Mjg5ZjQwZjlmYzllNDZiMzli
MjMyNjg4YTc3ZGNhYzhkYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNp
bmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjIzLDYgKzIyNCwyMiBAQCBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldFNoYXJlYWJsZUJpdG1hcChS
ZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOwogfQog
CitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
ciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJHZW9tZXRyeT4m
JiBnZW9tZXRyeSkKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAg
YXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0
ZXJSZWZlcmVuY2UgeyBSZWY8RmlsdGVyPiB7IGNvbnN0X2Nhc3Q8RmlsdGVyJj4oZmlsdGVyKSB9
IH0sIElQQzo6RmlsdGVyR2VvbWV0cnlSZWZlcmVuY2UoV1RGTW92ZShnZW9tZXRyeSkpKSwgTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1
ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgMV9zKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRSZXN1bHQpOworCisgICAgaWYgKGhh
bmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICBhdXRvIGJpdG1h
cCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgaWYgKCFiaXRtYXApCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNhY2hlTmF0aXZlSW1h
Z2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBzZW5kVG9T
dHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hlTmF0aXZlSW1hZ2Uo
aGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDY0YmI5MjY3ZmU2YjMzNDk2YjMzZmU1NzBkOWE3MWVh
Y2E1NTRjY2YuLmZmMDc5OTk5ZDQ2ZDVkY2I1YjI0MTQ0ZWVhMmE2MjRhZGMwMWU1ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMjcsNiArMjcsOCBAQAogCiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnlSZWZlcmVu
Y2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNz
Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiSVBDU2VtYXBob3JlLmgiCkBAIC05Myw2ICs5NSw3IEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVCaXRt
YXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2
ZVJlc29sdXRpb24pOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gZ2V0RmlsdGVyZWRJbWFn
ZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZpbHRlckdlb21l
dHJ5PiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZv
aWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZv
bnRzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442131</attachid>
            <date>2021-10-22 00:57:31 -0700</date>
            <delta_ts>2021-10-22 01:25:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211022005729.patch</filename>
            <type>text/plain</type>
            <size>919664</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExNmI1YjhiZDRmMjE4
OGYzYjIwODAyZDgxMjg1YWNhNGU5YTgxYy4uODYzOTgzNWZhYWE2ZjMxMjZmZjYyMDg5YzdiZTE0
NGMwZDc4NTcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjEtMTAtMjIgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5Q29yZUltYWdlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRU
cmFuc2ZlckNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUltYWdlOjpp
bWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzaGFyZWRDSUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VD
b3JlSW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUlt
YWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OkRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRl
ckltYWdlQnVmZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmltYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjpzb3VyY2VJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnNldEJsZW5kTW9kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQmxlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YmxlbmRNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9y
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0
YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzZXRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6c2V0Q29sb3JNYXRyaXhUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6dmFsdWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cmVkRnVuY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6Z3JlZW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpibHVlRnVuY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YWxwaGFGdW5jdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
RkVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlOjpzZXRLMik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZTo6c2V0SzMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNl
dEs0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmsxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjprMiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6azMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6Oms0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0UHJl
c2VydmVBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpmYXN0U2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6a2VybmVs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjprZXJuZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZGl2aXNvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpiaWFzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxwaGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRp
bmc6OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFu
bmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFlDaGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRY
Q2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5u
ZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNo
YW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnlDaGFubmVsU2VsZWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZF
RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojp0YWtlSW5w
dXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRHJvcFNoYWRvdzo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNldER5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0U2hhZG93Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpz
dGREZXZpYXRpb25YIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6c3RkRGV2aWF0aW9uWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmR4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6ZHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNoYWRvd09wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnNldEZsb29kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRv
S2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChnYXVzc2lhbktlcm5l
bEZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9u
WCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnN0YW5kYXJkQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91
dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRT
dGREZXZpYXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdl
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmVkZ2VNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnRha2VJbnB1dHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExl
bmd0aFgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVs
VW5pdExlbmd0aFkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldEtlcm5lbFVuaXRMZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNl
dEtlcm5lbFVuaXRMZW5ndGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNvdXJj
ZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6c3VyZmFjZVNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRTb3VyY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93
OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6
OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZSk6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGl4ZWxB
cnJheUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUGl4ZWxW
YWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWlu
T3JNYXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0cmVtdW0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZ
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cmFkaXVzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnJhZGl1c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpzZXREeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6c2V0RHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkeCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6OkZFU3BlY3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJD
b25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VGlsZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRC
YXNlRnJlcXVlbmN5WSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldEJhc2VGcmVxdWVuY3lYKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6c2V0U2VlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNt
b290aEN1cnZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0UGFpbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNo
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9p
c2UyRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OnNldFNlZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2VlZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5n
RGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
Qm91bmRhcnlTZXQ6OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5
U2V0Ojp5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmRlY29kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1
dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xl
YXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5w
dXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFz
UmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZ
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hl
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJz
b2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1h
bGl6ZWRGbG9hdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjp0
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0NTU0ZpbHRl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNTVkdGaWx0ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlckVmZmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlQWxwaGFOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VHcmFwaGljTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNhbGN1bGF0ZU91dHNl
dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpGaWx0
ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRl
RmlsdGVyU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJ
bWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1hcElt
YWdlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6bWFwUmVz
b2x2ZWRJbWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6
Om1hcEltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNs
aXBUb0ZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZmlsdGVyUmVnaW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpmaWx0ZXJTY2FsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRl
ckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6Y3JlYXRlRmlsdGVySW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
aW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OmVmZmVjdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291
cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5U29mdHdhcmUgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om1hdHJp
eCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBS
R0JBVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW50ZXJpb3JQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRPdXRlclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFk
b3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oLgorICAg
ICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpwaXhlbEFycmF5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjptaW5Pck1heCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRy
ZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlR1
cmJ1bGVuY2VQYWludGluZ0RhdGE6OlR1cmJ1bGVuY2VQYWludGluZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VHVyYnVsZW5jZVBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OnNtb290aEN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6aW5pdFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdh
cmU6OkZpbHRlckltYWdlU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VT
b2Z0d2FyZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgor
ICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0xpZ2h0aW5nRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2lu
ZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpsZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWxwaGFXaW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdp
bmRvdzo6c2V0UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0
aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmguCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjph
cHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRG
dW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0
ZU91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0
aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1p
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9w
ZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJRExFbnVtTGltaXRz
PENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6dG9TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
SW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
ZXJnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50
OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmhpZ2hlc3RFbnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
aGFzRmlsdGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6ZmlsdGVyRWZmZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpkZWNvZGUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVm
ZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpj
bGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmlt
aXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorCiAyMDIxLTEwLTIyICBLaW1tbyBLaW5udW5lbiAgPGtraW5u
dW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViR0wgbG93LXBvd2VyIGFuZCBoaWdoLXBlcmZv
cm1hbmNlIGNvbnRleHRzIHNob3VsZCB1c2UgZGlmZmVyZW50IEFOR0xFIE1ldGFsIEVHTERpc3Bs
YXlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGI1ZjVlMjQ4YmJkZDU2ZTM2ODNhYWExNzkzNjgxYTdmMzcxN2Y2MGIu
LmNiYTZhZDU4ZjlhNmE0Y2NmMTUxN2RkZTE3ZTA1OWE2YWQyNTY0OWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMjEtMTAtMjIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5j
b20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2Vz
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBQbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpG
aWx0ZXJSZWZlcmVuY2U6OkZpbHRlclJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OkZpbHRlclJl
ZmVyZW5jZTo6dGFrZUZpbHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5j
b2RlRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVG
aWx0ZXJFZmZlY3QpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZVNWR0Zp
bHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlU1ZHRmlsdGVyKToK
KyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGVDU1NGaWx0ZXIpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUNTU0ZpbHRlcik6CisgICAgICAgIChJUEM6
OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlRmlsdGVyKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVm
ZXJlbmNlOjpkZWNvZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKHR5cGVzX3RoYXRf
Y2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgor
CiAyMDIxLTEwLTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQWRkIHdlYnB1c2hkIHBsaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA2OTE1
OTZjMTkwZGJiYTRmZmQzNWIxMTQ1NTExYmE1OTdjOWZlZWI1Li5lMWE5M2ZhYjI2NDlhZjYwYjQz
OTdkMTIxY2QzNDRmMmU2MTk5ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MTksOCArMTQx
OSwxNCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckdlb21ldHJ5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9u
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHRWZWN0b3IuaAogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT09y
aWdpbmFsRm9ybWF0Qm94LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNGJlYTE0ZjQ0ZmJmNTIxMTkwZjYz
M2FiNjczMDY5MTIzM2E1NWJmNC4uMTUzYmE4YzQ0MWMzN2YxNjI3NDEyOTZlZjM1NmU3YzZiNWU5
M2EyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNjMsMTQgKzIwNjMsMzYgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3
YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4
U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9u
ZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2Fy
ZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0
d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhp
Y1NvZnR3YXJlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2lzby9JU09PcmlnaW5hbEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2lzby9JU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDkwNmMyOTk4NDVkYjAzZjc3MzhlNTgxODUwZDRkMGM0YWU5YTMwYzYuLjU2YjBkNWYx
OTNhMDY0Yzg1ZDE3NDdmYTA1ZWNlYzBhYWVlZTNmNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtNDAwLDcgKzQwMCwxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5t
bQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tCitwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5
UmVmcmVzaE1vbml0b3JJT1MubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTg0MGFhMjgyNDI2NGY2OTFlZTMzOWMwMzcxMTUxMTc3YTQ0MTE1NC4uZGExYmVjZGQxMTk5
ZjhiOWY5MGRmMDIwMzM3MTNiY2M4MTg2NWI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM4LDcgKzIzOCw2IEBACiAJCTA4
MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JGMDA2
RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYwM0Q1
MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1Rl
eHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNW
R0VsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5o
ICovOyB9OwotCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJGMzkw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFFQTcw
RjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAz
NDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTkw
RjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdGQjAw
MzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1Njgw
ODEyQjkwREE2MDA5NjBBOUYgLyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250
TWV0cmljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC03ODEsOCArNzgwLDYgQEAKIAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENTU051
bWVyaWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsKIAkJ
MkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAwMERC
QkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMwMEZB
RDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0
YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktpdE1l
ZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1l
c3NhZ2VFdmVudC5jcHAgKi87IH07CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBXZWJL
aXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5
TWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBXZWJL
aXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkQwNjIxNDkxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgKi87
IH07CkBAIC0xMjQ0LDcgKzEyNDEsNyBAQAogCQk0MzEwN0JFMjE4Q0MxOURFMDBDQzE4RTggLyog
U2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MzEwN0JFMTE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9U
eXBlTWFwLmggKi87IH07CiAJCTQzMkQzRkU4MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNo
ZWNrZXJUZXN0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzJEM0ZFNzE4QTg2NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVz
dEZ1bmN0aW9ucy5oICovOyB9OwogCQk0MzU4RTg3RDEzNjBBMkVFMDBFNDc0OEMgLyogSlNTVkdG
RURyb3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzU4RTg3QjEzNjBBMkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dF
bGVtZW50LmggKi87IH07Ci0JCTQzNThFODgxMTM2MEEzMTcwMEU0NzQ4QyAvKiBGRURyb3BTaGFk
b3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNThF
ODdGMTM2MEEzMTcwMEU0NzQ4QyAvKiBGRURyb3BTaGFkb3cuaCAqLzsgfTsKKwkJNDM1OEU4ODEx
MzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM1OEU4N0YxMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJv
cFNoYWRvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg4MzEz
NjBBMzNCMDBFNDc0OEMgLyogU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oICovOyB9OwogCQk0MzY3
MDhDMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODgyMTJEOUNBNEEwMDA0NDIzNCAv
KiBSZW5kZXJTVkdCbG9jay5oICovOyB9OwogCQk0MzY3MDhDMzEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzY3MDg4NDEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVy
LmggKi87IH07CkBAIC0yMzA2LDExICsyMzAzLDI0IEBACiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAy
RUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1
NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5h
dGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI3QTdGM0EyNDA3OEI4NDAwNEQyOTMxIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJC
QUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOTU5MTZG
MjcyMEVCODcwMDM2OTk5MyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOEYyMjQ2MUREM0QxQzUw
MEU5MkRBMyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4
ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2
ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjlEMDUzMDI1MzE0MjQzMDA0MjIwOTggLyogUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzJBNzNCRUYyNDVBM0Y5MDAwMUM5RDAzIC8qIEFuaW1hdGlvbkZyYW1lUmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIyQTgx
NUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkMzMjcxNDM0NDcwMDNF
ODhDNCAvKiBGaWx0ZXJHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJBODNEODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJB
QTQ2QzUyNzE0MzUyMzAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZDNDI3MTQzNTA1MDAzRTg4
QzQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDNjI3MTQzNUZEMDAzRTg4QzQgLyogRmlsdGVyRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
QTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM3MjcxNDM2OUEwMDNF
ODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJl
cHJlc2VudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzJBQTQ2QzgyNzE0MzczMzAwM0U4OEM0IC8qIEZpbHRlckltYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkM5MEEzQTI2MzY0QTFG
MDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDOTI3MTQzN0QxMDAzRTg4QzQgLyogRmlsdGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3
MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0EyNzE0MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNE
NkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBG
aWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMwQjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZH
RmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMy
REUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2RDQyNzE0RjE4RTAwM0U4OEM0IC8q
IEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkFBNDZCNDI3MTQyQ0VCMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VWZWN0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkJB
QzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJFQkM3REQyNzExM0QzMTAwRjBBMjBGIC8qIChudWxsKSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkY2NjdFMTI2MEMyNkFDMDBFRTM2QUQgLyogRGlh
Z25vc3RpY0xvZ2dpbmdEb21haW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyRjY2N0RGMjYwQzI2NDQwMEVFMzZBRCAvKiBEaWFnbm9zdGljTG9nZ2lu
Z0RvbWFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4
RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNF
ODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1l
c3NhZ2VFdmVudC5oICovOyB9OwpAQCAtMjcxMywyMSArMjcyMywxOSBAQAogCQk4NDIyNDE5NDEw
N0U3OEE3MDA3NjZBODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxOTExMDdFNzhBNzAwNzY2QTg3
IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCAqLzsgfTsKIAkJODQzMDBCRDYxMjBDOUFBQzAw
MjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRo
U3RyaW5nU291cmNlLmggKi87IH07CiAJCTg0MzAwQkQ4MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQ
YXRoU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDMwMEJENzEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovOyB9OwotCQk4
NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggKi87IH07Ci0JCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkZBMEZE
MjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLzsgfTsKIAkJODQ2NTBFN0UyMzg3QUQ3RDAw
NjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NjUwRTdDMjM4N0FEN0MwMDYyNjZFMiAvKiBNZWRpYVF1
ZXJ5TGlzdEV2ZW50LmggKi87IH07CiAJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0
YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDVBMTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAq
LzsgfTsKLQkJODQ3MzBENzkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVDMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggKi87IH07CisJCTg0NzMwRDc5MTI0
OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVD
b252b2x2ZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTg0NzMwRDdCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdodGluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUUx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmggKi87IH07Ci0JCTg0NzMwRDdE
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjAxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFRGlzcGxhY2VtZW50TWFwLmggKi87IH07Ci0JCTg0NzMwRDdGMTI0OEYwQjMwMEQzQTlDOSAv
KiBGRUZsb29kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDczMEQ2MjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oICovOyB9OworCQk4NDczMEQ3
RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDYwMTI0OEYwQjMwMEQzQTlDOSAv
KiBGRURpc3BsYWNlbWVudE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTg0NzMwRDdGMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2MjEyNDhG
MEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTg0NzMwRDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2
NDEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oICovOyB9OwotCQk4NDczMEQ4MzEyNDhG
MEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsg
fTsKLQkJODQ3MzBEODUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjgxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFTW9ycGhvbG9neS5oICovOyB9OwotCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5
QzkgLyogRkVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg0NzMwRDZBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyB9OworCQk4
NDczMEQ4MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZF
TWVyZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2ODEyNDhGMEIzMDBEM0E5
QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJODQ3MzBEODcxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QTEyNDhG
MEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk4NDczMEQ4OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxh
ckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDczMEQ2QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggKi87IH07
Ci0JCTg0NzMwRDhCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAv
KiBGRVRpbGUuaCAqLzsgfTsKLQkJODQ3MzBEOEQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVs
ZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3
MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovOyB9OworCQk4NDczMEQ4
QjEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBE
OEQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZF
VHVyYnVsZW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzQxMjQ4RjBCMzAw
RDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi87IH07CiAJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlD
OSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJj
ZS5oICovOyB9OwogCQk4NDczMEQ5MzEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3
NjEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmggKi87IH07CkBAIC0yNzM1LDE0
ICsyNzQzLDE0IEBACiAJCTg0NzZDOUVCMTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRoQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3NkM5
RTgxMURGNkEyOTAwNTU1QjAyIC8qIFNWR1BhdGhCdWlsZGVyLmggKi87IH07CiAJCTg0NzZDOUVD
MTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRoQ29uc3VtZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzZDOUU5MTFERjZBMjkwMDU1NUIwMiAvKiBT
VkdQYXRoQ29uc3VtZXIuaCAqLzsgfTsKIAkJODQ3NkM5RjAxMURGNkE1ODAwNTU1QjAyIC8qIFNW
R1BhdGhQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzZDOUVFMTFERjZBNTgwMDU1NUIwMiAvKiBTVkdQYXRoUGFyc2VyLmggKi87IH07Ci0J
CTg0ODAxOTU1MTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1ci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4MDE5NTMxMDhCQUZCMzAwQ0Iy
QjFGIC8qIEZFR2F1c3NpYW5CbHVyLmggKi87IH07CisJCTg0ODAxOTU1MTA4QkFGQjMwMENCMkIx
RiAvKiBGRUdhdXNzaWFuQmx1ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODQ4MDE5NTMxMDhCQUZCMzAwQ0IyQjFGIC8qIEZFR2F1c3NpYW5CbHVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODQ4MkI3
NDYxMTk4QzM1NDAwQkZCMDA1IC8qIEhhc2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8q
IEhhc2hDaGFuZ2VFdmVudC5oICovOyB9OwogCQk4NDgyQjc1MjExOThDQjZCMDBCRkIwMDUgLyog
SlNIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0ODJCNzUwMTE5OENCNkIwMEJGQjAwNSAvKiBKU0hhc2hDaGFuZ2VFdmVudC5o
ICovOyB9OwogCQk4NDg1MjI3QzExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdIS2VybkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODUyMjc4
MTE5MDE2MkMwMDZFREM3RiAvKiBKU1NWR0hLZXJuRWxlbWVudC5oICovOyB9OwogCQk4NDg1MjI3
RTExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdWS2VybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODUyMjdBMTE5MDE2MkMwMDZFREM3RiAv
KiBKU1NWR1ZLZXJuRWxlbWVudC5oICovOyB9OwogCQk4NDg1MjI4QjExOTAxNzNDMDA2RURDN0Yg
LyogU1ZHVktlcm5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NDg1MjI4ODExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50Lmgg
Ki87IH07CiAJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGM0MwRkM3REZG
MDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi87IH07Ci0JCTg0QTgxRjQyMEZDN0UwMjcwMDk1
NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5o
ICovOyB9OworCQk4NEE4MUY0MjBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFGNDAwRkM3
RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NEIzNDlBMjIyRjg2RTc1MDBENDdCQ0YgLyogRXZl
bnRUYXJnZXRDb25jcmV0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODRCMzQ5QTAyMkY4NkU3NDAwRDQ3QkNGIC8qIEV2ZW50VGFyZ2V0Q29uY3JldGUu
aCAqLzsgfTsKIAkJODRCNkI5NzgxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEI2
Qjk3NjEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCAqLzsgfTsKIAkJ
ODRDNUIyRkIxMjE2REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QzVCMkY5
MTIxNkRDODEwMDg4QjUzQSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmggKi87IH07
CkBAIC0zNTAzLDEwICszNTExLDEwIEBACiAJCUE3NDBCNUE1MTRDOTM1QUIwMEE3N0ZBNCAvKiBK
U0ludGVybmFsU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QjRFQTc5MTRDOTM0ODQwMEM4RjVCRiAvKiBKU0ludGVybmFsU2V0dGluZ3Mu
aCAqLzsgfTsKIAkJQTc0MEI1QTcxNEM5MzVBRjAwQTc3RkE0IC8qIEpTSW50ZXJuYWxTZXR0aW5n
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0
RUE3ODE0QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRpbmdzLmNwcCAqLzsgfTsKIAkJ
QTc1RTQ5NzYxMDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RTQ5NzQxMDc1MkFD
QjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3NUU4Qjg5MEUxREUyRDYwMDdGMjQ4MSAv
KiBGRUJsZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzVFOEI4MTBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5oICovOyB9OwotCQlBNzVFOEI4
QjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODMwRTFERTJENjAwN0YyNDgxIC8qIEZF
Q29sb3JNYXRyaXguaCAqLzsgfTsKLQkJQTc1RThCOEQwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29t
cG9uZW50VHJhbnNmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3NUU4Qjg1MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyLmgg
Ki87IH07Ci0JCUE3NUU4QjhGMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODcwRTFERTJE
NjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmggKi87IH07CisJCUE3NUU4Qjg5MEUxREUyRDYwMDdG
MjQ4MSAvKiBGRUJsZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzVFOEI4MTBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3NUU4QjhCMEUxREUyRDYw
MDdGMjQ4MSAvKiBGRUNvbG9yTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4MzBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJp
eC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3
NUU4QjhEMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4NTBFMURFMkQ2MDA3
RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUE3NUU4QjhGMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNv
bXBvc2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RThCODcwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2RTVGN0YxMzVFMERDRjAwQTY5
ODM3IC8qIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkU1RjdFMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJl
ZERvY3VtZW50TWFya2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3OTc5MTQwRDZCOUQw
QzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3OTc5
MjUwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggKi87IH07CkBAIC0zODYwLDcgKzM4
NjgsNyBAQAogCQlCMjIyRjY5RDBBQjc3MUI4MDAyMkVGQUQgLyogSlNTVkdFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyRjY5QjBBQjc3
MUI4MDAyMkVGQUQgLyogSlNTVkdFbGVtZW50LmggKi87IH07CiAJCUIyMjM2MjI5MEMzQUYwNEEw
MDA4Q0E5QiAvKiBKU1NWR1RleHRQYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMzYyMjcwQzNBRjA0QTAwMDhDQTlCIC8qIEpTU1ZH
VGV4dFBhdGhFbGVtZW50LmggKi87IH07CiAJCUIyMzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMjU1OTk4NTBE
MDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RUIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1h
Z2UuaCAqLzsgfTsKKwkJQjI1NTk5ODUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVCMEQw
MEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI1NTk5QTQwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0lt
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1
OTkwQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjU1OTlBNTBEMDBEOEJBMDBCQjgyNUMgLyog
RW1wdHlDbGllbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjU1OTkwRDBEMDBEOEI5MDBCQjgyNUMgLyogRW1wdHlDbGllbnRzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NjUwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1
bWVudEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTYxMjEsOCArNjEyOSw2IEBACiAJCTA4MTY2OEQ3MTI1NjAzRDUwMDZGMjVERSAvKiBT
VkdUZXh0TGF5b3V0RW5naW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MUFBOEQ5MTExMTIzN0UwMDJBQjA2RSAvKiBTVkdF
bGVtZW50UmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRWxl
bWVudFJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4MUVCRjM4MEZE
MzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEyMEYwMUE3RkIwMDM0Mjc1NCAv
KiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjcxLDggKzYy
NzcsNiBAQAogCQkwRjQ5NjZBODFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFk
T25seS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDk2NkE5MURCNDBDNDMw
MEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9ubHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNET01Qb2ludFJlYWRPbmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNENERUFBMjNEOTFBOEEwMDI1MUIwMiAvKiBTY3JvbGxUeXBlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTY3JvbGxUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY1M0ZCODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg0MjEzQjc4NjQw
MEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJMYXllckZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTczODIsMTAgKzczODYsNiBAQAogCQkyQjQyMzVBMDE1MjUwRjYwMDBEQkJDRDggLyogUmVu
ZGVyU1ZHRWxsaXBzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJT
VkdFbGxpcHNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCRThFMkM2MTJBNTg5
RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJCRThFMkM4MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQ
YXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkM4NTY1MzMy
NEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbHRlckVmZmVjdFJlbmRlcmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJD
ODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEzOTI0
QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDIxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5
TWVzc2FnZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdE1lZGlhS2V5TWVzc2Fn
ZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQ3MURBNjNBNzkw
MEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1ODEsOSArMTA1ODEsNTMgQEAKIAkJNzI3QUZF
RDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Mjk3OEQ0
MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRl
clJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NDIzRDY4NkE2
MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlC
QzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzA5RUQyNzIy
OEEyMTAwQkU4ODM4IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZp
bHRlckdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5RDA1MkUy
NTMxM0UyNjAwNDIyMDk4IC8qIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQTgzRDY5MjcwM0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQTgzRDZBMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNENkIyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkMyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyog
Q1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZpbHRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUg
LyogRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDcwMjcwNTc1MDQwMDNDNUFBRSAvKiBTb3VyY2VHcmFw
aGljU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzEyNzA1Nzg1MjAwM0M1
QUFFIC8qIFNvdXJjZUFscGhhU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNl
QWxwaGFTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDcy
MjcwNTc5QzcwMDNDNUFBRSAvKiBGRU9mZnNldFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZFT2Zmc2V0U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q3MzI3MDU3Q0JFMDAzQzVBQUUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkE4M0Q3NDI3MDU4MzdEMDAzQzVBQUUgLyogRkVNZXJnZVNvZnR3YXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTWVyZ2VTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc1MjcwNTg1QjgwMDNDNUFBRSAvKiBGRUNvbG9yTWF0
cml4U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb2xvck1hdHJpeFNvZnR3YXJl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzYyNzA1ODkwMjAwM0M1
QUFFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21w
b3NpdGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc4
MjcwNThDMDMwMDNDNUFBRSAvKiBGRUZsb29kU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRkVGbG9vZFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
ODNEN0EyNzA1QURGQTAwM0M1QUFFIC8qIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVBQUUgLyogRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0MyNzA1
QkQ4NjAwM0M1QUFFIC8qIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkE4M0Q3RDI3MDVDN0VGMDAzQzVBQUUgLyogRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0UyNzA2MzM2QjAwM0M1
QUFFIC8qIEZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNE
N0YyNzA2M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZFVGlsZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
ODNEODAyNzA2NDFCNjAwM0M1QUFFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJBODNEODEyNzA2NDZFMjAwM0M1QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2Fy
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MjI3MDY1MTFCMDAzQzVBQUUgLyogRkVCbGVu
ZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgzMjcwNjY3NEMwMDNDNUFBRSAvKiBG
aWx0ZXJHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCNDI3MTQyQ0VCMDAzRTg4QzQgLyogRmlsdGVy
SW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjYyNzE0MkYzNzAwM0U4OEM0IC8qIEZpbHRl
ckltYWdlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2VTb2Z0d2Fy
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI3MjcxNDJGMzgwMDNF
ODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdl
U29mdHdhcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjgyNzE0MkY3
OTAwM0U4OEM0IC8qIEZpbHRlckltYWdlQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI5MjcxNDJGNzkwMDNFODhDNCAvKiBTb3VyY2VHcmFw
aGljQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
U291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBQTQ2QkEyNzE0MkY3QTAwM0U4OEM0IC8qIEZpbHRlckltYWdlQ29yZUltYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlQ29yZUltYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJCMjcxNDMwQjAwMDNFODhDNCAvKiBGaWx0
ZXJFZmZlY3RWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVy
RWZmZWN0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJDMjcx
NDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJSZXN1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVyUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlcHJlc2VudGF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJFMjcxNDMyREUwMDNFODhDNCAv
KiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0ZpbHRlckJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkYy
NzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkFBNDZDMDI3MTQzMkRGMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWls
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzQyNzE0MzUwNTAw
M0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbHRlckJvdW5kYXJ5U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUE0NkQ3MjcxNThBNTcwMDNFODhDNCAvKiBGRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2RDkyNzE1OEE1NzAwM0U4OEM0IC8qIEZFQ29tcG9u
ZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGRUNvbXBvbmVu
dFRyYW5zZmVyQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkIx
Qjc1MTI3MTdFQTJFMDAxQjJFMDggLyogRmlsdGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRmlsdGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkIxQjc1NDI3MTkxMTQzMDAxQjJFMDggLyogTGlnaHRpbmdEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExpZ2h0aW5nRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNDIz
RTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E2MjNFMTczMjgw
MDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwNTk1LDYgKzEwNjM5LDggQEAKIAkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzOTI2MzY0QTFGMDA3
N0YwRTggLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkM5MEEzQTI2MzY0QTFGMDA3N0Yw
RTggLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhU
c1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2
MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhU
c1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkVBMDlGNzIzRkNDQjNEMDA4
NTA0QTUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTUyOCw5
ICsxMTU3NCw2IEBACiAJCTg0MzAwQkQ1MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5n
U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdT
b3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBCRDcxMjBDOUFENDAw
MjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHUGF0aFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJE
OTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU3RyaW5nU291cmNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRjkwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkg
LyogU1ZHRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU3QzIzODdBRDdDMDA2MjY2
RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg0NjUwRTdGMjM4N0FEOEEwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU4MDIzODdBRDhCMDA2MjY2RTIg
LyogTWVkaWFRdWVyeUxpc3RFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFR
dWVyeUxpc3RFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTU3Myw4
ICsxOTYxNiwxMSBAQAogCQkyQ0UxMTg5ODI0QzI0MDJDMDAzNzcwRTkgLyogY29yZWltYWdlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkyQ0FBNEEzOTI0
QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLywKLQkJ
CQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UubW0gKi8sCisJCQkJNzJBQTQ2RDcyNzE1OEE1NzAwM0U4OEM0IC8qIEZFQ29sb3JNYXRyaXhD
b3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2RDkyNzE1OEE1NzAwM0U4OEM0IC8qIEZFQ29tcG9u
ZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2QkEyNzE0MkY3QTAwM0U4OEM0
IC8qIEZpbHRlckltYWdlQ29yZUltYWdlLmggKi8sCisJCQkJNzJBQTQ2QjgyNzE0MkY3OTAwM0U4
OEM0IC8qIEZpbHRlckltYWdlQ29yZUltYWdlLm1tICovLAorCQkJCTcyQUE0NkI5MjcxNDJGNzkw
MDNFODhDNCAvKiBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tICovLAogCQkJKTsKIAkJCXBhdGgg
PSBjb3JlaW1hZ2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjMyMDQsNiArMjMy
NTAsMzMgQEAKIAkJCXBhdGggPSAibW9kZWwtZWxlbWVudCI7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwogCQl9OworCQk3MkE4M0Q2RjI3MDU3NEQwMDAzQzVBQUUgLyogc29mdHdhcmUgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDgyMjcw
NjUxMUIwMDNDNUFBRSAvKiBGRUJsZW5kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc1Mjcw
NTg1QjgwMDNDNUFBRSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgz
RDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICov
LAorCQkJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cCAqLywKKwkJCQk3MkE4M0Q3QzI3MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RDI3MDVDN0VGMDAzQzVBQUUgLyogRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0UyNzA2MzM2QjAwM0M1QUFFIC8q
IEZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVB
QUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3QjI3MDVCMkM5MDAzQzVB
QUUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEODEyNzA2NDZF
MjAwM0M1QUFFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzQyNzA1
ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzMyNzA1
N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3
MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
N0YyNzA2M0Y0QzAwM0M1QUFFIC8qIEZFVGlsZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4
MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovLAorCQkJCTcy
QUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkFBNDZCNzI3MTQyRjM4MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VTb2Z0d2FyZS5oICovLAor
CQkJCTcyQjFCNzU0MjcxOTExNDMwMDFCMkUwOCAvKiBMaWdodGluZ0RhdGEuaCAqLywKKwkJCQk3
MkE4M0Q3MTI3MDU3ODUyMDAzQzVBQUUgLyogU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgKi8sCisJ
CQkJNzJBODNENzAyNzA1NzUwNDAwM0M1QUFFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkpOworCQkJcGF0aCA9IHNvZnR3YXJlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIAkJN0MwMTFGM0MyNEZBRDM2MDAwNUJFRjEwIC8qIFNldHRpbmdzVGVtcGxhdGVz
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1MjYwLDYg
KzI1MzMzLDcgQEAKIAkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyQTgzRDZGMjcwNTc0
RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLywKIAkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMg
LyogRGlzdGFudExpZ2h0U291cmNlLmNwcCAqLywKIAkJCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5
QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTc1RThCODAwRTFERTJENjAwN0Yy
NDgxIC8qIEZFQmxlbmQuY3BwICovLApAQCAtMjUyOTYsMTUgKzI1MzcwLDI2IEBACiAJCQkJODQ3
MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovLAogCQkJCTg0NzMwRDZGMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuY3BwICovLAogCQkJCTg0NzMwRDcwMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCAqLywKLQkJCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdE
NzkgLyogRmlsdGVyLmggKi8sCisJCQkJNzJBODNENkUyNzAzREZEODAwM0M1QUFFIC8qIEZpbHRl
ci5jcHAgKi8sCisJCQkJNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRlci5oICovLAor
CQkJCTcyQUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovLAog
CQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICovLAogCQkJ
CTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKLQkJCQkyQzg1
NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAotCQkJ
CTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAor
CQkJCTcyQUE0NkJCMjcxNDMwQjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLywK
KwkJCQk3MkIxQjc1MTI3MTdFQTJFMDAxQjJFMDggLyogRmlsdGVyRnVuY3Rpb24uY3BwICovLAor
CQkJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAorCQkJ
CTcyOUMwOUVEMjcyMjhBMjEwMEJFODgzOCAvKiBGaWx0ZXJHZW9tZXRyeS5jcHAgKi8sCisJCQkJ
NzJBODNEODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi8sCisJCQkJNzJD
OTBBMzkyNjM2NEExRjAwNzdGMEU4IC8qIEZpbHRlckltYWdlLmNwcCAqLywKKwkJCQk3MkM5MEEz
QTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLywKKwkJCQk3MkFBNDZCNDI3MTQy
Q0VCMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTQ5RUNFQjY2MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8sCisJCQkJNzJBQTQ2QkQyNzE0MzBC
MTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggKi8sCisJCQkJNzJBQTQ2QkMyNzE0
MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdC5jcHAgKi8sCisJCQkJNzI5NzhENDMyNkZFOURF
NzAwRkQyQzU2IC8qIEZpbHRlclJlc3VsdC5oICovLAogCQkJCTg0NzMwRDc0MTI0OEYwQjMwMEQz
QTlDOSAvKiBMaWdodFNvdXJjZS5oICovLAogCQkJCUExRTExNTQ1MTMwMTVDNEUwMDU0QUM4QyAv
KiBQb2ludExpZ2h0U291cmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5Qzkg
LyogUG9pbnRMaWdodFNvdXJjZS5oICovLApAQCAtMjcwNjcsMTAgKzI3MTUyLDExIEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlCMjU1OThFQTBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5j
cHAgKi8sCiAJCQkJQjI1NTk4RUIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLywK
LQkJCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCAqLywKLQkJCQk4
NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi8sCi0JCQkJMDgxRUJGMzgw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovLAotCQkJCTA4MUVCRjM5
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBODNENkEy
NzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkIyNzAzREE5
QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5oICovLAorCQkJCTcyQUE0NkMwMjcxNDMyREYwMDNFODhD
NCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKKwkJCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4
QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovLAorCQkJCTcyQUE0NkJGMjcxNDMyREUwMDNFODhD
NCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzAyMDQsOCArMzAyOTAsOCBAQAogCQkJ
CUNBN0U5QjQ3MjQzNjFEQzUwMDRFODlGNiAvKiBDb250ZW50ZnVsUGFpbnRDaGVja2VyLmggKi8s
CiAJCQkJOTM5MkYxNEYwQUQxODYyMzAwNjkxQkQ0IC8qIENvdW50ZXJOb2RlLmNwcCAqLywKIAkJ
CQk5MzkyRjE0QjBBRDE4NjFCMDA2OTFCRDQgLyogQ291bnRlck5vZGUuaCAqLywKLQkJCQkwRjUz
RkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLywKLQkJCQkwRjUzRkI4MzIx
M0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi8sCisJCQkJNzJBODNENkMyNzAzREMzQTAw
M0M1QUFFIC8qIENTU0ZpbHRlci5jcHAgKi8sCisJCQkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFF
IC8qIENTU0ZpbHRlci5oICovLAogCQkJCUUzQkJDMjQ1MjM4MzU1MUEwMDZFQzM5RiAvKiBDU1NW
YWx1ZUtleS5oICovLAogCQkJCUU0QThEMjE1MjI1NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lv
bi5jcHAgKi8sCiAJCQkJRTRBOEQyMTQyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmgg
Ki8sCkBAIC0zMTYyOSw2ICszMTcxNSw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk3
MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NE
MEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0MDBBN0QyREQgLyogQWJzdHJhY3RET01XaW5kb3cu
aCBpbiBIZWFkZXJzICovLApAQCAtMzIyODcsNiArMzIzNzQsNyBAQAogCQkJCUFBMjFFQ0NEMEFC
RjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8qIENTU0RlZmVycmVk
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDQTI3MTQzOTAxMDAzRTg4QzQgLyog
Q1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQkIwQzVCODE3QkJENjI5MDAzRDM2Nzcg
LyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2NEI0RDYwQ0I0
Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNG
RDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZhY2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAg
LTMyNzk0LDEyICszMjg4MiwxNyBAQAogCQkJCTkzMEU0NDg2MjcwQzM3MjIwMERFN0FCNyAvKiBG
aWxlU3lzdGVtU3luY0FjY2Vzc0hhbmRsZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcxMkJFNDgzMUZFODY1REQwMDIwMzFDQyAvKiBGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzJBQTQ2QzkyNzE0MzdEMTAwM0U4OEM0IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0
LmggaW4gSGVhZGVycyAqLywKLQkJCQkyQzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTJDQUE0QTNBMjRCRTE4QjcwMDlE
RUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzJBQTQ2Q0IyNzE0Mzk5NzAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzJBQTQ2QzYyNzE0MzVGRDAwM0U4OEM0IC8qIEZpbHRlckZ1bmN0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDMzI3MTQzNDQ3MDAzRTg4QzQgLyogRmlsdGVy
R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM4MjcxNDM3MzMwMDNFODhDNCAv
KiBGaWx0ZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2RDQyNzE0RjE4RTAwM0U4
OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVDRUI2RTE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUVDRUI3MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJBQTQ2QzcyNzE0MzY5QTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9w
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRGMEExNTRGMDkwMDBBNDIzNCAvKiBG
aXhlZFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI3RDJERDI1MEZEODI4MDAw
MjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzA2
LDkgKzM1Nzk5LDkgQEAKIAkJCQlCMjIyN0EwMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVTcG90
TGlnaHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwNjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRkVUaWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDkwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAot
CQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVy
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8q
IFNWR0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3QTEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdC
b3guaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdG
b250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTc3Niw2ICszNTg2OSw3IEBACiAJCQkJ
QjIyMjdBOTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlnb25FbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjIyN0E5NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seWxpbmVFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI5NTkxNkYyNzIwRUI4NzAw
MzY5OTkzIC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTVEQ0M1MjgyMjQwN0IyMDAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5
T3duZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdl
VmFsdWUuY3BwCmluZGV4IDhjZjkwOWFlOWU1MzcyNGI5MWRiNGFjZTE0YWUyODU3MWRkOTU1MjYu
LjVlZGZiZjUzZTNhYWZiYTk3MDI2MGRkODMzNDU4YzAwYjZiM2E4OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKQEAgLTExNiwyNiArMTE3LDIzIEBAIFJlZlB0cjxJbWFnZT4g
Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAg
ICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlv
bmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5n
TW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUp
CiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJl
Y3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJh
d0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmls
dGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4
dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7Ci0g
ICAgY3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNzc0Zp
bHRlci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6
OkZpbHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJl
bmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghZmls
dGVyKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBjc3NGaWx0ZXIt
PmFwcGx5KCk7CiAKLSAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwotICAg
IGlmICghb3V0cHV0KQotICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKKyAgICBG
aWx0ZXJHZW9tZXRyeSBnZW9tZXRyeShpbWFnZVJlY3QpOworICAgIGlmIChhdXRvIGZpbHRlcmVk
SW1hZ2UgPSB0ZXh0dXJlLT5maWx0ZXJlZEltYWdlKCpmaWx0ZXIsIFdURk1vdmUoZ2VvbWV0cnkp
KSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcmVkSW1hZ2U7CiAKLSAgICByZXR1cm4gb3V0cHV0LT5j
b3B5SW1hZ2UoKTsKKyAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIH0KIAogdm9pZCBD
U1NGaWx0ZXJJbWFnZVZhbHVlOjpmaWx0ZXJJbWFnZUNoYW5nZWQoY29uc3QgSW50UmVjdCYpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdl
QnVmZmVyLmgKaW5kZXggYTVkZDI4YjczN2JjODM1ZTg2ZWEzZWYyMDJhNzRlNDZhYjIyMjE4MS4u
N2M3ZWI0MmU1M2M2NGRmZGNlYzgyM2JiNGIzZThhOWM5ODZhNDRiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApA
QCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIApAQCAt
MTM4LDYgKzEzOSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAorICAgIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCk7CisgICAgICAgIGlmICgh
YmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAg
Y29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKworICAgICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgICAg
ICBzdGQ6OnRpZShpbWFnZUJ1ZmZlciwgc3RkOjppZ25vcmUpID0gZmlsdGVyLmFwcGx5KHRoaXMs
IHsgeyB9LCBsb2dpY2FsU2l6ZSgpIH0sIGdlb21ldHJ5KTsKKyAgICAgICAgcmV0dXJuIGltYWdl
QnVmZmVyID8gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgpIDogbnVsbHB0cjsKKyAgICB9CisKICAg
ICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggNGMxYzVmOTA4N2E5
M2E3ZDEyNWI4OTM2NDQ4ZjA0ZWZlZDBmNzBjMC4uNjE5MDM5Mzk1YzE4MTQwOWJkNzY0ZWU5MDk1
MjEwNGJhZmQ4ODc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJC
aWRpUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRl
ci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
QEAgLTYyOSw2ICs2MzEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdAogICAgIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVySW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRy
eSkKK3sKKyAgICBhdXRvIFtmaWx0ZXJkSW1hZ2UsIGltYWdlUmVjdF0gPSBmaWx0ZXIuYXBwbHko
c291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZ2VvbWV0cnkpOworICAgIGlmIChmaWx0ZXJk
SW1hZ2UpCisgICAgICAgIGRyYXdJbWFnZUJ1ZmZlcigqZmlsdGVyZEltYWdlLCBpbWFnZVJlY3Qp
OworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QpCiB7CiAgICAgUGF0aCBwYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAwNmI3MTMzOGVm
OGQ5MWFkZTQ2YzkyMDlhNTljNzcwOTUyZGNhOTkwLi40NGRlYmI1ZTZkNDY4MjIyOTY5OGUwODMx
MDExYWUxNDdkZjdjYzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtODUsNiArODUsOCBAQCB0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgVUludDg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKK2NsYXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OwogY2xhc3MgRmxvYXRSb3Vu
ZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOwpAQCAtNDUwLDYgKzQ1Miw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQ
dHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGEwNTkyYjk5Yjg4ZGJl
MDE4ZmE5NWM1YTMwNWQyOTgyYzAyNGY2ZDguLjM2ZTQ1NGNhMDJmYjkzZjRhMjkwYjg2NzU2ZGEw
ZDc5MzNiYjFkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaApAQCAtNDIsNiArNDIsOSBAQCBjbGFzcyBEcmF3aW5nQ29udGV4dDsKIHN0cnVj
dCBJdGVtQnVmZmVySGFuZGxlOwogfQogCitjbGFzcyBGaWx0ZXI7CitjbGFzcyBGaWx0ZXJHZW9t
ZXRyeTsKKwogY2xhc3MgSW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
SW1hZ2VCdWZmZXIsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8SW1hZ2VCdWZmZXI+IHsKIHB1YmxpYzoKICAgICAvLyBXaWxsIHJldHVybiBhIG51
bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCkBAIC0xMDYsNiArMTA5LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpID0gMDsKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFn
ZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0
aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNv
cHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCmluZGV4IDE0M2JhMDNhY2Zm
OWM2YTZmYzU3OTExNTc4Y2MzYjgxOWMyM2JkZGQuLjBhZDI5NzA4OGI1ZjY3ZGMzMmRlYmY4YmE2
YTQ0YmEyNDdlZjVlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0wm
LCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VHcmFwaGljc0NvbnRleHQo
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VHcmFw
aGljc0NvbnRleHQoKSB7IH0KICAgICB2aXJ0dWFsIFZvbGF0aWxpdHlTdGF0ZSBzZXRWb2xhdGls
ZShib29sKSB7IHJldHVybiBWb2xhdGlsaXR5U3RhdGU6OlZhbGlkOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlbGVhc2VCdWZmZXJUb1Bvb2woKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0
ZXJzQ29jb2EubW0KaW5kZXggMmQwMjAxNmJiOGVlNjNlYjdlM2YzYTczZjNjYTY2OWJiMDllMGU1
Mi4uYWZhNDkzYzgzMjUxZTFlZGU4ZTFhYjQ4NjBmZTNhMmJkODQzMTM4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRl
cnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2Nv
YS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBD
U1NGaWx0ZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NjAwOCkuCisvLyBGSVhNRTogU2hvdWxkIHNoYXJlIHRoZXNlIHZhbHVlcyB3aXRoIEZpbHRl
cjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDA4
KS4KIHN0YXRpYyBjb25zdCBkb3VibGUgc2VwaWFGdWxsQ29uc3RhbnRzWzNdWzNdID0gewogICAg
IHsgMC4zOTMsIDAuNzY5LCAwLjE4OSB9LAogICAgIHsgMC4zNDksIDAuNjg2LCAwLjE2OCB9LApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZF
Q29sb3JNYXRyaXhDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zY2ZhOWYx
Nzk2N2I5M2ZiODdlYzg0M2I3OWE2NTRkZjI5NTQ4NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3Jl
SW1hZ2UubW0KQEAgLTAsMCArMSwxMDYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJGRUNvbG9yTWF0cml4LmgiCisKKyNpZiBVU0UoQ09SRV9J
TUFHRSkKKworI2ltcG9ydCAiRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCIKKyNpbXBvcnQgPENvcmVJ
bWFnZS9DSUNvbnRleHQuaD4KKyNpbXBvcnQgPENvcmVJbWFnZS9DSUZpbHRlci5oPgorI2ltcG9y
dCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
RkVDb2xvck1hdHJpeDo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbG9yTWF0cml4VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUK
KyAgICAgICAgfHwgbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURQorICAgICAgICB8fCBtX2NvbG9yTWF0cml4VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOworfQorCitib29sIEZFQ29sb3JNYXRyaXg6OmFwcGx5Q29yZUltYWdlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAg
ICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9
IGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihpbnB1dCkuaW1hZ2UoKTsKKyAgICBpZiAo
IWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gdmFsdWVzID0g
RkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisgICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29sb3JNYXRyaXhUeXBlKSB7CisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIEZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOworICAg
ICAgICBicmVhazsKKyAgICAKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6
CisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29t
cG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgCisgICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBs
ZW1lbnRhdGlvbgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgYXV0
byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9y
TWF0cml4Il07CisgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0
KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOworICAgIAorICAgIHN3aXRjaCAobV9jb2xvck1h
dHJpeFR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4
RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzBdIFk6Y29t
cG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzowXSBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsK
KyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
WDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0XSBaOmNvbXBvbmVudHNbNV0gVzowXSBmb3JL
ZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzZdIFk6Y29tcG9uZW50c1s3XSBaOmNv
bXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9y
TWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAg
IFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAgICAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0
b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAgICAgVzow
XSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDogeworICAgICAgICBbY29sb3JNYXRyaXhG
aWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1swXSAgWTp2YWx1ZXNb
MV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0gIGZvcktleTpAImlucHV0UlZlY3RvciJdOwor
ICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhY
OnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFsdWVzWzddICBXOnZhbHVlc1s4XV0gIGZvcktl
eTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sxMF0gWTp2YWx1ZXNbMTFdIFo6dmFsdWVzWzEy
XSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICBbY29sb3JN
YXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sxNV0gWTp2
YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVlc1sxOF1dIGZvcktleTpAImlucHV0QVZlY3Rv
ciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0gIFo6dmFsdWVzWzE0XSBXOnZhbHVlc1sxOV1d
IGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKKyAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBkb3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJbWFnZT4ob3V0cHV0KS5zZXRJbWFnZShjb2xv
ck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50
VHJhbnNmZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRkVDb21wb25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjA2
MzI1ODIzZDRlNWQ4NTVkYjQ2ZmJiOTgzOTZiZTg5NjI3NTM4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJh
bnNmZXJDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSw3NiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKwor
I2lmIFVTRShDT1JFX0lNQUdFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVDb21w
b25lbnRUcmFuc2Zlcjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdAoreworICAg
IGF1dG8gaXNOdWxsT3JMaW5lYXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICB9OworCisgICAgcmV0dXJuIGlz
TnVsbE9yTGluZWFyKG1fcmVkRnVuY3Rpb24pCisgICAgICAgICYmIGlzTnVsbE9yTGluZWFyKG1f
Z3JlZW5GdW5jdGlvbikKKyAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIobV9ibHVlRnVuY3Rpb24p
CisgICAgICAgICYmIGlzTnVsbE9yTGluZWFyKG1fYWxwaGFGdW5jdGlvbik7Cit9CisKK2Jvb2wg
RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwg
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIHJlc3Qgb2YgRkVDb21wb25lbnRU
cmFuc2ZlciBmdW5jdGlvbnMKKyAgICBBU1NFUlQoc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmco
KSk7CisKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9
IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGRvd25jYXN0PEZpbHRl
ckltYWdlQ29yZUltYWdlPihpbnB1dCkuaW1hZ2UoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdXRvIGZpbHRlciA9IFtDSUZpbHRlciBm
aWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JQb2x5bm9taWFsIl07CisgICAgW2ZpbHRlciBzZXRWYWx1
ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5XTsKKyAgICAKKyAgICBh
dXRvIHNldENvZWZmaWNpZW50cyA9IFsmXSAoTlNTdHJpbmcgKmtleSwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLnR5cGUg
PT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUikKKyAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmZ1bmN0aW9uLmludGVyY2VwdCBZOmZ1bmN0
aW9uLnNsb3BlIFo6MCBXOjBdIGZvcktleTprZXldOworICAgIH07CisgICAgc2V0Q29lZmZpY2ll
bnRzKEAiaW5wdXRSZWRDb2VmZmljaWVudHMiLCBtX3JlZEZ1bmN0aW9uKTsKKyAgICBzZXRDb2Vm
ZmljaWVudHMoQCJpbnB1dEdyZWVuQ29lZmZpY2llbnRzIiwgbV9ncmVlbkZ1bmN0aW9uKTsKKyAg
ICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEJsdWVDb2VmZmljaWVudHMiLCBtX2JsdWVGdW5jdGlv
bik7CisgICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRBbHBoYUNvZWZmaWNpZW50cyIsIG1fYWxw
aGFGdW5jdGlvbik7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVySW1hZ2VDb3JlSW1hZ2U+KG91
dHB1dCkuc2V0SW1hZ2UoZmlsdGVyLm91dHB1dEltYWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmM4ZGY0ZDU1YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJj
MDQ0YWY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0q
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0q
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0qLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotCi0jaW1w
b3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1PQkpDX0NMQVNTIENJSW1hZ2U7Ci1PQkpD
X0NMQVNTIENJRmlsdGVyOwotT0JKQ19DTEFTUyBDSUNvbnRleHQ7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRkVDb2xvck1hdHJpeDsKLWNsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7
Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3JlYXRlKEZpbHRlckVmZmVjdCYpOwotICAg
IFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29udGV4dCgpOwotICAgIHZvaWQgYXBwbHlF
ZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQo
KSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0
JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJlc3VsdCgpIGZpbmFsOwotICAgIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIFJldGFpblB0
cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIHZvaWQgcmVu
ZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKLSAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmKTsKLSAgICBzdGF0aWMgYm9v
bCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKLSAgICAKLSAgICBSZXRh
aW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmKTsKLSAg
ICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JN
YXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwotICAgIFJldGFpblB0
cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRU
cmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgCi0gICAgUmVmUHRy
PElPU3VyZmFjZUltYWdlQnVmZmVyPiBtX291dHB1dEltYWdlQnVmZmVyOwotICAgIFJldGFpblB0
cjxDSUltYWdlPiBtX291dHB1dEltYWdlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdlMTEzN2IyOWQ3MWMyYjU0NDE1
NzMwNjcyNDAwYjgyNDI4YjM2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMDkgKzAs
MCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLQotI2lmIFVTRShDT1JFX0lN
QUdFKQotCi0jaW1wb3J0ICJGRUNvbG9yTWF0cml4LmgiCi0jaW1wb3J0ICJGRUNvbXBvbmVudFRy
YW5zZmVyLmgiCi0jaW1wb3J0ICJGaWx0ZXIuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdC5oIgot
I2ltcG9ydCAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
LSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgot
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgotI2ltcG9ydCA8
Q29yZUltYWdlL0NJQ29udGV4dC5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+Ci0j
aW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+Ci0jaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpCi17Ci0gICAgaWYgKGNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKGxhc3RFZmZl
Y3QpKQotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZT4oKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmV0YWluUHRyPENJQ29udGV4dD4g
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnNoYXJlZENJQ29udGV4dCgpCi17Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDSUNvbnRleHQ+PiBjaUNvbnRleHQgPSBb
Q0lDb250ZXh0IGNvbnRleHRXaXRoT3B0aW9uczpAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3Bh
Y2U6IGJyaWRnZV9pZF9jYXN0KGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NH
Q29sb3JTcGFjZVNSR0IpKSkuZ2V0KCkgfV07Ci0gICAgcmV0dXJuIGNpQ29udGV4dDsKLX0KLQot
c3RhdGljIGJvb2wgaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGNvbnN0
IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCkKLXsKLSAgICBhdXRvIGlzTnVsbE9yTGluZWFy
ID0gW10gKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAg
ICAgIHJldHVybiBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktO
T1dOCi0gICAgICAgICAgICB8fCBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJf
VFlQRV9MSU5FQVI7Ci0gICAgfTsKLSAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXIoZWZmZWN0LnJl
ZEZ1bmN0aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpCi0g
ICAgICAgICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5ibHVlRnVuY3Rpb24oKSkgJiYgaXNOdWxs
T3JMaW5lYXIoZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVj
dCYgZWZmZWN0KQotewotICAgIC8vIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUg
b25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVj
dENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBo
aWM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OiB7Ci0gICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVD
b2xvck1hdHJpeD4oZWZmZWN0KS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRV
UkFURToKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpc051bGxPckxp
bmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zl
cj4oZWZmZWN0KSk7Ci0KLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRp
ZmZ1c2VMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50
TWFwOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
R2F1c3NpYW5CbHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5Ogot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OlRpbGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAg
ICBtX291dHB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycyhsYXN0RWZmZWN0KTsKLSAgICBpZiAo
IW1fb3V0cHV0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICByZW5kZXJUb0ltYWdlQnVmZmVy
KGxhc3RFZmZlY3QpOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0g
ICAgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4gaW5wdXRJbWFnZXM7Ci0gICAgCi0gICAgZm9y
IChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGF1dG8gaW5wdXRJ
bWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMoKmluKTsKLSAgICAgICAgaWYgKCFpbnB1dEltYWdlKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChp
bnB1dEltYWdlKTsKLSAgICB9Ci0gICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7Ci0gICAgCi0gICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1w
dHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgc3dp
dGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNl
R3JhcGhpYyhkb3duY2FzdDxTb3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29s
b3JNYXRyaXgoZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAgICAg
cmV0dXJuIGltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihkb3duY2FzdDxGRUNvbXBvbmVudFRy
YW5zZmVyPihlZmZlY3QpLCBpbnB1dEltYWdlcyk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRob3NlIGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28gdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJu
cyBhIHZhbGlkIENJSW1hZ2UKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkRpZmZ1c2VMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2Vt
ZW50TWFwOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6R2F1c3NpYW5CbHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlRpbGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmV0
YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNv
dXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYgZWZmZWN0KQotewotICAgIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghc291
cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChpczxJT1N1
cmZhY2VJbWFnZUJ1ZmZlcj4oKnNvdXJjZUltYWdlKSkKLSAgICAgICAgcmV0dXJuIFtDSUltYWdl
IGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKnNvdXJj
ZUltYWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKLSAgICAKLSAgICByZXR1cm4gW0NJSW1hZ2Ug
aW1hZ2VXaXRoQ0dJbWFnZTpzb3VyY2VJbWFnZS0+Y29weU5hdGl2ZUltYWdlKCktPnBsYXRmb3Jt
SW1hZ2UoKS5nZXQoKV07Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgm
IGVmZmVjdCwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQot
ewotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0KDApOwotCi0gICAgYXV0byB2
YWx1ZXMgPSBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGVmZmVjdC52YWx1ZXMoKSk7
Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLSAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC50eXBl
KCkpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICAgICAgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVl
c1swXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29t
cG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6IC8vIEZJWE1FOiBBZGQgTHVtaW5hbmNlIHRv
IEFscGhhIEltcGxlbWVudGF0aW9uCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAg
ICAKLSAgICBhdXRvICpjb2xvck1hdHJpeEZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIkNJQ29sb3JNYXRyaXgiXTsKLSAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6aW5w
dXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAgc3dpdGNo
IChlZmZlY3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1sw
XSBZOmNvbXBvbmVudHNbMV0gWjpjb21wb25lbnRzWzJdIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVj
dG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6Y29tcG9uZW50c1szXSBZOmNvbXBvbmVudHNbNF0gWjpjb21wb25lbnRzWzVdIFc6
MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1s2XSBZOmNvbXBvbmVudHNb
N10gWjpjb21wb25lbnRzWzhdIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAg
IFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAg
ICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MV0gZm9yS2V5OkAiaW5w
dXRBVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0
b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAg
ICAgIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgW2NvbG9y
TWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6
dmFsdWVzWzFdICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNbM11dICBmb3JLZXk6QCJpbnB1dFJWZWN0
b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDp2YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBaOnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1d
ICBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZh
bHVlc1sxMl0gVzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKLSAgICAgICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNb
MTVdIFk6dmFsdWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1
dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVzWzldICBaOnZhbHVlc1sxNF0gVzp2YWx1
ZXNbMTldXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotICAgIHJldHVybiBjb2xvck1hdHJpeEZpbHRlci5vdXRwdXRJbWFnZTsKLX0KLQotUmV0
YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZF
Q29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0LCBWZWN0
b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYgaW5wdXRJbWFnZXMpCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGUgcmVzdCBvZiBGRUNvbXBvbmVudFRyYW5zZmVyIGZ1bmN0aW9ucwotICAgIEFT
U0VSVChpc051bGxPckxpbmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oZWZmZWN0KSk7Ci0K
LSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLSAgICBhdXRvIGZpbHRl
ciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JQb2x5bm9taWFsIl07Ci0gICAg
Ci0gICAgW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dElt
YWdlS2V5XTsKLSAgICAKLSAgICBhdXRvIHNldENvZWZmaWNpZW50cyA9IFsmXSAoTlNTdHJpbmcg
KmtleSwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsKLSAgICAg
ICAgaWYgKGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUikK
LSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmZ1bmN0
aW9uLmludGVyY2VwdCBZOmZ1bmN0aW9uLnNsb3BlIFo6MCBXOjBdIGZvcktleTprZXldOwotICAg
IH07Ci0gICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRSZWRDb2VmZmljaWVudHMiLCBlZmZlY3Qu
cmVkRnVuY3Rpb24oKSk7Ci0gICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRHcmVlbkNvZWZmaWNp
ZW50cyIsIGVmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlu
cHV0Qmx1ZUNvZWZmaWNpZW50cyIsIGVmZmVjdC5ibHVlRnVuY3Rpb24oKSk7Ci0gICAgc2V0Q29l
ZmZpY2llbnRzKEAiaW5wdXRBbHBoYUNvZWZmaWNpZW50cyIsIGVmZmVjdC5hbHBoYUZ1bmN0aW9u
KCkpOwotICAgIAotICAgIHJldHVybiBmaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLWJvb2wgRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRl
ckVmZmVjdCYgZWZmZWN0KQotewotICAgIGlmICghc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmco
ZWZmZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6
IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nKCppbikgfHwgIWNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKCppbikpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1dCgpIGNvbnN0Ci17Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyaW5nICIgPDwgdGhp
cyA8PCAiIHVzaW5nIENvcmVJbWFnZVxuIik7Ci0gICAgcmV0dXJuIG1fb3V0cHV0SW1hZ2VCdWZm
ZXIuZ2V0KCk7Ci19Ci0gICAgCi12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpy
ZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAgICBGbG9h
dFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElP
U3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVy
KCkuZmlsdGVyU2NhbGUoKSwgbGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlQnVmZmVyKSB7Ci0gICAgICAgIGNs
ZWFyUmVzdWx0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbc2hhcmVkQ0lDb250
ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBtX291
dHB1dEltYWdlQnVmZmVyLT5zdXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdChsYXN0
RWZmZWN0KSBjb2xvclNwYWNlOmxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLnBsYXRmb3Jt
Q29sb3JTcGFjZSgpXTsKLX0KLSAgICAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6ZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAot
ewotICAgIEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpOwotICAgIGRlc3RTaXplLnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
ZGVzdFNpemUpOwotICAgIHJldHVybiBkZXN0UmVjdDsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZTo6Y2xlYXJSZXN1bHQoKQotewotICAgIG1fb3V0cHV0SW1hZ2VCdWZm
ZXIgPSBudWxscHRyOwotICAgIG1fb3V0cHV0SW1hZ2UgPSBudWxscHRyOwotfQotCi1GaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKQot
ICAgIDogRmlsdGVyRWZmZWN0UmVuZGVyZXIoKQotewotfQotICAgIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUltYWdlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTc0YzU4YWI2NmEyODEwNTAzMDZjZjk2NzhiYjc1OGRhOWEyMGQzYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJJbWFnZUNvcmVJbWFnZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAiRmlsdGVy
SW1hZ2UuaCIKKworT0JKQ19DTEFTUyBDSUltYWdlOworT0JKQ19DTEFTUyBDSUNvbnRleHQ7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVySW1hZ2VDb3JlSW1hZ2UgOiBwdWJs
aWMgRmlsdGVySW1hZ2UgeworcHVibGljOgorICAgIHVzaW5nIEZpbHRlckltYWdlOjpGaWx0ZXJJ
bWFnZTsKKworICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2U7IH0KKyAgICB2b2lkIHNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygp
IG92ZXJyaWRlOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpIG92ZXJyaWRlOworCisg
ICAgUmV0YWluUHRyPENJSW1hZ2U+IG1faW1hZ2U7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUltYWdlKQorICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJJbWFnZSYgcmVzdWx0KSB7IHJl
dHVybiByZXN1bHQucmVuZGVyaW5nTW9kZSgpID09IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBV
U0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43MTlmZTA1ODhmZjA1NTRlOWIyMTIyYzhjNjFlNTYzMzY2NGM3MTQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckltYWdlQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oIgor
CisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIK
KyNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KKyNpbXBvcnQgPENvcmVJbWFnZS9Db3Jl
SW1hZ2UuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1R5cGVDYXN0c0NvY29hLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJl
dGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29udGV4dCgpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJldGFpblB0cjxDSUNvbnRleHQ+PiBjaUNvbnRleHQgPSBbQ0lDb250ZXh0IGNv
bnRleHRXaXRoT3B0aW9uczpAeyBrQ0lDb250ZXh0V29ya2luZ0NvbG9yU3BhY2U6IGJyaWRnZV9p
ZF9jYXN0KGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNS
R0IpKSkuZ2V0KCkgfV07CisgICAgcmV0dXJuIGNpQ29udGV4dDsKK30KKwordm9pZCBGaWx0ZXJJ
bWFnZUNvcmVJbWFnZTo6c2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYgaW1hZ2UpCit7Cisg
ICAgQVNTRVJUKGltYWdlKTsKKyAgICBtX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7Cit9CisKK1Jl
ZlB0cjxJbWFnZUJ1ZmZlcj4mIEZpbHRlckltYWdlQ29yZUltYWdlOjppbWFnZUJ1ZmZlcklmRXhp
c3RzKCkKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsKK30KKworSW1hZ2VCdWZmZXIqIEZp
bHRlckltYWdlQ29yZUltYWdlOjppbWFnZUJ1ZmZlcigpCit7CisgICAgaWYgKG1faW1hZ2VCdWZm
ZXIpCisgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworCisgICAgbV9pbWFnZUJ1
ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUobV9sb2dpY2FsU2l6ZSwgbV9yZXNv
bHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAo
IW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBkZXN0
UmVjdCA9IEZsb2F0UmVjdCB7IEZsb2F0UG9pbnQoKSwgbV9sb2dpY2FsU2l6ZSB9OworICAgIFtz
aGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1faW1hZ2UuZ2V0KCkgdG9JT1N1cmZhY2U6
IGRvd25jYXN0PElPU3VyZmFjZUltYWdlQnVmZmVyPigqbV9pbWFnZUJ1ZmZlcikuc3VyZmFjZSgp
LnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QgY29sb3JTcGFjZTptX2NvbG9yU3BhY2UucGxhdGZv
cm1Db2xvclNwYWNlKCldOworICAgIAorICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9T
b3VyY2VHcmFwaGljQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjA5ZDZl
YWQxYmYyNTQ4ODViYjUzZTcyNjhlODBhYjMzYjZiZDFjMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29y
ZUltYWdlLm1tCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCisKKyNpZiBVU0UoQ09SRV9J
TUFHRSkKKworI2ltcG9ydCAiRmlsdGVySW1hZ2UuaCIKKyNpbXBvcnQgIkZpbHRlckltYWdlVmVj
dG9yLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBTb3VyY2VHcmFwaGljOjphcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFnZSYg
b3VwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRv
JiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2U7CisgICAgaWYgKGlzPElPU3VyZmFj
ZUltYWdlQnVmZmVyPigqaW5wdXRJbWFnZSkpCisgICAgICAgIGltYWdlID0gW0NJSW1hZ2UgaW1h
Z2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFjZUltYWdlQnVmZmVyPigqaW5wdXRJbWFn
ZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IFtDSUlt
YWdlIGltYWdlV2l0aENHSW1hZ2U6aW5wdXRJbWFnZS0+Y29weU5hdGl2ZUltYWdlKCktPnBsYXRm
b3JtSW1hZ2UoKS5nZXQoKV07CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgZG93bmNhc3Q8RmlsdGVySW1hZ2VDb3JlSW1hZ2U+KG91cHV0KS5zZXRJ
bWFnZShXVEZNb3ZlKGltYWdlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9O
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVC
bGVuZE5FT04uaAppbmRleCAyNjExMGNkZmIwYmI2Y2Y0OTA0NTgzODc3ODdhYzEwZmExNzFjZjE4
Li4xMTgxOWU1NzljZWM5MmE3Y2U3MWY1MDY1YWI2OTgzMDg0MGEwZjExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5F
T04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRl
cnMvRkVCbGVuZE5FT04uaApAQCAtMjUsOCArMjUsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIEZFQmxlbmRORU9OX2gKLSNkZWZpbmUgRkVCbGVuZE5FT05faAorI3ByYWdtYSBv
bmNlCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAKQEAgLTEwNywxNSArMTA2LDE4
IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCitGaWx0ZXJSZXN1bHQqIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShGaWx0
ZXJSZXN1bHRzJiByZXN1bHRzLCBGaWx0ZXJSZXN1bHRWZWN0b3ImIHN0YWNrLCBJbWFnZUJ1ZmZl
ciosIGNvbnN0IEZpbHRlckdlb21ldHJ5JikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAg
ICBhdXRvIGluID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGluMiA9IHN0YWNrLnRha2VM
YXN0KCk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5nZXQoeyAqdGhpcyB9KSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIHJlc3VsdCA9IGZpbHRlcigp
LmNyZWF0ZUZpbHRlclJlc3VsdChhYnNvbHV0ZVBhaW50UmVjdCgpLCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAg
IGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHJlc3VsdC0+cGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50UmVj
dCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpAQCAtMTI5LDcgKzEzMSw3IEBAIHZvaWQgRkVCbGVu
ZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIGlmIChzb3VyY2VQaXhlbEFycmF5TGVu
Z3RoID49IDgpIHsKICAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oc291cmNlUGl4ZWxBcnJheUEt
PmRhdGEoKSwgc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSwgc291cmNlUGl4ZWxBcnJheUxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1
c3Qgb25lIHBpeGVsIHdlIGV4cGFuZCBpdCB0byB0d28uCiAgICAgQVNTRVJUKHNvdXJjZVBpeGVs
QXJyYXlMZW5ndGggPiAwKTsKQEAgLTE0MCw2ICsxNDIsOCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSlbMF07CiAgICAgcGxhdGZv
cm1BcHBseU5FT04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oc291cmNlQkFuZERlc3QpLCA4KTsKICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSlbMF0gPSBzb3VyY2VCQW5kRGVzdFswXTsK
KworICAgIHJldHVybiByZXN1bHQubGVha1JlZigpOwogfQogCiB2b2lkIEZFQmxlbmQ6OnBsYXRm
b3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFy
KiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKQEAgLTIwNSw1
ICsyMDksMyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIq
IHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotCi0jZW5kaWYgLy8gRkVC
bGVuZE5FT05faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvQ1ZVdGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9D
VlV0aWxpdGllcy5tbQppbmRleCA0MDcyNzA0M2ZkMTJkNjJhNGNiZDdkYmI1OWU0MTE2MGEyOGRk
ZjIyLi5hY2Y5NmZkMGQ1NDBhYjg2ZTc3MGQ0NjEzYzE5MGEyMjgzYjcwNWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQpAQCAt
MjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJDVlV0aWxpdGllcy5o
IgogCisjaW1wb3J0ICJDb2xvclNwYWNlQ0cuaCIKICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
Y3BwCmluZGV4IGRmZjQxNDQyNjE5NjdiZmU4ZGUyZGVjOTJjNmY5Mzk4MzJkZTE3ZTguLjM4NWVl
ZTlmNmZiNDgwMWY3YmY5MzE2YTAzYzBiNWUyNzFmNWMzNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0LmNwcApAQCAtMjUxLDYgKzI1MSw4IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVt
SGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpdGVt
LmdldDxEcmF3TmF0aXZlSW1hZ2U+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJu
OgogICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdQYXR0ZXJuPihpdGVtLmdldDxEcmF3UGF0dGVy
bj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oaXRlbS5nZXQ8RHJhd0ZpbHRl
ckltYWdlQnVmZmVyPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxEcmF3UmVjdD4oaXRlbS5nZXQ8RHJhd1JlY3Q+KCkpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVm
ZmVyLmNwcAppbmRleCBjMTM5ZTUwOTQ4NTE4MGI5ZWJkOTAxNzI3MmJlOTZhYTUyMjY3NWZlLi5h
YTJkNTdhZjBkZGM1MTRhYWJmMDIzYzVhNDdmMDlmMWM1MzA4ZjMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtMTI2LDYgKzEyNiw5IEBAIHZvaWQg
SXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdQYXR0ZXJuOgogICAgICAgICBnZXQ8RHJhd1BhdHRlcm4+KCkuYXBwbHkoY29u
dGV4dCk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1h
Z2VCdWZmZXI6CisgICAgICAgIGdldDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAg
ICAgICAgZ2V0PERyYXdSZWN0PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBA
IC0yNTksNiArMjYyLDkgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwUGF0aDoKICAgICAgICAgZ2V0PENsaXBQYXRoPigpLn5DbGlwUGF0aCgpOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVy
OgorICAgICAgICBnZXQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPigpLn5EcmF3RmlsdGVySW1hZ2VC
dWZmZXIoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdQYXRoOgogICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkufkRyYXdGb2N1c1JpbmdQ
YXRoKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTUwMCw2ICs1MDYsOCBAQCBib29sIEl0ZW1IYW5k
bGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBj
b25zdAogICAgICAgICByZXR1cm4gY29weUludG88Q2xpcE91dFRvUGF0aD4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgogICAgICAgICByZXR1cm4gY29w
eUludG88Q2xpcFBhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3RmlsdGVySW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3RmlsdGVy
SW1hZ2VCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
Rm9jdXNSaW5nUGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdGb2N1c1JpbmdQYXRo
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IDI0NGUw
ZTM1YzEyNzU2MjA5NjljNWFiYTU4NjQyMDUxOGFlNGVkNDAuLjBhZTkwNzU4ZGNhMjIwYmIwZGI2
ZGFiOGEyMmZmNjliODM1NTRmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
VHlwZS5jcHAKQEAgLTg4LDYgKzg4LDggQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRl
cyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdOYXRpdmVJbWFnZSk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CiAgICAgICAgIHJldHVybiBzaXplb2Yo
RHJhd1BhdHRlcm4pOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3RmlsdGVySW1hZ2VCdWZmZXIpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdSZWN0OgogICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdSZWN0KTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKQEAgLTIyMiw2ICsyMjQsNyBAQCBib29sIGlzRHJh
d2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VC
dWZmZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlw
aHM6CkBAIC0yOTYsNiArMjk5LDcgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kczoKICAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHM6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5oCmluZGV4IDk5MTk0NThkMjM2NTljZWVjYjc1ODUzODdmMTI4ZWZh
ZjBkNDdhMjUuLjJiMzIwNDQzY2JkYzRlNTYwNjZiNjk0N2UxMGI4ZWJlYTFiNDc2MzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtNTIsNiArNTIsNyBAQCBlbnVt
IGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgQ2xpcFBhdGgsCiAgICAgQmVnaW5DbGlw
VG9EcmF3aW5nQ29tbWFuZHMsCiAgICAgRW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzLAorICAgIERy
YXdGaWx0ZXJJbWFnZUJ1ZmZlciwKICAgICBEcmF3R2x5cGhzLAogICAgIERyYXdJbWFnZUJ1ZmZl
ciwKICAgICBEcmF3TmF0aXZlSW1hZ2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAKaW5kZXggZTcyNmQ5NGYzMDA1MDAyMzEyYmM2NDJiMzAxNWVjYmFlMzE0ODQ4Yy4uYzNhYTY1
MjNkNjZjZTRjNmI1NTkzMzI0MDczYmMxMzEwY2FjYjk0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcApAQCAtNDI1LDYgKzQyNSwzMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0ZW0pCiAgICAg
cmV0dXJuIHRzOwogfQogCitEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OkRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVu
dGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkKKyAgICA6IG1faW1hZ2VJZGVudGlmaWVy
KGltYWdlSWRlbnRpZmllcikKKyAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVj
dCkKKyAgICAsIG1fZmlsdGVyKGZpbHRlcikKKyAgICAsIG1fZ2VvbWV0cnkoZ2VvbWV0cnkpCit7
Cit9CisKK05PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgRHJhd0ZpbHRlckltYWdlQnVmZmVy
OjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpCit7CisgICAg
Y29udGV4dC5kcmF3RmlsdGVySW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIG1fc291cmNlSW1hZ2VS
ZWN0LCBtX2ZpbHRlciwgbV9nZW9tZXRyeSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RmlsdGVySW1hZ2VCdWZmZXImIGl0ZW0p
Cit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZS1pZGVudGlmaWVyIiwgaXRlbS5pbWFnZUlk
ZW50aWZpZXIoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtaW1hZ2UtcmVjdCIsIGl0
ZW0uc291cmNlSW1hZ2VSZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwogdm9pZCBEcmF3UmVj
dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
ZHJhd1JlY3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7CkBAIC0xMDc1LDYgKzExMDAsNyBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUg
dHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHRzIDw8ICJkcmF3LWlt
YWdlLWJ1ZmZlciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTog
dHMgPDwgImRyYXctbmF0aXZlLWltYWdlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1BhdHRlcm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6IHRzIDw8ICJkcmF3LWZpbHRlci1pbWFnZS1idWZmZXIi
OyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogdHMgPDwgImRyYXctcmVjdCI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB0cyA8PCAiZHJhdy1saW5lIjsg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogdHMgPDwgImRyYXct
bGluZXMtZm9yLXRleHQiOyBicmVhazsKQEAgLTEyMDQsNiArMTIzMCw5IEBAIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UGF0dGVybjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1BhdHRlcm4+
KCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcjoKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPigpOwor
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmgKaW5kZXggY2ViZjM2OWJmYTJlZjBmNjdmMTMxZmI4NTIzNmU5YWE4OTdk
NDQ4MC4uYjcyYTdhNGFiYjhiMGQ1ZTRlNmIwMWJjMjg4NDg2ZmRiYjk4NThmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlcklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1UeXBlLmgiCisjaW5jbHVkZSAi
RmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJGbG9hdFJv
dW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CkBAIC0xMTAwLDYgKzExMDIsMzAgQEAgcHJpdmF0ZToKICAgICBJbWFnZVBhaW50aW5nT3B0aW9u
cyBtX29wdGlvbnM7CiB9OwogCitjbGFzcyBEcmF3RmlsdGVySW1hZ2VCdWZmZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJh
d0ZpbHRlckltYWdlQnVmZmVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
Jik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1h
Z2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUlkZW50aWZpZXI7IH0KKyAgICBG
bG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJl
Y3Q7IH0KKworICAgIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmLCBXZWJDb3JlOjpJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpOworCisgICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsgfQorICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsgfQorCitw
cml2YXRlOgorICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBt
X2ltYWdlSWRlbnRpZmllcjsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CisgICAg
UmVmPEZpbHRlcj4gbV9maWx0ZXI7CisgICAgRmlsdGVyR2VvbWV0cnkgbV9nZW9tZXRyeTsKK307
CisKIGNsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lM
YXllcjsKQEAgLTI0NDMsNiArMjQ2OSw3IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6
dmFyaWFudAogICAgICwgQ29uY2F0ZW5hdGVDVE0KICAgICAsIERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIKICAgICAsIERyYXdFbGxpcHNlCisgICAgLCBEcmF3RmlsdGVySW1hZ2VCdWZmZXIKICAg
ICAsIERyYXdGb2N1c1JpbmdQYXRoCiAgICAgLCBEcmF3Rm9jdXNSaW5nUmVjdHMKICAgICAsIERy
YXdHbHlwaHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA0
Nzc5NDIxZjQzZDZjYTkwOTNmYmM1ZjVmMzMyZmY0MDk5YTUzYTYxLi41MDFiYjJmMDE3MTk0ZmY2
YzMwNWYzMjQzNDI2ZDhjYmQwNzc2MzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCkBAIC0xODIsNiArMTgyLDI0IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
CiAgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5
KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisKKyAgICBpZiAo
IXNvdXJjZUltYWdlKSB7CisgICAgICAgIHJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcih7IH0s
IHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgaWYgKCFjYW5EcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlKSkgewor
ICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzb3VyY2VJbWFn
ZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICByZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpOworICAgIHJl
Y29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7Cit9CisKIHZv
aWQgUmVjb3JkZXI6OnNhdmUoKQogewogICAgIHJlY29yZFNhdmUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDA2MDVkNmYyNGJmNDUzMjQ3YTRhOGU4OGZlM2Jk
YzI2MDc3NjA3NDQuLmY5NmJiOGYzMzNiYWMwNDA5ZDMzOTUxOWYxMWFlZGI3NDY0NDMxOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtOTIsNiArOTIsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RmlsdGVy
SW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+LCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0KSA9IDA7CkBAIC0yMjksNiArMjMwLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGZpbmFsOworCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9r
ZVN0eWxlKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlcklt
cGwuY3BwCmluZGV4IGY0NzQzMjRmZDczMWIyYzc5NWZmYzE2ODNlYWZlMThjMTY4ZmI3YTUuLjc4
YzBjNDczYzQzNmE5ODBkYWZlMWI5ZDU4ZWMzYTBhMGUwNDk2M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApAQCAtMjI4LDYgKzIyOCwxMSBAQCB2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllcgogICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVu
dGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rmls
dGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
IGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCit7CisgICAgYXBwZW5k
PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oaW1hZ2VJZGVudGlmaWVyLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlciwgZ2VvbWV0cnkpOworfQorCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIGFwcGVuZDxCZWdpblRyYW5z
cGFyZW5jeUxheWVyPihvcGFjaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXJJbXBsLmgKaW5kZXggYmVkNzFmNjQ4NTFkN2JlMTMwMTk4ZGEyMGQ0OGFhM2RiNmIzOTQx
OS4uMTE2MzBhMWFkZWIxYTkyMzFjMWVlMGZjM2U1YzA3MzRhYWNlMzAyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKQEAgLTkwLDYgKzkwLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJu
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
CisgICAgdm9pZCByZWNvcmREcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgZmluYWw7
CiAgICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAgICAgdm9pZCByZWNv
cmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCBj
ZGVhYTY1ZTY3MDRjZDY3ZmIwYTdhZmU5YWYxOGZiYjYyYzJjZWQ5Li44YjgwMjNjZjM2MmNkNjBh
Njc0NzM4MzJjYmE4OGRmODI4Y2JlNzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAgLTUsNiArNSw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsNjQgKzI2LDMzIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCi0jaW5jbHVkZSAi
RkVCbGVuZE5FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQoRmlsdGVyJiBmaWx0
ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Qmxl
bmQpCi0gICAgLCBtX21vZGUobW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxl
bmRNb2RlIG1vZGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorRkVCbGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IEZpbHRl
ckVmZmVjdChUeXBlOjpGRUJsZW5kKQorICAgICwgbV9tb2RlKG1vZGUpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUpKTsKIH0KIAotYm9vbCBGRUJsZW5k
OjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUJsZW5k
Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBpZiAo
bV9tb2RlID09IG1vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX21vZGUgPSBtb2Rl
OwotICAgIHJldHVybiB0cnVlOworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CisgICAg
cmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSwgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi0jaWYg
IUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJ
bWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4
dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIgfHwg
IWltYWdlQnVmZmVyMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjIt
PmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgp
KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOwotfQotI2VuZGlm
Ci0KLVRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJl
YW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQi
OwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOwogICAgIHRzIDw8ICIgbW9kZT1cIiIgPDwgKG1fbW9kZSA9PSBCbGVuZE1vZGU6Ok5v
cm1hbCA/ICJub3JtYWwiIDogY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyLCBtX21vZGUpKSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4u
MmRiNjViMmQyYThjOWMwMzg1ZDVhMDk5MmNlNTYxM2QyYjQxNGQ5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTMsNiAr
Myw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDMzICsyNCw0OCBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRl
ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2RlKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1vZGUpOworCisgICAgdm9p
ZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfQogCi0gICAg
QmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGJvb2wg
c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUJsZW5kPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJp
dmF0ZToKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFQmxlbmQiOyB9CisgICAgRkVCbGVuZChCbGVuZE1vZGUpOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmlj
KHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFy
cmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1Bp
eGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CisgICAgRmlsdGVySW1hZ2VW
ZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBh
cHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBG
RUJsZW5kKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIEJsZW5kTW9kZSBtX21vZGU7CiB9OwogCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBGRUJsZW5kOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fbW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFQmxlbmQ+PiBGRUJsZW5kOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gbW9kZTsKKyAgICBkZWNv
ZGVyID4+IG1vZGU7CisgICAgaWYgKCFtb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgcmV0dXJuIEZFQmxlbmQ6OmNyZWF0ZSgqbW9kZSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQmxl
bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCAzODA2NWNiOTZjN2I0YjRiMDNmYzZiMGVlZDg1
YWM0YjZjOTY4YTU0Li41NmYwMmU5YzQzMjZiMmFjMGZiNWQ0NjZkMDE4MDkwNDNiMzdmNDgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDMwMyAr
MjQsNjUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4Lmgi
CiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5j
bHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJh
dGUuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZF
Q29sb3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8
ZmxvYXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29sb3JN
YXRyaXgpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVz
KSkKLXsKLX0KLQotUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeChmaWx0ZXIsIHR5cGUs
IFdURk1vdmUodmFsdWVzKSkpOwotfQotCi1ib29sIEZFQ29sb3JNYXRyaXg6OnNldFR5cGUoQ29s
b3JNYXRyaXhUeXBlIHR5cGUpCi17Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBGRUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVz
KQorUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShDb2xvck1hdHJpeFR5
cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKIHsKLSAgICBpZiAobV92YWx1ZXMgPT0g
dmFsdWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV92YWx1ZXMgPSB2YWx1ZXM7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeCh0
eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAotaW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiBy
ZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzKQotewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdy
ZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotICAgIGZsb2F0IGEgPSBhbHBoYTsKLQotICAgIHJl
ZCAgICAgPSB2YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIg
KyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7Ci0gICAgZ3JlZW4gICA9IHZhbHVl
c1sgNV0gKiByICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXMgWzddICogYiArIHZhbHVlc1sgOF0g
KiBhICsgdmFsdWVzWyA5XSAqIDI1NTsKLSAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2
YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNb
MTRdICogMjU1OwotICAgIGFscGhhICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBn
ICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Ci19
Ci0KLWlubGluZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBn
cmVlbiwgZmxvYXQmIGJsdWUsIGNvbnN0IGZsb2F0KiBjb21wb25lbnRzKQorRkVDb2xvck1hdHJp
eDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgY29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8
ZmxvYXQ+JiYgdmFsdWVzKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29sb3JNYXRyaXgp
CisgICAgLCBtX2NvbG9yTWF0cml4VHlwZShjb2xvck1hdHJpeFR5cGUpCisgICAgLCBtX3ZhbHVl
cyhXVEZNb3ZlKHZhbHVlcykpCiB7Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAgICBmbG9hdCBnID0g
Z3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0KLSAgICByZWQgICAgID0gciAqIGNvbXBvbmVu
dHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOwotICAgIGdyZWVu
ICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVu
dHNbNV07Ci0gICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNb
N10gKyBiICogY29tcG9uZW50c1s4XTsKIH0KIAotLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0
aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KLWlubGluZSB2
b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50
cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgYWxwaGEgPSAwLjIxMjUg
KiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7Ci0gICAgcmVkID0gMDsKLSAg
ICBncmVlbiA9IDA7Ci0gICAgYmx1ZSA9IDA7CisgICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyAr
IDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAg
Y29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNb
NF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVdID0gKDAuMDcy
IC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICog
dmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAg
ICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CiB9CiAKLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLXRlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotYm9vbCBl
ZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVm
ZmVyU2l6ZSkKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHBpeGVsQXJy
YXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKLSAgICAKLSAgICBpZiAoZmls
dGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7Ci0gICAgICAgIC8vIHZJbWFn
ZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVl
IGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4Ci0gICAg
ICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFnZSBjb2RlLgotICAgICAg
ICBpZiAodmFsdWVzWzRdICE9IDAgfHwgdmFsdWVzWzldICE9IDAgfHwgdmFsdWVzWzE0XSAhPSAw
IHx8IHZhbHVlc1sxOV0gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7Ci0gICAgdWludDhfdCogZGF0YSA9IHBp
eGVsQXJyYXkuZGF0YSgpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRo
ID0gYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdo
dCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgc3Jj
LmRhdGEgPSBkYXRhOwotICAgIAotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0Lndp
ZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5o
ZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAg
ICBkZXN0LmRhdGEgPSBkYXRhOwotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0
cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAotCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
MV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSks
Ci0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sgOF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAotICAgICAgICB9OwotICAgICAgICB2
SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29y
LCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJp
eFs0ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1swXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCi0gICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1sxXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICAwLAot
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAq
IGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICAwLAotCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBk
aXZpc29yLAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdl
Tm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQg
KiA0XSA9IHsKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29y
KSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSks
Ci0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgIDAsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBmbG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAg
ICBmbG9hdCBzaW5IdWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICBjb21wb25l
bnRzWzBdID0gMC4yMTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOworICAgIGNv
bXBvbmVudHNbMV0gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7Cisg
ICAgY29tcG9uZW50c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjky
ODsKKyAgICBjb21wb25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAq
IDAuMTQzOworICAgIGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2lu
SHVlICogMC4xNDA7CisgICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIg
LSBzaW5IdWUgKiAwLjI4MzsKKyAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAw
LjIxMyAtIHNpbkh1ZSAqIDAuNzg3OworICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1
ZSAqIDAuNzE1ICsgc2luSHVlICogMC43MTU7CisgICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsg
Y29zSHVlICogMC45MjggKyBzaW5IdWUgKiAwLjA3MjsKIH0KLSNlbmRpZgogCi10ZW1wbGF0ZTxD
b2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLXZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1
ZmZlclNpemUpCitib29sIEZFQ29sb3JNYXRyaXg6OmlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYpIGNvbnN0CiB7Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLQotICAgIGlm
IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVl
c1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVu
Z3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlm
IChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywg
Y29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCi0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUp
IHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGZvciAodW5z
aWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxl
bmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBp
eGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4g
PSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9h
dCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAg
ICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0g
ICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAg
ICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVu
dHMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwot
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwot
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0g
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9M
VU1JTkFOQ0VUT0FMUEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNlKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBy
ZXR1cm4gbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE7CiB9CiAKLXZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K0ZpbHRlckltYWdlVmVjdG9yIEZFQ29sb3JNYXRyaXg6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VW
ZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYg
KGluQnVmZmVyKQotICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKLQotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xv
clNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFn
ZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5n
ZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVjdCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5k
YXRhKCk7Ci0gICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXpl
KCk7Ci0KLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVj
dFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBp
eGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
c2V0SXNBbHBoYUltYWdlKHRydWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXN1
bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIEFT
U0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07
CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiBjb2xvck1hdHJpeFR5cGUpCiB7
Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb2xvck1hdHJpeFR5cGUpIHsKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICB0cyA8PCAiVU5LTk9X
TiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMzM5LDExICsxMDIsMTAgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlw
ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXBy
ZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29sb3JNYXRyaXgiOwotICAgIEZpbHRlckVmZmVj
dDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8
ICIgdHlwZT1cIiIgPDwgbV90eXBlIDw8ICJcIiI7CisgICAgdHMgPDwgIiB0eXBlPVwiIiA8PCBt
X2NvbG9yTWF0cml4VHlwZSA8PCAiXCIiOwogICAgIGlmICghbV92YWx1ZXMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIHRzIDw8ICIgdmFsdWVzPVwiIjsKICAgICAgICAgVmVjdG9yPGZsb2F0Pjo6Y29u
c3RfaXRlcmF0b3IgcHRyID0gbV92YWx1ZXMuYmVnaW4oKTsKQEAgLTM1Nyw5ICsxMTksNiBAQCBU
ZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdGlvbgogICAgICAgICB0cyA8PCAiXCIiOwogICAgIH0KICAgICB0
cyA8PCAiXVxuIjsKLSAgICAKLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29w
ZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXgg
MjllNDFhOGFlZDFlNGYwYjUzOTcwM2FjNGRiNTUyNGVmYTRjMTIzZi4uOWE0NDY0NmEzYmI0NDVj
MzE5ZTQ2MzUwNjhkOTljZTdkNGVkNzZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIzLDYgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM4LDYyICszNyw3NyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZFQ29s
b3JNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3Rvcjxm
bG9hdD4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBj
cmVhdGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCi0gICAgQ29sb3JNYXRy
aXhUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldFR5cGUo
Q29sb3JNYXRyaXhUeXBlKTsKKyAgICB2b2lkIHNldENvbG9yTWF0cml4VHlwZShDb2xvck1hdHJp
eFR5cGUgY29sb3JNYXRyaXhUeXBlKSB7IG1fY29sb3JNYXRyaXhUeXBlID0gY29sb3JNYXRyaXhU
eXBlOyB9CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKSB7
IG1fdmFsdWVzID0gdmFsdWVzOyB9CiAKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQotICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxmbG9hdD4mKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7
CisgICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB2YWx1ZXMpOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwotICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25l
bnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFJlZjxGRUNvbG9yTWF0cml4Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJp
dmF0ZToKLSAgICBGRUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9y
PGZsb2F0PiYmKTsKKyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKKworICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlu
cHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4
IjsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyNp
ZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFnZSYgb3V0
cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKKyAgICBDb2xvck1hdHJpeFR5cGUgbV9j
b2xvck1hdHJpeFR5cGU7CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGlu
ZSB2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBG
RUNvbG9yTWF0cml4OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBjb21w
b25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1sxXSA9
ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMl0gPSAoMC4wNzIgLSAw
LjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1
ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFsdWUpOwotICAgIGNv
bXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzZd
ID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s3XSA9ICgwLjcxNSAt
IDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZh
bHVlKTsKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JNYXRyaXhUeXBlOworICAgIGVuY29kZXIgPDwg
bV92YWx1ZXM7CiB9CiAKLWlubGluZSB2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJv
dGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFQ29sb3JNYXRyaXg+PiBGRUNvbG9y
TWF0cml4OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBmbG9hdCBjb3NIdWUgPSBj
b3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBmbG9hdCBzaW5IdWUgPSBzaW4odmFsdWUg
KiBwaUZsb2F0IC8gMTgwKTsKLSAgICBjb21wb25lbnRzWzBdID0gMC4yMTMgKyBjb3NIdWUgKiAw
Ljc4NyAtIHNpbkh1ZSAqIDAuMjEzOwotICAgIGNvbXBvbmVudHNbMV0gPSAwLjcxNSAtIGNvc0h1
ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50c1syXSA9IDAuMDcyIC0g
Y29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKLSAgICBjb21wb25lbnRzWzNdID0gMC4y
MTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwotICAgIGNvbXBvbmVudHNbNF0g
PSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4xNDA7Ci0gICAgY29tcG9uZW50
c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUgKiAwLjI4MzsKLSAgICBjb21w
b25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNpbkh1ZSAqIDAuNzg3OwotICAg
IGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1ICsgc2luSHVlICogMC43MTU7
Ci0gICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICogMC45MjggKyBzaW5IdWUgKiAw
LjA3MjsKLX0KKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yTWF0cml4VHlwZT4gY29sb3JNYXRyaXhU
eXBlOworICAgIGRlY29kZXIgPj4gY29sb3JNYXRyaXhUeXBlOworICAgIGlmICghY29sb3JNYXRy
aXhUeXBlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxWZWN0b3I8ZmxvYXQ+PiB2YWx1ZXM7CisgICAgZGVjb2RlciA+PiB2YWx1ZXM7CisgICAgaWYg
KCF2YWx1ZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKKyAgICByZXR1cm4gRkVD
b2xvck1hdHJpeDo6Y3JlYXRlKCpjb2xvck1hdHJpeFR5cGUsIFdURk1vdmUoKnZhbHVlcykpOwor
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6RkVDb2xvck1hdHJpeCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xvck1hdHJpeFR5cGU+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpDb2xvck1hdHJp
eFR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV04sCisg
ICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsCisgICAgICAgIFdlYkNv
cmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwKKyAgICAgICAgV2ViQ29yZTo6RkVDT0xP
Uk1BVFJJWF9UWVBFX0hVRVJPVEFURSwKKyAgICAgICAgV2ViQ29yZTo6RkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEEKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3
ZjEwY2NmNTc0MDJmOWU2My4uNTg0ZWQ5MGZmODk5ODhiZjk1OWQxNmVlMWU1YjNiZWQ4OWU2YTgz
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTggKzI1LDE4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbXBvbmVudFRy
YW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAgICBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhh
RnVuY3Rpb24pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb25lbnRUcmFu
c2ZlcikKK1JlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYWxwaGFGdW5jdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBv
bmVudFRyYW5zZmVyKHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFs
cGhhRnVuY3Rpb24pKTsKK30KKworRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFu
c2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9u
ZW50VHJhbnNmZXIpCiAgICAgLCBtX3JlZEZ1bmN0aW9uKHJlZEZ1bmN0aW9uKQogICAgICwgbV9n
cmVlbkZ1bmN0aW9uKGdyZWVuRnVuY3Rpb24pCiAgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVu
Y3Rpb24pCkBAIC00MywxMTkgKzQ0LDEwIEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9u
ZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9
CiAKLVJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLAotICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVkRnVuY3Rpb24sIGdyZWVu
RnVuY3Rpb24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwotfQotCi12b2lkIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbXBvbmVu
dFRyYW5zZmVyOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsK
LX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1
cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCi17Ci0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFu
c2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwotICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5z
aXplKCk7Ci0gICAgaWYgKG4gPCAxKQotICAgICAgICByZXR1cm47ICAgICAgICAgICAgCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBk
b3VibGUgYyA9IGkgLyAyNTUuMDsgICAgICAgICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGsg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyAqIChuIC0gMSkpOwotICAgICAgICBkb3VibGUgdjEg
PSB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgZG91YmxlIHYyID0gdGFibGVWYWx1ZXNbc3RkOjpt
aW4oKGsgKyAxKSwgKG4gLSAxKSldOwotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodjEg
KyAoYyAqIChuIC0gMSkgLSBrKSAqICh2MiAtIHYxKSk7Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4
KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOwotICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pih2YWwpOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
Ojpjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigoaSAqIG4p
IC8gMjU1LjApOwotICAgICAgICBrID0gc3RkOjptaW4oaywgbiAtIDEpOwotICAgICAgICBkb3Vi
bGUgdmFsID0gMjU1ICogdGFibGVWYWx1ZXNba107Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAu
MCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOwotICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2Fz
dDx1aW50OF90Pih2YWwpOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
b21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGRvdWJsZSB2YWwgPSB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUm
IHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlv
bikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGRvdWJsZSBleHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24uZXhwb25lbnQ7IC8v
IFJDVlQgZG9lc24ndCBsaWtlIHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxvYXQgdG8gcG93LCBz
byBwcm9tb3RlIHRoaXMgdG8gZG91YmxlCi0gICAgICAgIGRvdWJsZSB2YWwgPSAyNTUuMCAqICh0
cmFuc2ZlckZ1bmN0aW9uLmFtcGxpdHVkZSAqIHBvdygoaSAvIDI1NS4wKSwgZXhwb25lbnQpICsg
dHJhbnNmZXJGdW5jdGlvbi5vZmZzZXQpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0
ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAg
IExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAg
IExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJs
ZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJlY3QgZHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5z
aWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5
Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRl
c3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICBk
YXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAgICAgICAg
ZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1d
OwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9m
ZnNldCArIDJdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtk
YXRhW3BpeGVsT2Zmc2V0ICsgM11dOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFi
bGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBo
YVRhYmxlKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXplKCk7
ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxlW2ld
ID0gYWxwaGFUYWJsZVtpXSA9IGk7Ci0KLSAgICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2b2lkICgq
KShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBU
cmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0gewotICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJs
ZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAgICAgICBjb21wdXRl
SWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkKLSAg
ICAgICAgY29tcHV0ZVRhYnVsYXJUYWJsZSwgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X1RBQkxFCi0gICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9ESVNDUkVURQotICAgICAgICBjb21wdXRlTGluZWFyVGFibGUsICAgICAvLyBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSCi0gICAgICAgIGNvbXB1dGVHYW1tYVRhYmxl
ICAgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQQotICAgIH07Ci0KLSAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVk
RnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5G
dW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVu
Y3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5j
dGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotCi0gICAgY2FsbEVm
ZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVdKHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBj
YWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlvbi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rp
b24pOwotICAgIGNhbGxFZmZlY3RbbV9ibHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2Js
dWVGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFU
YWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUpCkBA
IC0yMDksMTAgKzEwMSw5IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmCiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAg
ICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvbmVudFRyYW5zZmVyIjsKLSAgICBGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8
PCAiXG4iOwogICAgIHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2Nv
cGUodHMsIDIpOwpAQCAtMjIxLDkgKzExMiw2IEBAIFRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VuCiAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAie2JsdWU6ICIgPDwgbV9ibHVlRnVuY3Rpb24gPDwgIn1c
biI7CiAgICAgICAgIHRzIDw8IGluZGVudCA8PCAie2FscGhhOiAiIDw8IG1fYWxwaGFGdW5jdGlv
biA8PCAifV1cbiI7CiAgICAgfQotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50
U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5oCmluZGV4IDJiNTg2ZGVmN2ZiNDJhMzdiMmUxMjNlZGE4NzExOWM0ZWIzNDhhNTEu
LjQ2MzZlOTNiMGEwNDdlZGZjYWRkMDFiYWExNGI0MjEyNjBjNDc1ZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSwzNyArNDgsMzEgQEAgc3RydWN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewogICAgIGZsb2F0IG9mZnNldCB7IDAgfTsKIAogICAg
IFZlY3RvcjxmbG9hdD4gdGFibGVWYWx1ZXM7CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24+IGRl
Y29kZShEZWNvZGVyJik7CiB9OwogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5z
ZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBh
bHBoYUZ1bmMpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFu
c2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9u
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pOwogCi0gICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiByZWRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KLSAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2dyZWVuRnVuY3Rpb247IH0KLSAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGJsdWVG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmx1ZUZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1
bmN0aW9uOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdy
ZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmMpOwotCi0gICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KLQotICAgIHVzaW5nIExvb2t1cFRhYmxlID0g
c3RkOjphcnJheTx1aW50OF90LCAyNTY+OworICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxw
aGFGdW5jdGlvbik7CiAKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29r
dXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMg
dm9pZCBjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlR2FtbWFUYWJsZShMb29r
dXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBGaWx0ZXJJ
bWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRh
YmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9v
a3VwVGFibGUmIGFscGhhVGFibGUpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBib29sIHN1cHBvcnRzQ29y
ZUltYWdlUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseUNvcmVJbWFn
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX3Jl
ZEZ1bmN0aW9uOwogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9ncmVlbkZ1bmN0aW9u
OwpAQCAtODcsOCArODAsMTExIEBAIHByaXZhdGU6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBtX2FscGhhRnVuY3Rpb247CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9p
ZCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IHR5cGU7CisgICAgZW5jb2RlciA8PCBzbG9wZTsKKyAgICBl
bmNvZGVyIDw8IGludGVyY2VwdDsKKyAgICBlbmNvZGVyIDw8IGFtcGxpdHVkZTsKKyAgICBlbmNv
ZGVyIDw8IGV4cG9uZW50OworICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwg
dGFibGVWYWx1ZXM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24+IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb246OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJh
bnNmZXJUeXBlPiB0eXBlOworICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICBpZiAoIXR5cGUpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBz
bG9wZTsKKyAgICBkZWNvZGVyID4+IHNsb3BlOworICAgIGlmICghc2xvcGUpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBpbnRlcmNlcHQ7
CisgICAgZGVjb2RlciA+PiBpbnRlcmNlcHQ7CisgICAgaWYgKCFpbnRlcmNlcHQpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBhbXBsaXR1
ZGU7CisgICAgZGVjb2RlciA+PiBhbXBsaXR1ZGU7CisgICAgaWYgKCFhbXBsaXR1ZGUpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBleHBv
bmVudDsKKyAgICBkZWNvZGVyID4+IGV4cG9uZW50OworICAgIGlmICghZXhwb25lbnQpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvZmZz
ZXQ7CisgICAgZGVjb2RlciA+PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxmbG9hdD4+IHRh
YmxlVmFsdWVzOworICAgIGRlY29kZXIgPj4gdGFibGVWYWx1ZXM7CisgICAgaWYgKCF0YWJsZVZh
bHVlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICByZXR1cm4geyB7
ICp0eXBlLCAqc2xvcGUsICppbnRlcmNlcHQsICphbXBsaXR1ZGUsICpleHBvbmVudCwgKm9mZnNl
dCwgV1RGTW92ZSgqdGFibGVWYWx1ZXMpIH0gfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KK3ZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3JlZEZ1bmN0aW9uOworICAgIGVuY29kZXIgPDwgbV9n
cmVlbkZ1bmN0aW9uOworICAgIGVuY29kZXIgPDwgbV9ibHVlRnVuY3Rpb247CisgICAgZW5jb2Rl
ciA8PCBtX2FscGhhRnVuY3Rpb247Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6
Om9wdGlvbmFsPFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uPiByZWRGdW5jdGlvbjsKKyAgICBkZWNvZGVyID4+IHJlZEZ1bmN0aW9u
OworICAgIGlmICghcmVkRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24+IGdyZWVuRnVuY3Rp
b247CisgICAgZGVjb2RlciA+PiBncmVlbkZ1bmN0aW9uOworICAgIGlmICghZ3JlZW5GdW5jdGlv
bikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gYmx1ZUZ1bmN0aW9uOworICAgIGRlY29kZXIgPj4gYmx1
ZUZ1bmN0aW9uOworICAgIGlmICghYmx1ZUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBh
bHBoYUZ1bmN0aW9uOworICAgIGRlY29kZXIgPj4gYWxwaGFGdW5jdGlvbjsKKyAgICBpZiAoIWFs
cGhhRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCpyZWRGdW5jdGlvbiwgKmdyZWVuRnVuY3Rpb24s
ICpibHVlRnVuY3Rpb24sICphbHBoYUZ1bmN0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXIpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVm
ZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0g
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjsgfQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29tcG9uZW50VHJhbnNmZXJUeXBlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q29tcG9uZW50VHJhbnNm
ZXJUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktO
T1dOLAorICAgICAgICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFks
CisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRSwKKyAgICAg
ICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFLAorICAgICAgICBX
ZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSLAorICAgICAgICBXZWJDb3Jl
OjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKKyAgICA+OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBv
bmVudFRyYW5zZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCA4YjU5ZTY2ZGU5ZmU4ZDYzOTE2Y2Jl
NWNlNmRkNDAzOGZhNGNiMmE4Li4yODVkNGIyYzcyZTU1YWZmNDQwYWUyMWE3YjE3ODUzMmI1YjQx
NzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI0LDE3ICsyNSwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFQ29tcG9zaXRlLmgiCiAKLSNpbmNsdWRlICJGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9O
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVP
cGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvc2l0ZSkKLSAgICAsIG1f
dHlwZSh0eXBlKQorUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZFQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9zaXRlKGNv
bXBvc2l0ZU9wZXJhdG9yLCBrMSwgazIsIGszLCBrNCkpOworfQorCitGRUNvbXBvc2l0ZTo6RkVD
b21wb3NpdGUoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEs
IGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6
RkVDb21wb3NpdGUpCisgICAgLCBtX2NvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9y
KQogICAgICwgbV9rMShrMSkKICAgICAsIG1fazIoazIpCiAgICAgLCBtX2szKGszKQpAQCAtNDIs
MjY0ICs0NywzMCBAQCBGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsbwogewogfQogCi1SZWY8RkVDb21w
b3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9zaXRlKGZpbHRlciwgdHlw
ZSwgazEsIGsyLCBrMywgazQpKTsKLX0KLQotYm9vbCBGRUNvbXBvc2l0ZTo6c2V0T3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlwZSkKK0Zsb2F0UmVjdCBGRUNvbXBvc2l0ZTo6Y2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBGb3Ig
SW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBv
ZgorICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFp
bnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9w
ZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOIHx8IG1fY29tcG9zaXRlT3BlcmF0b3Ig
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUCkKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5LmNs
aXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHNbMV0tPmltYWdlUmVjdCgpLCBwcmltaXRp
dmVTdWJyZWdpb24pOwogCi1ib29sIEZFQ29tcG9zaXRlOjpzZXRLMShmbG9hdCBrMSkKLXsKLSAg
ICBpZiAobV9rMSA9PSBrMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazEgPSBrMTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUg
Y29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAvLyBvcHRp
bWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgaWYgKG1fY29tcG9zaXRlT3BlcmF0b3Ig
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIGdlb21l
dHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogCi1ib29sIEZFQ29t
cG9zaXRlOjpzZXRLMihmbG9hdCBrMikKLXsKLSAgICBpZiAobV9rMiA9PSBrMikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fazIgPSBrMjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJp
bWl0aXZlU3VicmVnaW9uKTsKIH0KIAotYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzMoZmxvYXQgazMp
Ci17Ci0gICAgaWYgKG1fazMgPT0gazMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2sz
ID0gazM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZs
b2F0IGs0KQotewotICAgIGlmIChtX2s0ID09IGs0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9rNCA9IGs0OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZFQ29tcG9zaXRlOjpj
b3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQotewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VW
YWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0KLSAgICAKLXN0YXRpYyB1bnNpZ25lZCBjaGFy
IGNsYW1wQnl0ZShpbnQgYykKK0ZpbHRlckltYWdlVmVjdG9yIEZFQ29tcG9zaXRlOjp0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBjaGFy
IGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwotICAg
IHVuc2lnbmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJldHVybiBidWZm
WyEhKHVjICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10ZW1wbGF0ZSA8
aW50IGIxLCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7
Ci0gICAgICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQot
Ly8gY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBv
ZiBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1w
aW5nCi0vLyBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVy
IG9wdGltaXphdGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50
IGIxLCBpbnQgYjQ+Ci1zdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNV
bmNsYW1wZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlv
biwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZs
b2F0IGs0KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAg
IGlmIChiMSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0g
ICAgICAgIHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5
TGVuZ3RoID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3Vs
dCA9IGsyICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1
bHQgKz0gc2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICBy
ZXN1bHQgKz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAg
ICAgICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAh
SEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNT
b2Z0d2FyZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9u
LCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpCi17Ci0gICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0
ZDo6bWF4KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwotICAgIGZsb2F0IGxv
d2VyTGltaXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6
Om1pbigwLjBmLCBrMykgKyBrNDsKLSAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikg
JiYgKHVwcGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxp
bWl0ID49IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgewotICAgICAgICBpZiAoazQpIHsK
LSAgICAgICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1Bp
eGVsc1VuY2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3Ro
LCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
VW5jbGFtcGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsx
LCBrMiwgazMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhl
bEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChrNCkgewotICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFy
cmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJy
YXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoazEp
Ci0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3Rp
bmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGlu
YXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICB9CisgICAgQVNT
RVJUKHN0YWNrLnNpemUoKSA+PSAyKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpLCBz
dGFjay50YWtlTGFzdCgpIH07CiB9Ci0jZW5kaWYKIAotaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRkVDb21wb3NpdGVPcGVyYXRvciYgY29tcG9zaXRlT3BlcmF0b3IpCiB7
Ci0gICAgaW50IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09
IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2Vs
ZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAg
ICBwbGF0Zm9ybUFyaXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEo
KSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2Fy
ZShzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotI2VuZGlmCi19Ci0KLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfSU46Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAg
ICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhl
IHJlc3VsdCBvZgotICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhl
IGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAg
c2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGht
ZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNv
IHdlIGNhbid0Ci0gICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAg
ICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhl
IHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12
b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0
RWZmZWN0KDEpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklU
SE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0g
ICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LQotICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc291cmNlUGl4ZWxBcnJheSwg
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250
ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7Ci0g
ICAgICAgIC8vIEFwcGxpZXMgb25seSB0byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgotICAgICAg
ICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAg
ICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoYWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlv
blJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qg
c291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxv
Y2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Qg
LSBpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVz
dGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVz
dGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VJbiB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
LCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSksIENvbXBv
c2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUo
KSksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4y
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxT
aXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
Mi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2Fs
U2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSYgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzd2l0Y2ggKGNvbXBvc2l0
ZU9wZXJhdG9yKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgogICAg
ICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMzI4LDE4ICs5OSwxMyBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVh
bSYgRkVDb21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29t
cG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbXBvc2l0ZSI7
Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRh
dGlvbik7Ci0gICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwotICAg
IGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICB0cyA8
PCAiIG9wZXJhdGlvbj1cIiIgPDwgbV9jb21wb3NpdGVPcGVyYXRvciA8PCAiXCIiOworICAgIGlm
IChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMp
CiAgICAgICAgIHRzIDw8ICIgazE9XCIiIDw8IG1fazEgPDwgIlwiIGsyPVwiIiA8PCBtX2syIDw8
ICJcIiBrMz1cIiIgPDwgbV9rMyA8PCAiXCIgazQ9XCIiIDw8IG1fazQgPDwgIlwiIjsKICAgICB0
cyA8PCAiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRz
KTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXgg
N2QwOGUxZjcxMDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uYzNjOTYwZjdjM2ZkZWIx
MzQzYTA2MzE2YjZjYjU5YmZjMzczMTJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDkgQEAKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHsKK2VudW0gRkVDb21wb3NpdGVPcGVyYXRvciB7CiAgICAg
RkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTiAgICA9IDAsIAogICAgIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX09WRVIgICAgICAgPSAxLAogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOICAgICAg
ICAgPSAyLApAQCAtNDEsNTIgKzM5LDk4IEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7
CiAKIGNsYXNzIEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7Ci0KLSAgICBDb21w
b3NpdGVPcGVyYXRpb25UeXBlIG9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQot
ICAgIGJvb2wgc2V0T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUpOwotCi0gICAgZmxv
YXQgazEoKSBjb25zdCB7IHJldHVybiBtX2sxOyB9Ci0gICAgYm9vbCBzZXRLMShmbG9hdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZFQ29tcG9z
aXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKIAot
ICAgIGZsb2F0IGsyKCkgY29uc3QgeyByZXR1cm4gbV9rMjsgfQotICAgIGJvb2wgc2V0SzIoZmxv
YXQpOworICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0b3IoRkVDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRvcikgeyBtX2NvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0
b3I7IH0KKyAgICB2b2lkIHNldEsxKGZsb2F0IGsxKSB7IG1fazEgPSBrMTsgfQorICAgIHZvaWQg
c2V0SzIoZmxvYXQgazIpIHsgbV9rMiA9IGsyOyB9CisgICAgdm9pZCBzZXRLMyhmbG9hdCBrMykg
eyBtX2szID0gazM7IH0KKyAgICB2b2lkIHNldEs0KGZsb2F0IGs0KSB7IG1fazQgPSBrNDsgfQog
Ci0gICAgZmxvYXQgazMoKSBjb25zdCB7IHJldHVybiBtX2szOyB9Ci0gICAgYm9vbCBzZXRLMyhm
bG9hdCk7Ci0KLSAgICBmbG9hdCBrNCgpIGNvbnN0IHsgcmV0dXJuIG1fazQ7IH0KLSAgICBib29s
IHNldEs0KGZsb2F0KTsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11
bHRpcGxpZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgIT0gRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVJJVEhNRVRJQzsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVDb21wb3NpdGU+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBw
cml2YXRlOgotICAgIEZFQ29tcG9zaXRlKEZpbHRlciYsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7Ci0KLSAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9zaXRlIjsgfQorICAgIEZF
Q29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KTsKIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
OworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGht
ZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQg
azQpOworICAgIGJvb2wgYXBwbHlBcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
OworICAgIGJvb2wgYXBwbHlOb25Bcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
OworICAgIAorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIHRlbXBsYXRl
IDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMs
IGZsb2F0IGs0KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxBcnJheUxl
bmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotI2VuZGlmCi0K
LSAgICBDb21wb3NpdGVPcGVyYXRpb25UeXBlIG1fdHlwZTsKKyAgICBGRUNvbXBvc2l0ZU9wZXJh
dG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAgICAgZmxvYXQgbV9rMTsKICAgICBmbG9hdCBtX2sy
OwogICAgIGZsb2F0IG1fazM7CiAgICAgZmxvYXQgbV9rNDsKIH07CiAKK3RlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Cit2b2lkIEZFQ29tcG9zaXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fY29tcG9zaXRlT3BlcmF0b3I7CisgICAgZW5jb2RlciA8
PCBtX2sxOworICAgIGVuY29kZXIgPDwgbV9rMjsKKyAgICBlbmNvZGVyIDw8IG1fazM7CisgICAg
ZW5jb2RlciA8PCBtX2s0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxSZWY8RkVDb21wb3NpdGU+PiBGRUNvbXBvc2l0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGRUNvbXBvc2l0ZU9wZXJhdG9yPiBjb21wb3NpdGVP
cGVyYXRvcjsKKyAgICBkZWNvZGVyID4+IGNvbXBvc2l0ZU9wZXJhdG9yOworICAgIGlmICghY29t
cG9zaXRlT3BlcmF0b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGZsb2F0PiBrMTsKKyAgICBkZWNvZGVyID4+IGsxOworICAgIGlmICghazEpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBr
MjsKKyAgICBkZWNvZGVyID4+IGsyOworICAgIGlmICghazIpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBrMzsKKyAgICBkZWNvZGVyID4+
IGszOworICAgIGlmICghazMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBrNDsKKyAgICBkZWNvZGVyID4+IGs0OworICAgIGlmICghazQp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVDb21wb3NpdGU6
OmNyZWF0ZSgqY29tcG9zaXRlT3BlcmF0b3IsICprMSwgKmsyLCAqazMsICprNCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RkVDb21wb3NpdGVPcGVyYXRvcj4geworICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZFQ29tcG9zaXRlT3BlcmF0
b3IsCisKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTiwKKyAg
ICAgICAgV2ViQ29yZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUiwKKyAgICAgICAgV2ViQ29y
ZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfSU4sCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRF
X09QRVJBVE9SX09VVCwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfQVRP
UCwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SLAorICAgICAgICBX
ZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDLAorICAgICAgICBXZWJDb3Jl
OjpGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSCisgICAgPjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb3Np
dGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCAzYmJlNzgzNTk4ZDcwOTM1YTk1YzZm
MTU2ZWMyOTMzYzBlOTlmMDUwLi5iYTgyNjE5MmRlNTQ2N2I0MTdlOGFmYzRhMWMzZWRiN2U3MTBl
YWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwxOCArMjUsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQ
aXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KLSNpbmNsdWRlIDx3
dGYvV29ya1F1ZXVlLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4
KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRp
dmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBi
b29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorUmVmPEZFQ29u
dm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJu
ZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0
T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVu
aXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVs
TWF0cml4KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2Vy
bmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5p
dExlbmd0aCwgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7Cit9CisKK0ZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQg
ZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29s
IHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6
IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbnZvbHZlTWF0cml4KQogICAgICwgbV9rZXJuZWxTaXpl
KGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKICAgICAsIG1fYmlhcyhiaWFz
KQpAQCAtNDksMzg5ICs1MSwxNSBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4
KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VSVCht
X2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZF
Q29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2Vy
bmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2lu
dCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiBrZXJuZWxNYXRyaXgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252b2x2
ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwg
ZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCi0gICAgICAgIHByZXNlcnZlQWxwaGEsIGtlcm5l
bE1hdHJpeCkpOwotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUoY29u
c3QgSW50U2l6ZSYga2VybmVsU2l6ZSkKLXsKLSAgICBBU1NFUlQoa2VybmVsU2l6ZS53aWR0aCgp
ID4gMCk7Ci0gICAgQVNTRVJUKGtlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKLSAgICBtX2tlcm5l
bFNpemUgPSBrZXJuZWxTaXplOwotfQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5l
bChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWwpCi17Ci0gICAgbV9rZXJuZWxNYXRyaXggPSBr
ZXJuZWw7IAotfQotCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldERpdmlzb3IoZmxvYXQgZGl2
aXNvcikKLXsKLSAgICBBU1NFUlQoZGl2aXNvcik7Ci0gICAgaWYgKG1fZGl2aXNvciA9PSBkaXZp
c29yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9kaXZpc29yID0gZGl2aXNvcjsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKGZsb2F0
IGJpYXMpCi17Ci0gICAgaWYgKG1fYmlhcyA9PSBiaWFzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV9iaWFzID0gYmlhczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRUYXJnZXRPZmZzZXQoY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCkK
LXsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQgPT0gdGFyZ2V0T2Zmc2V0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgbV90YXJnZXRPZmZzZXQgPSB0YXJnZXRPZmZzZXQ7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0RWRnZU1vZGUoRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQotewotICAgIGlmIChtX2VkZ2VNb2RlID09IGVkZ2VNb2RlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5ndGgoY29u
c3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCkKK0Zsb2F0UmVjdCBGRUNvbnZvbHZlTWF0
cml4OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAogewotICAgIEFTU0VSVChrZXJuZWxVbml0TGVuZ3RoLngoKSA+IDApOwotICAg
IEFTU0VSVChrZXJuZWxVbml0TGVuZ3RoLnkoKSA+IDApOwotICAgIGlmIChtX2tlcm5lbFVuaXRM
ZW5ndGggPT0ga2VybmVsVW5pdExlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
a2VybmVsVW5pdExlbmd0aCA9IGtlcm5lbFVuaXRMZW5ndGg7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
OwogfQogCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEoYm9vbCBwcmVz
ZXJ2ZUFscGhhKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVDb252b2x2ZU1hdHJpeDo6dGFrZUlucHV0
cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgaWYgKG1fcHJlc2VydmVB
bHBoYSA9PSBwcmVzZXJ2ZUFscGhhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9wcmVz
ZXJ2ZUFscGhhID0gcHJlc2VydmVBbHBoYTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAg
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252b2x2ZU1hdHJp
eCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToK
LQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgQSAgICAg
ICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgIHwgICAgICAg
ICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAgICB8ICAgfCAg
ICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwg
ICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0g
ICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcwotICAg
Y2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFu
Z2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6
IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0
IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUg
c2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAgICAgICAgLi4u
Ci0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRoZSByZWdpb25z
IGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4MSwgeTEpIHRv
cC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgotICAgICAgTm90
ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgotICAgICAg
ICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkx
IDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAz
Ci0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0gICAgICBSZWdp
b24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24gRDogeDE6IDks
IHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgy
OiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikg
Y29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAgYSBmYXN0IGFs
Z29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQs
IHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUg
b2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2VybmVsIG1hdHJp
eCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkg
dGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2
ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1vbiBhIHRlbXBs
YXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCi0g
ICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgotKi8KLQotc3Rh
dGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFu
bmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKLXsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVy
biBtYXg7Ci0gICAgcmV0dXJuIGNoYW5uZWw7Ci19Ci0KLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVB
bHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVz
dFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVl
cyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4
ZWwrKywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhh
KSk7Ci0KLSAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgewotICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKLSAgICAgICAgKytwaXhlbDsK
LSAgICB9IGVsc2UKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwot
fQotCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3Zlcndy
aXRlIG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0j
cHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2Vu
ZGlmCi0KLS8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFW
YWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVy
aW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQg
Y2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gZWRnZSBtb2RlIGRv
ZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZz
ZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0g
ICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNl
ID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBz
dW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFs
cGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNv
cik7Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMK
LSAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmln
aHQgKyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5
RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50
IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBj
bGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUg
PSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQg
a2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0g
bV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7Ci0gICAg
ICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAg
ICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICB0b3RhbHNb
M10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAg
ICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAg
ICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVs
UGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwot
ICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNl
OwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRp
b25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXks
IHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBh
aW50aW5nRGF0YS5iaWFzKTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKLSAg
ICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVs
UGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQgRkVDb252
b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAm
JiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUp
IHsKLSAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAg
ICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAg
ICAgeCA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAg
ICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkK
LSAgICAgICAgICAgIHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCi0gICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAg
IHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdF
TU9ERV9XUkFQOgotICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50
aW5nRGF0YS53aWR0aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAg
IHdoaWxlICh5IDwgMCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAg
ICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQotLy8gRm9yIG90aGVyIHJlZ2lv
bnMgdGhhbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5
MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0g
eTE7Ci0gICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFgg
PSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBi
ZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFy
Z2V0T2Zmc2V0LnkoKTsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS53aWR0aCAt
IHdpZHRoKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9uZW50
cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAwIDogMSldOwot
Ci0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKLQotICAgIGZvciAoaW50IHkg
PSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4g
MDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2Vy
bmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3Rh
cnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJu
ZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsK
LQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7
Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFs
cGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7Ci0KLSAgICAgICAgICAg
IHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaW50IHBpeGVsSW5k
ZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhl
bFkpOwotICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
cGl4ZWxJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShw
aXhlbEluZGV4ICsgMikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
IXByZXNlcnZlQWxwaGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAg
ICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAg
ICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1
ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJh
eSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAg
ICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJ
bmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsK
LSAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKLSAgICB9Ci19Ci0KLSNpZiBDT01QSUxFUihN
U1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQot
QUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwg
aW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJl
LCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24s
IHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmICht
X3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWlu
dGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNl
Ci0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlw
UmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIC8vIEFsdGhvdWdo
IHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRoZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVu
dGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVyaW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVt
ZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRPdXRl
clBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0g
ICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgy
LCB5Mik7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0
YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7Ci0gICAgaWYgKG1fcHJlc2VydmVB
bHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQo
ZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJh
d2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFy
cmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJT
Y2FsZSgpKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpz
b3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAg
IHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCi0gICAgICAg
IG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkK
LSAgICB9OwotCi0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBj
bGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAg
IGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdo
dCgpOwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAg
ICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAotICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWlu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGludCBp
dGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRS
ZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewotICAgICAgICBpbnQg
c3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50
ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAgICAgICBDb25jdXJy
ZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAg
ICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAgICAgICAgIGludCB5
RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0K
LSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBj
bGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20s
IDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSAr
IDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwotICAgIGlmICht
X3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgIGlm
IChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNp
emUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQotICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJn
ZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXpl
LndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0
LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAg
ICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3Qo
KSB9OwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQpAQCAtNDUzLDEwICs4MSw5IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5
cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbnZvbHZlTWF0cml4IjsKLSAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICB0cyA8PCAiIG9yZGVyPVwiIiA8PCBtX2tlcm5lbFNpemUgPDwgIlwiICIKICAgICAgICA8
PCAia2VybmVsTWF0cml4PVwiIiA8PCBtX2tlcm5lbE1hdHJpeCAgPDwgIlwiICIKICAgICAgICA8
PCAiZGl2aXNvcj1cIiIgPDwgbV9kaXZpc29yIDw8ICJcIiAiCkBAIC00NjUsOSArOTIsNiBAQCBU
ZXh0U3RyZWFtJiBGRUNvbnZvbHZlTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdAogICAgICAgIDw8ICJlZGdlTW9kZT1cIiIgPDwgbV9lZGdl
TW9kZSA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5l
bFVuaXRMZW5ndGggPDwgIlwiICIKICAgICAgICA8PCAicHJlc2VydmVBbHBoYT1cIiIgPDwgbV9w
cmVzZXJ2ZUFscGhhIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBp
bmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFiODk1YTZlMWU1MDA1NGUxM2RiYS4u
MTMzOWJhN2E2YjZmZWQxMWJlMTRhOGJjMjI2MGE5ZDE2OWQzZmU5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6
aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI1LDYgQEAK
IAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM4LDcwICszOCwzMCBAQCBlbnVtIEVkZ2VNb2RlVHlwZSB7CiAKIGNsYXNz
IEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBJbnRTaXpl
JiwKLSAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5
cGUsIGNvbnN0IEZsb2F0UG9pbnQmLAotICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZs
b2F0PiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4g
Y3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJp
YXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxv
YXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9rZXJuZWxTaXplOyB9Ci0gICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0
IEludFNpemUmKTsKKyAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3QgSW50U2l6ZSYga2VybmVs
U2l6ZSkgeyBtX2tlcm5lbFNpemUgPSBrZXJuZWxTaXplOyB9CisgICAgdm9pZCBzZXREaXZpc29y
KGZsb2F0IGRpdmlzb3IpIHsgbV9kaXZpc29yID0gZGl2aXNvcjsgfQorICAgIHZvaWQgc2V0Qmlh
cyhmbG9hdCBiaWFzKSB7IG1fYmlhcyA9IGJpYXM7IH0KKyAgICB2b2lkIHNldFRhcmdldE9mZnNl
dChjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0KSB7IG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0
T2Zmc2V0OyB9CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpIHsg
bV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyB9CisgICAgdm9pZCBzZXRLZXJuZWxVbml0TGVuZ3RoKGNv
bnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgpIHsgbV9rZXJuZWxVbml0TGVuZ3RoID0g
a2VybmVsVW5pdExlbmd0aDsgfQorICAgIHZvaWQgc2V0UHJlc2VydmVBbHBoYShib29sIHByZXNl
cnZlQWxwaGEpIHsgbV9wcmVzZXJ2ZUFscGhhID0gcHJlc2VydmVBbHBoYTsgfQorICAgIHZvaWQg
c2V0S2VybmVsTWF0cml4KGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkgeyBtX2tl
cm5lbE1hdHJpeCA9IGtlcm5lbE1hdHJpeDsgfQogCi0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxNYXRyaXg7IH0KLSAgICB2b2lkIHNldEtl
cm5lbChjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICBmbG9hdCBkaXZpc29yKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXZpc29yOyB9Ci0gICAgYm9vbCBzZXREaXZpc29yKGZsb2F0KTsKLQotICAg
IGZsb2F0IGJpYXMoKSBjb25zdCB7IHJldHVybiBtX2JpYXM7IH0KLSAgICBib29sIHNldEJpYXMo
ZmxvYXQpOwotCi0gICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV90
YXJnZXRPZmZzZXQ7IH0KLSAgICBib29sIHNldFRhcmdldE9mZnNldChjb25zdCBJbnRQb2ludCYp
OwotCi0gICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9k
ZTsgfQotICAgIGJvb2wgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKLQotICAgIEZsb2F0UG9p
bnQga2VybmVsVW5pdExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsg
fQotICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAg
ICBib29sIHByZXNlcnZlQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlQWxwaGE7IH0K
LSAgICBib29sIHNldFByZXNlcnZlQWxwaGEoYm9vbCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUNvbnZvbHZlTWF0cml4Pj4gZGVjb2Rl
KERlY29kZXImKTsKIAogcHJpdmF0ZToKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNp
emUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50
JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpOwogCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0Owot
ICAgICAgICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsK
LSAgICB9OwotCi0gICAgRkVDb252b2x2ZU1hdHJpeChGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwg
ZmxvYXQsIGZsb2F0LAotICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUs
IGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7Ci0KLSAgICBj
b25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29udm9sdmVN
YXRyaXgiOyB9Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dCBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdl
VmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlT
dGFydCwgaW50IHlFbmQpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0
cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1
ZShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVz
ZXJ2ZUFscGhhVmFsdWVzPgotICAgIHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0
YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFwcGVyIGZ1
bmN0aW9ucwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlF
bmQpOwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
LCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gUGFyYWxsZWxpemF0
aW9uIHBhcnRzCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0g
KDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEludFNpemUg
bV9rZXJuZWxTaXplOwogICAgIGZsb2F0IG1fZGl2aXNvcjsKQEAgLTExMyw1ICs3Myw4MCBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxmbG9hdD4gbV9rZXJuZWxNYXRyaXg7CiB9OwogCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRUNvbnZvbHZlTWF0cml4OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fa2VybmVsU2l6ZTsKKyAgICBlbmNv
ZGVyIDw8IG1fZGl2aXNvcjsKKyAgICBlbmNvZGVyIDw8IG1fYmlhczsKKyAgICBlbmNvZGVyIDw8
IG1fdGFyZ2V0T2Zmc2V0OworICAgIGVuY29kZXIgPDwgbV9lZGdlTW9kZTsKKyAgICBlbmNvZGVy
IDw8IG1fa2VybmVsVW5pdExlbmd0aDsKKyAgICBlbmNvZGVyIDw8IG1fcHJlc2VydmVBbHBoYTsK
KyAgICBlbmNvZGVyIDw8IG1fa2VybmVsTWF0cml4OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVDb252b2x2ZU1hdHJpeD4+IEZFQ29udm9sdmVNYXRy
aXg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8SW50U2l6
ZT4ga2VybmVsU2l6ZTsKKyAgICBkZWNvZGVyID4+IGtlcm5lbFNpemU7CisgICAgaWYgKCFrZXJu
ZWxTaXplKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxmbG9hdD4gZGl2aXNvcjsKKyAgICBkZWNvZGVyID4+IGRpdmlzb3I7CisgICAgaWYgKCFkaXZp
c29yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gYmlhczsKKyAgICBkZWNvZGVyID4+IGJpYXM7CisgICAgaWYgKCFiaWFzKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gdGFy
Z2V0T2Zmc2V0OworICAgIGRlY29kZXIgPj4gdGFyZ2V0T2Zmc2V0OworICAgIGlmICghdGFyZ2V0
T2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxFZGdlTW9kZVR5cGU+IGVkZ2VNb2RlOworICAgIGRlY29kZXIgPj4gZWRnZU1vZGU7CisgICAg
aWYgKCFlZGdlTW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRQb2ludD4ga2VybmVsVW5pdExlbmd0aDsKKyAgICBkZWNvZGVyID4+IGtl
cm5lbFVuaXRMZW5ndGg7CisgICAgaWYgKCFrZXJuZWxVbml0TGVuZ3RoKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBwcmVzZXJ2ZUFscGhh
OworICAgIGRlY29kZXIgPj4gcHJlc2VydmVBbHBoYTsKKyAgICBpZiAoIWtlcm5lbFVuaXRMZW5n
dGgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxmbG9hdD4+IGtlcm5lbE1hdHJpeDsKKyAgICBkZWNvZGVyID4+IGtlcm5lbE1hdHJpeDsK
KyAgICBpZiAoIWtlcm5lbE1hdHJpeCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoKmtlcm5lbFNpemUsICpkaXZpc29y
LCAqYmlhcywgKnRhcmdldE9mZnNldCwgKmVkZ2VNb2RlLCAqa2VybmVsVW5pdExlbmd0aCwgKnBy
ZXNlcnZlQWxwaGEsIFdURk1vdmUoKmtlcm5lbE1hdHJpeCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkVkZ2VNb2RlVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgICAgIFdlYkNvcmU6OkVkZ2VNb2RlVHlwZSwKKworICAgICAgICBXZWJDb3JlOjpF
REdFTU9ERV9VTktOT1dOLAorICAgICAgICBXZWJDb3JlOjpFREdFTU9ERV9EVVBMSUNBVEUsCisg
ICAgICAgIFdlYkNvcmU6OkVER0VNT0RFX1dSQVAsCisgICAgICAgIFdlYkNvcmU6OkVER0VNT0RF
X05PTkUKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbnZvbHZlTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmNwcAppbmRleCBlZWIxNzI4ZGIzNWU4YWMzMDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5
Li5hMzlkZGRhZDQ2ZjM5OTFjYTliYjIxYmUxZTIzZmZiZjcwNjBjYWYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNywzNiArMjgsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRl
ciwgRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VD
b25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6RGlmZnVzZUxpZ2h0aW5nKQorUmVmPEZFRGlmZnVzZUxp
Z2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJj
ZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhjb2xvciwg
c3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAKLVJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VM
aWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlm
ZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBzb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9y
LCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJjZSksIFR5cGU6OkZFRGlmZnVzZUxpZ2h0
aW5nKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRl
ciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVu
aXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0K
IAotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQot
Ym9vbCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VD
b25zdGFudCkKLXsKLSAgICBpZiAobV9kaWZmdXNlQ29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9kaWZmdXNlQ29uc3RhbnQgPSBkaWZmdXNl
Q29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIEZFRGlmZnVzZUxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdo
dGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVz
ZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVEaWZmdXNlTGlnaHRp
bmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1cmZhY2VTY2Fs
ZSA8PCAiXCIgIgogICAgICAgIDw8ICJkaWZmdXNlQ29uc3RhbnQ9XCIiIDw8IG1fZGlmZnVzZUNv
bnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2Vy
bmVsVW5pdExlbmd0aFggPDwgIiwgIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhZIDw8ICJcIl1cbiI7
Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5w
dXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAppbmRleCBkZjYxMTRk
MGZiOGUyZjNlMTEyOGI4NDI2MTVlNDc1MTNhMGRkZGMzLi5kOGU1ZmFmYTEzZjYxOWYzOTg5NjRh
YzZiOTNiODM2ZjA0ZTE3ZGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCkBAIC0yLDYgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDIxICsyNiwxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIExpZ2h0U291cmNlOwotCiBjbGFzcyBG
RURpZmZ1c2VMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0
dWFsIH5GRURpZmZ1c2VMaWdodGluZygpOwotCi0gICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KLSAgICBib29sIHNldERpZmZ1c2VD
b25zdGFudChmbG9hdCk7Ci0KLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3Im
LCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYp
OwogCiBwcml2YXRlOgotICAgIEZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9y
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAg
RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0
IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIAorICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURpZmZ1c2VMaWdodGluZykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIyODE0NmQ4YjE2OWJh
MGE3YzMyYjE2YzU2M2ZhMS4uOWIxOWM3NjlkMzYwYjZjNGZmMjliYjBiZmU1MWEzOTZmMWRmNDZm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDEzMiArMjUsNDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
KworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVE
aXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBz
Y2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVudE1hcCkK
LSAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV95Q2hh
bm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3NjYWxlKHNjYWxlKQorUmVm
PEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3Bs
YWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwog
fQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwKLSAgICBD
aGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKGZpbHRlciwgeENoYW5uZWxT
ZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKLX0KLQotYm9vbCBGRURpc3BsYWNl
bWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhD
aGFubmVsU2VsZWN0b3IpCi17Ci0gICAgaWYgKG1feENoYW5uZWxTZWxlY3RvciA9PSB4Q2hhbm5l
bFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV94Q2hhbm5lbFNlbGVjdG9y
ID0geENoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRURpc3Bs
YWNlbWVudE1hcDo6c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBl
IHlDaGFubmVsU2VsZWN0b3IpCi17Ci0gICAgaWYgKG1feUNoYW5uZWxTZWxlY3RvciA9PSB5Q2hh
bm5lbFNlbGVjdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV95Q2hhbm5lbFNlbGVj
dG9yID0geUNoYW5uZWxTZWxlY3RvcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRURp
c3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCitGRURpc3BsYWNlbWVudE1hcDo6
RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBD
aGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorICAgIDog
RmlsdGVyRWZmZWN0KFR5cGU6OkZFRGlzcGxhY2VtZW50TWFwKQorICAgICwgbV94Q2hhbm5lbFNl
bGVjdG9yKHhDaGFubmVsU2VsZWN0b3IpCisgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5u
ZWxTZWxlY3RvcikKKyAgICAsIG1fc2NhbGUoc2NhbGUpCiB7Ci0gICAgaWYgKG1fc2NhbGUgPT0g
c2NhbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikKK2NvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgRkVEaXNwbGFjZW1lbnRNYXA6OmltYWdlQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50
ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNv
dXJjZSBpbWFnZQogICAgIC8vIGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2Ug
aW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBj
dXJyZW50IGNvbG9yIHNwYWNlLgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNv
bG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2Uu
Ci0gICAgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5y
ZXN1bHRDb2xvclNwYWNlKCkpOwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCBpbmRleCkKLXsK
LSAgICAvLyBEbyBub3QgdHJhbnNmb3JtIHRoZSBmaXJzdCBwcmltaXRpdmUgaW5wdXQsIGFzIHBl
ciB0aGUgc3BlYy4KLSAgICBpZiAoaW5kZXgpCi0gICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMik7CisgICAgcmV0dXJuIGlucHV0c1swXS0+Y29sb3JTcGFjZSgpOwogfQogCi1zdGF0
aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVk
IHksIHVuc2lnbmVkIHJvd0J5dGVzKQorRmxvYXRSZWN0IEZFRGlzcGxhY2VtZW50TWFwOjpjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dAogewotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4
ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xp
cFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRURp
c3BsYWNlbWVudE1hcDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0
CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVj
dG9yICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAh
PSBDSEFOTkVMX1VOS05PV04pOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVs
IHZhbHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBs
aWVkIGNvbG9yIHZhbHVlcy4KLSAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKLSAgICAKLSAgICBpZiAoIWlucHV0
SW1hZ2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoaW5wdXRJbWFnZS0+bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsK
LQotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Ci0gICAgZmxvYXQg
c2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVG
b3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNl
dFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkg
PSAwLjUgLSBzY2FsZS5oZWlnaHQoKSAqIDAuNTsKLSAgICAKLSAgICBpbnQgZGlzcGxhY2VtZW50
Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZ
ID0geUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5dGVzID0gcGFpbnRTaXplLndpZHRo
KCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUuaGVpZ2h0KCk7ICsr
eSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5dGVzOwotCi0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkgewotICAgICAg
ICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50Pihz
Y2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXgg
KyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAgICAgICAgICAgIGlu
dCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1l
bnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsg
c2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5hdGlvblBpeGVs
UHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5k
YXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBz
cmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXpl
LmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAwOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAq
ZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJ
bWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsK
LSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgIHJl
dHVybiB7IHN0YWNrLnRha2VMYXN0KCksIHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxl
Y3RvclR5cGUmIHR5cGUpCkBAIC0xNzQsMTcgKzg5LDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBl
KQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZURpc3BsYWNlbWVudE1hcCI7Ci0gICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
CiAgICAgdHMgPDwgIiBzY2FsZT1cIiIgPDwgbV9zY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJ4
Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3hDaGFubmVsU2VsZWN0b3IgPDwgIlwiICIKICAgICAg
ICA8PCAieUNoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIl1c
biI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmlu
ZGV4IGRkNzMyYTg4MTA3M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIuLmNmMDQ2ZWViMDA5
Njg0YjM1ZDNkZmYwNTcyMTlhYzhiMDkwZGJjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIs
OCArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNywzOCArMzYsODEgQEAgZW51bSBDaGFubmVsU2VsZWN0
b3JUeXBlIHsKIAogY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmls
dGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKTsKIAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvcjsgfQotICAgIGJvb2wgc2V0WENo
YW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKKyAgICB2b2lkIHNldFhD
aGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9y
KSB7IG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7IH0KKyAgICB2b2lkIHNl
dFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yKSB7IG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7IH0KKyAgICB2b2lk
IHNldFNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2FsZTsgfQogCi0gICAgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5l
bFNlbGVjdG9yOyB9Ci0gICAgYm9vbCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxT
ZWxlY3RvclR5cGUpOwotCi0gICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxl
OyB9Ci0gICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7Ci0KLSAgICB2b2lkIHNldFJlc3VsdENvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkgb3ZlcnJp
ZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJl
ZjxGRURpc3BsYWNlbWVudE1hcD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAg
RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNl
bGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAg
ICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Is
IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOwogCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURpc3Bs
YWNlbWVudE1hcCI7IH0KKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
eENoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBp
bWFnZUNvbG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUg
eyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkp
OyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4Q2hhbm5lbEluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQotICAgIGludCB5Q2hh
bm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAg
IEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBj
b25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0
cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IENoYW5uZWxTZWxlY3RvclR5cGUgbV94Q2hhbm5lbFNlbGVjdG9yOwogICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgbV95Q2hhbm5lbFNlbGVjdG9yOwogICAgIGZsb2F0IG1fc2NhbGU7CiB9OwogCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3hDaGFubmVsU2VsZWN0
b3I7CisgICAgZW5jb2RlciA8PCBtX3lDaGFubmVsU2VsZWN0b3I7CisgICAgZW5jb2RlciA8PCBt
X3NjYWxlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8
RkVEaXNwbGFjZW1lbnRNYXA+PiBGRURpc3BsYWNlbWVudE1hcDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDaGFubmVsU2VsZWN0b3JUeXBlPiB4Q2hhbm5l
bFNlbGVjdG9yOworICAgIGRlY29kZXIgPj4geENoYW5uZWxTZWxlY3RvcjsKKyAgICBpZiAoIXhD
aGFubmVsU2VsZWN0b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPENoYW5uZWxTZWxlY3RvclR5cGU+IHlDaGFubmVsU2VsZWN0b3I7CisgICAgZGVj
b2RlciA+PiB5Q2hhbm5lbFNlbGVjdG9yOworICAgIGlmICgheUNoYW5uZWxTZWxlY3RvcikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHNj
YWxlOworICAgIGRlY29kZXIgPj4gc2NhbGU7CisgICAgaWYgKCFzY2FsZSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KCp4Q2hhbm5lbFNlbGVjdG9yLCAqeUNoYW5uZWxTZWxlY3RvciwgKnNjYWxlKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDaGFubmVsU2VsZWN0b3JUeXBlPiB7CisgICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q2hhbm5lbFNlbGVjdG9yVHlw
ZSwKKworICAgICAgICBXZWJDb3JlOjpDSEFOTkVMX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6
OkNIQU5ORUxfUiwKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9HLAorICAgICAgICBXZWJDb3Jl
OjpDSEFOTkVMX0IsCisgICAgICAgIFdlYkNvcmU6OkNIQU5ORUxfQQorICAgID47Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNU
KEZFRGlzcGxhY2VtZW50TWFwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDVjZTdiZTNhNDcxYjQ3
YjhkZDU0MjZkOTY1YmJmZTc4OWY2YmJkZDguLmViYjhhM2I2ZGM1ZWYwYTEyN2ViN2QwMDE2M2Q0
OGZhNDZiZTI4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTkgKzIzLDIzIEBACiAKICNpbmNs
dWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVk
ZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1GRURy
b3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQg
c3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0
IHNoYWRvd09wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpEcm9wU2hh
ZG93KQotICAgICwgbV9zdGRYKHN0ZFgpCi0gICAgLCBtX3N0ZFkoc3RkWSkKKworUmVmPEZFRHJv
cFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQg
c3RkRGV2aWF0aW9uWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29s
b3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVE
cm9wU2hhZG93KHN0ZERldmlhdGlvblgsIHN0ZERldmlhdGlvblksIGR4LCBkeSwgc2hhZG93Q29s
b3IsIHNoYWRvd09wYWNpdHkpKTsKK30KKworRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coZmxv
YXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCisgICAgOiBG
aWx0ZXJFZmZlY3QoVHlwZTo6RkVEcm9wU2hhZG93KQorICAgICwgbV9zdGREZXZpYXRpb25YKHN0
ZERldmlhdGlvblgpCisgICAgLCBtX3N0ZERldmlhdGlvblkoc3RkRGV2aWF0aW9uWSkKICAgICAs
IG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogICAgICwgbV9zaGFkb3dDb2xvcihzaGFkb3dDb2xv
cikKQEAgLTQyLDEwMCArNDcsNDYgQEAgRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG8KIHsKIH0KIAot
UmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZs
b2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorSW50T3V0c2V0cyBGRURyb3BTaGFkb3c6
OmNhbGN1bGF0ZU91dHNldHMoKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
RHJvcFNoYWRvdyhmaWx0ZXIsIHN0ZFgsIHN0ZFksIGR4LCBkeSwgc2hhZG93Q29sb3IsIHNoYWRv
d09wYWNpdHkpKTsKLX0KLQotdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkKLXsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotCi0gICAg
RmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFp
bnRSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRl
UGFpbnRSZWN0KTsKLSAgICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50
UmVjdC51bml0ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVjdCk7Ci0KLSAgICBJbnRTaXplIGtlcm5l
bFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9z
dGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFu
ZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0
aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0
aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNp
emUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAg
IGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3Qp
KTsKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0
c2V0U2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25ZIH0pOworICAgIHJldHVy
biB7CisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkp
LAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAor
ICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKKyAg
ICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQorICAgIH07
CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRS
ZWN0IEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byBpbWFnZVJlY3Qg
PSBpbnB1dHNbMF0tPmltYWdlUmVjdCgpOwogCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKKyAgICBpbWFnZVJlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlSW1hZ2VTaXplKHsg
bV9keCwgbV9keSB9KSk7CiAgICAgCi0gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmls
dGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGJs
dXJSYWRpdXMuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBvZmZz
ZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KTsKLQot
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRo
T2Zmc2V0KGRyYXdpbmdSZWdpb24pOwotICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUo
b2Zmc2V0KTsKLQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOwotICAgIHJlc3Vs
dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhP
ZmZzZXQpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7Ci0KLSAgICBTaGFkb3dCbHVy
IGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKLQotICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAg
SW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgp
KTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0g
ICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwg
cGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Cisg
ICAgaW1hZ2VSZWN0LnVuaXRlKGlucHV0c1swXS0+aW1hZ2VSZWN0KCkpOwogICAgIAotICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwotCi0g
ICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7Ci0gICAg
cmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRl
c3RpbmF0aW9uT3Zlcik7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2aWF0aW9uWSB9
KTsKKyAgICAKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBs
eSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAg
ICBpbWFnZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOworICAg
IGltYWdlUmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwogCi0g
ICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBk
cmF3aW5nUmVnaW9uKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3Vi
cmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotSW50T3V0c2V0cyBG
RURyb3BTaGFkb3c6Om91dHNldHMoKSBjb25zdAorRmlsdGVySW1hZ2VWZWN0b3IgRkVEcm9wU2hh
ZG93Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBJ
bnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7
IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4PGludD4o
MCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91
dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRz
ZXRTaXplLndpZHRoKCkgLSBtX2R4KQotICAgIH07CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5
KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAotVGV4dFN0cmVhbSYg
RkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRURyb3BT
aGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCJb
ZmVEcm9wU2hhZG93IjsKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9z
dGRYIDw8ICIsICIgPDwgbV9zdGRZIDw8ICJcIiBkeD1cIiIgPDwgbV9keCA8PCAiXCIgZHk9XCIi
IDw8IG1fZHkgPDwgIlwiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dChtX3NoYWRvd0NvbG9yKSA8PCJcIiBmbG9vZC1vcGFjaXR5PVwiIiA8PCBtX3No
YWRvd09wYWNpdHkgPDwgIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9z
dGREZXZpYXRpb25YIDw8ICIsICIgPDwgbV9zdGREZXZpYXRpb25ZIDw8ICJcIiBkeD1cIiIgPDwg
bV9keCA8PCAiXCIgZHk9XCIiIDw8IG1fZHkgPDwgIlwiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJp
YWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChtX3NoYWRvd0NvbG9yKSA8PCJcIiBmbG9vZC1v
cGFjaXR5PVwiIiA8PCBtX3NoYWRvd09wYWNpdHkgPDwgIl1cbiI7CiAgICAgcmV0dXJuIHRzOwog
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRlZTg4
YTI5ZWZmMzg0Yy4uZGY5MDE3NDc4YTAyMGY0ZWExZmE4NGNlYmNiMzY4ODc0ZGZhMGU0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDUzICsyMSw5MiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3Jl
YXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZs
b2F0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRl
KGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9h
dCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAotICAgIGZsb2F0IHN0ZERldmlh
dGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlv
blgoZmxvYXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9Ci0KLSAgICBmbG9hdCBzdGREZXZpYXRp
b25ZKCkgY29uc3QgeyByZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGREZXZpYXRpb25Z
KGZsb2F0IHN0ZFkpIHsgbV9zdGRZID0gc3RkWTsgfQotCi0gICAgZmxvYXQgZHgoKSBjb25zdCB7
IHJldHVybiBtX2R4OyB9CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZERldmlh
dGlvblgpIHsgbV9zdGREZXZpYXRpb25YID0gc3RkRGV2aWF0aW9uWDsgfQorICAgIHZvaWQgc2V0
U3RkRGV2aWF0aW9uWShmbG9hdCBzdGREZXZpYXRpb25ZKSB7IG1fc3RkRGV2aWF0aW9uWSA9IHN0
ZERldmlhdGlvblk7IH0KICAgICB2b2lkIHNldER4KGZsb2F0IGR4KSB7IG1fZHggPSBkeDsgfQot
Ci0gICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9CiAgICAgdm9pZCBzZXREeShm
bG9hdCBkeSkgeyBtX2R5ID0gZHk7IH0KLQotICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Q29sb3I7IH0gCiAgICAgdm9pZCBzZXRTaGFkb3dDb2xv
cihjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpIHsgbV9zaGFkb3dDb2xvciA9IHNoYWRvd0NvbG9y
OyB9Ci0KLSAgICBmbG9hdCBzaGFkb3dPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dP
cGFjaXR5OyB9CiAgICAgdm9pZCBzZXRTaGFkb3dPcGFjaXR5KGZsb2F0IHNoYWRvd09wYWNpdHkp
IHsgbV9zaGFkb3dPcGFjaXR5ID0gc2hhZG93T3BhY2l0eTsgfQogCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRURyb3BTaGFkb3c+PiBkZWNv
ZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhGaWx0ZXImLCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRkVEcm9w
U2hhZG93KGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIGZsb2F0IGR4
LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAotICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQor
ICAgIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGZsb2F0
IG1fc3RkWDsKLSAgICBmbG9hdCBtX3N0ZFk7CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25YOwor
ICAgIGZsb2F0IG1fc3RkRGV2aWF0aW9uWTsKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1f
ZHk7CiAgICAgQ29sb3IgbV9zaGFkb3dDb2xvcjsKICAgICBmbG9hdCBtX3NoYWRvd09wYWNpdHk7
CiB9OwotICAgIAorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRURyb3BTaGFkb3c6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9zdGRE
ZXZpYXRpb25YOworICAgIGVuY29kZXIgPDwgbV9zdGREZXZpYXRpb25ZOworICAgIGVuY29kZXIg
PDwgbV9keDsKKyAgICBlbmNvZGVyIDw8IG1fZHk7CisgICAgZW5jb2RlciA8PCBtX3NoYWRvd0Nv
bG9yOworICAgIGVuY29kZXIgPDwgbV9zaGFkb3dPcGFjaXR5OworfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVEcm9wU2hhZG93Pj4gRkVEcm9wU2hhZG93
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBz
dGREZXZpYXRpb25YOworICAgIGRlY29kZXIgPj4gc3RkRGV2aWF0aW9uWDsKKyAgICBpZiAoIXN0
ZERldmlhdGlvblgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25ZOworICAgIGRlY29kZXIgPj4gc3RkRGV2aWF0aW9u
WTsKKyAgICBpZiAoIXN0ZERldmlhdGlvblkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBkZWNvZGVyID4+IGR4OworICAg
IGlmICghZHgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPGZsb2F0PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAgIGlmICghZHkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzaGFkb3dD
b2xvcjsKKyAgICBkZWNvZGVyID4+IHNoYWRvd0NvbG9yOworICAgIGlmICghc2hhZG93Q29sb3Ip
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBzaGFkb3dPcGFjaXR5OworICAgIGRlY29kZXIgPj4gc2hhZG93T3BhY2l0eTsKKyAgICBpZiAo
IXNoYWRvd09wYWNpdHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnN0ZERldmlhdGlvblgsICpzdGREZXZpYXRpb25ZLCAq
ZHgsICpkeSwgKnNoYWRvd0NvbG9yLCAqc2hhZG93T3BhY2l0eSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRHJv
cFNoYWRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYz
YjZiMDEuLjkxYTg4NTc2ZDMzNWViMWU5MDhiNDQzZWMyZTE5ZTBkOTMzNTA1MDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw1NiArMjUsMzMgQEAKICNpbmNsdWRlICJG
RUZsb29kLmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xv
ciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Rmxvb2QpCi0gICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKLSAgICAs
IG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKLXsKLX0KLQotUmVmPEZFRmxvb2Q+IEZFRmxv
b2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0
IGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3Im
IGNvbG9yLCBmbG9hdCBvcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxv
b2QoZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUZsb29kKGNvbG9yLCBvcGFjaXR5KSk7CiB9CiAKLWJvb2wgRkVGbG9vZDo6c2V0
Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKG1fZmxvb2RDb2xvciA9
PSBjb2xvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmxvb2RDb2xvciA9IGNvbG9y
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShm
bG9hdCBmbG9vZE9wYWNpdHkpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENv
bG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVGbG9v
ZCkKKyAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQorICAgICwgbV9mbG9vZE9wYWNpdHko
Zmxvb2RPcGFjaXR5KQogewotICAgIGlmIChtX2Zsb29kT3BhY2l0eSA9PSBmbG9vZE9wYWNpdHkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0
eTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0
ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVGbG9vZDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVGbG9vZCI7CiAgICAgRmls
dGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0g
ICAgdHMgPDwgIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVB
c1RleHQoZmxvb2RDb2xvcigpKSA8PCAiXCIgIgotICAgICAgIDw8ICJmbG9vZC1vcGFjaXR5PVwi
IiA8PCBmbG9vZE9wYWNpdHkoKSA8PCAiXCJdXG4iOworICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9
XCIiIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KG1fZmxvb2RDb2xvcikgPDwg
IlwiICIgPDwgImZsb29kLW9wYWNpdHk9XCIiIDw8IG1fZmxvb2RPcGFjaXR5IDw8ICJcIl1cbiI7
CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCmluZGV4IGI3MDRkYzk2OWM2ZDc1ODhiY2ViMGFkOGIy
NDY4MmZhMDYxNzM0OGUuLjdhNWRjYmQzNzkxZTE4MDE2NDA1ZmU4YjQxZmM4MGUzZDdiOGRhNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIyLDQyICsyMyw2MiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xv
ciYsIGZsb2F0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0
ZShjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCi0gICAgY29uc3QgQ29sb3ImIGZsb29k
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Zsb29kQ29sb3I7IH0KLSAgICBib29sIHNldEZsb29k
Q29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIHNldEZsb29kQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKSB7IG1fZmxvb2RDb2xvciA9IGNvbG9yOyB9CisgICAgdm9pZCBzZXRGbG9vZE9wYWNp
dHkoZmxvYXQgZmxvb2RPcGFjaXR5KSB7IG1fZmxvb2RPcGFjaXR5ID0gZmxvb2RPcGFjaXR5OyB9
CiAKLSAgICBmbG9hdCBmbG9vZE9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2Zsb29kT3BhY2l0
eTsgfQotICAgIGJvb2wgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0KTsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFRmxvb2Q+PiBkZWNvZGUoRGVj
b2RlciYpOworCitwcml2YXRlOgorICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFj
aXR5KTsKIAogI2lmICFVU0UoQ0cpCiAgICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNv
bG9yIGludGVycG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGlu
IHRoZSBjdXJyZW50CiAgICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUg
b2YgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVm
ZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
IH0KLSAgICB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9CisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogI2VuZGlmCiAK
LXByaXZhdGU6Ci0gICAgRkVGbG9vZChGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKLQot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVGbG9v
ZCI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
bWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2Um
IG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBDb2xvciBtX2Zsb29kQ29sb3I7CiAgICAgZmxvYXQgbV9mbG9vZE9wYWNpdHk7CiB9Owog
Cit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRUZsb29kOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fZmxvb2RDb2xvcjsKKyAgICBlbmNv
ZGVyIDw8IG1fZmxvb2RPcGFjaXR5OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3Rk
OjpvcHRpb25hbDxSZWY8RkVGbG9vZD4+IEZFRmxvb2Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGZsb29kQ29sb3I7CisgICAgZGVjb2RlciA+
PiBmbG9vZENvbG9yOworICAgIGlmICghZmxvb2RDb2xvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGZsb29kT3BhY2l0eTsKKyAgICBk
ZWNvZGVyID4+IGZsb29kT3BhY2l0eTsKKyAgICBpZiAoIWZsb29kT3BhY2l0eSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoKmZsb29k
Q29sb3IsICpmbG9vZE9wYWNpdHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUZsb29kKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmNwcAppbmRleCAwOGU4NWEwOGFhMDFiMDgxMjIzZjM2ZWJiNmJiYjhhYjM2Mzk0MzY1Li5i
ZDM0YzAyZDIxNzk2NTkwZWNjZmJjNGY1ZDlmMjNiNzNkZGNjMjJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw0NTAgKzI2
LDQxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
IAotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisj
aW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVy
YXRlLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0KLXN0YXRpYyBpbmxpbmUg
ZmxvYXQgZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKQotewotICAgIHJldHVybiAzIC8gNC5mICogc3Fy
dGYoMiAqIHBpRmxvYXQpOwotfQotCi1zdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0g
NTAwOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9u
KGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50
JiBkZWx0YVJpZ2h0KQorUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRl
KGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKIHsKLSAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVy
cy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KLSAgICBzd2l0Y2ggKGJs
dXJJdGVyYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7
Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyIC0gMTsKLSAgICAgICAgICAgIGRl
bHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOwotICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJh
ZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6
Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQrKzsK
LSAgICAgICAgICAgIGRlbHRhUmlnaHQtLTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIDI6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0
YVJpZ2h0Kys7Ci0gICAgICAgICAgICByYWRpdXMrKzsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoc3RkRGV2
aWF0aW9uWCwgc3RkRGV2aWF0aW9uWSwgZWRnZU1vZGUpKTsKIH0KIAotRkVHYXVzc2lhbkJsdXI6
OkZFR2F1c3NpYW5CbHVyKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpHYXVzc2lh
bkJsdXIpCi0gICAgLCBtX3N0ZFgoeCkKLSAgICAsIG1fc3RkWSh5KQorRkVHYXVzc2lhbkJsdXI6
OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUdhdXNz
aWFuQmx1cikKKyAgICAsIG1fc3RkRGV2aWF0aW9uWChzdGREZXZpYXRpb25YKQorICAgICwgbV9z
dGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblkpCiAgICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQog
ewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0ZXIsIHgsIHksIGVkZ2VN
b2RlKSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQg
eCkKLXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGRE
ZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNz
aWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRn
ZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9u
IEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBz
dHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWln
aHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAgICBjb25zdCB1aW50OF90KiBzcmNE
YXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBp
eGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJHQkEsIHplcm8t
aW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9IHkgKiBz
dHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQotICAgICAgICAvLyBGaWxsIHRoZSBr
ZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAg
ICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQmx1
cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewot
ICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGUg
KyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVs
Qnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgIGlm
ICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBw
aXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
c3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4ICsgZHhS
aWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZz
ZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAg
ICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQg
ZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwg
aW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBjb25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6
bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKLSAgICBpZiAoYWxwaGFJbWFnZSkKLSAgICAgICAg
cmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgZHgs
IGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVmZmVj
dEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0g
c3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJy
YXkuZGF0YSgpOwotCi0gICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3RoOiBp
dCBpcyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4ZWxz
IHdpbGwgYmUKLSAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0g
eSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW1SID0gMCwgc3VtRyA9IDAsIHN1bUIgPSAw
LCBzdW1BID0gMDsKLQotICAgICAgICBpZiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSkgewot
ICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90
KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNy
Y1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAg
ICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAgICAgICAgICAg
ICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotCi0gICAg
ICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsK
LSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8g
ZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1
bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0gICAgICAg
ICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0
OwotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3Jj
UHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0
aCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0
ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRy
WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yICd3cmFwJyBoZXJlLgotICAgICAgICAgICAgLy8gR2V0IGVkZ2UgdmFsdWVzIGZvciBl
ZGdlTW9kZSAnZHVwbGljYXRlJy4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1
ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VW
YWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAobGluZSArIChlZmZlY3RXaWR0aCAtIDEpICogc3RyaWRl
KTsKLQotICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwgZHhSaWdodDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgdmFsdWVzIG9mICdpJz8KLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotCi0gICAgICAgICAg
ICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVl
TGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVMZWZ0WzFdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBl
ZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVS
aWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsK
LSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUIgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQ
dHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBC
bHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsr
eCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4
ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBw
aXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRy
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAgICAgIC8v
IFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBpZiAoeCA8IGR4TGVmdCkgewotICAgICAg
ICAgICAgICAgICAgICBzdW1SIC09IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAt
PSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IGVkZ2VWYWx1
ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxl
ZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAg
ICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
QiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA+PSBl
ZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0
WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAg
ICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRl
T2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu
dDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJb
MV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLWlubGluZSB2
b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhD
bGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUs
IGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKLXsKLSAgICBpZiAoIWlvQnVmZmVy
LmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZWZmZWN0V2lkdGggPD0g
MCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgewotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIG11c3Qg
YWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgotICAgIGlmIChrZXJuZWxTaXplICUgMiAhPSAxKQot
ICAgICAgICBrZXJuZWxTaXplICs9IDE7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVm
ZmVyOwotICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZm
ZXIuZGF0YSgpKTsKLSAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwotICAg
IGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RJbkJ1ZmZl
ci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVy
OwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5kYXRhKCk7Ci0gICAgZWZm
ZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLmhl
aWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBzdHJp
ZGU7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIGJ5
IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFsIGZsYWcuIHZJbWFnZSB3
aWxsIHJldHVybgotICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNoIGFy
ZSBhbGwgbmVnYXRpdmUpLgotICAgIHNpemVfdCB0bXBCdWZmZXJTaXplID0gdkltYWdlQm94Q29u
dm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAwLCAw
LCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCB8IGt2SW1hZ2VH
ZXRUZW1wQnVmZmVyU2l6ZSk7Ci0gICAgaWYgKHRtcEJ1ZmZlclNpemUgPD0gMCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJTaXpl
KTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZl
Y3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwg
a3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZl
Y3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXpl
LCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgdkltYWdlQm94Q29udm9s
dmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIs
IDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAg
ICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNo
b3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCi0gICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgp
ID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOwotICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIHRl
bXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci19Ci0jZW5kaWYKLQotaW5saW5l
IHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhD
bGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJ
bWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGludCBkeExlZnQgPSAwOwotICAg
IGludCBkeFJpZ2h0ID0gMDsKLSAgICBpbnQgZHlMZWZ0ID0gMDsKLSAgICBpbnQgZHlSaWdodCA9
IDA7Ci0gICAgCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7
Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAoa2VybmVsU2l6ZVgpIHsK
LSAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4Umln
aHQpOwotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlmICghaXNB
bHBoYUltYWdlKQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9C
dWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXpl
LndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCksIHRydWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVyKCpmcm9t
QnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlk
ZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgaXNBbHBoYUltYWdlLCBl
ZGdlTW9kZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1
ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKLSAgICAgICAg
ICAgIGtlcm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOwotI2lm
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdl
KQotICAgICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtl
cm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgp
LCBwYWludFNpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
Ym94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIHRy
dWUsIGVkZ2VNb2RlKTsKLSNlbHNlCi0gICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAq
dG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRT
aXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9y
ZWQgaW4gaW9CdWZmZXIuCi0gICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7Ci0gICAg
ICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgoKSk7Ci0g
ICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwgaW9CdWZm
ZXIubGVuZ3RoKCkpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQotewotICAgIGludCBzdHJpZGUgPSA0ICog
cGFpbnRTaXplLndpZHRoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoa2VybmVs
U2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBt
X2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAgICAgYWNjZWxlcmF0ZUJv
eEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUsIHBhaW50
U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXks
IGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFn
ZSgpLCBtX2VkZ2VNb2RlKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBs
eVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBJbnRT
aXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAg
ICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5p
b1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJu
ZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5l
bFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQorc3RhdGlj
IGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7Ci0jaWYgIVVTRShBQ0NFTEVS
QVRFKQotICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLSAgICBpbnQg
ZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAgIGludCBvcHRpbWFsVGhy
ZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChz
X21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7
Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJh
bGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1B
cHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgaW50IGpvYnMgPSBw
YXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2JzID4gMSkgewotICAg
ICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBi
dXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNl
Ci0gICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBl
eHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAg
ICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2Jz
OwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0
KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAg
Zm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQ
bGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihq
b2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotCi0gICAgICAgICAg
ICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKLSAg
ICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWln
aHQgKyAxIDogYmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0g
am9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7Ci0KLSAgICAgICAg
ICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFqb2IpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4
ZWxBcnJheSA9ICZpb0J1ZmZlcjsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVs
QXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1z
LnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChi
bG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXpl
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBw
YWludFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAt
IHN0YXJ0WTsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXpl
WDsKLSAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLQotICAg
ICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgotICAgICAg
ICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsgam9iIDwg
am9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYg
cGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIGlu
dCBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uT2Zmc2V0Owot
ICAgICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgICAgIGludCBhZGp1c3RlZEJs
b2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2Nr
SGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0ZWRCbG9ja0hlaWdo
dDsKLSAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdodCAqIHNjYW5saW5l
OwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBzY2FubGlu
ZTsKLSAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNjYW5saW5l
OwotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3RpbmF0aW9u
T2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0KLSNlbmRpZgotCi0g
ICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWlj
YWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZl
ciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUpOwor
ICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAqIHBpRmxvYXQpOwogfQogCiBzdGF0aWMgaW50
IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAgLy8gTGltaXQgdGhlIGtl
cm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVy
ZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1
dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcg
YmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKICAg
ICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41ZikpKTsKICAg
ICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KLSAgICAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorCitJbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxv
YXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgQVNTRVJUKHN0ZERldmlhdGlvbi53aWR0aCgp
ID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwogICAgIEludFNpemUga2VybmVs
U2l6ZTsKQEAgLTQ4MywxMiArNzQsMTIgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJu
IGtlcm5lbFNpemU7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5l
bFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUo
ZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKTsKKyAgICByZXR1
cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbiAvKmZpbHRlci5zY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSovKTsKIH0KIAotSW50U2l6ZSBGRUdh
dXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQor
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNp
emUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDcyICs4Nyw0MyBAQCBJbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZp
YXRpb24pCiAgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJu
ZWxTaXplLmhlaWdodCgpIC8gMiB9OwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpCitJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIEludFNpemUgb3V0
c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2
aWF0aW9uWSB9KTsKKyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXpl
LndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OworfQog
Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29s
dXRlUGFpbnRSZWN0KCk7CitGbG9hdFJlY3QgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAor
eworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKICAgICAvLyBF
ZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBw
YWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVj
dCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VN
T0RFX05PTkUpCisgICAgICAgIHJldHVybiBpbWFnZVJlY3Q7CiAKLSAgICAvLyBXZSB0YWtlIHRo
ZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdl
IHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRl
WCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3Qu
aW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKyAgICBhdXRvIGtlcm5l
bFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGdlb21ldHJ5LnJlc29sdmVJbWFnZVNpemUoeyBt
X3N0ZERldmlhdGlvblgsIG1fc3RkRGV2aWF0aW9uWSB9KSk7CiAKLSAgICBpZiAoY2xpcHNUb0Jv
dW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVj
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVj
dFJlY3QoKSk7CisgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlw
bHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisg
ICAgaW1hZ2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKyAg
ICBpbWFnZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJl
Y3QpKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGlt
YWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmlzQWxwaGFJbWFn
ZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
Ci0gICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50
U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKLSAgICBrZXJuZWxTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkp
OwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsK
LSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0
bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChw
YWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1h
Z2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6
ZSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKLUludE91dHNl
dHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAorRmlsdGVySW1hZ2VWZWN0b3IgRkVH
YXVzc2lhbkJsdXI6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAog
ewotICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKLSAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXpl
LndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OworICAg
IEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgp
IH07CiB9CiAKLVRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CitUZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbZmVHYXVzc2lhbkJsdXIiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgc3RkRGV2aWF0
aW9uPVwiIiA8PCBtX3N0ZFggPDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiXVxuIjsKLQotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8
ICIgc3RkRGV2aWF0aW9uPVwiIiA8PCBtX3N0ZERldmlhdGlvblggPDwgIiwgIiA8PCBtX3N0ZERl
dmlhdGlvblkgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
aAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4M2JlYWFhMTc2NDdjYmIyZDNlLi4wZThlNDlk
NzhkYTI2ZDNjZWI1ZmRkYjhlZWM5M2MxNzY0YTI3ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDY0
ICsyMyw3MyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4Lmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVHYXVzc2lhbkJsdXIgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoRmls
dGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9h
dCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUpOwogCi0gICAgZmxvYXQgc3RkRGV2aWF0aW9u
WCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChm
bG9hdCk7CisgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZERldmlhdGlvblgpIHsg
bV9zdGREZXZpYXRpb25YID0gc3RkRGV2aWF0aW9uWDsgfQorICAgIHZvaWQgc2V0U3RkRGV2aWF0
aW9uWShmbG9hdCBzdGREZXZpYXRpb25ZKSB7IG1fc3RkRGV2aWF0aW9uWSA9IHN0ZERldmlhdGlv
blk7IH0KKyAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkgeyBtX2Vk
Z2VNb2RlID0gZWRnZU1vZGU7IH0KIAotICAgIGZsb2F0IHN0ZERldmlhdGlvblkoKSBjb25zdCB7
IHJldHVybiBtX3N0ZFk7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQpOworICAg
IHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGRE
ZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2Fs
Y3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CiAKLSAgICBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VNb2RlOyB9Ci0gICAg
dm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUpOwotCi0gICAgc3RhdGljIEludFNpemUgY2Fs
Y3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsK
LSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXpl
IHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShG
bG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFR2F1c3NpYW5CbHVyPj4gZGVjb2RlKERlY29kZXImKTsK
IAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVk
Z2VNb2RlVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFR2F1c3NpYW5CbHVyIjsgfQotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21p
bmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBm
b3IgcGFyYWxsZWwgam9icworICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHN0ZERldmlhdGlvblgs
IGZsb2F0IHN0ZERldmlhdGlvblksIEVkZ2VNb2RlVHlwZSk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7CisgICAgSW50T3V0c2V0
cyBjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGxhdGZv
cm1BcHBseVBhcmFtZXRlcnMgewotICAgICAgICBGRUdhdXNzaWFuQmx1ciogZmlsdGVyOwotICAg
ICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKLSAgICAgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7
Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOwotICAg
ICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKLSAgICB9OworICAgIEZsb2F0UmVjdCBjYWxjdWxh
dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVy
R2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAg
IGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0YXRp
YyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENs
YW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdl
bmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVt
cEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRT
aXplJiBwYWludFNpemUpOwotCi0gICAgZmxvYXQgbV9zdGRYOwotICAgIGZsb2F0IG1fc3RkWTsK
KyAgICBmbG9hdCBtX3N0ZERldmlhdGlvblg7CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25ZOwog
ICAgIEVkZ2VNb2RlVHlwZSBtX2VkZ2VNb2RlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV9zdGREZXZpYXRpb25YOworICAgIGVuY29kZXIgPDwgbV9zdGRE
ZXZpYXRpb25ZOworICAgIGVuY29kZXIgPDwgbV9lZGdlTW9kZTsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFR2F1c3NpYW5CbHVyPj4gRkVHYXVzc2lh
bkJsdXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IHN0ZERldmlhdGlvblg7CisgICAgZGVjb2RlciA+PiBzdGREZXZpYXRpb25YOworICAgIGlm
ICghc3RkRGV2aWF0aW9uWCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0ZERldmlhdGlvblk7CisgICAgZGVjb2RlciA+PiBzdGREZXZp
YXRpb25ZOworICAgIGlmICghc3RkRGV2aWF0aW9uWSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8RWRnZU1vZGVUeXBlPiBlZGdlTW9kZTsKKyAgICBk
ZWNvZGVyID4+IGVkZ2VNb2RlOworICAgIGlmICghZWRnZU1vZGUpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgqc3RkRGV2
aWF0aW9uWCwgKnN0ZERldmlhdGlvblksICplZGdlTW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFR2F1c3Np
YW5CbHVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggZGYxNzZmOGUwNzBhNDE4YzIwODUxODA5MGVlN2E2
Y2ExMTNlNTZmNS4uZDA2YTQ5NWZhYWNlNzcyNjE3ZjM5MjNkZTFmZWVmOTI3Zjg3NDgwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsNDcwICsyOCwzMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgot
I2luY2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5nVHlwZSBsaWdo
dGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUs
IGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGlu
Z1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQotICAgICwg
bV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKGNv
bnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmIHNvdXJjZSwgRmlsdGVyRWZmZWN0OjpUeXBlIHR5cGUpCisgICAgOiBGaWx0ZXJFZmZl
Y3QodHlwZSkKKyAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgLCBtX3N1cmZhY2VTY2FsZShzdXJm
YWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQpCiAgICAg
LCBtX3NwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25zdGFudCkKICAgICAsIG1fc3BlY3VsYXJF
eHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWChrZXJu
ZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0aFkoa2VybmVsVW5pdExlbmd0
aFkpCisgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkpCiB7CiB9CiAKLWJvb2wgRkVMaWdo
dGluZzo6c2V0U3VyZmFjZVNjYWxlKGZsb2F0IHN1cmZhY2VTY2FsZSkKK0Zsb2F0UmVjdCBGRUxp
Z2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdAogewotICAgIGlmIChtX3N1cmZhY2VTY2FsZSA9PSBzdXJmYWNlU2NhbGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNj
YWxlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFTGlnaHRpbmc6OnNldExpZ2h0aW5n
Q29sb3IoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IpCi17Ci0gICAgaWYgKG1fbGlnaHRpbmdD
b2xvciA9PSBsaWdodGluZ0NvbG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2xp
Z2h0aW5nQ29sb3IgPSBsaWdodGluZ0NvbG9yOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
KQotewotICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGhYID09IGtlcm5lbFVuaXRMZW5ndGhYKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2tlcm5lbFVuaXRMZW5ndGhYID0ga2VybmVs
VW5pdExlbmd0aFg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0
S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCi17Ci0gICAgaWYgKG1f
a2VybmVsVW5pdExlbmd0aFkgPT0ga2VybmVsVW5pdExlbmd0aFkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFkgPSBrZXJuZWxVbml0TGVuZ3RoWTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7
Ci1zdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKLXN0YXRpYyBj
b25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50OF90PigweEZG
KTsKLQotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBm
cm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRt
bCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0
b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjMg
PSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0ID0gLTEgLyA0
LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8gMy5mOwotCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGNlbnRlciArIDIgKiByaWdo
dCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAqIGNlbnRlciAtIHJpZ2h0ICsg
MiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIgKiByaWdodCAt
IGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyIC0g
cmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0K
LQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQgKyAyICogY2Vu
dGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsg
Ym90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QK
LXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0
b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZz
ZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90
dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogYm90
dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0
ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRv
dyYgYWxwaGFXaW5kb3cpIGNvbnN0CitGaWx0ZXJJbWFnZVZlY3RvciBGRUxpZ2h0aW5nOjp0YWtl
SW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBpbnQgcmlnaHRB
bHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0Owot
ICAgIAotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0
QWxwaGFPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsK
LSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdo
dEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBs
ZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cu
dG9wTGVmdCgpOwotICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBi
b3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBh
bHBoYVdpbmRvdy5ib3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBz
aGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFX
aW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsy
XSA9IHJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNv
bWUgc3BvdC1jaGVja3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2lu
ZG93LnRvcCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAg
ICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21M
ZWZ0ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0
ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwo
aW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0g
ICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAt
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAq
IGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBp
bnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
cmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdo
dCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAg
IH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
Um93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAg
aW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
aW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAt
dG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BM
ZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAg
IH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
UmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
ICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3Ag
LSAyICogbGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGxl
ZnQgKyAyICogY2VudGVyCi0gICAgfTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChp
bnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBm
bG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAgIHNldFBpeGVsSW50
ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3Rvclks
IG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zm
c2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBm
YWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBmbG9h
dCB6ID0gYWxwaGEgKiBkYXRhLnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0
ZWRMaWdodGluZ0RhdGEgbGlnaHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVs
TGlnaHRpbmdEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7Ci0KLSAgICBmbG9hdCBsaWdodFN0
cmVuZ3RoOwotICAgIGlmIChub3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewotICAgICAgICAvLyBO
b3JtYWwgdmVjdG9yIGlzICgwLCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2Uu
Ci0gICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRp
bmcpCi0gICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3Ro
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9y
ID0gewotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAg
ICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAg
ICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxl
bmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxh
ckV4cG9uZW50ID09IDEpCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3Vs
YXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxh
ckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgs
IG1fc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBG
bG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yID0gewotICAgICAgICAgICAgZmFjdG9yWCAqIG5vcm1h
bDJEVmVjdG9yLndpZHRoKCkgKiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAgICAgICAgIGZhY3Rv
clkgKiBub3JtYWwyRFZlY3Rvci5oZWlnaHQoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAg
ICAgICAgMS4wZgotICAgICAgICB9OwotICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGgg
PSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7Ci0KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09
IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxl
bmd0aCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlW
ZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwK
LSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAg
ICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVj
dG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3Nw
ZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9z
cGVjdWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dm
KChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBo
YWxmd2F5VmVjdG9yTGVuZ3RoKSwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChsaWdodFN0cmVuZ3RoID4gMSkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9
IDE7Ci0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPCAwKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0g
MDsKLQotICAgIHVpbnQ4X3QgcGl4ZWxWYWx1ZVszXSA9IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci54KCkgKiAy
NTUuMGYpLAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGln
aHRpbmdEYXRhLmNvbG9yVmVjdG9yLnkoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueigpICog
MjU1LjBmKQotICAgIH07Ci0gICAgCi0gICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFs
dWUsIDMsIG9mZnNldCk7Ci19Ci0KLS8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdy
aXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhh
IGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KLXZvaWQgRkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+IDAgc2luY2Ugd2Ug
cmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAgQVNTRVJUKHN0YXJ0
WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0
WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZzZXQgPSB5ICogZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHByZXZpb3VzUm93U3Rh
cnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cgaXMgYSBsb2NhbCBj
YWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3byByaWdodCBjb2x1
bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVyIGNvbHVtbi4KLSAg
ICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxlZnQgdGhlbiBmaWxs
IHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhhV2luZG93OwotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0VG9wUmln
aHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Q2VudGVyKGRhdGEu
cGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShyb3dTdGFydE9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFX
aW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tUmlnaHQoZGF0YS5w
aXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQgKyBjUGl4ZWxTaXpl
OwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsg
Kyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgYWxwaGFXaW5kb3cuc2hp
ZnQoKTsKLSAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRhLmludGVyaW9yTm9y
bWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIoKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIHBh
cmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5k
YXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1l
dGVycy0+eUVuZCk7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
Y29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpCi17Ci0gICAgdW5zaWduZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUgLSAxOwotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dz
VG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjpt
aW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9j
ZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOwotICAgIGlmIChv
cHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVs
IGpvYnMKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJh
bWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAg
ICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYg
KGpvYiA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNp
emVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxh
cmdlciBzaW5jZQotICAgICAgICAgICAgLy8geVN0ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhl
c2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgot
ICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0gcm93c1RvUHJvY2VzcyAvIGpvYjsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJhID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKLQot
ICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Ci0gICAgICAgICAgICBmb3IgKC0tam9iOyBqb2Ig
Pj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFt
ZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9
IGRhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9IHBhaW50aW5nRGF0
YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OwotICAgICAgICAgICAg
ICAgIHlTdGFydCArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnlFbmQgPSB5U3RhcnQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAg
IH0KLQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAx
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKLX0KLQotaW5saW5lIHZvaWQgRkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZv
cm1zLgotI2lmIENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElM
RVIoR0NDX0NPTVBBVElCTEUpCi0gICAgcGxhdGZvcm1BcHBseU5lb24oZGF0YSwgcGFpbnRpbmdE
YXRhKTsKLSNlbHNlCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoZGF0YSwgcGFpbnRpbmdEYXRh
KTsKLSNlbmRpZgotfQotCi1ib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0K
LSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkg
aXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNl
LiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVp
Z2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0gJnBp
eGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOwot
ICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNpemU7
Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwotCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xv
clZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKLQotICAgIG1fbGlnaHRTb3VyY2UtPmlu
aXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVmdC4K
LSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1h
bChvZmZzZXQpKTsKLQotICAgIC8vIFRvcCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQs
IGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCBjRmFjdG9y
MmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKLQotICAg
IC8vIEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUg
KiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwg
ZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9y
MmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0g
ICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0
Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgaWYgKHdpZHRoID49IDMpIHsKLSAgICAgICAgLy8gVG9w
IHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9
IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNp
emUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwg
MCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkp
OwotCi0gICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVs
U2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0Zh
Y3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwot
ICAgIH0KLQotICAgIGlmIChoZWlnaHQgPj0gMykgewotICAgICAgICAvLyBMZWZ0IGNvbHVtbi4K
LSAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAg
ICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9m
ZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2MiwgY0Zh
Y3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8g
UmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRp
bmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3Rv
cjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAgIGlm
ICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIEludGVyaW9yIHBpeGVs
cy4KLSAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEpOwotICAgIH0KLQot
ICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVp
Z2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkgKz0g
Y1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFscGhh
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RQaXhlbDsg
aSArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICB1aW50OF90IGExID0gZGF0YS5waXhlbHMt
Pml0ZW0oaSk7Ci0gICAgICAgICAgICB1aW50OF90IGEyID0gZGF0YS5waXhlbHMtPml0ZW0oaSAr
IDEpOwotICAgICAgICAgICAgdWludDhfdCBhMyA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAyKTsK
LSAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQgdG8gbWF4KGExLCBhMiwgYTMpCi0gICAg
ICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/IGEx
IDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwotCi0gICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhh
biAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKLSAgICAvLyBzdGFuZGFyZCBo
YXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZv
eCkgaGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0
aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgotICAgIC8vIEFueXdheSwg
ZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCi0KLSAg
ICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
Ci0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNp
emUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIEFTU0VSVCghc3Rh
Y2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggMGZmZmNkMDY0Mzk2ZDhmNGI2NDA4
MjI2OWNjMjA3NGY3YzlkYmRiYy4uYTYyOTQzYjZjYzBhNGYyMmY1YmExN2EyMDk4OTZlOWUzN2Nl
NGJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhl
cmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxNDIgKzI4LDQyIEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNz
IGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uOwotCiBj
bGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCi0gICAgZmxvYXQg
c3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KLSAgICBib29s
IHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisgICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxv
YXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOyB9CisgICAg
dm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KSB7IG1fZGlmZnVz
ZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OyB9CiAKLSAgICBjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wgc2V0
TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0U3BlY3VsYXJDb25zdGFu
dChmbG9hdCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFy
Q29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OyB9CiAKLSAg
ICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExl
bmd0aFg7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKKyAgICB2b2lk
IHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKSB7IG1fa2VybmVs
VW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5p
dExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpIHsgbV9rZXJuZWxVbml0TGVuZ3RoWSA9
IGtlcm5lbFVuaXRMZW5ndGhZOyB9CiAKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNv
bnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KLSAgICBib29sIHNldEtlcm5lbFVu
aXRMZW5ndGhZKGZsb2F0KTsKLQotICAgIGNvbnN0IExpZ2h0U291cmNlJiBsaWdodFNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7IH0KKyAgICBjb25zdCBMaWdodFNv
dXJjZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7IH0KIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVu
dW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVj
dWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAg
ICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBp
bXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFz
aWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQo
KSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4
X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0g
ICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhh
WzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsg
cmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1
ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2Vu
dGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAg
ICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFs
dWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFs
cGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVl
KSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9t
UmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAg
IHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhh
WzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3co
YWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVj
dHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAg
ICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERl
Y3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5k
b3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsKKyAgICBGRUxpZ2h0aW5nKGNvbnN0IENv
bG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmLCBGaWx0
ZXJFZmZlY3Q6OlR5cGUpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmll
bmQgY2xhc3MgUGFyYWxsZWxKb2JzOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBzdHJ1Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdo
dGluZyogZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0g
ICAgICAgIGludCB5RW5kOwotICAgIH07CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0
cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RhdGlj
IHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJh
bWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdo
dGluZ1BhaW50aW5nRGF0YUZvck5lb24qKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFTGlnaHRpbmcoRmlsdGVyJiwg
TGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJiwgVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFTGlnaHRpbmciOyB9Ci0KLSAg
ICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYsIGludCwgaW50KTsKLQotICAg
IHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxv
YXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IpOwotICAgIHZvaWQgc2V0UGl4ZWxJbnRl
cm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZ
LCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxwaGEpOwotCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25z
dCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBzdGFydFgsIGludCBzdGFydFkpOwot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUo
QVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBzdGF0aWMg
aW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4cG9uZW50KTsKLSAgICBpbmxpbmUgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJik7Ci0jZW5kaWYKLQotICAgIExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5n
VHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7Ci0KLSAgICBDb2xvciBt
X2xpZ2h0aW5nQ29sb3I7CisgICAgQ29sb3IgbV9jb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VT
Y2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1bGFy
Q29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fa2Vy
bmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBSZWY8
TGlnaHRTb3VyY2U+IG1fc291cmNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVy
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdl
LmNwcAppbmRleCAwYTIwMDAxYjE3M2JkOGZkZjZiYmE2MzZjZDIzY2U0NzAyNmU3YjNmLi40YjQ2
OTU1MDI2NWVkMjVhNWMwMzc3M2RjZGYxM2M4ZWU4MWZhOTI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKQEAgLTIsNiAr
Miw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDUxICsyMywz
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTWVyZ2UuaCIKIAotI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK1JlZjxGRU1lcmdlPiBGRU1l
cmdlOjpjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNZXJnZShudW1iZXJPZkVmZmVjdElucHV0cykpOwogfQogCi1SZWY8
RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVNZXJnZTo6RkVNZXJn
ZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBl
OjpGRU1lcmdlKQorICAgICwgbV9udW1iZXJPZkVmZmVjdElucHV0cyhudW1iZXJPZkVmZmVjdElu
cHV0cykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAg
IEFTU0VSVChtX251bWJlck9mRWZmZWN0SW5wdXRzKTsKIH0KIAotdm9pZCBGRU1lcmdlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVNZXJnZTo6dGFrZUlucHV0
cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICBBU1NF
UlQoc3RhY2suc2l6ZSgpID49IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJJbWFn
ZT4+IGlucHV0czsKKyAgICBmb3IgKGF1dG8gaW5wdXRzU2l6ZSA9IG1fbnVtYmVyT2ZFZmZlY3RJ
bnB1dHM7IGlucHV0c1NpemUtLTsgKQorICAgICAgICBpbnB1dHMuYXBwZW5kKHN0YWNrLnRha2VM
YXN0KCkpOwogCi0KLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBp
ZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCi0gICAg
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICB9CisgICAg
cmV0dXJuIGlucHV0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9u
KSBjb25zdAorVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVNZXJnZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZm
ZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAwKTsKLSAgICB0cyA8PCAiIG1lcmdlTm9k
ZXM9XCIiIDw8IHNpemUgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3Bl
IGluZGVudFNjb3BlKHRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICBpbnB1dEVmZmVjdChpKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOworICAgIHRzIDw8ICIgbWVyZ2VOb2Rlcz1cIiIgPDwgbV9udW1iZXJPZkVm
ZmVjdElucHV0cyA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2Zj
NWNiNzk4MTljZWNlZDUwNzNlNTdiMDE5NGViY2YxOGYyNjA3Li5iMTAzMWYwNDk2NDlhOGEzMWU5
NTYxNGY4ZDVmYjYzZmQ4NGViNzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjMgKzIzLDQ1IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSh1bnNpZ25lZCBudW1iZXJP
ZkVmZmVjdElucHV0cyk7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmVmPEZFTWVyZ2U+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgot
ICAgIEZFTWVyZ2UoRmlsdGVyJik7CisgICAgRkVNZXJnZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVj
dElucHV0cyk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFTWVyZ2UiOyB9CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0
ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgCisgICAgdW5zaWduZWQgbV9udW1iZXJPZkVmZmVjdElucHV0czsKIH07CiAKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFTWVyZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9udW1iZXJPZkVmZmVjdElucHV0czsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFTWVyZ2U+PiBG
RU1lcmdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBudW1iZXJPZkVmZmVjdElucHV0czsKKyAgICBkZWNvZGVyID4+IG51bWJlck9mRWZm
ZWN0SW5wdXRzOworICAgIGlmICghbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVNZXJnZTo6Y3JlYXRlKCpudW1iZXJPZkVm
ZmVjdElucHV0cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVyZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXgg
OGE3ZTViNjY3YWI3NzNiOTBiODkwZTM4Mzg2MzkzNTYyYjlkOGRmNS4uMDAwZjljMzUzZjRmZWZl
NGI0YmU1Njk4NGUwYTEyODRkMWZlYWMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtNCw3ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAxOCBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwyNjUgKzI1LDUw
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKLSNp
bmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYv
UGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJ
bWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRl
ciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKLSAgICAs
IG1fdHlwZSh0eXBlKQotICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCi0gICAgLCBtX3JhZGl1c1ko
cmFkaXVzWSkKLXsKLX0KLQotUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xv
Z3koZmlsdGVyLCB0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7Ci19Ci0KLWJvb2wgRkVNb3JwaG9s
b2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQot
ewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
dHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVNb3JwaG9sb2d5Ojpz
ZXRSYWRpdXNYKGZsb2F0IHJhZGl1c1gpCi17Ci0gICAgaWYgKG1fcmFkaXVzWCA9PSByYWRpdXNY
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNYID0gcmFkaXVzWDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQgcmFk
aXVzWSkKLXsKLSAgICBpZiAobV9yYWRpdXNZID09IHJhZGl1c1kpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3JhZGl1c1kgPSByYWRpdXNZOwotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIEZs
b2F0UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsK
LSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5pbmZs
YXRlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVz
WSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVy
c2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRl
KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChwYWludFJlY3QpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKQotewotICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkg
KiA0OwotfQotCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNv
bXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKLXsKLSAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOwotfQotCi1pbmxpbmUgUGFj
a2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4gUGFj
a2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBv
bmVudHMpIH07Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+JiBiKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9E
RSkKLSAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKLQotICAgIHJldHVybiBw
ZXJDb21wb25lbnRNYXgoYSwgYik7Ci19Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVt
bkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwg
aW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCkKLXsKLSAgICBhdXRvIGV4dHJlbXVtID0g
bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBp
eGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7Ci0KLSAgICBmb3IgKGludCB5ID0g
eVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkgewotICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNv
bG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJy
YXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOwotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5
cGU+KGV4dHJlbXVtLCBwaXhlbCk7Ci0gICAgfQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0o
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0
LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCitSZWY8
RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3IgbW9y
cGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQogewotICAgIGlm
ICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGNv
bHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oc3JjUGl4ZWxBcnJheSwg
eCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7Ci0KLSAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVN
T1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5RW5k
LCB3aWR0aCk7Ci19Ci0KLXVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+LCAxNj47Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4
dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKLXsKLSAgICBhdXRvIGV4dHJlbXVt
ID0ga2VybmVsWzBdOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsg
KytpKQotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVtLCBrZXJuZWxb
aV0pOwotCi0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBr
ZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBrZXJuZWxFeHRyZW11
bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KGtlcm5lbCk7Ci0KLSAgICByZXR1cm4ga2Vy
bmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oa2VybmVsKTsKLX0KLQot
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICBBU1NFUlQoZW5k
WSA+IHN0YXJ0WSk7Ci0KLSAgICBjb25zdCBhdXRvJiBzcmNQaXhlbEFycmF5ID0gKnBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5OwotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSAqcGFpbnRpbmdE
YXRhLmRzdFBpeGVsQXJyYXk7Ci0KLSAgICBjb25zdCBpbnQgcmFkaXVzWCA9IHBhaW50aW5nRGF0
YS5yYWRpdXNYOwotICAgIGNvbnN0IGludCByYWRpdXNZID0gcGFpbnRpbmdEYXRhLnJhZGl1c1k7
Ci0gICAgY29uc3QgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgIGNvbnN0IGlu
dCBoZWlnaHQgPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotCi0gICAgQVNTRVJUKHJhZGl1c1ggPD0g
d2lkdGggfHwgcmFkaXVzWSA8PSBoZWlnaHQpOwotICAgIEFTU0VSVChzdGFydFkgPj0gMCAmJiBl
bmRZIDw9IGhlaWdodCAmJiBzdGFydFkgPCBlbmRZKTsKLQotICAgIENvbHVtbkV4dHJlbWEgZXh0
cmVtYTsKLSAgICBleHRyZW1hLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMiAqIHJhZGl1c1ggKyAx
KTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAg
aW50IHlSYWRpdXNTdGFydCA9IHN0ZDo6bWF4KDAsIHkgLSByYWRpdXNZKTsKLSAgICAgICAgaW50
IHlSYWRpdXNFbmQgPSBzdGQ6Om1pbihoZWlnaHQsIHkgKyByYWRpdXNZICsgMSk7Ci0KLSAgICAg
ICAgZXh0cmVtYS5zaHJpbmsoMCk7Ci0KLSAgICAgICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQg
ZWRnZSwgc28gY29tcHV0ZSBleHRyZW1lIGZvciB0aGUgcmFkaXVzWCBjb2x1bW5zLgotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHJhZGl1c1g7ICsreCkKLSAgICAgICAgICAgIGV4dHJlbWEu
YXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJh
ZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkpOwotCi0gICAgICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQs
IGdldCBleHRyZW1hIG9mIG5leHQgY29sdW1uCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7ICsreCkgewotICAgICAgICAgICAgaWYgKHggPCB3aWR0aCAtIHJhZGl1c1gpCi0gICAg
ICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwg
eCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkpOwot
Ci0gICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCi0gICAgICAgICAgICAgICAgZXh0cmVtYS5y
ZW1vdmUoMCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgo
eCwgeSwgd2lkdGgpKTsKLSAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZy
b21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgbV90eXBlKSkudmFsdWU7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5
KG1vcnBob2xvZ3lPcGVyYXRvciwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCi12b2lkIEZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFy
YW0pCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhv
bG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorICAgIDogRmlsdGVy
RWZmZWN0KFR5cGU6OkZFTW9ycGhvbG9neSkKKyAgICAsIG1fbW9ycGhvbG9neU9wZXJhdG9yKG1v
cnBob2xvZ3lPcGVyYXRvcikKKyAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQorICAgICwgbV9yYWRp
dXNZKHJhZGl1c1kpCiB7Ci0gICAgcGFyYW0tPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWMo
KnBhcmFtLT5wYWludGluZ0RhdGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsKIH0KIAot
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEpCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICAv
LyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNv
bmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgotICAgIGZsb2F0
IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEu
cmFkaXVzWSkgKiAwLjY1OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1
dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluaW1hbEFyZWEgPSAoMTYwICogMTYwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQg
Zm9yIHBhcmFsbGVsIGpvYnMKLSAgICAKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcGFp
bnRpbmdEYXRhLmhlaWdodCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9
IHN0ZDo6bWluPHVuc2lnbmVkPigocGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhl
aWdodCAqIGtlcm5lbEZhY3RvcikgLyBtaW5pbWFsQXJlYSwgbWF4TnVtVGhyZWFkcyk7Ci0gICAg
aWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2Jz
PFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0gICAgICAg
IGF1dG8gbnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAg
ICBpZiAobnVtT2ZUaHJlYWRzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBp
bnRvICJqb2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0
byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2Jz
IDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIg
ImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEu
aGVpZ2h0IC8gbnVtT2ZUaHJlYWRzOwotICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBw
YWludGluZ0RhdGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOwotICAgICAgICAgICAgaW50IGN1cnJl
bnRZID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpv
YiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
JiBwYXJhbSA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBw
YXJhbS5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJl
bnRZOwotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBq
b2JTaXplICsgMSA6IGpvYlNpemU7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJl
bnRZOwotICAgICAgICAgICAgICAgIHBhcmFtLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmds
ZSB0aHJlYWQgbW9kZWwKLSAgICB9CisgICAgaW1hZ2VSZWN0LmluZmxhdGUoZ2VvbWV0cnkucmVz
b2x2ZUltYWdlU2l6ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKIAotICAgIHBsYXRmb3Jt
QXBwbHlHZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CisgICAg
cmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVj
dCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCitib29sIEZFTW9ycGhvbG9n
eTo6aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7
Ci0gICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8ICghcmFkaXVzWCAmJiAhcmFk
aXVzWSkpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAg
ICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgaW1hZ2VSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFnZSgpOwog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlcklt
YWdlVmVjdG9yIEZFTW9ycGhvbG9neTo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3Rh
Y2spIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAgIEludFNpemUg
cmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7
Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
ZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAg
IGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERy
YXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxB
cnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmls
dGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsK
LSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAx
LCByYWRpdXMud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3
aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAocGxhdGZv
cm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVj
dCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291
cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZk
ZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWlu
dGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRp
dXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0g
Y2VpbGYocmFkaXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIHBsYXRmb3JtQXBw
bHkocGFpbnRpbmdEYXRhKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZSkK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3Jw
aG9sb2d5T3BlcmF0b3ImIG1vcnBob2xvZ3lPcGVyYXRvcikKIHsKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBzd2l0Y2ggKG1vcnBob2xvZ3lPcGVyYXRvcikgewogICAgIGNhc2UgRkVNT1JQSE9M
T0dZX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgIHRzIDw8ICJVTktOT1dOIjsKICAgICAgICAg
YnJlYWs7CkBAIC0yOTcsMTUgKzgyLDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlCiAgICAg
cmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMg
PDwgaW5kZW50IDw8ICJbZmVNb3JwaG9sb2d5IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIG9wZXJhdG9y
PVwiIiA8PCBtb3JwaG9sb2d5T3BlcmF0b3IoKSA8PCAiXCIgIgotICAgICAgIDw8ICJyYWRpdXM9
XCIiIDw8IHJhZGl1c1goKSA8PCAiLCAiIDw8IHJhZGl1c1koKSA8PCAiXCJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgdHMg
PDwgIiBvcGVyYXRvcj1cIiIgPDwgbV9tb3JwaG9sb2d5T3BlcmF0b3IgPDwgIlwiICIgPDwgInJh
ZGl1cz1cIiIgPDwgbV9yYWRpdXNYIDw8ICIsICIgPDwgbV9yYWRpdXNZIDw8ICJcIl1cbiI7CiAg
ICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRleCA0OGZjMzU0MTE3ZmMyN2NjZmM4
ZTkzZjE0ZWRmMDc1ZGUzOWM1YTExLi43NmM5ZTY4MTQyNjA1NDUxMzM1ZTZlZGUyMTFlMWM3MDZm
NWEzNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDExICsyMywxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1lbnVtIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgeworZW51bSBNb3JwaG9s
b2d5T3BlcmF0b3IgewogICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOID0gMCwKICAg
ICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgPSAxLAogICAgIEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9ESUxBVEUgPSAyCkBAIC0zNCw1NSArMzQsNzYgQEAgZW51bSBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHsKIAogY2xhc3MgRkVNb3JwaG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShGaWx0ZXImLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKE1vcnBob2xvZ3lP
cGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgIGJvb2wgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUp
OworICAgIHZvaWQgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvciBtb3Jw
aG9sb2d5T3BlcmF0b3IpIHsgbV9tb3JwaG9sb2d5T3BlcmF0b3IgPSBtb3JwaG9sb2d5T3BlcmF0
b3I7IH0KKyAgICB2b2lkIHNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkgeyBtX3JhZGl1c1ggPSBy
YWRpdXNYOyB9CisgICAgdm9pZCBzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpIHsgbV9yYWRpdXNZ
ID0gcmFkaXVzWTsgfQogCi0gICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFk
aXVzWDsgfQotICAgIGJvb2wgc2V0UmFkaXVzWChmbG9hdCk7Ci0KLSAgICBmbG9hdCByYWRpdXNZ
KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNZOyB9Ci0gICAgYm9vbCBzZXRSYWRpdXNZKGZsb2F0
KTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVm
PEZFTW9ycGhvbG9neT4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgRkVNb3Jw
aG9sb2d5KEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZs
b2F0IHJhZGl1c1kpOworICAgIEZFTW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9CisgICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkg
b3ZlcnJpZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZl
Y3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRw
dXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3Qs
IGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25z
dCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVk
QXJyYXkqIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhl
aWdodDsKLSAgICAgICAgaW50IHJhZGl1c1g7Ci0gICAgICAgIGludCByYWRpdXNZOwotICAgIH07
CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1fbW9ycGhvbG9neU9wZXJhdG9yOworICAgIGZsb2F0
IG1fcmFkaXVzWDsKKyAgICBmbG9hdCBtX3JhZGl1c1k7Cit9OwogCi0gICAgc3RydWN0IFBsYXRm
b3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0gICAg
ICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWludGlu
Z0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgRkVNb3JwaG9sb2d5OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IG1fbW9ycGhvbG9neU9wZXJhdG9yOworICAgIGVuY29kZXIgPDwgbV9yYWRpdXNY
OworICAgIGVuY29kZXIgPDwgbV9yYWRpdXNZOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
Pgorc3RkOjpvcHRpb25hbDxSZWY8RkVNb3JwaG9sb2d5Pj4gRkVNb3JwaG9sb2d5OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPE1vcnBob2xvZ3lPcGVyYXRv
cj4gbW9ycGhvbG9neU9wZXJhdG9yOworICAgIGRlY29kZXIgPj4gbW9ycGhvbG9neU9wZXJhdG9y
OworICAgIGlmICghbW9ycGhvbG9neU9wZXJhdG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gcmFkaXVzWDsKKyAgICBkZWNvZGVyID4+
IHJhZGl1c1g7CisgICAgaWYgKCFyYWRpdXNYKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gcmFkaXVzWTsKKyAgICBkZWNvZGVyID4+IHJh
ZGl1c1k7CisgICAgaWYgKCFyYWRpdXNZKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIEZFTW9ycGhvbG9neTo6Y3JlYXRlKCptb3JwaG9sb2d5T3BlcmF0b3IsICpy
YWRpdXNYLCAqcmFkaXVzWSk7Cit9CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29y
a2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJik7Ci0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQg
ZW5kWSk7CituYW1lc3BhY2UgV1RGIHsKIAotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbV90
eXBlOwotICAgIGZsb2F0IG1fcmFkaXVzWDsKLSAgICBmbG9hdCBtX3JhZGl1c1k7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Ok1vcnBob2xvZ3lPcGVyYXRvcj4geworICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Ok1vcnBob2xvZ3lP
cGVyYXRvciwKKworICAgICAgICBXZWJDb3JlOjpGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9X
TiwKKyAgICAgICAgV2ViQ29yZTo6RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFLAorICAgICAg
ICBXZWJDb3JlOjpGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFCisgICAgPjsKIH07CiAKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdURgogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVNb3JwaG9sb2d5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcw
ZGI5MjQ4MWEzMzkyZDNkNWExZTkxN2MyZDY1YWE0MTQwZjY5Li42MTIyMTgyYjgzYTYxYWFjYjk2
ZWJhODYxNTdmMzM2N2Y5MzYxNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcxICsyNSw1MCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCitGRU9mZnNldDo6RkVPZmZz
ZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFT2Zmc2V0
KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJlZjxGRU9mZnNldD4g
RkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQorUmVm
PEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCi12b2lkIEZFT2Zmc2V0Ojpz
ZXREeChmbG9hdCBkeCkKK0Zsb2F0UmVjdCBGRU9mZnNldDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAg
bV9keCA9IGR4OwotfQorICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8g
aW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotdm9pZCBGRU9mZnNldDo6c2V0
RHkoZmxvYXQgZHkpCi17Ci0gICAgbV9keSA9IGR5OworICAgIGltYWdlUmVjdC5tb3ZlKGdlb21l
dHJ5LnJlc29sdmVJbWFnZVNpemUoeyBtX2R4LCBtX2R5IH0pKTsKKworICAgIHJldHVybiBnZW9t
ZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOwogfQogCi12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Citib29sIEZFT2Zmc2V0Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cykgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCkt
PmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsg
bV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRS
ZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhh
SW1hZ2UoKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zp
bHRlckltYWdlVmVjdG9yIEZFT2Zmc2V0Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIEZsb2F0UmVjdCBk
cmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBkcmF3
aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1f
ZHkgfSkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1
ZmZlciwgZHJhd2luZ1JlZ2lvbik7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVPZmZzZXQ6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlw
ZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU9mZnNldCI7Ci0gICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBk
eD1cIiIgPDwgZHgoKSA8PCAiXCIgZHk9XCIiIDw8IGR5KCkgPDwgIlwiXVxuIjsKLQotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8
ICIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIl1cbiI7CiAgICAg
cmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2YWU1Yzc0YWFiNWFh
MTY3ZmIxZTY5ZS4uMWFhYWVkYmM4YWMwYjlmYmNmZTA5NWFlNTE2YzMwZjc1ZmEyMDUxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjIsMzQgKzIzLDU5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBk
eSk7CiAKLSAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KLSAgICB2b2lkIHNl
dER4KGZsb2F0KTsKKyAgICB2b2lkIHNldER4KGZsb2F0IGR4KSB7IG1fZHggPSBkeDsgfQorICAg
IHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9CiAKLSAgICBmbG9hdCBkeSgpIGNv
bnN0IHsgcmV0dXJuIG1fZHk7IH0KLSAgICB2b2lkIHNldER5KGZsb2F0KTsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gZGVj
b2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU9mZnNldChGaWx0ZXImLCBmbG9hdCBk
eCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKLSAgICBj
b25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFT2Zmc2V0Ijsg
fQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmls
dGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlT
b2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fZHg7CiAgICAg
ZmxvYXQgbV9keTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFT2Zmc2V0
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fZHg7
CisgICAgZW5jb2RlciA8PCBtX2R5OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3Rk
OjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBGRU9mZnNldDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHg7CisgICAgZGVjb2RlciA+PiBkeDsK
KyAgICBpZiAoIWR4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gZHk7CisgICAgZGVjb2RlciA+PiBkeTsKKyAgICBpZiAoIWR5KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFT2Zmc2V0OjpjcmVhdGUo
KmR4LCAqZHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2ExNDRjLi42OTky
NDQzM2Y5M2ZlNGYyMWZlYmJhYmY0ODQ0NTg3NjZlZWU2Yzk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFy
TGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMiw0OSArMjMsMjYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGRVNwZWN1bGFyTGlnaHRpbmcuaCIKIAotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
U3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJj
ZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0Nv
bG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQs
IGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJj
ZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRpbmcpCitSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNw
ZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYgc291cmNlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJM
aWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4
cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291
cmNlKSkpOwogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6
OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBv
bmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3Bl
Y3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYg
c291cmNlKQorICAgIDogRkVMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmcoKSA9
IGRlZmF1bHQ7Ci0KLWJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50
KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJDb25zdGFudCA9
PSBzcGVjdWxhckNvbnN0YW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxh
ckNvbnN0YW50ID0gc3BlY3VsYXJDb25zdGFudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCkKLXsKLSAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IHNwZWN1bGFyRXhwb25l
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVj
dWxhckV4cG9uZW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0U3RyZWFtJiBGRVNwZWN1
bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFU3BlY3Vs
YXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVTcGVjdWxh
ckxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJm
YWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAic3BlY3VhbENvbnN0YW50PVwiIiA8PCBtX3Nw
ZWN1bGFyQ29uc3RhbnQgPDwgIlwiICIKICAgICAgICA8PCAic3BlY3VsYXJFeHBvbmVudD1cIiIg
PDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRl
bnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5OGQzOTgx
OGJmM2IyNDk1OGEuLjVkZTkzMzlkYzMwNjZhMzhlZTdiYTFiZTY0OGIxOTc1ZWJmOGMxNjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMjAgKzI4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwg
Y29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdo
dFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7Ci0KLSAgICBm
bG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50
OyB9Ci0gICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKLQotICAgIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAg
ICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOwotCi0gICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiBwcml2YXRl
OgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBGRVNw
ZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKKwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChG
RVNwZWN1bGFyTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggMzVjNTFjYmIyMjlkZWU5NjQyZGMxZTdkY2Ew
YzVkYjJmY2FjMjBhZC4uMjczYWUxN2MyNzg0NmY5OTI5M2UzZmY5ZjlmYzUzZjhkZTU3MDc0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBN
YXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMSw4MCArMjIsNDMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVRpbGUu
aCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNs
dWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXIm
IGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitSZWY8RkVU
aWxlPiBGRVRpbGU6OmNyZWF0ZSgpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxl
KCkpOwogfQogCi1SZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZF
VGlsZTo6RkVUaWxlKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRVRpbGUpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOwogfQogCi12b2lkIEZFVGlsZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0vLyBG
SVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21w
aWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGlu
QnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8
fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50
aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0g
ICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBv
ZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxl
UmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExv
Y2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExv
Y2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJF
ZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7Ci0gICAgICAgIEZp
bHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVy
LmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwot
ICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0g
dGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWlu
TWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRp
bGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkubG9jYXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJbWFnZUNvcHkgPSBJbWFnZUJ1
ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZSkpOwotICAgIGlmICgh
dGlsZUltYWdlQ29weSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHBh
dHRlcm5UcmFuc2Zvcm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZl
Y3RMb2NhdGlvbiAtIG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAgIGF1dG8gcGF0dGVybiA9IFBh
dHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1
ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxs
UGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAg
Ly8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIGRyYXdpbmdSZWN0IGZvciA8ZmVUaWxlPi4KKyAgICBy
ZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9
CiAKLVRleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorYm9vbCBGRVRp
bGU6OmlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAog
ewotICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIl1cbiI7
CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7Cit9CiAKLSAgICBUZXh0U3Ry
ZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKK0ZpbHRlckltYWdlVmVj
dG9yIEZFVGlsZTo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VM
YXN0KCkgfTsKK30KIAorVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKK3sKKyAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZVRpbGVdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDli
ZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uN2JlMjVlMjgxZDUzNGNhYWEz
ZjhiZWJlNWEzMGQ1NjQxYmI5NDE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyNyArMjMsMjcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgot
ICAgIEZFVGlsZShGaWx0ZXImKTsKKyAgICBGRVRpbGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQorICAgIEZsb2F0UmVj
dCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVGlsZTsgfQorICAgIGJv
b2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAg
ICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkg
b3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVj
dFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVUaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGFjMjM0NmU4YTRiYTU4YWFhOTI0YTZk
NjdiZDVlNGI3N2RkMjI2OGYuLjdhM2JkOGYxZmU5NzRmODZiNjQxZDI1NzQ2NDljNjJjYThjOWRl
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgogICogQ29weXJpZ2h0IChD
KSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMzEgKzI2LDE5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8qCi0gICAgUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFs
Z29yaXRobSBpczoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVk
ZSA9IDE2ODA3IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2
NDcsIHIgPSBzZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4g
MTAgcC4gMTE5NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQg
cHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJh
dGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBp
bnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVt
ID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxp
dHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3Qg
aW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIg
PSAyODM2OyAvLyBtICUgYQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUo
VHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVx
dWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworfQog
Ci1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5
cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQg
bnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIFR5cGU6OlR1cmJ1bGVuY2UpCi0gICAgLCBtX3R5cGUodHlwZSkKK0ZFVHVy
YnVsZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9h
dCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBm
bG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZF
VHVyYnVsZW5jZSkKKyAgICAsIG1fdHVyYnVsZW5jZVR5cGUodHVyYnVsZW5jZVR5cGUpCiAgICAg
LCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAgICwgbV9iYXNlRnJlcXVlbmN5
WShiYXNlRnJlcXVlbmN5WSkKICAgICAsIG1fbnVtT2N0YXZlcyhudW1PY3RhdmVzKQpAQCAtNTks
NDA1ICs0Nyw5IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBU
dXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1
bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlw
ZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBu
dW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBi
YXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKLX0KLQotYm9v
bCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKLXsKLSAgICBpZiAo
bV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBl
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0QmFzZUZyZXF1
ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi17Ci0gICAgaWYgKG1fYmFzZUZyZXF1ZW5jeVkg
PT0gYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Jhc2VGcmVx
dWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVU
dXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCBiYXNlRnJlcXVlbmN5WCkKLXsKLSAg
ICBpZiAobV9iYXNlRnJlcXVlbmN5WCA9PSBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVlbmN5WDsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFNlZWQoZmxvYXQgc2VlZCkKLXsK
LSAgICBpZiAobV9zZWVkID09IHNlZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3Nl
ZWQgPSBzZWVkOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0
TnVtT2N0YXZlcyhpbnQgbnVtT2N0YXZlcykKLXsKLSAgICBpZiAobV9udW1PY3RhdmVzID09IG51
bU9jdGF2ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX251bU9jdGF2ZXMgPSBudW1P
Y3RhdmVzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U3Rp
dGNoVGlsZXMoYm9vbCBzdGl0Y2gpCi17Ci0gICAgaWYgKG1fc3RpdGNoVGlsZXMgPT0gc3RpdGNo
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaDsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBp
cyBhbiBhZGFwdGVkIHZlcnNpb24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNp
ZmljYXRpb246Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVU
dXJidWxlbmNlCi0KLS8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9u
ZyBGRVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3Vs
dCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQg
LyBzX3JhbmRRKTsKLSAgICBpZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3Jh
bmRNYXhpbXVtOwotICAgIHNlZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
aW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICog
KDMgLSAyICogdCk7Ci19Ci0KLWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0
IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0K
LQotdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSkKLXsKLSAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOwotCi0gICAgLy8gVGhlIHNlZWQg
dmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYg
KHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShw
YWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFp
bnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRh
LnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBm
b3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0
YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tT
aXplOwotICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChw
YWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkg
LyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3Jh
ZGllbnRbMV0pOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3Qo
Z3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5v
cm1hbGl6YXRpb25GYWN0b3I7Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0
aW9uRmFjdG9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tT
aXplIC0gMTsgaSA+IDA7IC0taSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUg
c19ibG9ja1NpemU7Ci0gICAgICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8
IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVj
dG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEubGF0
dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVj
dG9yW2ldOwotICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hh
bm5lbCkgewotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxv
Y2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0g
ICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBp
XVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotRkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0
ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0
JiBiYXNlRnJlcXVlbmN5WSkgY29uc3QKLXsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgp
OwotICAgIGZsb2F0IHRpbGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQo
dGlsZVdpZHRoID4gMCAmJiB0aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGlu
ZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAg
IC8vIHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYg
KGJhc2VGcmVxdWVuY3lYKSB7Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0
aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhp
Z2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lk
dGg7Ci0gICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2Nv
cmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dG
cmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBi
YXNlRnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1
ZW5jeVkpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQg
KiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVl
bmN5ID0gY2VpbGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0g
ICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kg
LyBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVl
bmN5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVx
dWVuY3k7Ci0gICAgfQotCi0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERh
dGEud2lkdGggPSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRj
aERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0
Y2hEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAg
IHN0aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0K
LSAgICByZXR1cm4gc3RpdGNoRGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBT
Vkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVs
ZW5jZUVsZW1lbnQuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9p
c2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYg
c3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0Ci17Ci0gICAg
c3RydWN0IE5vaXNlUG9zaXRpb24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGlu
IHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRo
ZSBzcGVjIHRleHQuCi0gICAgICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUg
c3BlYyB0ZXh0LgotCi0gICAgICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAg
ICAvLyAgYngwID0gKGludCl0OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAg
ICAgICAgLy8gIHJ4MCA9IHQgLSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9
IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19j
YXN0PGludD4ocG9zaXRpb24pOwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwot
ICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICB2b2lkIHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAg
ICAgICAgICAvLyAgIGJ4MCAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYg
KGluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAg
ICAgICAgICAgIC8vIGlmIChieDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAg
IC8vICAgYngxIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dElu
ZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngo
KSk7Ci0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8v
IElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlm
IChtX3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0
aCwgc3RpdGNoRGF0YS53cmFwWCk7Ci0gICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5o
ZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOwotICAgIH0KLQotICAgIC8vIGJ4MCAmPSBCTTsKLSAg
ICAvLyBieDEgJj0gQk07Ci0gICAgLy8gYnkwICY9IEJNOwotICAgIC8vIGJ5MSAmPSBCTTsKLSAg
ICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VYLm5leHRJbmRleCAmPSBz
X2Jsb2NrTWFzazsKLSAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZ
Lm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLQotICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9y
W2J4MF07Ci0gICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKLSAgICBpbnQgbGF0dGlj
ZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOwotICAg
IGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lz
ZVgubmV4dEluZGV4XTsKLQotICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7Ci0gICAg
Ly8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKLSAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZl
KG5vaXNlWC5mcmFjdGlvbik7Ci0gICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJh
Y3Rpb24pOwotCi0gICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsK
LSAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQotICAgICAgICBpbnQg
YjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVku
aW5kZXhdOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUg
PSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKLSAgICAgICAgZmxvYXQgdSA9IG5vaXNl
WC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotCi0gICAgICAgIC8v
IGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07Ci0gICAgICAgIGludCBiMTAgPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhd
OwotICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50
W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKLSAgICAg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOwotICAgICAgICBmbG9h
dCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFb
MV07Ci0gICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKLSAgICAgICAgZmxvYXQgYSA9IGxp
bmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwotCi0gICAgICAgIC8vIGIwMSA9IHVMYXR0aWNl
U2VsZWN0b3JbaSArIGJ5MV07Ci0gICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOwotICAgICAgICAvLyBy
eTEgPSByeTAgLSAxLjBmOwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxd
W2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOwotICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9u
ICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjEx
ID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKLSAgICAgICAgaW50IGIxMSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhd
OwotICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEg
KiBxWzBdICsgcnkxICogcVsxXTsKLSAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMTFdOwotICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSAr
IChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07Ci0gICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1
LCB2KTsKLSAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwot
Ci0gICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKLSAgICAgICAgcmV0dXJuIGxpbmVh
ckludGVycG9sYXRpb24oc3ksIGEsIGIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAg
ICBub2lzZUZvckNoYW5uZWwoMCksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKLSAgICAg
ICAgbm9pc2VGb3JDaGFubmVsKDIpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKLSAgICB9
OwotfQotCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50
cy4KLS8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4o
U1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKK0Zsb2F0UmVjdCBG
RVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjpjbGFtcDx1
aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1swXSAqIDI1NSksIDAsIDI1
NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENv
bXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+
KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzJdICogMjU1KSwgMCwgMjU1KSwKLSAg
ICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50
c1szXSAqIDI1NSksIDAsIDI1NSksCi0gICAgfTsKLX0KLQotQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29u
c3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7Ci0gICAgRmxvYXRQb2ludCBub2lzZVZlY3Rv
cihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIHBh
aW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0gICAgZmxvYXQgcmF0aW8gPSAxOwotICAgIGZv
ciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAg
ICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKLQotICAgICAgICBub2lzZVZlY3Rv
ci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOwotICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5v
aXNlVmVjdG9yLnkoKSAqIDIpOwotICAgICAgICByYXRpbyAqPSAyOwotCi0gICAgICAgIGlmICht
X3N0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3Vi
dHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAotICAg
ICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5n
IGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAgICAg
ICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNl
OwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0aXRj
aERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAv
IDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQg
KiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6
RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJhc2Vk
Q29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Ci19Ci0KLXZvaWQgRkVU
dXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQg
c3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKLXsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0K
LSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmls
dGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UG9pbnQg
cG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAgaW50IGluZGV4T2ZQaXhl
bENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZm
aW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9y
bSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIHBvaW50LnNldFkocG9pbnQu
eSgpICsgMSk7Ci0gICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgewotICAgICAg
ICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQpOwotICAgICAgICAg
ICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5z
ZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwp
OwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFy
YW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPmZpbGxSZWdp
b24oKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBh
cmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5k
WSk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxl
KCkpOwotCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
SW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpLnNpemUoKSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5j
eVg7Ci0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0
aXRjaERhdGEgc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
KG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAg
aW5pdFBhaW50KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFy
ZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgbWF4
TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJl
ciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4
TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAg
IFdURjo6UGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldl
YkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJl
cik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAgIGF1dG8g
bnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bUpv
YnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXpl
ZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNX
aXRoRXh0cmEiIGpvYnMuCi0gICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51
bUpvYnM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVt
Sm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7Ci0KLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBG
aWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsK
LSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBw
YXJhbXMucGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy5z
dGFydFkgPSBzdGFydFk7Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBqb2JIZWlnaHQgPSAo
aSA8IGpvYnNXaXRoRXh0cmEpID8gc3RlcFkgKyAxIDogc3RlcFk7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmVuZFkgPSBwYXJhbXMuc3RhcnRZICsgam9iSGVpZ2h0OwotICAgICAgICAgICAgICAg
IHN0YXJ0WSArPSBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFs
bGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBu
byByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgot
ICAgIGZpbGxSZWdpb24oZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIDAsIGhlaWdodCk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lv
bihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKQEAgLTQ3NiwxNSArNjgsMTAg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVu
Y2VUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRVR1cmJ1bGVu
Y2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUdXJidWxlbmNlIjsKLSAgICBGaWx0
ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAg
ICB0cyA8PCAiIHR5cGU9XCIiIDw8IHR5cGUoKSA8PCAiXCIgIgotICAgICAgIDw8ICJiYXNlRnJl
cXVlbmN5PVwiIiA8PCBiYXNlRnJlcXVlbmN5WCgpIDw8ICIsICIgPDwgYmFzZUZyZXF1ZW5jeVko
KSA8PCAiXCIgIgotICAgICAgIDw8ICJzZWVkPVwiIiA8PCBzZWVkKCkgPDwgIlwiICIKLSAgICAg
ICA8PCAibnVtT2N0YXZlcz1cIiIgPDwgbnVtT2N0YXZlcygpIDw8ICJcIiAiCi0gICAgICAgPDwg
InN0aXRjaFRpbGVzPVwiIiA8PCBzdGl0Y2hUaWxlcygpIDw8ICJcIl1cbiI7CisgICAgdHMgPDwg
IiB0eXBlPVwiIiA8PCBtX3R1cmJ1bGVuY2VUeXBlIDw8ICJcIiAiIDw8ICJiYXNlRnJlcXVlbmN5
PVwiIiA8PCBtX2Jhc2VGcmVxdWVuY3lYIDw8ICIsICIgPDwgbV9iYXNlRnJlcXVlbmN5WSA8PCAi
XCIgIiA8PCAic2VlZD1cIiIgPDwgbV9zZWVkIDw8ICJcIiAiIDw8ICJudW1PY3RhdmVzPVwiIiA8
PCBtX251bU9jdGF2ZXMgPDwgIlwiICIgPDwgInN0aXRjaFRpbGVzPVwiIiA8PCBtX3N0aXRjaFRp
bGVzIDw8ICJcIl1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0
ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi43ZTAzODc0MjI2NzdjYjY1
ZGUwYzYwZmFiNDU3MGM4ZTU3MzgxNTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTQsNyArNCw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw5ICsyNCw3IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzgsOTEgKzM2LDI4IEBAIGVudW0gY2xhc3MgVHVyYnVsZW5jZVR5cGUgewogCiBjbGFz
cyBGRVR1cmJ1bGVuY2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9h
dCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMpOwogCi0gICAgVHVyYnVsZW5jZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQotICAgIGJvb2wgc2V0VHlwZShUdXJidWxlbmNlVHlwZSk7CisgICAgdm9p
ZCBzZXRUdXJidWxlbmNlVHlwZShUdXJidWxlbmNlVHlwZSB0dXJidWxlbmNlVHlwZSkgeyBtX3R1
cmJ1bGVuY2VUeXBlID0gdHVyYnVsZW5jZVR5cGU7IH0KKyAgICB2b2lkIHNldEJhc2VGcmVxdWVu
Y3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKSB7IG1fYmFzZUZyZXF1ZW5jeVggPSBiYXNlRnJlcXVl
bmN5WDsgfQorICAgIHZvaWQgc2V0QmFzZUZyZXF1ZW5jeVkoZmxvYXQgYmFzZUZyZXF1ZW5jeVkp
IHsgbV9iYXNlRnJlcXVlbmN5WSA9IGJhc2VGcmVxdWVuY3lZOyB9CisgICAgdm9pZCBzZXROdW1P
Y3RhdmVzKGludCBudW1PY3RhdmVzKSB7IG1fbnVtT2N0YXZlcyA9IG51bU9jdGF2ZXM7IH0KKyAg
ICB2b2lkIHNldFNlZWQoZmxvYXQgc2VlZCkgeyBtX3NlZWQgPSBzZWVkOyB9CisgICAgdm9pZCBz
ZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaFRpbGVzKSB7IG1fc3RpdGNoVGlsZXMgPSBzdGl0Y2hU
aWxlczsgfQogCi0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVgoKSBjb25zdCB7IHJldHVybiBtX2Jh
c2VGcmVxdWVuY3lYOyB9Ci0gICAgYm9vbCBzZXRCYXNlRnJlcXVlbmN5WChmbG9hdCk7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRVR1cmJ1
bGVuY2U+PiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkoKSBj
b25zdCB7IHJldHVybiBtX2Jhc2VGcmVxdWVuY3lZOyB9Ci0gICAgYm9vbCBzZXRCYXNlRnJlcXVl
bmN5WShmbG9hdCk7Citwcml2YXRlOgorICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBmbG9hdCBzZWVkKCkgY29u
c3QgeyByZXR1cm4gbV9zZWVkOyB9Ci0gICAgYm9vbCBzZXRTZWVkKGZsb2F0KTsKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW50IG51bU9jdGF2ZXMoKSBjb25zdCB7IHJldHVy
biBtX251bU9jdGF2ZXM7IH0KLSAgICBib29sIHNldE51bU9jdGF2ZXMoaW50KTsKKyAgICBib29s
IGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IGJvb2wgc3RpdGNoVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3N0aXRjaFRpbGVzOyB9Ci0gICAg
Ym9vbCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1Np
emUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXpl
IC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgx
MDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KLQot
ICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWlu
dGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBhaW50aW5nU2Vl
ZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAgICAgICAgICAs
IGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVl
bmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgbG9u
ZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJd
OwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAg
ICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsK
LSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5lIGxvbmcgcmFu
ZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgU3RpdGNo
RGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNo
IHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsg
MCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWlnaHQgeyAwIH07
Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwotCi0gICAgc3RydWN0IEZp
bGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7Ci0gICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGluZ0RhdGEq
IHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgICAgICBp
bnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQg
ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwotCi0gICAgRkVUdXJidWxl
bmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJv
b2wpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRVR1cmJ1bGVuY2UiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQg
aW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGlu
ZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJl
cXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNv
bnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkm
LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkg
Y29uc3Q7Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKLQotICAg
IFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKKyAgICBUdXJidWxlbmNlVHlwZSBtX3R1cmJ1bGVuY2VU
eXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVl
bmN5WTsKICAgICBpbnQgbV9udW1PY3RhdmVzOwpAQCAtMTMwLDUgKzY1LDY3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3N0aXRjaFRpbGVzOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgRkVUdXJidWxlbmNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IG1fdHVyYnVsZW5jZVR5cGU7CisgICAgZW5jb2RlciA8PCBtX2Jhc2VGcmVx
dWVuY3lYOworICAgIGVuY29kZXIgPDwgbV9iYXNlRnJlcXVlbmN5WTsKKyAgICBlbmNvZGVyIDw8
IG1fbnVtT2N0YXZlczsKKyAgICBlbmNvZGVyIDw8IG1fc2VlZDsKKyAgICBlbmNvZGVyIDw8IG1f
c3RpdGNoVGlsZXM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PFJlZjxGRVR1cmJ1bGVuY2U+PiBGRVR1cmJ1bGVuY2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8VHVyYnVsZW5jZVR5cGU+IHR1cmJ1bGVuY2VUeXBlOwor
ICAgIGRlY29kZXIgPj4gdHVyYnVsZW5jZVR5cGU7CisgICAgaWYgKCF0dXJidWxlbmNlVHlwZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPGZs
b2F0PiBiYXNlRnJlcXVlbmN5WDsKKyAgICBkZWNvZGVyID4+IGJhc2VGcmVxdWVuY3lYOworICAg
IGlmICghYmFzZUZyZXF1ZW5jeVgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYmFzZUZyZXF1ZW5jeVk7CisgICAgZGVjb2RlciA+
PiBiYXNlRnJlcXVlbmN5WTsKKyAgICBpZiAoIWJhc2VGcmVxdWVuY3lZKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxpbnQ+IG51bU9jdGF2ZXM7Cisg
ICAgZGVjb2RlciA+PiBudW1PY3RhdmVzOworICAgIGlmICghbnVtT2N0YXZlcykKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHNlZWQ7Cisg
ICAgZGVjb2RlciA+PiBzZWVkOworICAgIGlmICghc2VlZCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc3RpdGNoVGlsZXM7CisgICAgZGVj
b2RlciA+PiBzdGl0Y2hUaWxlczsKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKCp0dXJi
dWxlbmNlVHlwZSwgKmJhc2VGcmVxdWVuY3lYLCAqYmFzZUZyZXF1ZW5jeVksICpudW1PY3RhdmVz
LCAqc2VlZCwgKnN0aXRjaFRpbGVzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpU
dXJidWxlbmNlVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAg
IFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VU
eXBlOjpVbmtub3duLAorICAgICAgICBXZWJDb3JlOjpUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5v
aXNlLAorICAgICAgICBXZWJDb3JlOjpUdXJidWxlbmNlVHlwZTo6VHVyYnVsZW5jZQorICAgID47
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxU
RVJfRUZGRUNUKEZFVHVyYnVsZW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjc2OTY1MDI4OTQ2MjBi
MDI3YTgyNGM2NDJmNjRjMDQzYTAxYWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0
cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVj
dG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RkOjp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IEZpbHRlcjo6YXBw
bHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEZpbHRl
ckltYWdlVmVjdG9yIHN0YWNrOworICAgIEZpbHRlclJlc3VsdCByZXN1bHQocmVuZGVyaW5nTW9k
ZSgpKTsKKworICAgIGlmIChzb3VyY2VJbWFnZSkgeworICAgICAgICBhdXRvIGltYWdlID0gRmls
dGVySW1hZ2U6OmNyZWF0ZShnZW9tZXRyeS5maWx0ZXJSZWdpb24oKSwgc291cmNlSW1hZ2VSZWN0
LCB7ICpzb3VyY2VJbWFnZSB9KTsKKyAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIHN0YWNrLmFwcGVuZChpbWFnZS5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICB9CisKKyAgICBpZiAoIWFwcGx5KHJlc3VsdCwgc3RhY2ssIGdlb21ldHJ5KSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPT0gMSk7CisgICAgYXV0
byBpbWFnZSA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgaW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgcmV0dXJuIHsgaW1hZ2Ut
PmltYWdlQnVmZmVyKCksIGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbWFnZS0+aW1hZ2VSZWN0KCkp
IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGEyZDk5NzkzYjBkYjIyNThi
YzQ3NmRkY2MyOWMwY2UyNjExMGJjMWYuLmZkZjU5OWMyY2MwMjE2YjQ3NmY1OTMzNDMxNjQ5MzEw
MGI1N2MyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw1
OSArMjEsMjIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RmlsdGVyRWZmZWN0OworY2xhc3MgRmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKKyAg
ICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6YXBwbHk7CiAKLWNsYXNzIEZpbHRlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZpbHRlcj4gewogcHVibGljOgotICAgIEZpbHRlcihjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBmbG9hdCBmaWx0ZXJTY2FsZSA9IDEpCi0gICAgICAg
IDogbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAgICAgLCBtX2Zp
bHRlclNjYWxlKGZpbHRlclNjYWxlKQotICAgIHsgfQotICAgIHZpcnR1YWwgfkZpbHRlcigpID0g
ZGVmYXVsdDsKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIHZvaWQgc2V0
U291cmNlSW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNl
SW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsgfQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSgpIHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KLQotICAgIEZsb2F0U2l6ZSBm
aWx0ZXJSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1
dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9Ci0KLSAgICBm
bG9hdCBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7IH0KLSAgICB2
b2lkIHNldEZpbHRlclNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBzY2FsZTsg
fQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07IH0KLQotICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQotICAgIHZvaWQg
c2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJp
bmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmlsdGVy
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0ZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7IHJldHVybiBzaXplICog
bV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNl
SW1hZ2VSZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lv
bigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJT
cGFjZSgpIGNvbnN0ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnR1cGxlPFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gYXBwbHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBj
b25zdDsKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IEZpbHRlcihjb25zdCBGbG9hdFNpemUm
IGZpbHRlclJlc29sdXRpb24pCi0gICAgICAgIDogbV9maWx0ZXJSZXNvbHV0aW9uKGZpbHRlclJl
c29sdXRpb24pCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2Rl
IG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBm
bG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjpGaWx0
ZXJGdW5jdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRh
cnlTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42YmU3N2RlY2QzMWYyOGU1ZTI1ODAyZGUzZmNjZjhkNDEzZDQz
NjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckJvdW5kYXJ5U2V0IHsKK3B1YmxpYzoKKyAgICBl
bnVtIGNsYXNzIEZsYWdzIHsKKyAgICAgICAgSGFzWCAgICAgID0gMSA8PCAwLAorICAgICAgICBI
YXNZICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1dpZHRoICA9IDEgPDwgMiwKKyAgICAgICAg
SGFzSGVpZ2h0ID0gMSA8PCAzCisgICAgfTsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KCkgPSBk
ZWZhdWx0OworCisgICAgRmlsdGVyQm91bmRhcnlTZXQoY29uc3QgRmxvYXRSZWN0JiBib3VuZGFy
aWVzLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQorICAgICAgICA6IG1fYm91bmRhcmllcyhib3Vu
ZGFyaWVzKQorICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIHN0
ZDo6b3B0aW9uYWw8ZmxvYXQ+IHgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3Mu
Y29udGFpbnMoRmxhZ3M6Okhhc1gpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy54
KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4geSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlu
cyhGbGFnczo6SGFzWSkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLnkoKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZs
b2F0PiB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhG
bGFnczo6SGFzV2lkdGgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy53aWR0aCgp
OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IGhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250
YWlucyhGbGFnczo6SGFzSGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMu
aGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRlckJvdW5kYXJ5
U2V0PiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5k
YXJpZXM7CisgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOworfTsKKwordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KK3ZvaWQgRmlsdGVyQm91bmRhcnlTZXQ6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9ib3VuZGFyaWVzOworICAgIGVuY29kZXIg
PDwgbV9mbGFnczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8
RmlsdGVyQm91bmRhcnlTZXQ+IEZpbHRlckJvdW5kYXJ5U2V0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gYm91bmRhcmllczsKKyAgICBk
ZWNvZGVyID4+IGJvdW5kYXJpZXM7CisgICAgaWYgKCFib3VuZGFyaWVzKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxPcHRpb25TZXQ8RmxhZ3M+PiBm
bGFnczsKKyAgICBkZWNvZGVyID4+IGZsYWdzOworICAgIGlmICghZmxhZ3MpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRmlsdGVyQm91bmRhcnlTZXQoKmJvdW5k
YXJpZXMsICpmbGFncyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmlsdGVyQm91
bmRhcnlTZXQ6OkZsYWdzPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzLAorCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
Qm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNZLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJCb3VuZGFy
eVNldDo6RmxhZ3M6Okhhc1dpZHRoLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNl
dDo6RmxhZ3M6Okhhc0hlaWdodAorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2Ri
MTA4Li40NzkxYzlhM2Y1YTQ1YmJkN2RmYzkzYjIzNThmY2RiN2ExZGZmNmUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCkBAIC0yNCw2NjAgKzI0LDEwOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsdGVy
R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlclJl
c3VsdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVv
bi5oPgotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRl
L0FjY2VsZXJhdGUuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVm
ZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2Zp
bHRlcihmaWx0ZXIpCi0gICAgLCBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQot
Ci1GaWx0ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRmlsdGVyRWZm
ZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
IGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3Vu
ZGFyeVNldCYgYm91bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9
IEludFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAg
ICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci19CisgICAgLy8gVGhpcyBmdW5jdGlv
biBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXItZWZmZWN0cy0xLyNGaWx0
ZXJQcmltaXRpdmVTdWJSZWdpb24uCisgICAgRmxvYXRSZWN0IGRlZmF1bHRQcmltaXRpdmVTdWJy
ZWdpb247CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QoKQotewot
ICAgIC8vIEZpbHRlcnMgaW4gU1ZHIGNsaXAgdG8gcHJpbWl0aXZlIHN1YnJlZ2lvbiwgd2hpbGUg
Q1NTIGRvZXNuJ3QuCi0gICAgaWYgKG1fY2xpcHNUb0JvdW5kcykKLSAgICAgICAgbV9hYnNvbHV0
ZVBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChtX21heEVmZmVjdFJlY3QpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZW5jbG9zaW5nSW50
UmVjdChtX21heEVmZmVjdFJlY3QpKTsKLX0KLQotRmxvYXRQb2ludCBGaWx0ZXJFZmZlY3Q6Om1h
cFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQgdXNlclNwYWNlUG9pbnQpIGNv
bnN0Ci17Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gbWFwUG9pbnQodXNlclNwYWNl
UG9pbnQsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBtX2Fic29sdXRlVW5jbGlwcGVkU3Vi
cmVnaW9uKTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5s
b2NhdGlvbigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2ludDsKLX0KLQotSW50UmVjdCBGaWx0
ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0
JiBlZmZlY3RSZWN0KSBjb25zdAotewotICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0
ZVBhaW50UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5s
b2NhdGlvbigpKTsKLSAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGhhc1Jlc3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKLQotICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnNjYWxlKHNjYWxlKS50cmFu
c2xhdGUoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRyYW5z
Zm9ybS5tYXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIC8vIEZFVGlsZSwgRkVUdXJi
dWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVy
IHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVjdCBzdWJyZWdpb247Ci0gICAgaWYg
KHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7
Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bWJl
ck9mSW5wdXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVT
dWJyZWdpb24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCk7Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdp
b24pOwotICAgICAgICB9CisgICAgLy8gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIHN1YnJlZ2lvbiBm
b3IgPGZlVGlsZT4uCisgICAgaWYgKCFpbnB1dHMuaXNFbXB0eSgpICYmIHR5cGUoKSAhPSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkgeworICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5w
dXRzKQorICAgICAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi51bml0ZShpbnB1dC0+
cHJpbWl0aXZlU3VicmVnaW9uKCkpOwogICAgIH0gZWxzZQotICAgICAgICBzdWJyZWdpb24gPSBt
X2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgLy8gQWZ0ZXIgY2FsbGlu
ZyBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gb24gdGhlIHRhcmdldCBlZmZlY3Qs
IHJlc2V0IHRoZSBzdWJyZWdpb24gYWdhaW4gZm9yIDxmZVRpbGU+LgotICAgIGlmIChmaWx0ZXJF
ZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9
IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICBhdXRvIGJvdW5kYXJp
ZXMgPSBlZmZlY3RCb3VuZGFyaWVzKCk7Ci0gICAgaWYgKGhhc1goKSkKLSAgICAgICAgc3VicmVn
aW9uLnNldFgoYm91bmRhcmllcy54KCkpOwotICAgIGlmIChoYXNZKCkpCi0gICAgICAgIHN1YnJl
Z2lvbi5zZXRZKGJvdW5kYXJpZXMueSgpKTsKLSAgICBpZiAoaGFzV2lkdGgoKSkKLSAgICAgICAg
c3VicmVnaW9uLnNldFdpZHRoKGJvdW5kYXJpZXMud2lkdGgoKSk7Ci0gICAgaWYgKGhhc0hlaWdo
dCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJpZXMuaGVpZ2h0KCkpOwot
Ci0gICAgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7Ci0KLSAgICBhdXRv
IGFic29sdXRlU3VicmVnaW9uID0gbV9maWx0ZXIuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0
KHN1YnJlZ2lvbik7Ci0gICAgYXV0byBmaWx0ZXJSZXNvbHV0aW9uID0gbV9maWx0ZXIuZmlsdGVy
UmVzb2x1dGlvbigpOwotICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRp
b24pOwotICAgIC8vIFNhdmUgdGhpcyBiZWZvcmUgY2xpcHBpbmcgc28gd2UgY2FuIHVzZSBpdCB0
byBtYXAgbGlnaHRpbmcgcG9pbnRzIGZyb20gdXNlciBzcGFjZSB0byBidWZmZXIgY29vcmRpbmF0
ZXMuCi0gICAgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oYWJzb2x1dGVTdWJyZWdpb24p
OworICAgICAgICBkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uID0gZ2VvbWV0cnkuZmlsdGVyUmVn
aW9uKCk7CiAKLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciBy
ZWdpb24uCi0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1fZmlsdGVyLmZp
bHRlclJlZ2lvbigpOwotICAgIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRl
clJlc29sdXRpb24pOwotICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0ZVNj
YWxlZEZpbHRlclJlZ2lvbik7CisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAot
ICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdpb24pOwotICAgIHJldHVybiBzdWJy
ZWdpb247Ci19CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFgoYm91bmRhcnlTZXQueCgpLnZh
bHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ueCgpKSk7CisgICAgcHJpbWl0aXZlU3Vi
cmVnaW9uLnNldFkoYm91bmRhcnlTZXQueSgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJy
ZWdpb24ueSgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFdpZHRoKGJvdW5kYXJ5U2V0
LndpZHRoKCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi53aWR0aCgpKSk7Cisg
ICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyeVNldC5oZWlnaHQoKS52YWx1
ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLmhlaWdodCgpKSk7CiAKLUZpbHRlckVmZmVj
dCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obnVtYmVyIDwgbV9pbnB1dEVmZmVj
dHMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsK
LX0KLQotc3RhdGljIHVuc2lnbmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCpl
ZmZlY3QsIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCi17Ci0gICAg
YWxsRWZmZWN0cy5hZGQoZWZmZWN0KTsKLSAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5udW1i
ZXJPZkVmZmVjdElucHV0cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7
Ci0gICAgICAgIGNvbGxlY3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGFsbEVmZmVjdHMuc2l6ZSgpOwotfQotCi11bnNpZ25lZCBGaWx0ZXJFZmZlY3Q6OnRvdGFs
TnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdAotewotICAgIEhhc2hTZXQ8Y29uc3QgRmlsdGVy
RWZmZWN0Kj4gYWxsRWZmZWN0czsKLSAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhpcywgYWxs
RWZmZWN0cyk7CisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotdm9pZCBGaWx0
ZXJFZmZlY3Q6OmFwcGx5KCkKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAog
ewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNp
emUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMu
YXQoaSkuZ2V0KCk7Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNS
ZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlY3Q7
CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgZHJhd2luZ1JlY3QudW5p
dGUoaW5wdXQtPmltYWdlUmVjdCgpKTsKIAotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3Vs
dHMgdG8gdGhlIGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3Bh
Y2UpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwg
IlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJz
b2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9u
IDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJc
biAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2Fs
ZSAiIDw8IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAi
IDw8IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlcXVp
cmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0
RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWRkIHBsYXRmb3Jt
IHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KLSAgICBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJp
bWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQorYm9vbCBG
aWx0ZXJFZmZlY3Q6OmFwcGx5UGxhdGZvcm0oRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmls
dGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIGNvbnN0CiB7Ci0gICAgLy8gTXVzdCBvcGVyYXRl
IG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52
YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRh
KCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0g
ICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4
ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAg
ICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAm
IH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERh
dGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRx
X3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5x
X3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAg
ICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFd
LCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsy
XSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7
Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAg
ICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0
UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYg
KCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyNpZiBVU0Uo
Q09SRV9JTUFHRSkKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCkKKyAgICAgICAgcmV0dXJuIGFwcGx5Q29yZUltYWdlKG91dHB1dCwgaW5wdXRzLCBn
ZW9tZXRyeSk7CiAjZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3Ro
IC8gNDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBh
bmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0t
bnVtUGl4ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEg
cGl4ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8g
Q2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxv
Y2F0aW9uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAg
ICBpZiAoKnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0g
ICAgICAgICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQg
Zm9yIGFscGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KKyAgICByZXR1cm4gYXBwbHlT
b2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOwogfQogCi12b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHQoKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KEZpbHRlclJlc3VsdCYg
cmVzdWx0LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBn
ZW9tZXRyeSkgY29uc3QKIHsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBhcHBseShyZXN1
bHQsIHN0YWNrLCBnZW9tZXRyeSwgRmlsdGVyQm91bmRhcnlTZXQoKSk7CiB9CiAKLXZvaWQgRmls
dGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KEZpbHRlclJlc3VsdCYgcmVzdWx0LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5k
YXJ5U2V0KSBjb25zdAogewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRo
YXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBp
ZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQo
KSkKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0
RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZSgpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgp
Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQo
KS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8
PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgYXV0byBpbnB1dHMgPSB0YWtlSW5wdXRzKHN0YWNrKTsKIAotICAgIGlmICht
X2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLQotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmls
dGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAg
ICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7
Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxp
ZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6
ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRT
aXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICog
NDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFy
cmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQo
Y29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0g
ICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGNo
ZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBp
ZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVj
dCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLXZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUo
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9u
IHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291
cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8
IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1lbXNldChkZXN0
aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKLQotICAgIC8vIEVhcmx5
IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgot
ICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAg
fHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAg
aWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhP
cmlnaW4gPSAwOworICAgIGlmIChhdXRvIGltYWdlID0gcmVzdWx0LmltYWdlcygpLmdldCh7ICp0
aGlzIH0pKSB7CisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICppbWFnZSB9KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7Ci0gICAg
aWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVuZCA9IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpOwogCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsK
LSAgICBpbnQgeURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAgICAgICB5RGVz
dCA9IC15T3JpZ2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHlFbmQg
PSBzY2FsZWRSZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKyAgICBhdXRv
IHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dHMs
IGdlb21ldHJ5LCBib3VuZGFyeVNldCk7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBzaXplID0gKHhFbmQgLSB4
T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0Lndp
ZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0
aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0
YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKyAgICBhdXRvIGltYWdlUmVj
dCA9IGNhbGN1bGF0ZUltYWdlUmVjdChpbnB1dHMsIGdlb21ldHJ5LCBwcmltaXRpdmVTdWJyZWdp
b24pOworICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qo
aW1hZ2VSZWN0KTsKIAotICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1j
cHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5h
dGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9
IHNvdXJjZVNjYW5saW5lOwotICAgICAgICArK3lPcmlnaW47Ci0gICAgfQotfQorICAgIGlmIChh
YnNvbHV0ZUltYWdlUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
c3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXpl
JiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVz
ID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworICAgIGF1dG8gaXNBbHBoYUltYWdlID0gdGhpcy0+
aXNBbHBoYUltYWdlKGlucHV0cyk7CisgICAgYXV0byBpbWFnZUNvbG9yU3BhY2UgPSB0aGlzLT5p
bWFnZUNvbG9yU3BhY2UoaW5wdXRzKTsKIAotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNy
Yy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUu
aGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKyAgICBhdXRvIGltYWdlID0g
cmVzdWx0LmNyZWF0ZUZpbHRlckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBp
c0FscGhhSW1hZ2UsIGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VDb2xvclNwYWNlKTsK
KyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB2SW1hZ2VfQnVm
ZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3Qu
aGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRl
czsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5k
YXRhKCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0KKyAgICAgICAgPDwg
IkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5
KCk6IgorICAgICAgICA8PCAiXG4gIHByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IHByaW1pdGl2ZVN1
YnJlZ2lvbgorICAgICAgICA8PCAiXG4gIG1heFByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IGdlb21l
dHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pCisgICAgICAgIDw8ICJc
biAgaW1hZ2VSZWN0ICIgPDwgaW1hZ2VSZWN0CisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVJbWFn
ZWdSZWN0ICIgPDwgYWJzb2x1dGVJbWFnZVJlY3QpOwogCi0gICAgdkltYWdlUHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3Qg
dWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52
YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24u
ZGF0YSgpOworICAgIGlmICghYXBwbHlQbGF0Zm9ybSgqaW1hZ2UsIGlucHV0cywgZ2VvbWV0cnks
IHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB3
aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJj
ZUNvbXBvbmVudFszXTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNf
Y2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsx
XSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0
aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50
ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlm
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbnRTaXplJiBpbnB1dFNpemUpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90
IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBz
cmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9
IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBz
cmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAg
dkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsK
LSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVz
ID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVz
dGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4
KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5k
ID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAg
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotICAg
IHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291
cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0p
ICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsK
LSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAg
ICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQg
Kz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmls
dGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIp
Ci17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3Rs
eS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVy
LnNpemUoKSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVm
ZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3Qp
OwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JT
cGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKS5hbHBo
YUZvcm1hdCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxC
dWZmZXJDb252ZXJzaW9uLgotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZm
ZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1
ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRs
ZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgc3RhY2suYXBwZW5kKHsgKmltYWdlIH0pOworICAgIHJlc3VsdC5pbWFnZXMoKS5h
ZGQoeyAqdGhpcyB9LCBSZWY8RmlsdGVySW1hZ2U+KCppbWFnZSkpOwogCi0gICAgLy8gQ29sb3Ig
c3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25l
IGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCi0gICAgY29udmVydGVkQnVmZmVyLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKLSAgICAKLSAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCB0
YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCByZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3Bh
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCkKK1RleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJS
ZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1
ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFn
ZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9
LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNv
bnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252
ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNh
dmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVy
dFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBp
ZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdl
Qnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0
KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFz
UmVzdWx0KCkpOwotICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwg
IkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlV
bm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1
ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0
aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAg
ICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xv
clNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVz
dGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9y
U3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsK
LSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0
U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlu
cHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xv
clNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZv
cm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlu
cHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdB
bHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewot
ICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVj
dDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3Rp
bmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8
ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAv
LyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVs
QnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAg
ICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29s
b3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NF
UlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFj
ZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29s
b3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2lt
YWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAg
ICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNy
ZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQ
cmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24o
Y29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5h
dGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFj
ZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQot
Ci1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17
Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAg
IC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1
bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVy
OjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJl
bmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNl
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJF
ZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCks
IHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBB
U1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQ
aXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAg
TE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0
eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
LQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwot
ICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1
bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJv
b2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24o
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRo
ZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0g
ICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBz
cGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIg
aXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNw
YWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vs
c2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRl
ZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlv
bkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3Bh
Y2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25D
b2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNv
bG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VC
dWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0g
c3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZm
ZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7
Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2VuZGlmCi19Ci0KLVRleHRTdHJl
YW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhlIGZpbHRlciBwcmltaXRp
dmVzIGhlcmUgbGF0ZXIuIFRoaXMgaXNuJ3QKLSAgICAvLyBwb3NzaWJsZSBhdCB0aGUgbW9tZW50
LCBiZWNhdXNlIHdlIG5lZWQgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgdGFy
Z2V0IG9iamVjdC4KLSAgICAKLSAgICBpZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2Vu
dGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CisgICAgaWYgKHJlcHJlc2VudGF0aW9uID09IEZpbHRl
clJlcHJlc2VudGF0aW9uOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIGlt
YWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcg
Y29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICB0
cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
cikKLXsKLSAgICAvLyBVc2UgYSBuZXcgc3RyZWFtIGJlY2F1c2Ugd2Ugd2FudCBtdWx0aWxpbmUg
bW9kZSBmb3IgbG9nZ2luZyBmaWx0ZXJzLgotICAgIFRleHRTdHJlYW0gZmlsdGVyU3RyZWFtOwot
ICAgIGZpbHRlci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKGZpbHRlclN0cmVhbSwgRmlsdGVyRWZm
ZWN0OjpSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRz
IDw8IGZpbHRlclN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2UyY2YwNWI1Mjc3M2YyYjk2YjQ3
MWMuLjJhZDZjNjI2ZDBhNmQ4NzhlOGJkZDZlYTkzNjU1MjA3YTE2MTdkOWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaApAQCAtMjIsMjM3ICsyMiw1OCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2Uu
aCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCi0jaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVz
cGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KKyNpbmNsdWRlICJSZW5kZXJpbmdNb2Rl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBGaWx0ZXI7Ci1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLQot
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsK
LQotZW51bSBGaWx0ZXJFZmZlY3RUeXBlIHsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93biwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2UsCi0gICAgRmlsdGVyRWZmZWN0VHlwZVRpbGUsCi0g
ICAgRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0Ci19OworY2xhc3MgRmlsdGVyQm91bmRhcnlT
ZXQ7CiAKLWNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckVmZmVj
dD4geworY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1Ymxp
YzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKLSAgICAgICAgQmxlbmQsCi0gICAg
ICAgIENvbG9yTWF0cml4LAotICAgICAgICBDb21wb25lbnRUcmFuc2ZlciwKLSAgICAgICAgQ29t
cG9zaXRlLAotICAgICAgICBDb252b2x2ZU1hdHJpeCwKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5n
LAotICAgICAgICBEaXNwbGFjZW1lbnRNYXAsCi0gICAgICAgIERyb3BTaGFkb3csCi0gICAgICAg
IEZsb29kLAotICAgICAgICBHYXVzc2lhbkJsdXIsCi0gICAgICAgIEltYWdlLAotICAgICAgICBM
aWdodGluZywKLSAgICAgICAgTWVyZ2UsCi0gICAgICAgIE1vcnBob2xvZ3ksCi0gICAgICAgIE9m
ZnNldCwKLSAgICAgICAgU3BlY3VsYXJMaWdodGluZywKLSAgICAgICAgVGlsZSwKLSAgICAgICAg
VHVyYnVsZW5jZSwKLSAgICAgICAgU291cmNlQWxwaGEsCi0gICAgICAgIFNvdXJjZUdyYXBoaWMK
LSAgICB9OwotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdCgpOwotCi0gICAgdm9pZCBjbGVhclJl
c3VsdCgpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7Ci0KLSAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KLSAgICBGaWx0ZXJFZmZlY3QqIGlu
cHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElu
cHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQotICAgIHVuc2ln
bmVkIHRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJikgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgCi0g
ICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
ZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1h
bmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZlY3QuCi0gICAgICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
Ci0gICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICB9Ci0KLSAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29u
c3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwotICAgIAotICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KLSAgICBG
bG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAvLyBT
b2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgYm9vbCBp
c0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2FscGhhSW1hZ2U7IH0KLSAgICB2b2lkIHNl
dElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsgbV9hbHBoYUltYWdlID0gYWxwaGFJbWFn
ZTsgfQotCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWJzb2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNv
bHV0ZVBhaW50UmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVj
dFJlY3Q7IH0gCi0KLSAgICB2b2lkIGFwcGx5KCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFueSBpbnZh
bGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJh
dGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2
YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5
IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNv
cnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0K
LSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9Ci0KLSAgICB2aXJ0dWFsIEludE91dHNl
dHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQotCi0gICAgZW51bSBj
bGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKLSAgICB2
aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRw
dXQpIGNvbnN0OwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVj
aWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgot
ICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQg
c2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1ko
KSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkg
eyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNX
aWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hl
aWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lk
IHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICB2b2lkIHNldEVmZmVjdEJvdW5k
YXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRh
cmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICAKLSAgICB2b2lkIHNldFVuY2xpcHBlZEFi
c29sdXRlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2Fic29sdXRlVW5jbGlwcGVk
U3VicmVnaW9uID0gcjsgfQotICAgIAotICAgIEZsb2F0UG9pbnQgbWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoRmxvYXRQb2ludCkgY29uc3Q7Ci0gICAgCi0gICAgVHlwZSBmaWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsgfQot
Ci0gICAgRmlsdGVyJiBmaWx0ZXIoKSB7IHJldHVybiBtX2ZpbHRlcjsgfQotICAgIGNvbnN0IEZp
bHRlciYgZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KLQotICAgIGJvb2wgY2xp
cHNUb0JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcHNUb0JvdW5kczsgfQotICAgIHZvaWQg
c2V0Q2xpcHNUb0JvdW5kcyhib29sIHZhbHVlKSB7IG1fY2xpcHNUb0JvdW5kcyA9IHZhbHVlOyB9
Ci0KICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotICAgIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzdWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHRDb2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX3Jlc3Vs
dENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQotICAgIHZvaWQg
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsK
LSAgICAKLSAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlcykKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFs
aXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0g
bm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFs
dWVzOwotICAgIH0KKyAgICBib29sIGFwcGx5KEZpbHRlclJlc3VsdCYsIEZpbHRlckltYWdlVmVj
dG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNl
dCYpIGNvbnN0OworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsK
IAogcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdChGaWx0ZXImLCBUeXBlKTsKKyAgICB1c2lu
ZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CiAgICAgCi0gICAgdmlydHVhbCBjb25z
dCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgPSAwOwotCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYpIGNvbnN0
OwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBj
b3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAgICAvLyBhbHBoYSBpbiBbMCwy
NTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgotICAgIHZpcnR1YWwg
Ym9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAKLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVk
IGltYWdlLCBjaGVjayBldmVyeSBwaXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVj
ZXNzYXJ5LgotICAgIHZvaWQgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Cisg
ICAgdmlydHVhbCBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9y
JikgY29uc3QgeyByZXR1cm4geyB9OyB9CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKLQotICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VC
dWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRB
cnJheSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJz
aW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBQ
aXhlbEJ1ZmZlciYpOworICAgIHZpcnR1YWwgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdl
JiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JikgY29uc3QgPSAwOwogICAgIAorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1
YWwgYm9vbCBhcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFnZSYsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2Vu
ZGlmCiAKLSAgICBGaWx0ZXImIG1fZmlsdGVyOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lu
cHV0RWZmZWN0czsKLQotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3Vs
dDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0OwotCi0gICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwotICAgIAotICAgIC8v
IFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWx0ZXIgcHJpbWl0aXZlLiBJbiBTVkcgdGhpcyBpcyB0
aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBpbiBhYnNvbHV0ZSBjb29yZGluYXRlIHNwYWNlLgotICAg
IC8vIFRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHNob3VsZCBuZXZlciBiZSBiaWdnZXIgdGhhbiBt
X21heEVmZmVjdFJlY3QuCi0gICAgRmxvYXRSZWN0IG1fbWF4RWZmZWN0UmVjdDsKLSAgICAKLSAg
ICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhl
IFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBU
aGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b247CisgICAgYm9vbCBhcHBseVBsYXRmb3JtKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgUmVuZGVyaW5n
TW9kZSkgY29uc3Q7CiAKLSAgICAvLyB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1
YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9m
IHRoZQotICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0
UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CisgICAgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQmLCBG
aWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmlu
YWw7CiAgICAgCi0gICAgLy8gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG1hcHBlZCB0byBhYnNv
bHV0ZSBjb29yZGluYXRlcyBiZWZvcmUgY2xpcHBpbmcuCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb247Ci0KLSAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBm
YWxzZSB9OwotCi0gICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZl
IHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1
dHMuCi0gICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07Ci0KLSNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFy
U1JHQigpIH07Ci0jZWxzZQogICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0Nv
bG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotI2VuZGlmCi0gICAg
RGVzdGluYXRpb25Db2xvclNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpIH07Ci0gICAgCi0gICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVjdENs
YXNzVHlwZTsKIH07CiAKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc0ZpbHRlckVmZmVjdCgpOyB9CitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKENsYXNzTmFtZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXZWJDb3JlOjpDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC50eXBlKCkgPT0g
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDbGFzc05hbWU7IH0gXAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhODU1Y2RiOTYzMTdiODJkZTM1NjdmYzMxZTViOWU5
YTllYzYwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVy
LmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3Jl
YXRlKGJvb2wgYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkLCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpCi17Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAgaWYgKGFjY2VsZXJhdGVk
RmlsdGVyUmVuZGVyaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjp0cnlDcmVhdGUobGFzdEVmZmVjdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpOwotICAgIFVOVVNFRF9QQVJB
TShsYXN0RWZmZWN0KTsKLSNlbmRpZgotICAgIHJldHVybiBudWxscHRyOwotfQotCi0KLX0gLy8g
bmFtc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3M2U5
Y2M0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0q
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0UmVuZGVyZXI+IHRyeUNyZWF0ZShib29sLCBGaWx0ZXJFZmZlY3QmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
aGFzUmVzdWx0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIG91dHB1dCgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJF
ZmZlY3QmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgPSAwOwot
ICAgIAotICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0OwotICAg
IAotcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0OwotICAg
IHZpcnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpID0gMDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc1ZjRjODMyY2UzYWUxNmQ5ZWE5MjA5Y2Y4NzJlZGI3OGMwY2I3OTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRWZmZWN0OworCit1
c2luZyBGaWx0ZXJFZmZlY3RWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4
YzMwMDNiZTI3N2E1N2IyYzkzNGUzZDVjMWI5MTExZDZkNjg0ODEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9u
LmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlv
bi5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbihUeXBlIHR5cGUp
CisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKworc3RhdGljIGlubGluZSBhdXRvJiBmaWx0ZXJO
YW1lcygpCit7CisgICAgdXNpbmcgRmlsdGVyTmFtZU1hcCA9IEhhc2hNYXA8RmlsdGVyRnVuY3Rp
b246OlR5cGUsIEF0b21TdHJpbmcsIFdURjo6SW50SGFzaDxGaWx0ZXJGdW5jdGlvbjo6VHlwZT4s
IFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8RmlsdGVyRnVuY3Rpb246OlR5cGU+PjsKKworICAg
IHN0YXRpYyBhdXRvIGZpbHRlck5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKKyAgICAg
ICAgRmlsdGVyTmFtZU1hcCBmaWx0ZXJOYW1lcyA9IHsKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkNTU0ZpbHRlciwgICAgICAgICAgICJDU1NGaWx0ZXIiX3MgICAgICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsICAgICAg
ICAgICAiU1ZHRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kLCAgICAgICAgICAgICAiRkVCbGVuZCJf
cyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVD
b2xvck1hdHJpeCwgICAgICAgIkZFQ29sb3JNYXRyaXgiX3MgICAgICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIsICJGRUNvbXBvbmVu
dFRyYW5zZmVyIl9zIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNv
bXBvc2l0ZSwgICAgICAgICAiRkVDb21wb3NpdGUiX3MgICAgICAgICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwgICAgIkZFQ29udm9sdmVN
YXRyaXgiX3MgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nLCAgICJGRURpZmZ1c2VMaWdodGluZyJfcyAgIH0sCisgICAgICAgICAgICB7
IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCwgICAiRkVEaXNwbGFjZW1l
bnRNYXAiX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEcm9w
U2hhZG93LCAgICAgICAgIkZFRHJvcFNoYWRvdyJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsICAgICAgICAgICAgICJGRUZsb29kIl9zICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNz
aWFuQmx1ciwgICAgICAiRkVHYXVzc2lhbkJsdXIiX3MgICAgICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwgICAgICAgICAgICAgIkZFSW1hZ2UiX3MgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2Us
ICAgICAgICAgICAgICJGRU1lcmdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksICAgICAgICAiRkVNb3JwaG9sb2d5Il9z
ICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQs
ICAgICAgICAgICAgIkZFT2Zmc2V0Il9zICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZywgICJGRVNwZWN1bGFyTGlnaHRp
bmciX3MgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVRpbGUsICAg
ICAgICAgICAgICAiRkVUaWxlIl9zICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLCAgICAgICAgIkZFVHVyYnVsZW5jZSJfcyAg
ICAgICAgfSwKKworICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxw
aGEsICAgICAgICAgIlNvdXJjZUFscGhhIl9zICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmls
dGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWMsICAgICAgICJTb3VyY2VHcmFwaGljIl9z
ICAgICAgIH0KKworICAgICAgICB9OworICAgICAgICByZXR1cm4gZmlsdGVyTmFtZXM7CisgICAg
fSgpKTsKKyAgICAKKyAgICByZXR1cm4gZmlsdGVyTmFtZXMuZ2V0KCk7Cit9CisKK0F0b21TdHJp
bmcgRmlsdGVyRnVuY3Rpb246OmZpbHRlck5hbWUoVHlwZSB0eXBlKQoreworICAgIHJldHVybiBm
aWx0ZXJOYW1lcygpLmdldCh0eXBlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJG
dW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1MGUxYzJhNDRmMjc4NDAxNDFjMWU0NTA1MzUxMTYx
NzU3NTc1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkZpbHRlclJlcHJlc2VudGF0
aW9uLmgiCisjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV1RG
IHsKK2NsYXNzIFRleHRTdHJlYW07Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RmlsdGVyR2VvbWV0cnk7CitjbGFzcyBGaWx0ZXJSZXN1bHQ7CitjbGFzcyBJbWFnZUJ1ZmZlcjsK
KworY2xhc3MgRmlsdGVyRnVuY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJGdW5jdGlv
bj4geworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBD
U1NGaWx0ZXIsCisgICAgICAgIFNWR0ZpbHRlciwKKworICAgICAgICBGRU1pbmltdW0sCisKKyAg
ICAgICAgRkVCbGVuZCA9IEZFTWluaW11bSwKKyAgICAgICAgRkVDb2xvck1hdHJpeCwKKyAgICAg
ICAgRkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgRkVDb21wb3NpdGUsCisgICAgICAgIEZF
Q29udm9sdmVNYXRyaXgsCisgICAgICAgIEZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBGRURp
c3BsYWNlbWVudE1hcCwKKyAgICAgICAgRkVEcm9wU2hhZG93LAorICAgICAgICBGRUZsb29kLAor
ICAgICAgICBGRUdhdXNzaWFuQmx1ciwKKyAgICAgICAgRkVJbWFnZSwKKyAgICAgICAgRkVNZXJn
ZSwKKyAgICAgICAgRkVNb3JwaG9sb2d5LAorICAgICAgICBGRU9mZnNldCwKKyAgICAgICAgRkVT
cGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBGRVRpbGUsCisgICAgICAgIEZFVHVyYnVsZW5jZSwK
KyAgICAgICAgU291cmNlQWxwaGEsCisgICAgICAgIFNvdXJjZUdyYXBoaWMsCisKKyAgICAgICAg
RkVNYXhpbXVtID0gU291cmNlR3JhcGhpYworICAgIH07CisKKyAgICBGaWx0ZXJGdW5jdGlvbihU
eXBlKTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJGdW5jdGlvbigpID0gZGVmYXVsdDsKKworICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgYm9vbCBpc0NTU0ZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpDU1NGaWx0ZXI7IH0KKyAgICBib29s
IGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OlNWR0ZpbHRlcjsg
fQorICAgIGJvb2wgaXNGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6Q1NT
RmlsdGVyIHx8IG1fdHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVy
RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID49IFR5cGU6OkZFTWluaW11bSAmJiBtX3R5
cGUgPD0gVHlwZTo6RkVNYXhpbXVtOyB9CisKKyAgICBzdGF0aWMgQXRvbVN0cmluZyBmaWx0ZXJO
YW1lKFR5cGUpOworICAgIHN0YXRpYyBBdG9tU3RyaW5nIHNvdXJjZUFscGhhTmFtZSgpIHsgcmV0
dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlQWxwaGEpOyB9CisgICAgc3RhdGljIEF0b21TdHJp
bmcgc291cmNlR3JhcGhpY05hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUdy
YXBoaWMpOyB9CisgICAgQXRvbVN0cmluZyBmaWx0ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gZmls
dGVyTmFtZShtX3R5cGUpOyB9CisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
I2VuZGlmCisKKyAgICB2aXJ0dWFsIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0
IHsgcmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBib29sIGFwcGx5KEZpbHRlclJlc3VsdCYs
IEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiA9IEZpbHRlclJlcHJlc2Vu
dGF0aW9uOjpUZXN0T3V0cHV0KSBjb25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5
cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkNTU0ZpbHRlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNW
R0ZpbHRlciwKKworICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVu
ZCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGUs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmcsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVu
dE1hcCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRv
dywKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1ciwKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsCisgICAgICAgIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRVRpbGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRVR1cmJ1bGVuY2UsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpT
b3VyY2VBbHBoYSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJj
ZUdyYXBoaWMKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0
cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFhNzhkMzYzNmFmOTc3OTgwN2Y1NmVkY2FhYzIyYzc3YTc3OWUz
MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0
ZXJHZW9tZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IGZsb2F0IGZpbHRlclNjYWxlLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCisgICAgOiBt
X2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCisgICAgLCBtX2ZpbHRlclNjYWxlKEZsb2F0U2l6
ZShmaWx0ZXJTY2FsZSwgZmlsdGVyU2NhbGUpKQorICAgICwgbV9jbGlwT3BlcmF0aW9uKGNsaXBP
cGVyYXRpb24pCit7Cit9CisKK0ZpbHRlckdlb21ldHJ5OjpGaWx0ZXJHZW9tZXRyeShjb25zdCBG
bG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29u
c3Qgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+JiB0YXJnZXRCb3VuZGluZ1NpemUsIFZlY3RvcjxG
aWx0ZXJCb3VuZGFyeVNldD4mJiBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpCisgICAgOiBGaWx0
ZXJHZW9tZXRyeShmaWx0ZXJSZWdpb24sIGZpbHRlclNjYWxlLCB0YXJnZXRCb3VuZGluZ1NpemUs
IFdURk1vdmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKSwgQ2xpcE9wZXJhdGlvbjo6SW50ZXJz
ZWN0KQoreworfQorCitGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYgdGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8RmlsdGVy
Qm91bmRhcnlTZXQ+JiYgZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzLCBDbGlwT3BlcmF0aW9uIGNs
aXBPcGVyYXRpb24pCisgICAgOiBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCisgICAgLCBt
X2ZpbHRlclNjYWxlKGZpbHRlclNjYWxlKQorICAgICwgbV90YXJnZXRCb3VuZGluZ1NpemUodGFy
Z2V0Qm91bmRpbmdTaXplKQorICAgICwgbV9maWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoV1RGTW92
ZShmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpKQorICAgICwgbV9jbGlwT3BlcmF0aW9uKGNsaXBP
cGVyYXRpb24pCit7Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRlRmls
dGVyU2NhbGUoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0U2l6
ZSYgYWJzb2x1dGVTY2FsZSkKK3sKKyAgICBhdXRvIGFic29sdXRlU291cmNlSW1hZ2VSZWN0ID0g
c291cmNlSW1hZ2VSZWN0OworICAgIGFic29sdXRlU291cmNlSW1hZ2VSZWN0LnNjYWxlKGFic29s
dXRlU2NhbGUpOworICAgIGF1dG8gY2xhbXBpbmdTY2FsZSA9IEZsb2F0U2l6ZSB7IDEsIDEgfTsK
KyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVTb3VyY2VJbWFnZVJl
Y3Quc2l6ZSgpLCBjbGFtcGluZ1NjYWxlKTsKKyAgICByZXR1cm4gYWJzb2x1dGVTY2FsZSAqIGNs
YW1waW5nU2NhbGU7Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXJHZW9tZXRyeTo6cmVzb2x2ZUltYWdl
U2l6ZShjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaW1h
Z2VTaXplICogbV90YXJnZXRCb3VuZGluZ1NpemUudmFsdWVfb3IoRmxvYXRTaXplKDEsIDEpKTsK
K30KKworRmxvYXRTaXplIEZpbHRlckdlb21ldHJ5OjptYXBJbWFnZVNpemUoY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltYWdlU2l6ZSAqIG1fZmlsdGVy
U2NhbGU7Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXJHZW9tZXRyeTo6bWFwUmVzb2x2ZWRJbWFnZVNp
emUoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1hcElt
YWdlU2l6ZShyZXNvbHZlSW1hZ2VTaXplKGltYWdlU2l6ZSkpOworfQorCisKK0Zsb2F0UmVjdCBG
aWx0ZXJHZW9tZXRyeTo6bWFwSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0KSBj
b25zdAoreworICAgIGF1dG8gc2NhbGVkSW1hZ2VSZWN0ID0gaW1hZ2VSZWN0OworICAgIHNjYWxl
ZEltYWdlUmVjdC5zY2FsZShtX2ZpbHRlclNjYWxlKTsKKyAgICByZXR1cm4gc2NhbGVkSW1hZ2VS
ZWN0OworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6Om1hcEltYWdlUmVjdChjb25zdCBG
bG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRJbWFnZVJlY3QpIGNv
bnN0Cit7CisgICAgYXV0byBtb3ZlZEltYWdlUmVjdCA9IGltYWdlUmVjdDsKKyAgICBtb3ZlZElt
YWdlUmVjdC5tb3ZlQnkoLXRhcmdldEltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4g
bWFwSW1hZ2VSZWN0KG1vdmVkSW1hZ2VSZWN0KTsKK30KKworRmlsdGVyQm91bmRhcnlTZXQgRmls
dGVyR2VvbWV0cnk6OmJvdW5kYXJ5U2V0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlLCB1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUdyYXBoaWMgfHwgdHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKG1fZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChpbmRleCA+PSBtX2Zp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0cy5zaXplKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIG1fZmlsdGVy
RWZmZWN0Qm91bmRhcnlTZXRzW2luZGV4XTsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5
OjpjbGlwVG9GaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0Cit7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihwcmltaXRpdmVTdWJyZWdpb24sIG1f
ZmlsdGVyUmVnaW9uKTsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjpjbGlwVG9Qcmlt
aXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBtX2NsaXBPcGVyYXRp
b24gPT0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0ID8gaW50ZXJzZWN0aW9uKGltYWdlUmVjdCwg
cHJpbWl0aXZlU3VicmVnaW9uKSA6IHVuaW9uUmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJl
Z2lvbik7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvTWF4UHJpbWl0aXZl
U3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gY2xpcFRvUHJpbWl0aXZlU3Vi
cmVnaW9uKGltYWdlUmVjdCwgY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTc3M2Q1ZmE4NzgzNjM0ZjNmMzQ0ODQ0MmY0ZWI4ZjFjM2U5MDQ0YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5
U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZpbHRlckdlb21ldHJ5IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBlbnVtIGNsYXNzIENsaXBPcGVyYXRpb24geyBJbnRlcnNlY3QsIFVuaXRlIH07CisKKyAg
ICBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgZmxvYXQgZmls
dGVyU2NhbGUgPSAxLCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0KTsK
KyAgICBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3Qg
RmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+JiB0
YXJnZXRCb3VuZGluZ1NpemUsIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4mJik7CisKKyAgICBz
dGF0aWMgRmxvYXRTaXplIGNhbGN1bGF0ZUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFNpemUmIGFic29sdXRlU2NhbGUpOworCisgICAgRmxv
YXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Cisg
ICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsg
fQorCisgICAgRmxvYXRTaXplIHJlc29sdmVJbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUpIGNvbnN0OworCisgICAgRmxvYXRTaXplIG1hcEltYWdlU2l6ZShjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSkgY29uc3Q7CisgICAgRmxvYXRTaXplIG1hcFJlc29sdmVkSW1hZ2VTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtYXBJ
bWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QpIGNvbnN0OworICAgIEZsb2F0UmVj
dCBtYXBJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZWd0SW1hZ2VSZWN0KSBjb25zdDsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0IGJvdW5k
YXJ5U2V0KEZpbHRlckVmZmVjdDo6VHlwZSwgdW5zaWduZWQpIGNvbnN0OworCisgICAgRmxvYXRS
ZWN0IGNsaXBUb0ZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0
IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPEZpbHRlckdlb21ldHJ5PiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAg
IFdFQkNPUkVfRVhQT1JUIEZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZs
b2F0U2l6ZT4mIHRhcmdldEJvdW5kaW5nU2l6ZSwgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiYm
LCBDbGlwT3BlcmF0aW9uKTsKKworICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBG
bG9hdFNpemUgbV9maWx0ZXJTY2FsZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBt
X3RhcmdldEJvdW5kaW5nU2l6ZTsKKyAgICBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+IG1fZmls
dGVyRWZmZWN0Qm91bmRhcnlTZXRzOworCisgICAgQ2xpcE9wZXJhdGlvbiBtX2NsaXBPcGVyYXRp
b24geyBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QgfTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Cit2b2lkIEZpbHRlckdlb21ldHJ5OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fZmlsdGVyUmVnaW9uOworICAgIGVuY29kZXIgPDwgbV9m
aWx0ZXJTY2FsZTsKKworICAgIGVuY29kZXIgPDwgbV90YXJnZXRCb3VuZGluZ1NpemU7CisgICAg
ZW5jb2RlciA8PCBtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKworICAgIGVuY29kZXIgPDwg
bV9jbGlwT3BlcmF0aW9uOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxGaWx0ZXJHZW9tZXRyeT4gRmlsdGVyR2VvbWV0cnk6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBmaWx0ZXJSZWdpb247CisgICAg
ZGVjb2RlciA+PiBmaWx0ZXJSZWdpb247CisgICAgaWYgKCFmaWx0ZXJSZWdpb24pCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gZmls
dGVyU2NhbGU7CisgICAgZGVjb2RlciA+PiBmaWx0ZXJTY2FsZTsKKyAgICBpZiAoIWZpbHRlclNj
YWxlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxz
dGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4+IHRhcmdldEJvdW5kaW5nU2l6ZTsKKyAgICBkZWNvZGVy
ID4+IHRhcmdldEJvdW5kaW5nU2l6ZTsKKyAgICBpZiAoIXRhcmdldEJvdW5kaW5nU2l6ZSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEZp
bHRlckJvdW5kYXJ5U2V0Pj4gZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzOworICAgIGRlY29kZXIg
Pj4gZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzOworICAgIGlmICghZmlsdGVyRWZmZWN0Qm91bmRh
cnlTZXRzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxDbGlwT3BlcmF0aW9uPiBjbGlwT3BlcmF0aW9uOworICAgIGRlY29kZXIgPj4gY2xpcE9wZXJh
dGlvbjsKKyAgICBpZiAoIWNsaXBPcGVyYXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gRmlsdGVyR2VvbWV0cnkoKmZpbHRlclJlZ2lvbiwgKmZpbHRlclNj
YWxlLCAqdGFyZ2V0Qm91bmRpbmdTaXplLCBXVEZNb3ZlKCpmaWx0ZXJFZmZlY3RCb3VuZGFyeVNl
dHMpLCAqY2xpcE9wZXJhdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFt
ZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Rmls
dGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFs
dWVzPAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbiwKKwor
ICAgICAgICBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUK
KyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNiYTUxMDAyNDZjZjk5NzY1MDBmZTk0Y2U4NjUxZDk4MWY2NDAyOTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlcklt
YWdlLmNwcApAQCAtMCwwICsxLDM5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2UuaCIKKworI2luY2x1ZGUgIkZpbHRlckltYWdlU29mdHdhcmUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZUNv
cmVJbWFnZS5oIgorI2VuZGlmCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5j
bHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29s
IGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAocHJpbWl0aXZlU3VicmVnaW9uLmlz
RW1wdHkoKSB8fCBpbWFnZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXpl
KSk7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRl
ckltYWdlQ29yZUltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBpc0FscGhhSW1h
Z2UsIGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpKTsKKyNlbmRpZgorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlckltYWdlU29mdHdh
cmUocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgbG9naWNhbFNp
emUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkpOworfQorCitS
ZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBSZWY8SW1hZ2VC
dWZmZXI+JiYgaW1hZ2VCdWZmZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVy
SW1hZ2VTb2Z0d2FyZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpKTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9vbCBp
c0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UpCisgICAgOiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRp
dmVTdWJyZWdpb24pCisgICAgLCBtX2ltYWdlUmVjdChpbWFnZVJlY3QpCisgICAgLCBtX2lzQWxw
aGFJbWFnZShpc0FscGhhSW1hZ2UpCisgICAgLCBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQor
ICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCisgICAgLCBtX3Jlc29sdXRpb25T
Y2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sK
K30KKworc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJv
d0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7
CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlu
cHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMu
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdklt
YWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAg
ICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0g
cm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGlu
YXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3Vy
Y2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNv
dXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7CisgICAg
dWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisKKyAg
ICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNv
dXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0
aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAg
ZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVu
dFsxXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9u
ZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK3N0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6
ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAgdkltYWdlX0J1ZmZl
ciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdo
dCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAg
ICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworCisg
ICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgo
KTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5
dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCog
ZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQo
KTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEo
KTsKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBo
YSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzBdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihz
b3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsxXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsy
XSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBo
YTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiBGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGFscGhhRm9ybWF0KQoreworICAgIHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0
ZXJJbWFnZTo6cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkK
K3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3Jt
YXQpOworICAgIGlmIChwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52
YWx1ZSgpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9jb2xvclNwYWNlIH07CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICBwaXhlbEJ1ZmZlciA9IGlt
YWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgSW50U2l6ZSht
X2xvZ2ljYWxTaXplKSB9KTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cisg
ICAgfQorICAgIAorICAgIEludFNpemUgc2NhbGVkU2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CisgICAg
c2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBwaXhlbEJ1ZmZlciA9
IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAg
ICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBzY2FsZWRTaXplKTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7
CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2NhbGVkU2l6
ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OworCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxv
dz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQaXhlbEJ1ZmZl
cigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICByZXR1
cm4gcGl4ZWxCdWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlv
biBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBz
cGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNp
b24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8g
QU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4g
Y29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8v
IEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1D
RworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKKyAg
ICBzY2FsZWRSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFNpemUgc2Nh
bGVkUGFpbnRTaXplKG1fbG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50U2l6ZS5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0
byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJj
ZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBz
Y2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3Qu
bWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGlu
YXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSBy
ZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAg
ICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8
IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3Qu
eSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlm
ICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3Jp
Z2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKKyAgICBp
ZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gc2NhbGVk
UGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOwor
ICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0
ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9
IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhlaWdo
dCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworCisgICAgaW50
IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGluYXRpb25TY2FubGlu
ZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwg
PSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhE
ZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgp
ICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0Owor
CisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlv
blBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0g
ZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nhbmxp
bmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAorewor
ICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0
LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3Qg
Y29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJ
bWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBz
cGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUg
aW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFj
ZSB9OworICAgIHJldHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCByZWN0KTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6
OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9y
U3BhY2UpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVy
LnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2NhbGUpOworICAgIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUo
KSk7CisKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4
ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFt
cGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUs
IG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVy
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBp
eGVsQnVmZmVyKHBpeGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9
CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xv
clNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhh
bHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6
IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAg
ICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsK
KyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXpl
KG1fbG9naWNhbFNpemUpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9y
bWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5
dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9
CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAg
ICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAg
Y29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24s
IHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMo
cGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZp
bHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBN
dXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5u
b3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJh
eSA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4
ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBp
bWFnZUFycmF5Lmxlbmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVy
IHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0
aCAlIDQpKTsKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxB
cnJheUxlbmd0aCA+PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERh
dGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0
X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0
ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVu
UGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5x
X3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAg
ICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJd
LCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEs
IHNpeHRlZW5QaXhlbHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9
IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5n
dGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlM
ZW5ndGggLyA0OworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFs
cGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGls
ZSAoLS1udW1QaXhlbHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUg
aW4gYSBwaXhlbAorICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAg
ICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4
ZWwgbG9jYXRpb24KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0g
YTsKKyAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3Jl
bWVudCBmb3IgYWxwaGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZp
bHRlckltYWdlOjp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2Ug
YWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7Cisj
ZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNz
YXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2Ug
dHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAg
IGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1h
Z2VCdWZmZXItPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9jb2xvclNwYWNlLCBjb2xvclNwYWNlKTsK
KworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
ciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRmYTg3YzA3MmJiNzZjNWNiNjg5MDkzMDBhOGYwY2JmMDVl
YmQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1
ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZpbHRlckltYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0
ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFn
ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIGltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmKTsKKworICAgIHZpcnR1YWwgfkZp
bHRlckltYWdlKCkgPSBkZWZhdWx0OworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgRmxvYXRSZWN0
IGltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VSZWN0OyB9CisgICAgYm9vbCBpc0Fs
cGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzQWxwaGFJbWFnZTsgfQorCisgICAgRmxvYXRT
aXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9k
ZTsgfQorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIq
IGltYWdlQnVmZmVyKCkgPSAwOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZm
ZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3Rk
OjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6
Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAor
ICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJh
bnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3Byb3RlY3RlZDoK
KyAgICBGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+KSBjb25zdDsKKyAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKEltYWdlQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50
UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworCisgICAgRmxv
YXRSZWN0IG1fcHJpbWl0aXZlU3VicmVnaW9uOworICAgIEZsb2F0UmVjdCBtX2ltYWdlUmVjdDsK
KyAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsKKworICAgIEZsb2F0U2l6ZSBtX2xv
Z2ljYWxTaXplOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIGZsb2F0
IG1fcmVzb2x1dGlvblNjYWxlOworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3Bh
Y2U7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VucHJlbXVsdGlwbGllZFBp
eGVsQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGll
ZFBpeGVsQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZVZlY3Rv
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZVZlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhNzUzNTkyYTdjNmE5ZDJmNmZjNTQ5ZTRkN2VmOTRjZjcy
MDA4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0
ZXJJbWFnZTsKKwordXNpbmcgRmlsdGVySW1hZ2VWZWN0b3IgPSBWZWN0b3I8UmVmPEZpbHRlcklt
YWdlPj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ZGJmZjdkODA0N2NlZjllZjYzYTM2ZWNjMzVlNWU5YjIwMTFjZWU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEZpbHRlclJlcHJlc2VudGF0aW9uIDogdWludDhf
dCB7CisgICAgVGVzdE91dHB1dCwKKyAgICBEZWJ1Z2dpbmcKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDI4N2QxNTNjMDQxYjI5OTgx
YTY5ZGFmZTNhNjQ5ZTk3NTRjMzIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSkKKyAgICA6IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQoreworfQorCitS
ZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlclJlc3VsdDo6Y3JlYXRlRmlsdGVySW1hZ2UoY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1Jl
Y3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEZpbHRl
ckltYWdlOjpjcmVhdGUocHJpbWl0aXZlU3VicmVnaW9uLCBkcmF3aW5nUmVjdCwgaXNBbHBoYUlt
YWdlLCBsb2dpY2FsU2l6ZSwgbV9yZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNwYWNlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGRjODgzNGY3
N2ZmOWQzZWRjY2YwYWIyODFmODIxMjMzZTg4YzcyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmgKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckZ1bmN0
aW9uOworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CitjbGFzcyBGaWx0ZXJJbWFnZTsKKworY2xhc3Mg
RmlsdGVyUmVzdWx0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbWFnZXMgPSBIYXNoTWFwPFJlZjxj
b25zdCBGaWx0ZXJGdW5jdGlvbj4sIFJlZjxGaWx0ZXJJbWFnZT4+OworCisgICAgRmlsdGVyUmVz
dWx0KFJlbmRlcmluZ01vZGUpOworCisgICAgSW1hZ2VzJiBpbWFnZXMoKSB7IHJldHVybiBtX2lt
YWdlczsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyaW5nTW9kZTsgfQorCisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGVGaWx0
ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRS
ZWN0JiBkcmF3aW5nUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCitwcml2YXRlOgorICAg
IEltYWdlcyBtX2ltYWdlczsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmluZGV4
IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLjRiYzZiYzcxYzg1ZGZi
MWFlMzkxZGViMjQzZGM4MTQ1NzVkYjBjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApA
QCAtMzYsMTIgKzM2LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZm
ZWN0LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9p
bnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkg
ei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9z
aXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0
aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisvLyAgICBtX2J1
ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKy8vICAgIC8vIFRvIHNjYWxlIFosIG1h
cCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0
aW9uIGJ5IHouCisvLyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNl
clNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKy8vICAgIG1f
YnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsK
IH0KIAogTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIFBvaW50TGlnaHRTb3VyY2U6
OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5
ZjA1OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFkNmNmM2EzLi4xZDM3MzEwN2QzYmQzZGFmZGNh
MzViMmVlOGQzYzk5ODU0ZDMxNzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjAgKzIxLDMyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VB
bHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhh
PiBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3Vy
Y2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VB
bHBoYSgpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUo
KQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpT
b3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBT
b3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmlsdGVySW1hZ2VWZWN0
b3IgU291cmNlQWxwaGE6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dAogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2su
dGFrZUxhc3QoKSB9OwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQotewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdy
YXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6Ymxh
Y2spOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50
UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOwotfQotCi1UZXh0U3Ry
ZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAgICByZXR1
cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJj
ZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6
OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0
Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3Vy
Y2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXgg
NjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uZmI2NmRiOGRjZGM5N2Zi
MTQwMGVjMjY0NjNlYjZlZjVmZWVlN2Y3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJj
ZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAg
LTI2LDIxICsyNiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUFscGhh
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVm
PFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
QXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBSZWY8U291cmNlQWxwaGE+IGNy
ZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVj
dCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIFNvdXJjZUFs
cGhhKCk7CisKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVj
dG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQorICAgIGJvb2wgYXBwbHlT
b2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07
CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzExMDdkNzgz
OTJlOS4uZTYyMmVhOWQzNzliNWU2MDkwYzYyNzJiZWJiYjAyNTI2Y2M5MzRlMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0
NyArMjEsMzQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGlj
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUo
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAotY29uc3QgQXRv
bVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VHcmFwaGljOjpTb3Vy
Y2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VHcmFwaGljKQogewot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19l
ZmZlY3ROYW1lKCJTb3VyY2VHcmFwaGljIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVy
LnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVz
b2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Cisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aW1h
Z2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK0ZpbHRlckltYWdlVmVjdG9yIFNvdXJjZUdyYXBoaWM6OnRha2VJbnB1dHMoRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJ
bWFnZSgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291
cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAg
ICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIFNvdXJjZUdy
YXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3QKK1RleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdyYXBoaWNdXG4iOwogICAgIHJldHVybiB0czsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2Zj
YTViZi4uOGRkY2JkZTAyNzQ2YjQxNzcyYzY3ZDY0NTk5M2Q3NmRjYjMyNjQ2ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXgg
TWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xOCw0MSArMTksMzEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAK
LSNpZm5kZWYgU291cmNlR3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBo
aWM+IGNyZWF0ZShGaWx0ZXImKTsKLQotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZl
Y3ROYW1lKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTb3VyY2VHcmFwaGljPiBj
cmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQot
ICAgICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCi0gICAg
ewotICAgICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9CisgICAgU291cmNlR3JhcGhpYygpOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZp
bHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJJbWFnZVZlY3Rv
ciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAK
LX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGlj
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisjaWYgVVNFKENPUkVfSU1BR0UpCisg
ICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKyAgICBib29sIGFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZh
NmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZDFiZWMxMjAyMDZhNTM2ZTEwYjEwYmYyYzExMzBm
NGYzNDJiYmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsMzYgKzQxLDM2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdo
dCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQg
PSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0
IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkK
K3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVj
dCYsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJF
ZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54
eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2Vy
U3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1h
cHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkg
LSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlv
blZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAg
IHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1f
bGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1p
dCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlh
c1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xl
ID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwg
MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xl
OwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxp
bWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2Zm
TGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxp
bWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZv
ciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBv
bmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVs
c2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEu
c3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9y
IDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOworLy8gICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNl
VG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisvLyAgICAvLyBUbyBzY2FsZSBa
LCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRp
cmVjdGlvbiBieSB6LgorLy8gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1h
cFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBt
X3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisvLyAg
ICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngo
KSk7CisvLworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNl
UG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOworLy8gICAgcGFpbnRpbmdEYXRhLmRpcmVj
dGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKy8vCisvLyAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5n
bGUpIHsKKy8vICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKy8v
ICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsK
Ky8vICAgIH0gZWxzZSB7CisvLyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xp
bWl0aW5nQ29uZUFuZ2xlOworLy8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA8IDAuMGYp
CisvLyAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwor
Ly8gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorLy8gICAgICAgICAgICBs
aW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0
T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKKy8v
ICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0
T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKy8vICAgIH0KKy8vCisvLyAgICAvLyBPcHRp
bWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcworLy8gICAgaWYgKCFt
X3NwZWN1bGFyRXhwb25lbnQpCisvLyAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25l
bnQgPSAwOworLy8gICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisvLyAg
ICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAxOworLy8gICAgZWxzZSAvLyBJ
dCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3Vs
YXJFeHBvbmVudCA9IDI7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBT
cG90TGlnaHRTb3VyY2U6OmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJs
ZW5kU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZWIwNzJkNWY2Yjcy
MGQxNzQxZjhlNTM0Y2QxNjI4MzUzNmEzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5j
cHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQmxlbmQuaCIKKworI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmQ6OmFwcGx5U29mdHdhcmUoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgp
ID09IDIpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlu
cHV0MiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0Lmlt
YWdlQnVmZmVyKCk7CisgICAgYXV0byBpbnB1dDJJbWFnZSA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigp
OworICAgIGlmICghaW5wdXRJbWFnZSB8fCAhaW5wdXQySW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAg
ICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlt
YWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0
LmltYWdlUmVjdCgpKTsKKyAgICBhdXRvIGltYWdlUmVjdDIgPSBnZW9tZXRyeS5tYXBJbWFnZVJl
Y3QoaW5wdXQyLmltYWdlUmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICAK
KyAgICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGltYWdlUmVj
dDIpOworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbWFn
ZVJlY3QsIHsgeyB9LCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRp
ZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIzM2RkYmIyNmRlMWU3ZDk2ZDFm
NTY4MWJlNDA3N2VjOTM5MGMyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNw
cApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2lu
Y2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworaW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxv
YXQmIGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQorewor
ICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBi
bHVlOworICAgIGZsb2F0IGEgPSBhbHBoYTsKKworICAgIHJlZCAgICAgPSB2YWx1ZXNbIDBdICog
ciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZh
bHVlc1sgNF0gKiAyNTU7CisgICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVzWyA2
XSAqIGcgKyB2YWx1ZXNbIDddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAqIDI1
NTsKKyAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVl
c1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OworICAgIGFscGhh
ICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2
YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Cit9CisKK2lubGluZSB2b2lkIHNhdHVy
YXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGNv
bnN0IGZsb2F0KiBjb21wb25lbnRzKQoreworICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQg
ZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVlOworCisgICAgcmVkICAgICA9IHIgKiBjb21w
b25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50c1syXTsKKyAgICBn
cmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0XSArIGIgKiBjb21w
b25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25l
bnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07Cit9CisKKy8vIEZJWE1FOiB0aGlzIHNob3VsZCB1
c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCitpbmxp
bmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwg
ZmxvYXQmIGFscGhhKQoreworICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3Jl
ZW4gKyAwLjA3MjEgKiBibHVlOworICAgIHJlZCA9IDA7CisgICAgZ3JlZW4gPSAwOworICAgIGJs
dWUgPSAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5
cGUgZmlsdGVyVHlwZT4KK2Jvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21w
b25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgQVNTRVJUKHBpeGVsQXJyYXku
bGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKKyAgICAKKyAgICBpZiAoZmlsdGVy
VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7CisgICAgICAgIC8vIHZJbWFnZU1h
dHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGlu
IHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAgICAg
IC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFnZSBjb2RlLgorICAgICAgICBp
ZiAodmFsdWVzWzRdIHx8IHZhbHVlc1s5XSB8fCB2YWx1ZXNbMTRdIHx8IHZhbHVlc1sxOV0pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgaW50MzJfdCBkaXZp
c29yID0gMjU2OworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKKworICAg
IHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsK
KyAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMg
PSBidWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIHNyYy5kYXRhID0gZGF0YTsKKyAgICAKKyAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgo
KTsKKyAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dC
eXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgZGVzdC5kYXRhID0gZGF0YTsKKwor
ICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
MF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSks
CisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICog
ZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sgN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJH
Qjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJ
bWFnZU5vRmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6IHsKKyAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0geworICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21w
b25lbnRzWzZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlz
b3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRz
WzddICogZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICog
ZGl2aXNvcikpLAorICAgICAgICAgICAgMCwKKworICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgZGl2aXNvciwKKyAgICAgICAgfTsKKyAg
ICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwg
ZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTog
eworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAorCisgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAorCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAorCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICB9OworICAg
ICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBk
aXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordGVt
cGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Cit2b2lkIGVmZmVjdFR5cGUoVWludDhD
bGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50
U2l6ZSBidWZmZXJTaXplKQoreworICAgIGZsb2F0IGNvbXBvbmVudHNbOV07CisKKyAgICBpZiAo
ZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisgICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNb
MF0pOworICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0
aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBpZiAo
ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNv
bXBvbmVudHMsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm47CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShidWZmZXJTaXplKTsKKyNlbmRpZgorCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7
CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQg
Ymx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAg
IGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAg
ICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1ZXMpOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGZvciAodW5zaWdu
ZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0
aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBi
bHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAg
ZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAg
ICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRz
KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAw
OyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0g
NCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0o
cGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIGx1bWluYW5jZShyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1Zl
Y3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZh
bHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsg
KytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVl
c1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisKK2Jvb2wgRkVDb2xvck1h
dHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1
dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBpbWFnZUJ1ZmZlciA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKGltYWdlQnVm
ZmVyKSB7CisgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlu
cHV0LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICBvdXRwdXRJbWFn
ZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7Cisg
ICAgfQorCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG91dHB1dC5jb2xvclNw
YWNlKCkgfTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+
bG9naWNhbFNpemUoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IG91dHB1dEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVy
LT5kYXRhKCk7CisgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5z
aXplKCk7CisKKyAgICBhdXRvIHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwor
CisgICAgc3dpdGNoIChtX2NvbG9yTWF0cml4VHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWDoKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
PihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGVmZmVj
dFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBp
eGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgb3V0cHV0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1
ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjN2EyZjkwMTE5ZDZhMTUzMmNkNzA2NTM0NzU5
YTIxN2FkZDlhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAK
QEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKworI2luY2x1ZGUg
IkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZVZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIExvb2t1
cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworCitzdGF0aWMgdm9pZCBjb21wdXRl
SWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKQoreworfQorCitzdGF0aWMgdm9pZCBjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1
bmN0aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7
CisgICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgYyA9IGkgLyAyNTUu
MDsKKyAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjICogKG4gLSAx
KSk7CisgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFsdWVzW2tdOworICAgICAgICBkb3VibGUg
djIgPSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEpLCAobiAtIDEpKV07CisgICAgICAgIGRv
dWJsZSB2YWwgPSAyNTUuMCAqICh2MSArIChjICogKG4gLSAxKSAtIGspICogKHYyIC0gdjEpKTsK
KyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAg
ICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZh
bHVlczsKKyAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOworICAgIGlmIChuIDwg
MSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PigoaSAqIG4pIC8gMjU1LjApOworICAgICAgICBrID0gc3RkOjptaW4oaywgbiAtIDEpOworICAg
ICAgICBkb3VibGUgdmFsID0gMjU1ICogdGFibGVWYWx1ZXNba107CisgICAgICAgIHZhbCA9IHN0
ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOworICAgICAgICB2YWx1ZXNbaV0gPSBz
dGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY29tcHV0
ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKKyAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGV4
cG9uZW50ID0gdHJhbnNmZXJGdW5jdGlvbi5leHBvbmVudDsgLy8gUkNWVCBkb2Vzbid0IGxpa2Ug
cGFzc2luZyBhIGRvdWJsZSBhbmQgYSBmbG9hdCB0byBwb3csIHNvIHByb21vdGUgdGhpcyB0byBk
b3VibGUKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHRyYW5zZmVyRnVuY3Rpb24uYW1w
bGl0dWRlICogcG93KChpIC8gMjU1LjApLCBleHBvbmVudCkgKyB0cmFuc2ZlckZ1bmN0aW9uLm9m
ZnNldCk7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkp
OworICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0K
K30KKworc3RhdGljIExvb2t1cFRhYmxlIGNvbXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBMb29rdXBUYWJsZSB0YWJsZTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHRhYmxlW2ldID0gaTsKKworICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCop
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIFRy
YW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7CisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxl
LAorICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwKKyAgICAgICAgY29tcHV0ZVRhYnVsYXJU
YWJsZSwKKyAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUsCisgICAgICAgIGNvbXB1dGVMaW5l
YXJUYWJsZSwKKyAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUKKyAgICB9OworCisgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNh
bGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0W2Z1bmN0aW9uLnR5cGVdKHRhYmxlLCBmdW5jdGlv
bik7CisKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK2Jvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6
YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0u
Z2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAg
IGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRw
dXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFw
SW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VSZWN0KCkpOworCisgICAg
aW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChvdXRwdXRJbWFnZVJlY3Qp
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworCisgICAgTG9va3VwVGFibGUgcmVkVGFibGUgPSBj
b21wdXRlTG9va3VwVGFibGUobV9yZWRGdW5jdGlvbik7CisgICAgTG9va3VwVGFibGUgZ3JlZW5U
YWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2dyZWVuRnVuY3Rpb24pOworICAgIExvb2t1cFRh
YmxlIGJsdWVUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2JsdWVGdW5jdGlvbik7CisgICAg
TG9va3VwVGFibGUgYWxwaGFUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2FscGhhRnVuY3Rp
b24pOworCisgICAgdW5zaWduZWQgb3V0cHV0UGl4ZWxBcnJheUxlbmd0aCA9IG91dHB1dFBpeGVs
QXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCogZGF0YSA9IG91dHB1dFBpeGVsQXJyYXkuZGF0
YSgpOworCisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwg
b3V0cHV0UGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKKyAgICAgICAgZGF0
YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwor
ICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNl
dCArIDJdXTsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRh
W3BpeGVsT2Zmc2V0ICsgM11dOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3Np
dGVTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWZkMWY5YmQ1ODAwNWYyOWM1MWMyOWVmYjYxNGI2
MGEwYTRlMzlmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCAr
MSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5Lmgi
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0
ZShpbnQgYykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OworICAgIHVuc2lnbmVkIHVjID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGMpOworICAgIHJldHVybiBidWZmWyEhKHVjICYgfjB4ZmYpICsgISEodWMgJiB+
KH4wdSA+PiAxKSldOworfQorCit0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CitzdGF0aWMgaW5s
aW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQoreworICAgIGZsb2F0IHNjYWxlZEsxOwor
ICAgIGZsb2F0IHNjYWxlZEs0OworICAgIGlmIChiMSkKKyAgICAgICAgc2NhbGVkSzEgPSBrMSAv
IDI1NS4wZjsKKyAgICBpZiAoYjQpCisgICAgICAgIHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7CisK
KyAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDApIHsKKyAgICAgICAgdW5zaWduZWQg
Y2hhciBpMSA9ICpzb3VyY2U7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRp
b247CisgICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEgKyBrMyAqIGkyOworICAgICAgICBp
ZiAoYjEpCisgICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzEgKiBpMSAqIGkyOworICAgICAg
ICBpZiAoYjQpCisgICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzQ7CisKKyAgICAgICAgKmRl
c3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7CisgICAgICAgICsrc291cmNlOworICAgICAg
ICArK2Rlc3RpbmF0aW9uOworICAgIH0KK30KKworLy8gY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNV
bmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyBm
b3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCisvLyBpcyBub3QgbmVjZXNzYXJ5LiBU
aGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgc3VjaCBhcyBhdXRv
LXZlY3Rvcml6YXRpb24uCit0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CitzdGF0aWMgaW5saW5l
IHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQodW5zaWduZWQgY2hhciogc291
cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZs
b2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQoreworICAgIGZsb2F0IHNjYWxl
ZEsxOworICAgIGZsb2F0IHNjYWxlZEs0OworICAgIGlmIChiMSkKKyAgICAgICAgc2NhbGVkSzEg
PSBrMSAvIDI1NS4wZjsKKyAgICBpZiAoYjQpCisgICAgICAgIHNjYWxlZEs0ID0gazQgKiAyNTUu
MGY7CisKKyAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDApIHsKKyAgICAgICAgdW5z
aWduZWQgY2hhciBpMSA9ICpzb3VyY2U7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTIgPSAqZGVz
dGluYXRpb247CisgICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEgKyBrMyAqIGkyOworICAg
ICAgICBpZiAoYjEpCisgICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzEgKiBpMSAqIGkyOwor
ICAgICAgICBpZiAoYjQpCisgICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzQ7CisKKyAgICAg
ICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OworICAgICAgICArK3NvdXJjZTsKKyAgICAgICAgKytk
ZXN0aW5hdGlvbjsKKyAgICB9Cit9CisKKyNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQor
c3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2FyZSh1bnNpZ25lZCBjaGFyKiBzb3Vy
Y2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgdXBwZXJM
aW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4KDAuMGYsIGsyKSArIHN0ZDo6bWF4
KDAuMGYsIGszKSArIGs0OworICAgIGZsb2F0IGxvd2VyTGltaXQgPSBzdGQ6Om1pbigwLjBmLCBr
MSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigwLjBmLCBrMykgKyBrNDsKKyAgICBp
ZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVwcGVyTGltaXQgPj0gMC4wZiAmJiB1
cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49IDAuMGYgJiYgbG93ZXJMaW1pdCA8
PSAxLjBmKSkgeworICAgICAgICBpZiAoazQpIHsKKyAgICAgICAgICAgIGlmIChrMSkKKyAgICAg
ICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAxPihzb3VyY2Us
IGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBr
MywgazQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGsxKQorICAgICAgICAg
ICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDA+KHNvdXJjZSwgZGVz
dGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDww
LCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBr
NCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrNCkgewor
ICAgICAgICBpZiAoazEpCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAx
Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDE+
KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoazEpCisgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsx
LCBrMiwgazMsIGs0KTsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBs
YXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCit7CisgICAgaW50IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKKyAg
ICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkp
KTsKKyAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5
bmFtaWNhbGx5LgorI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBBU1NFUlQoIShs
ZW5ndGggJiAweDMpKTsKKyAgICBwbGF0Zm9ybUFyaXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCks
IGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisjZWxzZQorICAg
IGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxl
bmd0aCwgazEsIGsyLCBrMywgazQpOworI2VuZGlmCit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFw
cGx5QXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlu
cHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBn
ZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3Qo
KSk7CisgICAgYXV0byBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KG91dHB1dEltYWdlUmVj
dCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0MkltYWdlUmVjdCA9IGdlb21l
dHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0Mi5pbWFnZVJlY3QoKSk7
CisgICAgaW5wdXQyLmNvcHlQaXhlbEJ1ZmZlcihvdXRwdXRQaXhlbEFycmF5LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlbmNsb3NpbmdJbnRSZWN0KG91dHB1dDJJbWFn
ZVJlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworCisgICAgcGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUoKmlucHV0UGl4ZWxBcnJheSwgb3V0cHV0UGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwg
bV9rMywgbV9rNCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFw
cGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbnB1dCA9
IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0uZ2V0KCk7CisK
KyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGF1dG8gaW5w
dXQySW1hZ2UgPSBpbnB1dDIuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UgfHwg
IWlucHV0MkltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dElt
YWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0g
b3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBnZW9t
ZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7
CisgICAgYXV0byBpbnB1dDJJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQy
LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworCisgICAgc3dpdGNoIChtX2NvbXBv
c2l0ZU9wZXJhdG9yKSB7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKKyAgICAgICAg
Ly8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCisgICAgICAgIGF1dG8g
aW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgICAgIGF1dG8gaW1hZ2VSZWN0MiA9
IGlucHV0Mi5pbWFnZVJlY3QoKTsKKyAgICAgICAgYXV0byBvdXRwdXRSZWN0ID0gb3V0cHV0Lmlt
YWdlUmVjdCgpOworCisgICAgICAgIGF1dG8gZGVzdGluYXRpb25SZWN0ID0gaW1hZ2VSZWN0Owor
ICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGltYWdlUmVjdDIpOworICAgICAgICBk
ZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KG91dHB1dFJlY3QpOworICAgICAgICBpZiAoZGVzdGlu
YXRpb25SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGF1dG8g
YWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7CisgICAgICAgIGFkanVz
dGVkRGVzdGluYXRpb25SZWN0Lm1vdmVCeSgtb3V0cHV0UmVjdC5sb2NhdGlvbigpKTsKKyAgICAg
ICAgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoYWRqdXN0
ZWREZXN0aW5hdGlvblJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IGRlc3RpbmF0
aW9uUmVjdDsKKyAgICAgICAgc291cmNlUmVjdC5tb3ZlQnkoLWltYWdlUmVjdC5sb2NhdGlvbigp
KTsKKyAgICAgICAgc291cmNlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChzb3VyY2VSZWN0
KTsKKworICAgICAgICBhdXRvIHNvdXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAgICAg
ICBzb3VyY2UyUmVjdC5tb3ZlQnkoLWltYWdlUmVjdDIubG9jYXRpb24oKSk7CisgICAgICAgIHNv
dXJjZTJSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KHNvdXJjZTJSZWN0KTsKKworICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGFkanVzdGVkRGVz
dGluYXRpb25SZWN0LCBzb3VyY2UyUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbnB1dEltYWdlLCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCwgc291cmNlUmVj
dCwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4gfSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09VVDoKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0MkltYWdlLCBpbnB1dDJJbWFn
ZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW5wdXQySW1hZ2UtPmxvZ2ljYWxTaXplKCkpLCBD
b21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0LCBJ
bnRSZWN0KEludFBvaW50KCksIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlQXRvcCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfWE9SOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhPUik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJ
QzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjoKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmlucHV0MkltYWdlLCBpbnB1dDJJbWFnZVJlY3QpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3Qs
IEludFJlY3QoSW50UG9pbnQoKSwgaW5wdXRJbWFnZS0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0
ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEZFQ29tcG9zaXRlOjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRv
ciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgICAgICByZXR1cm4gYXBw
bHlBcml0aG1ldGljU29mdHdhcmUob3V0cHV0LCBpbnB1dHMsIGdlb21ldHJ5KTsKKyAgICByZXR1
cm4gYXBwbHlOb25Bcml0aG1ldGljU29mdHdhcmUob3V0cHV0LCBpbnB1dHMsIGdlb21ldHJ5KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxODMwNDg3YzM3NzBi
NTA2Y2NjZThjODE4ZDU0MGZhMjlmNmJkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisKKyNpbmNsdWRlICJG
RUNvbG9yTWF0cml4LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoKKyAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgor
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgVGhlIGltYWdlIHJl
Y3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKKworICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgQSAgICAgICAgICB8CisgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKKyAgICAg
IHwgQiB8ICAgICAgQyAgICAgIHwgRCB8CisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAor
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgRSAgICAgICAg
ICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBXaGVyZSByZWdpb24gQyBj
b250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcworICAgY2FuIGJlIGNhbGN1bGF0ZWQg
d2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLgorCisgICBFeGFtcGxl
OgorICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEwCisKKyAgICAgIE9yZGVy
IChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQKKyAgICAgIFRhcmdldDog
eDoxLCB5OjMKKworICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBp
bnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6CisKKyAgICAgICAgLi4uCisgICAgICAgIC4uLgorICAg
ICAgICAuLi4KKyAgICAgICAgLlguCisKKyAgIFRoZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUg
dGhlIGZvbGxvd2luZzoKKyAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHky
KSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgorICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1
bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgorICAgICAgICAgICAgb25seSB0aG9zZSAo
eCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9IHkgPCB5MgorCisgICAg
ICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCisgICAgICBSZWdpb24gQjog
eDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCisgICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAz
LCB4MjogOSwgeTI6IDEwCisgICAgICBSZWdpb24gRDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHky
OiAxMAorICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0
eSByZWdpb24pCisKKyAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0
aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAorICAgYSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0
ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMuCisgICBGb3Igb3Ro
ZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBp
eGVsVmFsdWUsCisgICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBh
IHJhcmUgc2l0dWF0aW9ucywgd2hlbgorICAga2VybmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0
aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhpcworICAgZnVuY3Rpb24u
CisKKyAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJ
IGRlY2lkZWQgbm90IHRvIG1ha2UKKyAgIGNvbW1vbiBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5j
ZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCisgICBhbmQgd291bGQgbWFrZSBp
dCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgorKi8KKworLy8gUGFyYWxsZWxpemF0aW9uIHBh
cnRzCitzdGF0aWMgY29uc3RleHByIGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAq
IDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisKK3N0cnVj
dCBQYWludGluZ0RhdGEgeworICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5OworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OworICAgIGludCB3aWR0
aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIAorICAgIEludFNpemUga2VybmVsU2l6ZTsKKyAgICBm
bG9hdCBkaXZpc29yOworICAgIGZsb2F0IGJpYXM7CisgICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0
OworICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZTsKKyAgICBib29sIHByZXNlcnZlQWxwaGE7Cisg
ICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Cit9OworCitzdGF0aWMgQUxXQVlTX0lOTElO
RSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVuc2lnbmVkIGNo
YXIgbWF4ID0gMjU1KQoreworICAgIGlmIChjaGFubmVsIDw9IDApCisgICAgICAgIHJldHVybiAw
OworICAgIGlmIChjaGFubmVsID49IG1heCkKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICByZXR1
cm4gY2hhbm5lbDsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlv
blBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1w
ZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQgdG90YWxzWzRdLCBmbG9hdCBk
aXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCit7CisgICAgdW5z
aWduZWQgY2hhciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJH
QkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAzOyArK2kpCisgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZh
bHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOworCisgICAgaWYgKHBy
ZXNlcnZlQWxwaGFWYWx1ZXMpIHsKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwsIHNvdXJj
ZVBpeGVscy5pdGVtKHBpeGVsKSk7CisgICAgICAgICsrcGl4ZWw7CisgICAgfSBlbHNlCisgICAg
ICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKK30KKworc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQor
eworICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCisgICAgaW50
IHBpeGVsID0gKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndp
ZHRoICsgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkpICogNDsKKyAgICBpbnQga2VybmVs
SW5jcmVhc2UgPSBjbGlwUmlnaHQgKiA0OworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdE
YXRhLmtlcm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3Vt
IG9mIHJnYihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gbV9k
aXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRo
aXMKKyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOworCisgICAgLy8gU2tpcCB0aGUg
Zmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCknIGxpbmVzCisgICAgcGl4ZWwgKz0gKGNsaXBCb3R0
b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKKyAgICBpbnQg
c3RhcnRLZXJuZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNs
aXBSaWdodCArIDEpICogNCk7CisKKyAgICBmb3IgKGludCB5ID0geUVuZCArIDE7IHkgPiB5U3Rh
cnQ7IC0teSkgeworICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0t
eCkgeworICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1h
dHJpeC5zaXplKCkgLSAxOworICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJu
ZWxQaXhlbDsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXpl
LndpZHRoKCk7CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3Rh
bHNbMV0gPSAwOworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIHRvdGFs
c1szXSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0oa2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAg
ICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVB
bHBoYSkKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKKyAgICAgICAgICAgICAgICArK2tlcm5l
bFBpeGVsOworICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CisgICAgICAgICAgICAgICAg
aWYgKCEtLXdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5l
bEluY3JlYXNlOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJu
ZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5k
aXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOwor
ICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0OworICAgICAgICB9CisgICAgICAgIHBp
eGVsICs9IHhJbmNyZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSB4SW5jcmVhc2U7
CisgICAgfQorfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQoreworICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
CisKKyAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdlTW9kZSkgeworICAgIGRlZmF1bHQ6IC8v
IEVER0VNT0RFX05PTkUKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgRURHRU1PREVfRFVQ
TElDQVRFOgorICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAg
ZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgpCisgICAgICAgICAgICB4ID0gcGFpbnRp
bmdEYXRhLndpZHRoIC0gMTsKKyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAgICAgeSA9IDA7
CisgICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgICAg
IHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRp
bmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAg
IHdoaWxlICh4IDwgMCkKKyAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOworICAg
ICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgd2hpbGUgKHkgPCAwKQorICAg
ICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAgICB5ICU9IHBhaW50aW5n
RGF0YS5oZWlnaHQ7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgp
IDw8IDI7CisgICAgfQorfQorCisvLyBGb3Igb3RoZXIgcmVnaW9ucyB0aGFuIEMKK3N0YXRpYyB2
b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGlu
dCB5MSwgaW50IHgyLCBpbnQgeTIpCit7CisgICAgaW50IHBpeGVsID0gKHkxICogcGFpbnRpbmdE
YXRhLndpZHRoICsgeDEpICogNDsKKyAgICBpbnQgaGVpZ2h0ID0geTIgLSB5MTsKKyAgICBpbnQg
d2lkdGggPSB4MiAtIHgxOworICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0gcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC54KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVn
aW5LZXJuZWxQaXhlbFg7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKTsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0
YS53aWR0aCAtIHdpZHRoKSAqIDQ7CisgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cworICAgIGZsb2F0IHRvdGFsc1s0XTsKKworICAgIC8vIG1fZGl2aXNvciBjYW5u
b3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNT
RVJUKHBhaW50aW5nRGF0YS5kaXZpc29yKTsKKworICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkg
PiAwOyAtLXkpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7Cisg
ICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNp
emUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhl
bFg7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Cisg
ICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwor
CisgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOworICAgICAgICAgICAgdG90YWxzWzFdID0gMDsK
KyAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwor
CisgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAg
IGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVs
WCwga2VybmVsUGl4ZWxZKTsKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7
CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0
cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFd
ICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsK
KyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49
IDApCisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAzKSk7CisgICAgICAgICAgICAgICAgKytrZXJu
ZWxQaXhlbFg7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3Rh
cnRLZXJuZWxQaXhlbFg7CisgICAgICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOworICAg
ICAgICAgICAgICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXREZXN0
aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGlu
Z0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOworICAgICAgICAgICAgKytz
dGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgfQorICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7
CisgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7CisgICAgICAg
ICsrc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgfQorfQorCitib29sIEZFQ29udm9sdmVNYXRyaXg6
OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBd
LmdldCgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihtX3ByZXNlcnZlQWxwaGEgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91
dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRw
dXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0
cHV0SW1hZ2VSZWN0ID0gSW50UmVjdChnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdl
UmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSkpOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBpbnB1dFBpeGVsQXJyYXk7CisgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKKyAgICAgICAg
aW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBvdXRwdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CisgICAgZWxzZQorICAgICAgICBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBvdXRwdXRJbWFn
ZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBpZiAoIWlucHV0UGl4ZWxBcnJh
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50U2l6ZSBwYWludFNpemUgPSBJbnRT
aXplKG91dHB1dC5sb2dpY2FsU2l6ZSgpKTsKKworICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGEgPSB7CisgICAgICAgICppbnB1dFBpeGVsQXJyYXksCisgICAgICAgIG91dHB1dFBpeGVsQXJy
YXksCisgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAorICAgICAgICBwYWludFNpemUuaGVpZ2h0
KCksCisgICAgICAgIG1fa2VybmVsU2l6ZSwKKyAgICAgICAgbV9kaXZpc29yLAorICAgICAgICBt
X2JpYXMgKiAyNTUsCisgICAgICAgIG1fdGFyZ2V0T2Zmc2V0LAorICAgICAgICBtX2VkZ2VNb2Rl
LAorICAgICAgICBtX3ByZXNlcnZlQWxwaGEsCisgICAgICAgIEZFQ29sb3JNYXRyaXg6Om5vcm1h
bGl6ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCisgICAgfTsKKworICAgIC8vIERyYXdpbmcgZnVs
bHkgY292ZXJlZCBwaXhlbHMKKyAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRTaXplLndpZHRoKCkg
LSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50U2l6ZS5o
ZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKKworICAgIGlmIChjbGlwUmlnaHQgPCAw
IHx8IGNsaXBCb3R0b20gPCAwKSB7CisgICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0
aW1pemllZCBmb3Igc3BlZWQKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAw
LCAwLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGludCBpdGVyYXRpb25zID0gKHBhaW50U2l6ZS53
aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsK
KyAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOworICAgICAgICBp
bnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CisKKyAg
ICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVfdCBp
bmRleCkgeworICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7CisgICAg
ICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNs
aXBCb3R0b20pOworCisgICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEs
IGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAgfSk7CisgICAg
fSBlbHNlCisgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0
LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKKworICAgIGNsaXBSaWdodCArPSBtX3Rhcmdl
dE9mZnNldC54KCkgKyAxOworICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsg
MTsKKyAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKKyAgICAgICAgc2V0T3V0ZXJQaXhl
bHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQu
eSgpKTsKKyAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lk
dGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4g
MCkKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNl
dC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CisgICAgaWYgKGNsaXBSaWdo
dCA8IHBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xp
cEJvdHRvbSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUzOTAzMjlkNjdiYjE5MTkwNDdjYjIwYjlkYTRhYWFmYTI1OTBk
NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
MTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0
cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVj
dG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBi
eXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRl
cykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKKyAgICByZXR1cm4g
eCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Cit9CisKK2Jvb2wgRkVEaXNwbGFjZW1l
bnRNYXA6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAor
eworICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKKyAg
ICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CisgICAgCisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNb
MF0uZ2V0KCk7CisgICAgYXV0byYgaW5wdXQyID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0
byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0
UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gZ2VvbWV0
cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VSZWN0KCkpOwor
ICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZlciA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0ludFJlY3Qob3V0cHV0SW1h
Z2VSZWN0KSk7CisgICAgCisgICAgYXV0byBvdXRwdXQySW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFw
SW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQyLmltYWdlUmVjdCgpKTsKKyAgICAv
LyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkg
YXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCisgICAg
YXV0byBpbnB1dDJQaXhlbEJ1ZmZlciA9IGlucHV0Mi5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0ludFJlY3Qob3V0cHV0Mklt
YWdlUmVjdCkpOworCisgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFpbnB1dDJQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGlucHV0UGl4ZWxCdWZm
ZXItPmxlbmd0aCgpID09IGlucHV0MlBpeGVsQnVmZmVyLT5sZW5ndGgoKSk7CisKKyAgICBhdXRv
IHBhaW50U2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CisKKyAg
ICBhdXRvIHNjYWxlID0gZ2VvbWV0cnkubWFwSW1hZ2VTaXplKHsgbV9zY2FsZSwgbV9zY2FsZSB9
KTsKKyAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKKyAg
ICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CisgICAgZmxv
YXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CisgICAgZmxvYXQg
c2NhbGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OworICAgIAorICAgIGlu
dCBkaXNwbGFjZW1lbnRDaGFubmVsWCA9IHhDaGFubmVsSW5kZXgoKTsKKyAgICBpbnQgZGlzcGxh
Y2VtZW50Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSBw
YWludFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6
ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93
Qnl0ZXM7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsg
Kyt4KSB7CisgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNl
dCArIHggKiA0OworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0
aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogaW5wdXQyUGl4ZWxCdWZmZXItPml0ZW0oZGVz
dGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwor
ICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9y
WSAqIGlucHV0MlBpeGVsQnVmZmVyLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1l
bnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKworICAgICAgICAgICAgdW5zaWduZWQqIG91
dHB1dFBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG91dHB1dFBpeGVsQXJy
YXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7CisgICAgICAgICAgICBpZiAoc3JjWCA8IDAg
fHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50
U2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICpvdXRwdXRQaXhlbFB0ciA9IDA7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpv
dXRwdXRQaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRQaXhlbEJ1
ZmZlci0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgwNGU5ZWVhMmY5ZjFmY2I3MDEyNDdiY2RmM2RiOTdhYmY1NjVmZDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcApAQCAtMCwwICsxLDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRHJvcFNoYWRv
dy5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFRHJvcFNoYWRvdzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYg
aW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYmx1clJh
ZGl1cyA9IDIgKiBnZW9tZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fc3RkRGV2aWF0aW9u
WCwgbV9zdGREZXZpYXRpb25ZIH0pOworICAgIGF1dG8gb2Zmc2V0ID0gZ2VvbWV0cnkubWFwUmVz
b2x2ZWRJbWFnZVNpemUoeyBtX2R4LCBtX2R5IH0pOworCisgICAgYXV0byBpbnB1dEltYWdlUmVj
dCA9IGlucHV0LmltYWdlUmVjdCgpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFw
SW1hZ2VSZWN0KGlucHV0SW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworCisgICAgYXV0
byBpbnB1dEltYWdlUmVjdFdpdGhPZmZzZXQgPSBpbnB1dEltYWdlUmVjdDsKKyAgICBpbnB1dElt
YWdlUmVjdFdpdGhPZmZzZXQubW92ZShvZmZzZXQpOworCisgICAgYXV0byYgb3V0cHV0Q29udGV4
dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRBbHBoYSht
X3NoYWRvd09wYWNpdHkpOworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1
dEltYWdlLCBpbnB1dEltYWdlUmVjdFdpdGhPZmZzZXQpOworICAgIG91dHB1dENvbnRleHQuc2V0
QWxwaGEoMSk7CisKKyAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zm
c2V0LCBtX3NoYWRvd0NvbG9yKTsKKworICAgIGF1dG8gZm9ybWF0ID0gUGl4ZWxCdWZmZXJGb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG91dHB1dC5jb2xvclNwYWNlKCkgfTsKKyAgICBhdXRvIHNoYWRvd0FyZWEgPSBJbnRS
ZWN0IHsgSW50UG9pbnQoKSwgb3V0cHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkgfTsKKyAgICBhdXRv
IHNoYWRvd1BpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwg
c2hhZG93QXJlYSk7CisgICAgaWYgKCFzaGFkb3dQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvJiBzaGFkb3dQaXhlbEFycmF5ID0gc2hhZG93UGl4ZWxCdWZm
ZXItPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNoYWRvd1BpeGVs
QXJyYXkuZGF0YSgpLCBzaGFkb3dQaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogc2hhZG93UGl4ZWxC
dWZmZXItPnNpemUoKS53aWR0aCgpKTsKKworICAgIG91dHB1dEltYWdlLT5wdXRQaXhlbEJ1ZmZl
cigqc2hhZG93UGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworCisgICAgb3V0cHV0Q29udGV4dC5z
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKKyAgICBv
dXRwdXRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dC5sb2dp
Y2FsU2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CisgICAgb3V0cHV0Q29udGV4dC5zZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7CisKKyAgICBv
dXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3Qp
OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Rmxvb2RTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJiZWFlMTBiZTUw
ZWVjZjE5OTRiN2VmNWM5NGFkNTFmNjA5NTg5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJl
LmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRUZsb29kLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRmxvb2Q6OmFwcGx5
U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91
dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gY29sb3IgPSBtX2Zsb29kQ29sb3IuY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkobV9mbG9vZE9wYWNpdHkpOworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCku
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0SW1hZ2UtPmxvZ2ljYWxTaXpl
KCkpLCBjb2xvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNjZTY0MDQyMjU2NzRjYTU3NWI4MTVjOGYxODQyYzJjZjVkOGNlOWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1
ci5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1
ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFS
aWdodCkKK3sKKyAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5o
dG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KKyAgICBzd2l0Y2ggKGJsdXJJ
dGVyYXRpb24pIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Cisg
ICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyIC0gMTsKKyAgICAgICAgICAgIGRlbHRh
UmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOworICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1
cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6Cisg
ICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7CisgICAgICAgICAgICBkZWx0YUxlZnQrKzsKKyAg
ICAgICAgICAgIGRlbHRhUmlnaHQtLTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIDI6CisgICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7CisgICAgICAgICAgICBkZWx0YVJp
Z2h0Kys7CisgICAgICAgICAgICByYWRpdXMrKzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFu
bmVsLgorc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5
LAorICAgIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlk
ZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwg
Y29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQoreworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEg
PSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxB
cnJheS5kYXRhKCk7CisgICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVyby1pbmRl
eCBiYXNlZC4KKyAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7CisKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7CisgICAgICAgIGludCBsaW5lID0geSAqIHN0cmlk
ZUxpbmU7CisgICAgICAgIGludCBzdW0gPSAwOworCisgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5l
bC4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKKyAgICAgICAgICAg
IHN1bSArPSBzcmNQdHJbY2hhbm5lbF07CisgICAgICAgIH0KKworICAgICAgICAvLyBCbHVycmlu
Zy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZSArIGNo
YW5uZWw7CisgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRl
T2Zmc2V0OworICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bSAv
IGR4KTsKKworICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAgaWYgKHgg
Pj0gZHhMZWZ0KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50
OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAgICBzdW0g
LT0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0
IDwgZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9
IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgY29u
c3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OworICAgICAgICAgICAg
ICAgIHN1bSArPSAqc3JjUHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCisgICAgdW5zaWdu
ZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGlu
ZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBjb25zdCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0
ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKKyAgICBpZiAoYWxwaGFJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGJveEJsdXJBbHBoYU9ubHkoc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwg
ZHgsIGR4TGVmdCwgZHhSaWdodCwgc3RyaWRlLCBzdHJpZGVMaW5lLCAgZWZmZWN0V2lkdGgsIGVm
ZmVjdEhlaWdodCwgbWF4S2VybmVsU2l6ZSk7CisKKyAgICBjb25zdCB1aW50OF90KiBzcmNEYXRh
ID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7CisgICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVs
QXJyYXkuZGF0YSgpOworCisgICAgLy8gQ29uY2VybmluZyB0aGUgYXJyYXkgd2lkdGgvbGVuZ3Ro
OiBpdCBpcyBFbGVtZW50IHNpemUgKyBNYXJnaW4gKyBCb3JkZXIuIFRoZSBudW1iZXIgb2YgcGl4
ZWxzIHdpbGwgYmUKKyAgICAvLyBQID0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscy4KKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7CisgICAgICAgIGludCBsaW5l
ID0geSAqIHN0cmlkZUxpbmU7CisgICAgICAgIGludCBzdW1SID0gMCwgc3VtRyA9IDAsIHN1bUIg
PSAwLCBzdW1BID0gMDsKKworICAgICAgICBpZiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSkg
eworICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgorICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50
OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OworICAgICAgICAgICAgICAgIHN1bVIgKz0g
KnNyY1B0cisrOworICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOworICAgICAgICAg
ICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0
cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQmx1cnJpbmcuCisgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKKyAgICAgICAg
ICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OworCisg
ICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4
KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1H
IC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN1bUIgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN1bUEgLyBkeCk7CisKKyAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisgICAg
ICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zm
c2V0OworICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgLT0g
c3JjUHRyWzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RX
aWR0aCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVs
Qnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtUiArPSBzcmNQdHJbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3Jj
UHRyWzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKKyAgICAgICAg
ICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yICd3cmFwJyBoZXJlLgorICAgICAgICAgICAgLy8gR2V0IGVkZ2UgdmFsdWVzIGZv
ciBlZGdlTW9kZSAnZHVwbGljYXRlJy4KKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VW
YWx1ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVk
Z2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAobGluZSArIChlZmZlY3RXaWR0aCAtIDEpICogc3Ry
aWRlKTsKKworICAgICAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgorICAgICAgICAgICAgZm9y
IChpbnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwgZHhSaWdodDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgLy8gSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgdmFsdWVzIG9mICdpJz8KKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKKyAgICAgICAgICAg
ICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OworCisgICAgICAg
ICAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZh
bHVlTGVmdFswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVMZWZ0WzFd
OworICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZUxlZnRbMl07CisgICAgICAg
ICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlTGVmdFszXTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAr
PSBlZGdlVmFsdWVSaWdodFswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFs
dWVSaWdodFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsy
XTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIr
KzsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9ICpz
cmNQdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBCbHVycmluZy4KKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7
ICsreCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUg
KyB4ICogc3RyaWRlOworICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEg
KyBwaXhlbEJ5dGVPZmZzZXQ7CisKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW1SIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisr
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0
UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKKworICAgICAgICAgICAgICAg
IC8vIFNoaWZ0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBpZiAoeCA8IGR4TGVmdCkgeworICAg
ICAgICAgICAgICAgICAgICBzdW1SIC09IGVkZ2VWYWx1ZUxlZnRbMF07CisgICAgICAgICAgICAg
ICAgICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVmdFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt
QiAtPSBlZGdlVmFsdWVMZWZ0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BIC09IGVkZ2VW
YWx1ZUxlZnRbM107CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlk
ZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IGxlZnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOworICAg
ICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAg
c3VtQiAtPSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNd
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA+
PSBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJp
Z2h0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwor
ICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOworICAgICAgICAg
ICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxC
eXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OworICAgICAgICAgICAgICAg
ICAgICBzdW1SICs9IHNyY1B0clswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQ
dHJbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOworICAgICAgICAg
ICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRp
YyBpbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBp
bnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpCit7CisgICAgaWYg
KCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVmZmVj
dFdpZHRoIDw9IDAgfHwgZWZmZWN0SGVpZ2h0IDw9IDAgfHwgc3RyaWRlIDw9IDApIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBXZSBtdXN0IGFsd2F5cyB1c2UgYW4gb2RkIHJhZGl1cy4KKyAgICBpZiAoa2VybmVsU2l6ZSAl
IDIgIT0gMSkKKyAgICAgICAga2VybmVsU2l6ZSArPSAxOworCisgICAgdkltYWdlX0J1ZmZlciBl
ZmZlY3RJbkJ1ZmZlcjsKKyAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3RhdGljX2Nhc3Q8dm9p
ZCo+KGlvQnVmZmVyLmRhdGEoKSk7CisgICAgZWZmZWN0SW5CdWZmZXIud2lkdGggPSBlZmZlY3RX
aWR0aDsKKyAgICBlZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7CisgICAgZWZm
ZWN0SW5CdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGVmZmVj
dE91dEJ1ZmZlcjsKKyAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBCdWZmZXIuZGF0YSgp
OworICAgIGVmZmVjdE91dEJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOworICAgIGVmZmVjdE91
dEJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7CisgICAgZWZmZWN0T3V0QnVmZmVyLnJvd0J5
dGVzID0gc3RyaWRlOworCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGEgdGVtcG9yYXJ5
IGJ1ZmZlciBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBmaXJzdCB3aXRoIGEgc3BlY2lhbCBmbGFn
LiB2SW1hZ2Ugd2lsbCByZXR1cm4KKyAgICAvLyB0aGUgc2l6ZSBuZWVkZWQsIG9yIGFuIGVycm9y
ICh3aGljaCBhcmUgYWxsIG5lZ2F0aXZlKS4KKyAgICBzaXplX3QgdG1wQnVmZmVyU2l6ZSA9IHZJ
bWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZl
ciwgMCwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQg
fCBrdkltYWdlR2V0VGVtcEJ1ZmZlclNpemUpOworICAgIGlmICh0bXBCdWZmZXJTaXplIDw9IDAp
CisgICAgICAgIHJldHVybjsKKworICAgIHZvaWQqIHRtcEJ1ZmZlciA9IGZhc3RNYWxsb2ModG1w
QnVmZmVyU2l6ZSk7CisgICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVm
ZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5l
bFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdC
ODg4OCgmZWZmZWN0T3V0QnVmZmVyLCAmZWZmZWN0SW5CdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwg
a2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFn
ZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwg
dG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCk7CisgICAgV1RGOjpmYXN0RnJlZSh0bXBCdWZmZXIpOworCisgICAgLy8gVGhlIGZpbmFs
IHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIEFTU0VSVChpb0J1ZmZl
ci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0aCgpKTsKKyAgICBtZW1jcHkoaW9CdWZmZXIu
ZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOworfQorI2VuZGlm
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNp
emUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAgaW50
IGR4TGVmdCA9IDA7CisgICAgaW50IGR4UmlnaHQgPSAwOworICAgIGludCBkeUxlZnQgPSAwOwor
ICAgIGludCBkeVJpZ2h0ID0gMDsKKyAgICAKKyAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1
ZmZlciA9ICZpb0J1ZmZlcjsKKyAgICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVt
cEJ1ZmZlcjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgIGlm
IChrZXJuZWxTaXplWCkgeworICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6
ZVgsIGR4TGVmdCwgZHhSaWdodCk7CisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAg
ICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCisgICAgICAgICAgICAgICAgYm94Qmx1ck5FT04o
KmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwg
c3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIs
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1vZGUpOworI2Vsc2UKKyAgICAgICAg
ICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwg
ZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgp
LCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKKyNlbmRpZgorICAgICAgICAgICAgc3RkOjpzd2Fw
KGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXJuZWxT
aXplWSkgeworICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVm
dCwgZHlSaWdodCk7CisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgICAgICAgICAg
aWYgKCFpc0FscGhhSW1hZ2UpCisgICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZm
ZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBw
YWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOworI2Vsc2UKKyAgICAgICAgICAgIGJveEJs
dXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwg
c3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhh
SW1hZ2UsIGVkZ2VNb2RlKTsKKyNlbmRpZgorICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZm
ZXIsIHRvQnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSBmaW5hbCByZXN1
bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KKyAgICBpZiAoJmlvQnVmZmVyICE9IGZy
b21CdWZmZXIpIHsKKyAgICAgICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IGZyb21CdWZm
ZXItPmxlbmd0aCgpKTsKKyAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgZnJvbUJ1ZmZl
ci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBV
aW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVu
c2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdl
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNp
emUud2lkdGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChrZXJuZWxTaXplWCA9
PSBrZXJuZWxTaXplWSAmJiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBlZGdlTW9kZSA9
PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7CisgICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVm
ZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgc3RhbmRhcmRCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXpl
WCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2Rl
KTsKK30KKworI2lmICFVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlX
b3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCit7CisgICAgSW50U2l6
ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBhcmFtZXRlcnMtPmhlaWdodCk7CisgICAg
cGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW1ldGVycy0+aW9Q
aXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVs
U2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUpOworfQorI2VuZGlmCisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxw
aGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworI2lmICFVU0UoQUNDRUxFUkFURSkK
KyAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CisgICAgaW50IGV4dHJh
SGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKKyAgICBpbnQgb3B0aW1hbFRocmVhZE51
bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkgLyAoc19taW5p
bWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOworCisg
ICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CisgICAgICAgIFdURjo6UGFyYWxsZWxK
b2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOworCisgICAgICAgIGludCBqb2JzID0gcGFyYWxs
ZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBpZiAoam9icyA+IDEpIHsKKyAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiYmxvY2tIZWlnaHQiLXNpemVkIGpvYnMgYnV0IHRo
ZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQorICAg
ICAgICAgICAgLy8gYmxvY2tIZWlnaHQgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFz
IGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAgICAgICAg
ICAgY29uc3QgaW50IGJsb2NrSGVpZ2h0ID0gcGFpbnRTaXplLmhlaWdodCgpIC8gam9iczsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRTaXplLmhlaWdodCgpICUg
am9iczsKKworICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAgIGZvciAo
aW50IGpvYiA9IDA7IGpvYiA8IGpvYnM7IGpvYisrKSB7CisgICAgICAgICAgICAgICAgUGxhdGZv
cm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKKworICAgICAgICAgICAgICAg
IGludCBzdGFydFkgPSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7CisgICAgICAg
ICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsg
MSA6IGJsb2NrSGVpZ2h0OworICAgICAgICAgICAgICAgIGludCBlbmRZID0gam9iID09IGpvYnMg
LSAxID8gY3VycmVudFkgOiBjdXJyZW50WSArIGV4dHJhSGVpZ2h0OworCisgICAgICAgICAgICAg
ICAgaW50IGJsb2NrU2l6ZSA9IChlbmRZIC0gc3RhcnRZKSAqIHNjYW5saW5lOworICAgICAgICAg
ICAgICAgIGlmICgham9iKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJy
YXkgPSAmaW9CdWZmZXI7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5
ID0gJnRtcFBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVV
bmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQ
aXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tT
aXplKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRh
dGEoKSwgaW9CdWZmZXIuZGF0YSgpICsgc3RhcnRZICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRT
aXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFy
dFk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7Cisg
ICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CisKKyAgICAgICAg
ICAgIC8vIENvcHkgdG9nZXRoZXIgdGhlIHBhcnRzIG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAg
IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IDE7IGpvYiA8IGpvYnM7
IGpvYisrKSB7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFt
cyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBpbnQgc291
cmNlT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbk9mZnNldDsKKyAgICAg
ICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgICAgICBpbnQgYWRqdXN0ZWRCbG9ja0hl
aWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdo
dDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGFkanVzdGVkQmxvY2tIZWlnaHQ7Cisg
ICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gZXh0cmFIZWlnaHQgKiBzY2FubGluZTsKKyAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9IGN1cnJlbnRZICogc2NhbmxpbmU7Cisg
ICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxvY2tIZWlnaHQgKiBzY2FubGluZTsKKwor
ICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNl
dCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsgc291cmNlT2Zmc2V0LCBzaXplKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBG
YWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KKyAgICB9CisjZW5kaWYKKworICAgIC8v
IFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkg
b24gc29tZSBwbGF0Zm9ybXMuCisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoaW9CdWZmZXIsIHRt
cFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhh
SW1hZ2UsIGVkZ2VNb2RlKTsKK30KKworYm9vbCBGRUdhdXNzaWFuQmx1cjo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0
cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIAorICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0
ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VS
ZWN0KCkpOworCisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0ludFJlY3Qob3V0
cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIW1fc3RkRGV2
aWF0aW9uWCAmJiAhbV9zdGREZXZpYXRpb25ZKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZ2VvbWV0cnkubWFwUmVzb2x2
ZWRJbWFnZVNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2aWF0aW9uWSB9KSk7CisgICAg
YXV0byBwYWludFNpemUgPSBJbnRTaXplKG91dHB1dC5sb2dpY2FsU2l6ZSgpKTsKKworICAgIGF1
dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOworICAgIGlmICghdG1wSW1hZ2VEYXRhKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUFwcGx5KG91dHB1dFBpeGVsQXJyYXksICp0
bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFp
bnRTaXplLCBvdXRwdXQuaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2Fy
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg1YTBmNDBiYThjOTYxMGViNDY3
NjgzNDM1MTEwM2JmOTFmYmJkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdF
RCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKworI2luY2x1ZGUg
IkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZVZlY3Rvci5oIgorCisjaW5jbHVkZSAiTGlnaHRpbmdEYXRhLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUxpZ2h0aW5nOjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gb3V0
cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVs
QnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1h
cEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0LmltYWdlUmVjdCgpKTsKKworICAg
IGlucHV0LmNvcHlQaXhlbEJ1ZmZlcihvdXRwdXRQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KG91dHB1dEltYWdlUmVjdCksIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisKKyAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3Ro
cyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMworICAgIC8v
IHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAo
bGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQorICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJu
ZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCisgICAg
Ly8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50
YXRpb24KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ0ODUy
Yzk0ZWZiYTMxM2M3ZmM5YWE4N2EwMGVhOTIxYjJlMGIyMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNv
ZnR3YXJlLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRkVNZXJnZS5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0
cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVj
dG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTWVyZ2U6OmFwcGx5U29mdHdh
cmUoRmlsdGVySW1hZ2UmIHJlc3VsdCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVCghaW5w
dXRzLmlzRW1wdHkoKSk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVm
ZmVyKCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKKworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpIHsKKyAgICAgICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IGlucHV0LT5pbWFnZUJ1ZmZlcigpOworICAgICAgICBpZiAoIWltYWdlQnVmZmVy
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0g
Z2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LT5pbWFnZVJlY3QoKSwgcmVzdWx0LmltYWdlUmVj
dCgpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBpbWFnZVJlY3QpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdh
cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJlZjk4M2I0OTA0YWNlY2Y2YjI0ZmNhYjVlMzAyNTY5ZjU5MDhl
OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDI1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEFwcGxl
IEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5o
IgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHsKKyAg
ICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yOworICAgIGludCByYWRpdXNY
OworICAgIGludCByYWRpdXNZOworCisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1Bp
eGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgaW50
IHdpZHRoOworICAgIGludCBoZWlnaHQ7Cit9OworCitzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMgeworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBNb3JwaG9sb2d5UGFpbnRpbmdE
YXRhJiwgaW50LCBpbnQpPiBmaWxsUmVnaW9uOworICAgIGludCBzdGFydFk7CisgICAgaW50IGVu
ZFk7CisgICAgY29uc3QgTW9ycGhvbG9neVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworfTsK
KwordXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4sIDE2PjsKKworc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoKQoreworICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OworfQorCitp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKK3sKKyAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOworfQorCitpbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Cit9
CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiYgYikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKKwor
ICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Cit9CisKK3RlbXBsYXRlPE1vcnBob2xv
Z3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCit7
CisgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQ
YWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3Jj
UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0p
OworCisgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKKyAgICAg
ICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAg
ZXh0cmVtdW0gPSBtaW5Pck1heDxtb3JwaG9sb2d5T3BlcmF0b3I+KGV4dHJlbXVtLCBwaXhlbCk7
CisgICAgfQorICAgIHJldHVybiBleHRyZW11bTsKK30KKworQUxXQVlTX0lOTElORSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRo
LCBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQoreworICAgIGlmIChtb3Jw
aG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQorICAgICAgICBy
ZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhl
bEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKKworICAgIHJldHVybiBjb2x1bW5FeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3Rh
cnQsIHlFbmQsIHdpZHRoKTsKK30KKwordGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK3sKKyAgICBhdXRv
IGV4dHJlbXVtID0ga2VybmVsWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVs
LnNpemUoKTsgKytpKQorICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PG1vcnBob2xvZ3lPcGVy
YXRvcj4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7CisKKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisK
K0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVt
KGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xv
Z3lPcGVyYXRvcikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKKworICAgIHJldHVybiBrZXJuZWxFeHRyZW11
bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOworfQorCitzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uKGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisg
ICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eTsKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
OworCisgICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKKyAgICBj
b25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOworICAgIGNvbnN0IGludCB3
aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRp
bmdEYXRhLmhlaWdodDsKKworICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kg
PD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYg
c3RhcnRZIDwgZW5kWSk7CisKKyAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7CisgICAgZXh0cmVt
YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7CisKKyAgICBmb3IgKGlu
dCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIGludCB5UmFkaXVzU3RhcnQg
PSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7CisgICAgICAgIGludCB5UmFkaXVzRW5kID0gc3Rk
OjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOworCisgICAgICAgIGV4dHJlbWEuc2hyaW5r
KDApOworCisgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUg
ZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCByYWRpdXNYOyArK3gpCisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRy
ZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yKSk7CisKKyAgICAgICAgLy8gS2VybmVsIGlz
IGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVz
WCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhl
bEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFp
bnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpOworCisgICAgICAgICAgICBpZiAoeCA+IHJh
ZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4
ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAgICAgICAg
ICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVs
RXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpLnZhbHVl
OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2Vy
KFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKK3sKKyAgICBwYXJhbS0+ZmlsbFJlZ2lv
bigqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworfQor
CitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKK3sKKyAgICAvLyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hp
bWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBv
ZiBhYm91dCAwLjY1LgorICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRh
LnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1OworCisgICAgc3RhdGljIGNv
bnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworICAgIAorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBw
YWludGluZ0RhdGEuaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVy
ID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEu
aGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKKyAg
ICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4g
MSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKKyAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2Ug
ZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAg
ICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRz
OworICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUg
bnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAg
IGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgeworICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbS5maWxsUmVnaW9uID0gZmls
bFJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEg
OiBqb2JTaXplOworICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1v
ZGVsCisgICAgfQorCisgICAgZmlsbFJlZ2lvbihwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0
YS5oZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShGaWx0
ZXJJbWFnZSYgaW4sIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
aW50IHJhZGl1c1gsIGludCByYWRpdXNZKQoreworICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRp
dXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7CisgICAgICAgIGluLmNvcHlQaXhl
bEJ1ZmZlcihkc3RQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBpbWFnZVJlY3QsIGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZFTW9ycGhvbG9neTo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0
cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBJ
bnRSZWN0KGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0Lmlt
YWdlUmVjdCgpKSk7CisKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0
U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5l
cmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCksIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgb3V0cHV0SW1hZ2VS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShnZW9t
ZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAg
ICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKG91dHB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFk
aXVzLndpZHRoKCkpOworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4ob3V0cHV0SW1hZ2VSZWN0
LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCksIHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yID0gbV9tb3JwaG9sb2d5T3BlcmF0b3I7Cisg
ICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0Rh
dGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOworCisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkgPSBpbnB1dFBpeGVsQXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVs
QXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWls
ZihvdXRwdXRJbWFnZVJlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNl
aWxmKG91dHB1dEltYWdlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBwbGF0Zm9ybUFwcGx5KHBhaW50
aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
ZmIwYjhhYWFkMGE1YTU1Mjg4ZDE3ZWVjNDA4MDEyZTZlN2VmYjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zm
c2V0U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlu
cHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9
IGlucHV0LmltYWdlUmVjdCgpOworICAgIGlucHV0SW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVz
b2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2Vv
bWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0SW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOwor
CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2Us
IGlucHV0SW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mY2EwNTM1Y2MyN2M0MzQyMmM2OGIxZWM5ZjY4MGIzMGIzMTAxOWI4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVRpbGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2Uu
aCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQg
PSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0
cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJl
Y3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbnB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1h
cEltYWdlUmVjdChpbnB1dEltYWdlUmVjdCk7CisKKyAgICBhdXRvIHRpbGVSZWN0ID0gZ2VvbWV0
cnkuY2xpcFRvRmlsdGVyUmVnaW9uKGlucHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICB0
aWxlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdCh0aWxlUmVjdCk7CisKKyAgICBhdXRvIG91
dHB1dEltYWdlUmVjdCA9IG91dHB1dC5pbWFnZVJlY3QoKTsKKyAgICBvdXRwdXRJbWFnZVJlY3Qg
PSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0SW1hZ2VSZWN0KTsKKworICAgIGF1dG8gbWF4
T3V0cHV0UmVjdCA9IGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihvdXRwdXQucHJpbWl0aXZl
U3VicmVnaW9uKCkpOworICAgIG1heE91dHB1dFJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qo
bWF4T3V0cHV0UmVjdCk7CisKKyAgICBhdXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAx
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIXRpbGVJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3Jh
cGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0
KCk7CisgICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkp
OworICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1
dEltYWdlUmVjdC5sb2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBp
ZiAoIXRpbGVJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5lVHJhbnNm
b3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGls
ZVJlY3QubG9jYXRpb24oKSAtIG1heE91dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRv
IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsg
dHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
b3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4
dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKyAgICAKKyAgICBvdXRwdXRDb250
ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dEltYWdlUmVjdC5zaXpl
KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45OTdiNDAxNTFlNDc2MGRlNWNlZmJmOTFiMDkwMmViM2ZmNWQyZDI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdl
ZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdHVyYnVs
ZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVh
cnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKKworLyoKKyAgICBQcm9kdWNlcyByZXN1
bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAo
YSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9
IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2Vl
IFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgK
KyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0
MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmln
aW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5
NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKioz
MSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7
IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3Mzsg
Ly8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0
YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOworCitzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJl
Y3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBh
cmFsbGVsIGpvYnMuCisKK3N0cnVjdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhIHsKKyAgICBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25n
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAg
ICAgICAgOiB0dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkKKyAgICAgICAgLCBiYXNlRnJl
cXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJl
cXVlbmN5WSkKKyAgICAgICAgLCBudW1PY3RhdmVzKG51bU9jdGF2ZXMpCisgICAgICAgICwgc2Vl
ZChzZWVkKQorICAgICAgICAsIHN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKQorICAgICAgICAsIHBh
aW50aW5nU2l6ZShwYWludGluZ1NpemUpCisgICAgeworICAgIH0KKworICAgIC8vIENvbXB1dGUg
cHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgaW5saW5lIGxvbmcgcmFuZG9tKCkKKyAgICB7Cisg
ICAgICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAt
IHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApCisg
ICAgICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKKyAgICAgICAgc2VlZCA9IHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUdXJidWxlbmNlVHlwZSB0
dXJidWxlbmNlVHlwZTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WTsKKyAgICBpbnQgbnVtT2N0YXZlczsKKyAgICBsb25nIHNlZWQ7CisgICAgYm9v
bCBzdGl0Y2hUaWxlczsKKyAgICBJbnRTaXplIHBhaW50aW5nU2l6ZTsKKworICAgIGludCBsYXR0
aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07CisgICAgZmxvYXQgZ3JhZGllbnRbNF1b
MiAqIHNfYmxvY2tTaXplICsgMl1bMl07Cit9OworCitzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAg
U3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKKworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11
Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAg
fTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAg
aW50IHdyYXBZIHsgMCB9OworfTsKKworc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0aXRjaERh
dGEsIGludCwgaW50KT4gZmlsbFJlZ2lvbjsKKyAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxB
cnJheTsKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2Nh
bGU7CisgICAgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgIFN0aXRj
aERhdGEgc3RpdGNoRGF0YTsKKyAgICBpbnQgc3RhcnRZOworICAgIGludCBlbmRZOworfTsKKwor
aW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCit7CisgICAgcmV0dXJuIHQgKiB0ICog
KDMgLSAyICogdCk7Cit9CisKK2lubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0
IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKK30K
Kworc3RhdGljIHZvaWQgaW5pdFBhaW50KFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSkKK3sKKyAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOworCisgICAgLy8gVGhlIHNl
ZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAg
aWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0g
LShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBpZiAo
cGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdE
YXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKworICAgIGZsb2F0KiBncmFkaWVudDsKKyAg
ICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAgICAgIHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOworICAgICAgICAgICAgZ3JhZGllbnQg
PSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5n
RGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxv
Y2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6
ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAh
Z3JhZGllbnRbMV0pOworICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlw
b3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGdyYWRpZW50WzBdIC89
IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxp
emF0aW9uRmFjdG9yOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IHNfYmxv
Y2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgp
ICUgc19ibG9ja1NpemU7CisgICAgICAgIEFTU0VSVChqID49IDApOworICAgICAgICBBU1NFUlQo
aiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKKyAgICAgICAgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CisgICAgfQorCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsr
Y2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3Nf
YmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07
CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUg
KyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKKyAgICAgICAg
fQorICAgIH0KK30KKworc3RhdGljIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwg
Ym9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKKyAgICBm
bG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgQVNTRVJUKHRpbGVXaWR0
aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOworCisgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQg
dHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAvLyBzbyB0
aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgorICAgIGlmIChiYXNlRnJl
cXVlbmN5WCkgeworICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICBmbG9hdCBoaWdoRnJlcXVl
bmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAg
ICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRv
IHRoZSBzdGFuZGFyZC4KKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5
IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAgICAgYmFzZUZyZXF1
ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKKyAgICB9CisgICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7
CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZy
ZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNl
aWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZy
ZXF1ZW5jeVkpCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5Owor
ICAgIH0KKworICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKKyAgICBzdGl0Y2hEYXRhLndy
YXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgc3RpdGNoRGF0YS5o
ZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICBzdGl0Y2hE
YXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OworCisgICAgcmV0
dXJuIHN0aXRjaERhdGE7Cit9CisKKy8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6
IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVt
ZW50Lgorc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQoreworICAgIHN0cnVjdCBOb2lz
ZVBvc2l0aW9uIHsKKyAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0
ZXh0LgorICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0
LgorICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4K
KworICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOworICAgICAgICAgICAgLy8gIGJ4MCA9
IChpbnQpdDsKKyAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKKyAgICAgICAgICAgIC8vICBy
eDAgPSB0IC0gKGludCl0OworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQg
KyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAg
IGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQorICAgICAgICAgICAgLy8g
ICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSB3
cmFwU2l6ZSkKKyAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOworCisgICAgICAgICAgICAv
LyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAgICAvLyAgIGJ4MSAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFw
U2l6ZSkKKyAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOworICAgIE5v
aXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7CisKKyAgICAvLyBJZiBzdGl0Y2hp
bmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAocGFpbnRpbmdE
YXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0
aCwgc3RpdGNoRGF0YS53cmFwWCk7CisgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5o
ZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOworICAgIH0KKworICAgIC8vIGJ4MCAmPSBCTTsKKyAg
ICAvLyBieDEgJj0gQk07CisgICAgLy8gYnkwICY9IEJNOworICAgIC8vIGJ5MSAmPSBCTTsKKyAg
ICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VYLm5leHRJbmRleCAmPSBz
X2Jsb2NrTWFzazsKKyAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZ
Lm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKworICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9y
W2J4MF07CisgICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKKyAgICBpbnQgbGF0dGlj
ZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOworICAg
IGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lz
ZVgubmV4dEluZGV4XTsKKworICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7CisgICAg
Ly8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKKyAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZl
KG5vaXNlWC5mcmFjdGlvbik7CisgICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJh
Y3Rpb24pOworCisgICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsK
KyAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQorICAgICAgICBpbnQg
YjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVku
aW5kZXhdOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUg
PSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKKyAgICAgICAgZmxvYXQgdSA9IG5vaXNl
WC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOworCisgICAgICAgIC8v
IGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07CisgICAgICAgIGludCBiMTAgPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhd
OworICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50
W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOworICAgICAgICBmbG9h
dCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFb
MV07CisgICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYSA9IGxp
bmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworCisgICAgICAgIC8vIGIwMSA9IHVMYXR0aWNl
U2VsZWN0b3JbaSArIGJ5MV07CisgICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyBy
eTEgPSByeTAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxd
W2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOworICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9u
ICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisKKyAgICAgICAgLy8gYjEx
ID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKKyAgICAgICAgaW50IGIxMSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhd
OworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEg
KiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMTFdOworICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSAr
IChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisgICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1
LCB2KTsKKyAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwor
CisgICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKKyAgICAgICAgcmV0dXJuIGxpbmVh
ckludGVycG9sYXRpb24oc3ksIGEsIGIpOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAg
ICBub2lzZUZvckNoYW5uZWwoMCksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKKyAgICAg
ICAgbm9pc2VGb3JDaGFubmVsKDIpLAorICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKKyAgICB9
OworfQorCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50
cy4KKy8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4o
U1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCitzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKK3sKKyAgICByZXR1
cm4geworICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90
PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCisg
ICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVu
dHNbMl0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRp
Y19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKKyAgICB9Owor
fQorCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0IFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKKyAg
ICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJl
cXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKKyAgICBm
bG9hdCByYXRpbyA9IDE7CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRp
bmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEu
dHVyYnVsZW5jZVR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87CisKKyAgICAgICAgbm9pc2VWZWN0b3Iu
c2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lz
ZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8gKj0gMjsKKworICAgICAgICBpZiAocGFp
bnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZh
bHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9u
IGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1
YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Cisg
ICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Bl
cmxpbk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAg
ICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9p
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUp
ICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCisgICAgaWYgKHBhaW50aW5nRGF0YS50dXJi
dWxlbmNlVHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsg
MC41ZjsKKworICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKQorewor
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmls
dGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBz
dGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7CisKKyAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsg
MSk7CisgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAg
cG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IHBvaW50LnNjYWxlZCgxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNj
YWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsK
KyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgp
LCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKKyAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5u
ZWwgKz0gNDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldv
cmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBwYXJhbWV0ZXJz
LT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5maWx0ZXJS
ZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRh
LCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMt
PmVuZFkpOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0
LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7Cisg
ICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAg
ICBJbnRTaXplIG91dHB1dFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworICAgIEludFNpemUg
dGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6
ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKKyAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBtX3N0aXRjaFRpbGVzKTsKKworICAgIFR1cmJ1bGVuY2VQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhKG1fdHVyYnVsZW5jZVR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbV9udW1PY3RhdmVzLCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMsIHRpbGVTaXpl
KTsKKyAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKworICAgIGF1dG8gYXJlYSA9IG91dHB1
dFNpemUuYXJlYSgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGhlaWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CisKKyAg
ICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRp
bWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0
RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgp
KSk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQ
YXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmZmlsbFJlZ2lv
bldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFy
YW1ldGVyIGFycmF5CisgICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKKyAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxp
dCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJh
IHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCisgICAgICAgICAgICB1
bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBq
b2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0WSA9IDA7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2Jz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0g
cGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsbFJl
Z2lvbiA9IHN0YXRpY19jYXN0PHZvaWQoKikoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEsIGludCwgaW50KT4oJmZpbGxSZWdpb24pOworICAgICAgICAgICAgICAgIHBhcmFt
cy5waXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LmZpbHRlclJlZ2lvbiA9IG91dHB1dEltYWdlUmVjdDsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
ZmlsdGVyU2NhbGUgPSBnZW9tZXRyeS5maWx0ZXJTY2FsZSgpOworICAgICAgICAgICAgICAgIHBh
cmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZ
ID0gc3RhcnRZOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgam9iSGVpZ2h0ID0gKGkgPCBq
b2JzV2l0aEV4dHJhKSA/IHN0ZXBZICsgMSA6IHN0ZXBZOworICAgICAgICAgICAgICAgIHBhcmFt
cy5lbmRZID0gcGFyYW1zLnN0YXJ0WSArIGpvYkhlaWdodDsKKyAgICAgICAgICAgICAgICBzdGFy
dFkgKz0gam9iSGVpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBu
byByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgor
ICAgIGZpbGxSZWdpb24ob3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBnZW9tZXRy
eS5maWx0ZXJTY2FsZSgpLCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
SW1hZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNWZmYzJl
OGUzYTUzNzE3MGZhMjk4YzlmNGQyYzg3YzZhNzZiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdl
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlU29mdHdhcmUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJJbWFnZVNvZnR3YXJlOjpGaWx0ZXJJbWFnZVNvZnR3
YXJlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IGltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAgIDogRmlsdGVy
SW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGZhbHNlLCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSwgaW1hZ2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIt
PnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci0+Y29sb3JTcGFjZSgpKQorICAgICwgbV9p
bWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIEZp
bHRlckltYWdlU29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9n
aWNhbFNpemUpIH07CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4
ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCksIHJlY3QpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFn
ZVNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTYyN2U4ZWRkZWQ3ZTJl
OTU3YjE3ZTkzZGUyMGQ0MmViMTBiOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJl
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUg
bWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmlsdGVySW1hZ2VTb2Z0d2FyZSA6IHB1YmxpYyBGaWx0ZXJJbWFnZSB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlOworICAgIEZpbHRlckltYWdlU29mdHdh
cmUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
aW1hZ2VSZWN0LCBSZWY8SW1hZ2VCdWZmZXI+JiYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBvdmVycmlkZSB7IHJldHVybiBtX2lt
YWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVySW1hZ2VTb2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0xpZ2h0aW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdodGluZ0RhdGEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YzA5YzE2MjNhOWQ3NjAyMmJhOTI3MzdmY2NhODlmODllMjNmMzYwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdo
dGluZ0RhdGEuaApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgY29uc3RleHByIGludCBjUGl4ZWxTaXplID0gNDsKK3N0YXRpYyBjb25zdGV4cHIg
aW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOworc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNP
cGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOworCitzdHJ1Y3QgQWxwaGFX
aW5kb3cgeworICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OworICAgIAorICAgIC8vIFRoZSBp
bXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFz
aWVyLgorICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFs
cGhhWzBdWzBdOyB9CisgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyBy
ZXR1cm4gYWxwaGFbMV1bMF07IH0KKyAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQorCisgICAgdWludDhfdCB0b3AoKSBjb25zdCAg
ICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KKyAgICB1aW50OF90IGNlbnRl
cigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQorICAgIHVpbnQ4
X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisK
KyAgICB2b2lkIHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0g
dmFsdWU7IH0KKyAgICB2b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhh
WzFdWzFdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAg
ICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KKworICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhf
dCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0UmlnaHQo
dWludDhfdCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQg
c2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQor
CisgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAgICB7CisgICAg
ICAgIGFscGhhWzBdID0gYWxwaGFbMV07CisgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2hpZnQoKQorICAgIHsKKyAgICAgICAgc2hpZnRSb3coYWxw
aGFbMF0pOworICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAgICAgIHNoaWZ0Um93KGFs
cGhhWzJdKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAvLyBUaGlz
IHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAgICBV
aW50OENsYW1wZWRBcnJheSogcGl4ZWxzOworICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKKyAgICBp
bnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlP
bmU7CisgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOworCisgICAgaW5saW5lIEludFNpemUg
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGNlbnRl
ciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICAgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAg
b2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgYm90dG9t
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgICAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgLTIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0
b20gKyBib3R0b21SaWdodCwKKyAgICAgICAgICAgIC0yICogY2VudGVyIC0gcmlnaHQgKyAyICog
Ym90dG9tICsgYm90dG9tUmlnaHQKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50
U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGludCBs
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAg
ICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0ICs9IHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CisgICAgICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCBib3R0b21S
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAt
MiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQsCisgICAgICAg
ICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9t
ICsgYm90dG9tUmlnaHQKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50U2l6ZSB0
b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGxlZnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBv
ZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBib3R0b21M
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21M
ZWZ0ICsgYm90dG9tLAorICAgICAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsgYm90dG9tTGVm
dCArIDIgKiBib3R0b20KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50U2l6ZSBs
ZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgY2Vu
dGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAg
ICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAg
IG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBi
b3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2Vu
dGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAgICAgICAtMiAq
IHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgICAgIH07Cisg
ICAgfQorCisgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxw
aGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IHJpZ2h0QWxw
aGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldDsKKyAg
ICAgICAgCisgICAgICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KHJpZ2h0QWxwaGFPZmZzZXQpKTsKKyAgICAgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplKSk7CisgICAgICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkp
OworCisgICAgICAgIGludCBsZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgpOworICAgICAgICBpbnQg
dG9wTGVmdCA9IGFscGhhV2luZG93LnRvcExlZnQoKTsKKyAgICAgICAgaW50IHRvcCA9IGFscGhh
V2luZG93LnRvcCgpOworCisgICAgICAgIGludCBib3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cuYm90
dG9tTGVmdCgpOworICAgICAgICBpbnQgYm90dG9tID0gYWxwaGFXaW5kb3cuYm90dG9tKCk7CisK
KyAgICAgICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBoZXJlIHdl
IGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KKyAgICAgICAgYWxwaGFXaW5kb3cuYWxwaGFbMF1b
Ml0gPSB0b3BSaWdodDsKKyAgICAgICAgYWxwaGFXaW5kb3cuYWxwaGFbMV1bMl0gPSByaWdodDsK
KyAgICAgICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKKyAgICAgICAg
CisgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGFscGhhV2luZG93IGlzIHdvcmtpbmcgd2l0aCBz
b21lIHNwb3QtY2hlY2tzLgorICAgICAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09
IHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKKyAgICAgICAgQVNTRVJU
KGFscGhhV2luZG93LnRvcCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCisKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIg
KiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKKyAgICAgICAgICAgIC10b3BMZWZ0
IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20gKyBib3R0b21S
aWdodAorICAgICAgICB9OworICAgIH0KKworICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1u
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgbGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCAt
PSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHRvcExlZnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgICAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBvZmZzZXQgKz0g
MiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgYm90dG9tTGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRl
ciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCisgICAgICAgICAgICAtdG9wTGVmdCAtIDIgKiB0b3Ag
KyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQorICAgICAgICB9OworICAgIH0KKworICAgIGlubGlu
ZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CisgICAgICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAg
ICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBj
ZW50ZXIgKyAyICogcmlnaHQsCisgICAgICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAq
IGNlbnRlciArIHJpZ2h0CisgICAgICAgIH07CisgICAgfQorCisgICAgaW5saW5lIEludFNpemUg
Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgbGVm
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAg
IGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCAtPSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgICAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgdG9wUmlnaHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLXRvcExlZnQgKyB0
b3BSaWdodCAtIDIgKiBsZWZ0ICsgMiAqIHJpZ2h0LAorICAgICAgICAgICAgLXRvcExlZnQgLSAy
ICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgICAgIH07
CisgICAgfQorCisgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAtdG9w
TGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKKyAgICAgICAgICAgIC10b3BMZWZ0
IC0gMiAqIHRvcCArIGxlZnQgKyAyICogY2VudGVyCisgICAgICAgIH07CisgICAgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxw
aGFTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzE3NDI4ZTc2NGRjY2ZjMTU3ZDk4MGEwYzk3OWRi
ZWU3NWQ2MWQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKwor
I2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dC5p
bWFnZVJlY3QoKSk7CisKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0
UmVjdCB7IHsgfSwgaW5wdXRJbWFnZVJlY3Quc2l6ZSgpIH0sIENvbG9yOjpibGFjayk7CisgICAg
b3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIEludFBv
aW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0
d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVkMDE1MmIxMjQ1MjFm
OTgzMjc1ODUyNjNmMzczM2JmYzdiZjRlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3
YXJlLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
b3VyY2VHcmFwaGljLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUdy
YXBoaWM6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIEFT
U0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdl
dCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0
SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW5wdXRJbWFnZSwgRmxvYXRQb2ludCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcAppbmRleCBmNDRhZTEyOWQwNzM4ZDMwYzc2ZTcxMDg1YjJhZWMwNWE3YjZmMWRhLi4zZjcy
NTc5MTYyMWVmZGVjMWQ2MzczMjczM2Q3ZWVjYjI3Mjk1ZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQxMiArMjgsMzM1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRWxl
bWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIKICNpbmNsdWRl
ICJGRUdhdXNzaWFuQmx1ci5oIgotI2luY2x1ZGUgIkZFTWVyZ2UuaCIKLSNpbmNsdWRlICJGaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVy
UmVzdWx0LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiUmVmZXJl
bmNlZFNWR1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAi
U1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKLSNpbmNsdWRlICJT
VkdGaWx0ZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKyNpbmNsdWRlICJTVkdGaWx0
ZXIuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSA8ZDJkMS5oPgorbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NG
aWx0ZXI6OmNyZWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBGaWx0ZXJHZW9t
ZXRyeTo6Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQoreworICAgIGF1dG8gZmlsdGVyID0g
YWRvcHRSZWYobmV3IENTU0ZpbHRlcihvcGVyYXRpb25zKSk7CisKKyAgICBpZiAoIWZpbHRlci0+
YnVpbGRGdW5jdGlvbnMocmVuZGVyZXIsIG9wZXJhdGlvbnMsIGNsaXBPcGVyYXRpb24pKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAo
cmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCAmJiAhZmlsdGVyLT5z
dXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNlbmRpZgorICAgICAgICAKKyAgICBmaWx0ZXIt
PnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJuIGZpbHRlcjsKK30K
IAotbmFtZXNwYWNlIFdlYkNvcmUgeworUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVh
dGUoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIoV1RG
TW92ZShmdW5jdGlvbnMpLCByZW5kZXJpbmdNb2RlKSk7Cit9CiAKLVJlZjxDU1NGaWx0ZXI+IENT
U0ZpbHRlcjo6Y3JlYXRlKCkKK0NTU0ZpbHRlcjo6Q1NTRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIG9wZXJhdGlvbnMpCisgICAgOiBGaWx0ZXIoVHlwZTo6Q1NTRmlsdGVyKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcik7CisgICAgbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIG1f
aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRp
b25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CiB9
CiAKLUNTU0ZpbHRlcjo6Q1NTRmlsdGVyKCkKLSAgICA6IEZpbHRlcihGbG9hdFNpemUgeyAxLCAx
IH0pCi0gICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCp0aGlzKSkK
K0NTU0ZpbHRlcjo6Q1NTRmlsdGVyKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1bmN0
aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQorICAgIDogRmlsdGVyKFR5cGU6OkNT
U0ZpbHRlcikKKyAgICAsIG1fZnVuY3Rpb25zKFdURk1vdmUoZnVuY3Rpb25zKSkKKyAgICAsIG1f
cmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQogewogfQogCi1DU1NGaWx0ZXI6On5DU1NGaWx0
ZXIoKSA9IGRlZmF1bHQ7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVm
ZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXJHZW9t
ZXRyeTo6Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZERldmlh
dGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwg
MCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBzdGRE
ZXZpYXRpb24sIGNsaXBPcGVyYXRpb24gPT0gRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246
OlVuaXRlID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CiAKLUdyYXBo
aWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAg
cmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0
cjsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAg
dHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5p
bnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rp
b247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0
aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVy
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAg
ICBhdXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291
cmNlcygpLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgaWYgKCFmaWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWls
ZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcg
cGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKLSAgICAg
ICAgLy8gQWx0aG91Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQg
bWlnaHQgZXhpc3QgbGF0ZXIgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICAvLyBGSVhNRTogVGhp
cyBza2lwcyBhbm9ueW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEz
MTA4NT4KLSAgICAgICAgLy8gRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5nLgot
ICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAg
ICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZShmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgKmVsZW1lbnQpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFu
c2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9
IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51
bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5j
dGlvbik7Cit9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxk
ZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7CitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFk
b3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlv
bi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9CiAKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiByZWZl
cmVuY2VFZmZlY3RzOworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2Fs
ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJp
eE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0
dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1s
I2dyYXlzY2FsZUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVy
cy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91
bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAg
cmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBX
VEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgZm9yIChhdXRvJiBlZmZlY3RFbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigqZmlsdGVyRWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWls
ZChidWlsZGVyLmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0
aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWlsZCBlZmZlY3QgZnJv
bSAiIDw8IGVmZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIH0KK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3Qo
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRp
b24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5k
YXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5y
ZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVs
ZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZp
bHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
I2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWls
ZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJl
bmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5h
cHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVj
dDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3Qg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0
aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5z
bG9wZSA9IDEgLSAyICogYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
YW1vdW50OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Cisg
ICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOwogfQogCi1i
b29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQorc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZU9wYWNpdHlFZmZlY3QoY29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24p
CiB7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscygpOwotICAgIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2Vw
dCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAg
ICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworfQogCi0gICAgbV9lZmZl
Y3RzLmNsZWFyKCk7Ci0gICAgbV9vdXRzZXRzID0geyB9Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3Rh
dGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRv
dWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFt
b3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9G
WFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50CisgICAg
Ly8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlu
cHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAw
LjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
Ljc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAg
ICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsg
MC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSAr
IDAuODY5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisg
ICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0
cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgYXV0
byYgcmVmZXJlbmNlZFNWR1Jlc291cmNlcyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdS
ZXNvdXJjZXMoKTsKKyAgICBhdXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291
cmNlcy5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJP
cGVyYXRpb24pOworCisgICAgaWYgKCFmaWx0ZXJFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQp
OworfQorCitib29sIENTU0ZpbHRlcjo6YnVpbGRGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckdlb21ldHJ5
OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0ID0gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCk7CisgICAgbV9mdW5jdGlvbnMuYXBw
ZW5kKHsgKmVmZmVjdCB9KTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZm
ZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOwogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKLSAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZWZmZWN0OwotICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uOwotICAg
ICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewotICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNlT3Bl
cmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgZWZmZWN0ID0gYnVpbGRSZWZlcmVuY2VGaWx0ZXIocmVuZGVyZXIs
ICpwcmV2aW91c0VmZmVjdCwgcmVmZXJlbmNlT3BlcmF0aW9uKTsKKyAgICAgICAgUmVmUHRyPFNW
R0ZpbHRlcj4gZmlsdGVyOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGVmZmVjdCk7CisgICAg
ICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxl
LWNvbG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9y
TWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9
IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0K
LSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUv
dGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAv
LyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZs
b2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg
MCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4y
MTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNsaXBPcGVyYXRpb24pOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVp
dmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQot
ICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43Njkg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0
IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAg
ICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RG
TW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3Qo
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAg
YXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3Bl
cmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0
UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewot
ICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVh
dGVHcmF5U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5
IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVm
ZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0g
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJG
dW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21w
b25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0
KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5
cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNm
ZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRl
cmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxG
dW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5z
ZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJB
VEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjog
ewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJP
cGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRp
b24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDAp
OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3Rk
RGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0
ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworCisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNy
ZWF0ZVNlcGlhRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+
KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICAgICAgYXV0byYgZHJv
cFNoYWRvd09wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0
ZSgqdGhpcywgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09w
ZXJhdGlvbi5zdGREZXZpYXRpb24oKSwKLSAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAg
ICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcihkb3duY2FzdDxSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlcik7CisgICAgICAgICAgICBlZmZlY3Qg
PSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZWZmZWN0
KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdl
cywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0
eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdp
b25zLgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZp
bHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZl
Y3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0gICAgICAgICAgICAgICAgbV9l
ZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByZXZp
b3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAg
ICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAgIG1fZnVu
Y3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIElmIHdlIGRpZG4ndCBtYWtlIGFueSBl
ZmZlY3RzLCB0ZWxsIG91ciBjYWxsZXIgd2UgYXJlIG5vdCB2YWxpZC4KLSAgICBpZiAobV9lZmZl
Y3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWVmZmVj
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0Zp
dCgpOworICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOworICAgIH0KIAot
ICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENP
UkVfSU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJl
bmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5n
cygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMu
bGFzdCgpLmdldCgpKTsKLSNlbmRpZgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU0Zp
bHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3Qp
CisjaWYgVVNFKENPUkVfSU1BR0UpCitib29sIENTU0ZpbHRlcjo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoKSBjb25zdAogewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZmlsdGVyUmVjdCA9PSBzb3VyY2VJbWFnZVJlY3QoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJl
Y3QpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAgICBp
ZiAoIWZ1bmN0aW9uLT5zdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KLQotdm9pZCBDU1NGaWx0
ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0
YXJnZXRDb250ZXh0KQotewotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBo
YXMgYmVlbiBidWlsdCwgYW5kIHRoZQotICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdl
IGp1c3QgbmVlZCB0byBhdHRhY2ggdGhlIGdyYXBoaWMKLSAgICAvLyBidWZmZXIgaWYgd2UgaGF2
ZSBub3QgeWV0IGRvbmUgc28uCi0KLSAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3
aW5nUmVnaW9uLnNpemUoKSB9OwotICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFn
ZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBy
ZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZWxzZQotICAgICAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7Ci0gICAgICAgIFJlbmRlcmluZ01vZGUgbW9k
ZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRl
cmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShs
b2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOwogI2VuZGlmCi0gICAgfQotICAgIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2Vm
ZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QubWF4
RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9v
IGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNj
YWxlIGZhY3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIHNl
dEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCi17Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJl
c3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3NvdXJjZUFscGhhLT5j
bGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAg
ICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7Ci19CiAKLXZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCitJ
bnRPdXRzZXRzIENTU0ZpbHRlcjo6Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgYXV0
byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICBpZiAobV9maWx0ZXJSZW5k
ZXJlcikgewotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyLT5hcHBseUVmZmVjdHMoZWZmZWN0KTsK
LSAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAg
ICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWZm
ZWN0LmFwcGx5KCk7Ci0gICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotfQotCi1MYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29t
cHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJC
b3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgLy8gVGhlIHJlc3Vs
dCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBhcmVhIGluIHRoZSAiZmlsdGVyQm94UmVjdCIgdGhh
dCBuZWVkcyB0byBiZSByZXBhaW50ZWQsIHNvIHRoYXQgd2UgZnVsbHkgY292ZXIgdGhlICJkaXJ0
eVJlY3QiLgotICAgIGF1dG8gcmVjdEZvclJlcGFpbnQgPSBkaXJ0eVJlY3Q7Ci0gICAgaWYgKGhh
c0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQotICAgICAgICByZWN0Rm9yUmVwYWludCArPSBvdXRz
ZXRzKCk7Ci0gICAgcmVjdEZvclJlcGFpbnQuaW50ZXJzZWN0KGZpbHRlckJveFJlY3QpOwotICAg
IHJldHVybiByZWN0Rm9yUmVwYWludDsKLX0KKyAgICBpZiAoIW1faGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzKQorICAgICAgICByZXR1cm4geyB9OwogCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpv
dXRwdXQoKSBjb25zdAotewotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVu
ZGVyZXItPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0
cHV0KCk7CisgICAgSW50T3V0c2V0cyBvdXRzZXRzOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24g
OiBtX2Z1bmN0aW9ucykKKyAgICAgICAgb3V0c2V0cyArPSBmdW5jdGlvbi0+Y2FsY3VsYXRlT3V0
c2V0cygpOwogICAgIAotICAgIHJldHVybiBtX2VmZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOworICAgIHJldHVybiBvdXRzZXRzOwogfQogCi12b2lkIENTU0ZpbHRlcjo6c2V0U291
cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQorYm9vbCBDU1NG
aWx0ZXI6OmFwcGx5KEZpbHRlclJlc3VsdCYgcmVzdWx0LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3Rh
Y2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBtX3NvdXJj
ZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMo
c291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsK
LSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBDU1NGaWx0
ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKLXsKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhF
ZmZlY3RSZWN0KGVmZmVjdFJlY3QpOwotfQotCi1JbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVj
dCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0
KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkgfHwgKG1fZmlsdGVyUmVu
ZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQotICAgICAgICByZXR1cm4g
bGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IG1f
ZmlsdGVyUmVnaW9uIH0pOwotICAgIAotICAgIHJldHVybiB7IH07CisgICAgZm9yIChhdXRvJiBm
dW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlmICghZnVuY3Rpb24tPmFwcGx5KHJl
c3VsdCwgc3RhY2ssIGdlb21ldHJ5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkg
Y29uc3QKK1RleHRTdHJlYW0mIENTU0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7
Ci0gICAgaWYgKCFtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIGlmICghbV9vdXRzZXRzLmlzWmVybygpKQotICAgICAgICByZXR1cm4gbV9vdXRz
ZXRzOworICAgIGF1dG8gZW5kID0gbV9mdW5jdGlvbnMucmVuZCgpOworICAgIHVuc2lnbmVkIGxl
dmVsID0gMDsKKworICAgIGZvciAoYXV0byBpdCA9IG1fZnVuY3Rpb25zLnJiZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byBmdW5jdGlvbiA9ICppdDsKKyAgICAgICAgaWYg
KGZ1bmN0aW9uLT50eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkgewor
ICAgICAgICAgICAgQVNTRVJUKGl0ICE9IGVuZCk7CisgICAgICAgICAgICArK2l0OworICAgICAg
ICB9CisgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzLCBsZXZl
bCsrKTsKKyAgICAgICAgZnVuY3Rpb24tPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykK
LSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVjdC0+b3V0c2V0cygpOwotICAgIHJldHVybiBtX291
dHNldHM7CisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggMDBiOTE5MTdiODA0YzkyZDk0MDhiNzU4
ZTM3NWMyNTJmMjlkYjBjNS4uZTczNjdhZjQ3YWQzMTFlY2JjMGFjOWQ3OTE3YWQ5YjI5MjE4NWEx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDgyICsyNiw1MCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2Fz
dHMuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBG
aWx0ZXJFZmZlY3RSZW5kZXJlcjsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBHcmFw
aGljc0NvbnRleHQ7Ci1jbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5k
ZXJFbGVtZW50OwotY2xhc3MgU291cmNlQWxwaGE7Ci1jbGFzcyBTb3VyY2VHcmFwaGljOwotCi1l
bnVtIGNsYXNzIEZpbHRlckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9u
IH07CiAKIGNsYXNzIENTU0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOwotCi0gICAgdm9p
ZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0
ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24g
PSBmaWx0ZXJSZWdpb247IH0KLQotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKIAot
ICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBG
aWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAg
ICB2b2lkIGFwcGx5KCk7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNy
ZWF0ZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9w
ZXJhdGlvbiA9IEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVhdGUoVmVjdG9yPFJl
ZjxGaWx0ZXJGdW5jdGlvbj4+JiYsIFJlbmRlcmluZ01vZGUpOwogCiAgICAgYm9vbCBoYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1Bp
eGVsczsgfQogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJp
dHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIENTU0ZpbHRlcigpOwotICAgIHZpcnR1YWwgfkNTU0ZpbHRlcigpOwotCi0gICAgYm9v
bCBpc0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdp
bmdSZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVz
ZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50Jiwg
RmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7
CisgICAgY29uc3QgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiBmdW5jdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQogCi0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhj
b25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KKyAg
ICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Jl
bmRlcmluZ01vZGU7IH0KIAotICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7Cisg
ICAgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3QgZmluYWw7CiAKLSAgICBib29s
IHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKLSAg
ICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7Ci0KLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgQ1NT
RmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBDU1NGaWx0ZXIoVmVjdG9yPFJl
ZjxGaWx0ZXJGdW5jdGlvbj4+JiYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgTGF5b3V0UmVjdCBj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisgICAgYm9vbCBidWlsZEZ1
bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckdl
b21ldHJ5OjpDbGlwT3BlcmF0aW9uKTsKIAotICAgIEZsb2F0UmVjdCBtX3NvdXJjZURyYXdpbmdS
ZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworI2lmIFVTRShDT1JFX0lNQUdF
KQorICAgIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBmaW5hbDsKKyNl
bmRpZgogCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVm
PFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX3NvdXJjZUFscGhhOworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZpbmFsOwogCi0g
ICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKKyAgICBUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
ZmluYWw7CiAKLSAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2Ug
fTsKLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IG1fZmls
dGVyUmVuZGVyZXI7CisKKyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlv
bnM7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBmNzI4YzBmNmM2ZTA3NDdhMzJjMjg2
MWY1ZmFjNjkzOWQ1NmI2MTZkLi5lYWQwMjcwMDIzMGUyMTM5N2ZkMzQ3OTc4ODYwYWUwNzhiMTFl
YWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTU1ODIs
NyArNTU4Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRl
Z3koKQogSW50T3V0c2V0cyBSZW5kZXJMYXllcjo6ZmlsdGVyT3V0c2V0cygpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fZmlsdGVycykKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVycy0+ZmlsdGVyKCkgPyBt
X2ZpbHRlcnMtPmZpbHRlcigpLT5vdXRzZXRzKCkgOiBJbnRPdXRzZXRzKCk7CisgICAgICAgIHJl
dHVybiBtX2ZpbHRlcnMtPmZpbHRlcigpID8gbV9maWx0ZXJzLT5maWx0ZXIoKS0+Y2FsY3VsYXRl
T3V0c2V0cygpIDogSW50T3V0c2V0cygpOwogICAgIHJldHVybiByZW5kZXJlcigpLnN0eWxlKCku
ZmlsdGVyT3V0c2V0cygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CmluZGV4IDU4YjdhMTZhN2E5Zjc4NTE2ZGI2MzhkOWRhNzA3ZGM5YmYxMzJkYTUuLjgzMDE1N2Iw
NzA5Y2E0MjU0OTBlYjVkYmI2MGY1Mjk1NmU5YWNiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgQ2xpcFJlY3RzOwog
Y2xhc3MgQ2xpcFJlY3RzQ2FjaGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3
ZDVjMGJhYTBhYzc0MWE5MGM4MThiNjFhMDVmOTViOTY0YTQuLmRlNWQxNmYyZGEwY2NkMTIwYmY3
MjcxOTc2OTc0YjJjM2U1YjRiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuY3BwCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNTU0Zp
bHRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVk
U1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgor
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTE4LDM3ICsxMjAsNTUgQEAgdm9pZCBSZW5kZXJM
YXllckZpbHRlcnM6OnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQogCiB2b2lkIFJlbmRl
ckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0
IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFt
X2ZpbHRlcikgewotICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAg
ICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmls
dGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9m
aWx0ZXItPmZpbHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXIt
PnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50
ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIH0KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3Jl
YXRlKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBG
aWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOworICAgIG1fc2NhbGVGYWN0b3Ig
PSBzY2FsZUZhY3RvcjsKK30KKworR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6
OmlucHV0Q29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJ
bWFnZS0+Y29udGV4dCgpIDogbnVsbHB0cjsKK30KIAotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFp
bHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRl
bXB0IHRvCi0gICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9z
aXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklYTUU6IHRoaXMgcmVi
dWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBk
aWRuJ3QgY2hhbmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJl
ci5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAg
ICAgICBtX2ZpbHRlciA9IG51bGxwdHI7Cit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRh
Y2hlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEludFNpemUgc2l6ZSB7IG1fc291cmNl
SW1hZ2VSZWN0LnNpemUoKSAqIG1fc2NhbGVGYWN0b3IgfTsKKyAgICBhdXRvIGhvc3RXaW5kb3cg
PSBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJvb3QoKSA/IG1fbGF5ZXIu
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxs
cHRyOworCisgICAgbV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgbV9m
aWx0ZXItPnJlbmRlcmluZ01vZGUoKSwgU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJp
bmdQdXJwb3NlOjpET00sIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZv
cm1hdDo6QkdSQTgsIGhvc3RXaW5kb3cpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBpbWFnZUNv
bnRleHQgPSBtX3NvdXJjZUltYWdlLT5jb250ZXh0KCk7CisgICAgaW1hZ2VDb250ZXh0LnNjYWxl
KG1fc2NhbGVGYWN0b3IpOworICAgIAorICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRy
dWU7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRl
ckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBM
YXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXll
ckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91
dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKLSAg
ICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBmaWx0ZXIuY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZv
ckRpcnR5UmVjdChmaWx0ZXJCb3hSZWN0LCBkaXJ0eVJlY3QpOworICAgIAorICAgIGF1dG8gZmls
dGVyU291cmNlUmVjdCA9IGRpcnR5UmVjdDsKKyAgICBpZiAoZmlsdGVyLmhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscygpKQorICAgICAgICBmaWx0ZXJTb3VyY2VSZWN0ICs9IGZpbHRlci5jYWxjdWxh
dGVPdXRzZXRzKCk7CisgICAgZmlsdGVyU291cmNlUmVjdC5pbnRlcnNlY3QoZmlsdGVyQm94UmVj
dCk7CisKICAgICBpZiAoZmlsdGVyU291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYm9vbCBoYXNVcGRhdGVkQmFja2luZ1N0b3JlID0gZmlsdGVyLnVw
ZGF0ZUJhY2tpbmdTdG9yZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7CisgICAgCisgICAgaWYgKGZp
bHRlclNvdXJjZVJlY3QgIT0gbV9zb3VyY2VJbWFnZVJlY3QpIHsKKyAgICAgICAgbV9zb3VyY2VJ
bWFnZVJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0OworICAgICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0
YWNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlKQorICAgICAgICBpZiAo
IW1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgICAgIG1fcmVwYWludFJlY3QgPSBm
aWx0ZXJTb3VyY2VSZWN0OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fcmVwYWludFJl
Y3QgPSBkaXJ0eVJlY3Q7CkBAIC0xNTksMTEgKzE3OSw5IEBAIEdyYXBoaWNzQ29udGV4dCogUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3Rp
bmF0CiAgICAgbV9wYWludE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3QubG9jYXRpb24oKTsKICAg
ICByZXNldERpcnR5U291cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgZmlsdGVyLmFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoZGVzdGluYXRpb25Db250ZXh0KTsKLSAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRl
eHQgPSBmaWx0ZXIuaW5wdXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRl
eHQgfHwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUoKSkpCisgICAgYWxsb2Nh
dGVCYWNraW5nU3RvcmVJZk5lZWRlZCgpOworICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4
dCA9IGlucHV0Q29udGV4dCgpOworICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0
aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaXMgY2FwdHVyZWQgaW4gdGhlIG9mZnNjcmVl
biBtZW1vcnkgYnVmZmVyLgpAQCAtMTc3LDIzICsxOTUsMTkgQEAgR3JhcGhpY3NDb250ZXh0KiBS
ZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXQKIAogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KQogewotICAgIEFTU0VSVChtX2ZpbHRlci0+
aW5wdXRDb250ZXh0KCkpOworICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAKICAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJcblJlbmRlckxheWVyRmlsdGVycyAiIDw8
IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCIpOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1f
ZmlsdGVyOwotICAgIGZpbHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwotCi0gICAgZmls
dGVyLmFwcGx5KCk7CisgICAgaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAotICAgIC8vIEdl
dCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAgIExheW91dFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0Lm1vdmUobV9w
YWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRl
eHQuc2NhbGUoMSAvIG1fc2NhbGVGYWN0b3IpOwogCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZl
ciA9IGZpbHRlci5vdXRwdXQoKSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBt
X2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAg
RmlsdGVyR2VvbWV0cnkgZ2VvbWV0cnkobV9zb3VyY2VJbWFnZVJlY3QsIG1fc2NhbGVGYWN0b3Is
IEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSk7CisgICAgZGVzdGluYXRpb25D
b250ZXh0LmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihtX3NvdXJjZUltYWdlLmdldCgpLCBtX3NvdXJj
ZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7CiAKLSAgICBmaWx0ZXIuY2xlYXJJbnRlcm1l
ZGlhdGVSZXN1bHRzKCk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKG1fc2NhbGVGYWN0
b3IpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5
ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNk
YTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjkyZWYyZmY5ZDg3NjI2NjQ4
MWNkYzcwOGQzOTExNDBmYzMwYmJhNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENhY2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAog
Y2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVu
dENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMjAg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERp
cnR5U291cmNlUmVjdCgpIHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAg
ICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBW
ZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0
b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZH
UmVmZXJlbmNlczsKIAorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAg
ICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9m
aWx0ZXI7CisgICAgZmxvYXQgbV9zY2FsZUZhY3RvciB7IDEgfTsKICAgICBMYXlvdXRSZWN0IG1f
ZGlydHlTb3VyY2VSZWN0OworICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFs
c2UgfTsKICAgICAKICAgICAvLyBEYXRhIHVzZWQgcGVyIHBhaW50CiAgICAgTGF5b3V0UG9pbnQg
bV9wYWludE9mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCA1MDc4ZjljYWVmYjUwNmY5MjIz
N2YyY2U3YWI2ZjZlNTkyMDg2N2IxLi5jMjlmMjE0MGRhNWQwMmM3ODQ5ZmZjN2E3ZDFmNmFkZGU5
ZmQwOWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LAogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29y
ZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBpZiAoIWNsaXBwZXJEYXRhLmlzVmFsaWRGb3JH
ZW9tZXRyeShvYmplY3RCb3VuZGluZ0JveCwgY2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRl
VHJhbnNmb3JtKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZm
ZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0
IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAg
ICAgYXV0byBtYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihjbGlwcGVkQ29udGVudEJvdW5kcywgYWJzb2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7
CisgICAgICAgIGF1dG8gbWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAg
ICAgICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCmluZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUu
Ljc1ZDEzNDU3MWIyMmY3MjZhODkzNzEwNmJiMDcwNTY4NDcwMjhmOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCkBAIC0zNyw2ICszOSw4IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dFR5cGVIZWxwZXJzLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29u
dGV4dC5oIgpAQCAtODIsNDcgKzg2LDExIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50JiBjbGllbnQsIGJvb2wKICAgICBt
YXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJv
dW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKIH0KIAotc3Rk
Ojp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpi
dWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBpZiAoZmlsdGVyRWxl
bWVudCgpLmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRl
ci50YXJnZXRCb3VuZGluZ0JveCgpOwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxk
ZXIKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJj
ZUdyYXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQcmltaXRpdmVVbml0
cyhmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVpbGRlci0+c2V0VGFy
Z2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIAotICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz4oZmlsdGVyRWxlbWVudCgpKSkgewotICAgICAgICBhdXRvIGVmZmVjdCA9IGVsZW1lbnQu
YnVpbGQoYnVpbGRlci5nZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAg
ICAgICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RS
ZWZlcmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7Ci0gICAgICAg
IGVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGVm
ZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFu
Z2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRl
ckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAg
ICBpZiAoZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xv
clNwYWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJw
b2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAg
ICAgICBidWlsZGVyLT5hZGQoZWxlbWVudC5yZXN1bHQoKSwgV1RGTW92ZShlZmZlY3QpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0
eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291
cmNlTW9kZT4gcmVzb3VyY2VNb2RlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NF
UlRfVU5VU0VEKHJlc291cmNlTW9kZSwgIXJlc291cmNlTW9kZSk7CiAKLSAgICBMT0coRmlsdGVy
cywgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICVwIGFwcGx5UmVzb3VyY2UgcmVuZGVyZXIgJXAi
LCB0aGlzLCAmcmVuZGVyZXIpOwotCiAgICAgaWYgKG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNv
bnRhaW5zKCZyZW5kZXJlcikpIHsKICAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IG1f
cmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmdldCgmcmVuZGVyZXIpOwogICAgICAgICBpZiAoZmlsdGVy
RGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6UGFpbnRpbmdTb3VyY2UgfHwgZmlsdGVyRGF0YS0+
c3RhdGUgPT0gRmlsdGVyRGF0YTo6QXBwbHlpbmcpCkBAIC0xMzAsMTAxICs5OCw1NSBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFscmVhZHkgYnVp
bHQsIG9yIHdlJ3JlIGluIGEgY3ljbGUsIG9yIHdlJ3JlIG1hcmtlZCBmb3IgcmVtb3ZhbC4gUmVn
YXJkbGVzcywganVzdCBkbyBub3RoaW5nIG1vcmUgbm93LgogICAgIH0KIAorICAgIC8vIEJ1aWxk
IHRoZSBTVkdGaWx0ZXIKICAgICBhdXRvIGZpbHRlckRhdGEgPSBtYWtlVW5pcXVlPEZpbHRlckRh
dGE+KCk7Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0
Qm91bmRpbmdCb3goKTsKLQotICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBTVkdMZW5ndGhD
b250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJFbGVtZW50
KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCk7Ci0g
ICAgaWYgKGZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpKQorICAgIGZpbHRlckRhdGEt
PmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSk7CisgICAgaWYgKCFm
aWx0ZXJEYXRhLT5maWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdXRv
IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBm
aWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3Rhbmds
ZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmls
dGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29s
dXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFu
c2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7Ci0gICAgaWYg
KCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlv
biBtYXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9y
IGZlVGlsZS4KLSAgICBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFm
ZmluZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVU
cmFuc2Zvcm0ueVNjYWxlKCksIDAsIDApOwotCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIGJv
dW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgorICAgIC8vIENh
bGN1bGF0ZSB0aGUgc291cmNlSW1hZ2VSZWN0CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lv
biA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2lu
Z1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0
IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJh
bnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICAvLyBDcmVh
dGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1v
ZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0g
U1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0s
IGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJv
dW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVhdGUgYWxs
IHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBi
dWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0ZXJEYXRh
LT5idWlsZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEZXRlcm1pbmUgc2Nh
bGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZl
cnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0UmVj
dCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUg
c2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHRlbXBTb3Vy
Y2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndp
ZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKIAotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4g
U1ZHRmlsdGVyLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihz
Y2FsZSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0
cyA9IDEwMDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWls
ZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRv
dGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQorICAgIGF1dG8gYWJzb2x1dGVUcmFu
c2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0
ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7CisgICAgaWYgKCFhYnNvbHV0ZVRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3VyY2VcbiIgPDwgKmZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKSk7Ci0K
LSAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAg
ICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwotICAg
IC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAot
ICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9y
cy4KLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXpl
KCksIHNjYWxlKSkgewotICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29s
dXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBpcyBl
bXB0eSwgd2UgaGF2ZSBzb21ldGhpbmcgbGlrZSA8ZyBmaWx0ZXI9Ii4uIi8+LgotICAgIC8vIEV2
ZW4gaWYgdGhlIHRhcmdldCBvYmplY3RCb3VuZGluZ0JveCgpIGlzIGVtcHR5LCB3ZSBzdGlsbCBo
YXZlIHRvIGRyYXcgdGhlIGxhc3QgZWZmZWN0IHJlc3VsdCBpbWFnZSBpbiBwb3N0QXBwbHlSZXNv
dXJjZS4KLSAgICBpZiAoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIp
KTsKLSAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKLSAgICAgICAg
bV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRh
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gRWxpbWluYXRlIHNoZWFy
IG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJlIGFibGUgdG8gcHJv
ZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KKyAgICBhdXRvIGFic29sdXRl
U2NhbGUgPSBGbG9hdFNpemUoYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIGFic29sdXRlVHJh
bnNmb3JtLnlTY2FsZSgpKTsKKyAgICBmaWx0ZXJEYXRhLT5zY2FsZSA9IEZpbHRlckdlb21ldHJ5
OjpjYWxjdWxhdGVGaWx0ZXJTY2FsZShmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBhYnNvbHV0
ZVNjYWxlKTsKIAotICAgIC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBh
cHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24g
b2YgdGhlIGZpbHRlci4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwot
ICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQo
KSk7Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICBhdXRvIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3Jt
ID0gQWZmaW5lVHJhbnNmb3JtKGZpbHRlckRhdGEtPnNjYWxlLndpZHRoKCksIDAsIDAsIGZpbHRl
ckRhdGEtPnNjYWxlLmhlaWdodCgpLCAwLCAwKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9
IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lm
IEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNv
bG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAg
ICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5k
aWYKLSAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0s
IGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOworCisgICAgYXV0byBob3N0V2lu
ZG93ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLnJvb3QoKSA/IHJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKS5yb290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisKKyAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgY29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgaG9zdFdpbmRvdyk7CiAgICAg
aWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRh
dGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVu
ZGVyZXIsIFdURk1vdmUoZmlsdGVyRGF0YSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIAotICAgIC8vIFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNl
dHRpbmdzLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJp
bmdNb2RlKTsKIAorICAgIC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUg
ZmlsdGVyIHNvdXJjZUdyYXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWND
b250ZXh0ID0gc291cmNlR3JhcGhpYy0+Y29udGV4dCgpOwotICAKKwogICAgIGZpbHRlckRhdGEt
PnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBXVEZNb3ZlKHNvdXJjZUdyYXBoaWMpOwogICAgIGZpbHRl
ckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAKICAgICBjb250ZXh0ID0gJnNvdXJjZUdy
YXBoaWNDb250ZXh0OwogCi0gICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250
YWlucygmcmVuZGVyZXIpKTsKICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRl
cmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0y
NjksMzggKzE5MSwyMiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLmJ1aWxk
ZXItPmxhc3RFZmZlY3QoKTsKLQotICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLmJv
dW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcg
b2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCi0gICAgICAg
IC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZp
bHRlciByZXN1bHQgb24gYQotICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4KLSAgICAgICAgaWYg
KGZpbHRlckRhdGEuc3RhdGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCi0gICAgICAgICAgICBmaWx0
ZXJEYXRhLmZpbHRlci0+c2V0U291cmNlSW1hZ2UoV1RGTW92ZShmaWx0ZXJEYXRhLnNvdXJjZUdy
YXBoaWNCdWZmZXIpKTsKLQotICAgICAgICAvLyBBbHdheXMgdHJ1ZSBpZiBmaWx0ZXJEYXRhIGlz
IGp1c3QgYnVpbHQgKGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkJ1aWx0KS4KLSAg
ICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZmlsdGVy
RGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAgICAgbGFzdEVmZmVj
dC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJ
Zk5lZWRlZCgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgIH0KKyAgICBpZiAo
IWZpbHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZmlsdGVyRGF0YS5z
dGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGxhc3RFZmZlY3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgICAgIGlmIChyZXN1
bHRJbWFnZSkgewotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9y
bSgpKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5z
Y2FsZS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5zY2FsZS5oZWlnaHQoKSkpOwogCi0gICAgICAg
ICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0
ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZl
cigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAg
ICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24o
KSk7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiB0YXJnZXRCb3VuZGluZ1NpemU7
CisgICAgICAgIGlmIChmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0
VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgICAgICAgICB0YXJn
ZXRCb3VuZGluZ1NpemUgPSByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLnNpemUoKTsKIAot
ICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1
dGVUcmFuc2Zvcm0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3Jh
cGhpY0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gZmlsdGVyRWZmZWN0Qm91bmRhcnlT
ZXRzID0gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoZmls
dGVyRWxlbWVudCgpLCByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgRmls
dGVyR2VvbWV0cnkgZ2VvbWV0cnkoZmlsdGVyRGF0YS5ib3VuZGFyaWVzLCBmaWx0ZXJEYXRhLnNj
YWxlLCB0YXJnZXRCb3VuZGluZ1NpemUsIFdURk1vdmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRz
KSk7CisKKyAgICAgICAgY29udGV4dC0+ZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlckRhdGEu
c291cmNlR3JhcGhpY0J1ZmZlci5nZXQoKSwgZmlsdGVyRGF0YS5kcmF3aW5nUmVnaW9uLCAqZmls
dGVyRGF0YS5maWx0ZXIsIGdlb21ldHJ5KTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RB
cHBseVJlc291cmNlIGRvbmVcbiIpOworICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRh
LnNjYWxlKTsKKyAgICB9CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwOCwy
NyArMjE0LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VC
b3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0
aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1l
bnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGlu
Z0JveCgpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0
cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmli
dXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nh
c3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkp
OwotCi0gICAgTE9HKEZpbHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRp
dmVBdHRyaWJ1dGVDaGFuZ2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZv
ciAoY29uc3QgYXV0byYgb2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0
YU1hcCkgewogICAgICAgICBjb25zdCBhdXRvJiBmaWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0
YVBhaXIudmFsdWU7CiAgICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRh
OjpCdWlsdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxk
ZXIqIGJ1aWxkZXIgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJF
ZmZlY3QqIGVmZmVjdCA9IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAg
ICAgaWYgKCFlZmZlY3QpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gU2luY2Ug
YWxsIGVmZmVjdHMgc2hhcmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAg
IC8vIG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0
dmUtPnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZl
Y3QpOwotCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAg
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwg
UmVwYWludEludmFsaWRhdGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDhjZTBjN2FiYzE0
M2JkYjY1Mzg1MGM5M2UzMjkyYWM5ZGE0OWJiYzcuLjhjMGYwZmMxMzYyZjlmMGUwNDQ2Mjg1YmU5
OTc2ZDIzMTFiNDNhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdVbml0
VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtNDMsMTEgKzQyLDkgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRGF0YSgpID0gZGVm
YXVsdDsKIAotICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXI7
CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBo
aWNzQ29udGV4dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwotICAgIEFmZmluZVRyYW5zZm9y
bSBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsK
ICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFNpemUgc2NhbGU7CkBAIC03
Miw4ICs2OSw2IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94
KGNvbnN0IFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNW
R0ZpbHRlckJ1aWxkZXI+IGJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImKSBjb25zdDsKLQogICAg
IGlubGluZSBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3Q7CiAg
ICAgaW5saW5lIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25z
dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAppbmRleCBhZGQ3MWE2NjM3YWIy
NDVhOWNjNDQyYWUwYmYzYzk4NzBlNGM5MWJjLi5lNDI3NzQyZjUxZjkyM2JkMGM3Y2RkOTkzYzc0
YTZhNTljNWNkODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcApAQCAtNTUs
MjIgKzU1LDE4IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zCiB7CiAgICAgUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKLSAgICBhdXRv
KiBmaWx0ZXIgPSBwYXJlbnQoKTsKLSAgICBpZiAoIWZpbHRlcikKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlOjpFcXVhbCB8fCAhb2xkU3R5bGUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0
eWxlKCkuc3ZnU3R5bGUoKTsKICAgICBpZiAoaXM8U1ZHRkVGbG9vZEVsZW1lbnQ+KGZpbHRlclBy
aW1pdGl2ZUVsZW1lbnQoKSkpIHsKICAgICAgICAgaWYgKG5ld1N0eWxlLmZsb29kQ29sb3IoKSAh
PSBvbGRTdHlsZS0+c3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpCi0gICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZCh0aGlzLCBTVkdOYW1lczo6Zmxvb2RfY29sb3JBdHRyKTsKKyAgICAgICAgICAgIGZpbHRl
clByaW1pdGl2ZUVsZW1lbnQoKS5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFNWR05hbWVzOjpm
bG9vZF9jb2xvckF0dHIpOwogICAgICAgICBpZiAobmV3U3R5bGUuZmxvb2RPcGFjaXR5KCkgIT0g
b2xkU3R5bGUtPnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpCi0gICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hh
bmdlZCh0aGlzLCBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpOworICAgICAgICAgICAgZmls
dGVyUHJpbWl0aXZlRWxlbWVudCgpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoU1ZHTmFtZXM6
OmZsb29kX29wYWNpdHlBdHRyKTsKICAgICB9IGVsc2UgaWYgKGlzPFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudD4oZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpKSB8fCBpczxTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50PihmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkpKSB7CiAgICAgICAgIGlm
IChuZXdTdHlsZS5saWdodGluZ0NvbG9yKCkgIT0gb2xkU3R5bGUtPnN2Z1N0eWxlKCkubGlnaHRp
bmdDb2xvcigpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+
KCpmaWx0ZXIpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQodGhpcywgU1ZHTmFtZXM6OmxpZ2h0
aW5nX2NvbG9yQXR0cik7CisgICAgICAgICAgICBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkucHJp
bWl0aXZlQXR0cmlidXRlQ2hhbmdlZChTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKaW5kZXggYjIzODc4NjJkZGYyMjIxNzFlNGE1ZDljMmRm
NTVmNmM5ODM5YmI2Mi4uNmE1M2FmYTFlYmQxNGY3MDMxMzk2NzU4MDRmZjdiMjg1YzdlNTJiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGUKICNlbmRpZgogCiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZl
ciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQg
bWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAg
bWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZGU0OTMyODI2M2QwNjJhMjM1
YmNkMmY0NjY3ZWVmMDljMTJlYjNiMy4uNmY3NmYyMGM5YzlkY2RhNTIxMjA1MzI3NDA2YThlYzQx
YTkzMGZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVy
VHJlZUFzVGV4dC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC01Miw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1l
bnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0VsbGlwc2VFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveElubGluZXMuaCIKICNp
bmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCkBA
IC00MzEsMTMgKzQzMyw5IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHdyaXRl
TmFtZVZhbHVlUGFpcih0cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLnByaW1pdGl2ZVVuaXRz
KCkpOwogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9s
ZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0
UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNy
ZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwg
dHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVz
KGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBpZiAoUmVmUHRyPEZpbHRlcj4gZHVtbXlG
aWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpKSkgewogICAg
ICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotCi0gICAg
ICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVj
dCgpKQotICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMpOworICAgICAgICAgICAgZHVtbXlGaWx0ZXItPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBD
bGlwcGVyUmVzb3VyY2VUeXBlKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNsaXBwZXIgPSBzdGF0
aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXImPihyZXNvdXJjZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNw
cAppbmRleCBmYWJlZTMwNWM3MzE4ZDcyNzMyOTNkNTYyYjRkZmU1N2M2MGY3OGJkLi4zOWE0OGRk
ZThjOThkN2MwZWU3NDhkNDM5NzEyOGRmYzcxYjdlMzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTIyOCw3ICsy
MjgsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdAogICAgIHJldHVybiBhYnNvbHV0ZVRyYW5z
Zm9ybTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCitSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cpCiB7CiAgICAgSW50UmVjdCBwYWludFJlY3QgPSBjYWxjdWxhdGVJ
bWFnZUJ1ZmZlclJlY3QodGFyZ2V0UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIC8vIERv
bid0IGNyZWF0ZSBlbXB0eSBJbWFnZUJ1ZmZlcnMuCkBAIC0yMzgsMTIgKzIzOCw3IEBAIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiB0YXJnCiAgICAgRmxvYXRTaXplIHNjYWxlOwogICAgIEZsb2F0U2l6ZSBj
bGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShwYWludFJlY3Quc2l6ZSgpLCBz
Y2FsZSk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEsIGNv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0KTsKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFt
cGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKLSNlbmRpZgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRl
cmluZ1B1cnBvc2U6OkRPTSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBob3N0
V2luZG93KTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaAppbmRleCA1OTY1OTdiZTEyNDdhOTZhNjA0YWNjZjQ1N2UwOTI5ZmQwZjUwYTBlLi5jMzlm
YjEwMmViZDFmNjljODFiNDI3ZTc4MTNmM2E4ZDg0YjM5YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaApAQCAtNjAsNyArNjAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlckVs
ZW1lbnQmLCBQYWludEluZm8mLCBOZWVkc0dyYXBoaWNzQ29udGV4dFNhdmUgPSBEb250U2F2ZUdy
YXBoaWNzQ29udGV4dCk7CiAgICAgYm9vbCBpc1JlbmRlcmluZ1ByZXBhcmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJpbmdGbGFncyAmIFJlbmRlcmluZ1ByZXBhcmVkOyB9CiAKLSAgICBzdGF0
aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CiAgICAgc3RhdGlj
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVs
bHB0cik7CiAKICAgICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCYsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjEx
NzRjZmUwNGI4MjJkNmQwNjQzMWY2ODYuLjJlZjA3ZTRkOGRhMWZiZDc4ODEzZGJmMTFlNTc5MTMw
OTcyM2RiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAt
NzMsMTYgKzczLDYgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0K
IAotYm9vbCBTVkdGRUJsZW5kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRl
ckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBG
RUJsZW5kKiBibGVuZCA9IHN0YXRpY19jYXN0PEZFQmxlbmQqPihlZmZlY3QpOwotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCi0gICAgICAgIHJldHVybiBibGVuZC0+c2V0
QmxlbmRNb2RlKG1vZGUoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjptb2RlQXR0cikgewpAQCAtMTAwLDIwICs5MCwyNyBAQCB2b2lkIFNWR0ZFQmxl
bmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxl
bmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJp
YnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlk
KGluMigpKTsKKyAgICBGRUJsZW5kJiBibGVuZCA9IGRvd25jYXN0PEZFQmxlbmQ+KGVmZmVjdCk7
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikKKyAgICAgICAgYmxlbmQu
c2V0QmxlbmRNb2RlKG1vZGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgp
KTsKKyAgICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogCiAgICAg
aWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIG1vZGUoKSk7Ci0gICAgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAg
IGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVu
ZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0
dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZm
ZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUJsZW5kOjpjcmVhdGUobW9kZSgpKSk7
CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwo
KSwgaW5wdXQyLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4
YjA2ZGVjNjYuLjY1MDg4MWZlMjI2ZTVkYWZiNTgzN2U5MWM0MjBjNTcxNDI1NWMyMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw4ICs2OSw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
QXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRl
Q2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3Zl
cnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApp
bmRleCAwNTI0ODU3OGMyNzRjOGZhMmIzZTFmMjQ0ZTQzNjc4NjhmNDJiYTljLi5mNjMwOTllYzlh
ZjQ1ZjE3NmUxMDU2MGQ5Zjg2NTRjODcxYzYxZWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKQEAgLTcxLDE4ICs3MSw2IEBAIHZvaWQgU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVDb2xvck1hdHJpeCogY29s
b3JNYXRyaXggPSBzdGF0aWNfY2FzdDxGRUNvbG9yTWF0cml4Kj4oZWZmZWN0KTsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQotICAgICAgICByZXR1cm4gY29sb3JNYXRy
aXgtPnNldFR5cGUodHlwZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZhbHVl
c0F0dHIpCi0gICAgICAgIHJldHVybiBjb2xvck1hdHJpeC0+c2V0VmFsdWVzKHZhbHVlcygpKTsK
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9p
ZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5
cGVBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7CkBAIC0xMDAsMTMg
Kzg4LDI2IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBT
VkdGRUNvbG9yTWF0cml4RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0
ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBh
dXRvJiBjb2xvck1hdHJpeCA9IGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCk7CisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICAgICAgY29sb3JNYXRyaXgu
c2V0Q29sb3JNYXRyaXhUeXBlKHR5cGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnZhbHVlc0F0dHIpCisgICAgICAgIGNvbG9yTWF0cml4LnNldFZhbHVlcyh2YWx1ZXMo
KSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAorc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7
CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAK
KyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVj
dCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKKyAgICAKICAgICBWZWN0b3I8Zmxv
YXQ+IGZpbHRlclZhbHVlczsKICAgICBDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZSA9IHR5cGUo
KTsKIApAQCAtMTM1LDE1ICsxMzYsMTUgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAg
ICAgaWYgKChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYgc2l6ZSAh
PSAyMCkKICAgICAgICAgICAgIHx8IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEUgJiYgc2l6ZSAhPSAxKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIAogICAgICAgICBm
aWx0ZXJWYWx1ZXMgPSB2YWx1ZXMoKTsKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0
KCk7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmls
dGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgc2V0Rmls
dGVyRWZmZWN0KEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRl
clZhbHVlcykpKTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxl
YXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdh
YjE5OGIxMmU3N2JlMjA2YjljNWM0MTAyM2ZkLi44ZjNhODgxNTQ4NWUyYjM0MGNlY2U3YTgzOGNl
MGU5MDczMTA2NjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaApAQCAtODUsOCArODUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAg
ICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggOTBhNTViN2VmZmY3YTNmZTYwNmE5ZTA1Nzlh
NzZlZGU5Zjk2ODAxMS4uOWQ0ODQ3MTEwMGRjMjk1NTUzMWQ1ZWZjNzM1MTJkM2Y1NTUzYzA4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuY3BwCkBAIC02MywxMiArNjMsMTQgQEAgdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY28KICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5h
bWUsIHZhbHVlKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChoYXNGaWx0ZXJFZmZl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWQ7CiAgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbjsKQEAgLTg1LDEwICs4NywxMCBAQCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdAogICAgICAgICBlbHNlIGlmIChpczxTVkdGRUZ1bmNBRWxlbWVu
dD4oY2hpbGQpKQogICAgICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVu
dD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9Ci0gICAgCi0gICAgYXV0byBlZmZl
Y3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAg
cmV0dXJuIGVmZmVjdDsKKworICAgIHNldEZpbHRlckVmZmVjdChGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpKTsKKworICAgIHJldHVybiB7IGZpbHRl
ckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRl
eCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThiOTkzYTRkZDU0ODYzLi42NWY2OTYxMTBjMzFh
MjdiYjZkY2VhMzExMzA0MGZjOTEwNjY0M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2
YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUy
MDVhYzk4MjM1Li5iZDA0MDA5NjA0NDVlZDcyOGRhMWI0ZGM2ZTkxOWEzMmQ5ZTE2NzJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtNDAsNyAr
NDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZH
TmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAg
IFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJh
dGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21w
b3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9w
ZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2sxPigpOwog
ICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0
dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxl
bWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFt
ZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlv
blR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBw
cm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZy
b21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAg
ICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk1LDI1ICs5NSw2IEBAIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9tCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFQ29tcG9zaXRlKiBjb21wb3NpdGUgPSBz
dGF0aWNfY2FzdDxGRUNvbXBvc2l0ZSo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpvcGVyYXRvckF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldE9wZXJh
dGlvbihzdmdPcGVyYXRvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0
cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzEoazEoKSk7Ci0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjprMkF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsy
KGsyKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azNBdHRyKQotICAgICAgICBy
ZXR1cm4gY29tcG9zaXRlLT5zZXRLMyhrMygpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Oms0QXR0cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzQoazQoKSk7Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQogdm9pZCBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRv
ckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6azJBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprM0F0dHIgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Oms0QXR0cikgewpAQCAtMTMxLDIwICsxMTIsMzUgQEAgdm9pZCBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpmaWx0
ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjIoKSk7Ci0gICAgCisgICAgYXV0byYgY29tcG9zaXRlID0gZG93bmNh
c3Q8RkVDb21wb3NpdGU+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpv
cGVyYXRvckF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRDb21wb3NpdGVPcGVyYXRvcihjb21w
b3NpdGVPcGVyYXRvcigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFB
dHRyKQorICAgICAgICBjb21wb3NpdGUuc2V0SzEoazEoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKKyAgICAgICAgY29tcG9zaXRlLnNldEsyKGsyKCkpOwor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprM0F0dHIpCisgICAgICAgIGNvbXBv
c2l0ZS5zZXRLMyhrMygpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRB
dHRyKQorICAgICAgICBjb21wb3NpdGUuc2V0SzQoazQoKSk7CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZm
ZWN0KGluMigpKTsKKwogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRl
ciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlu
cHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChp
bnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0dXJu
IGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0
KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbXBvc2l0
ZU9wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpKTsKKyAgICAKKyAgICByZXR1cm4g
eyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJlbGVh
c2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmgKaW5kZXggODFhNzhjODY1N2EwZmEzMDQ0ZGY1YjdjNWEwODBkNmU3Nzk3MjJm
Ni4uZWZiY2Y1ZDEzNjAyOWM3NTdjYTFiYTgxZGU5ODgwNDA0ZjRhNzNiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaApAQCAtMjcsMTUgKzI3LDE1IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KLWlubGluZSB1bnNpZ25lZCBTVkdJRExF
bnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1
ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KK2lubGluZSB1
bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7
IH0KIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJh
dGlvblR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9y
PiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNP
TVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOyB9CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5n
KENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5n
KEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCiAgICAgewotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAg
ICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVS
OgpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3Bl
cmF0aW9uVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgc3RhdGljIEZFQ29tcG9zaXRlT3BlcmF0b3IgZnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJvdmVyIikKICAgICAg
ICAgICAgIHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOwpAQCAtODUsNyArODUsNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJl
bnRWYWx1ZSgpOyB9CiAgICAgU3RyaW5nIGluMigpIGNvbnN0IHsgcmV0dXJuIG1faW4yLT5jdXJy
ZW50VmFsdWUoKTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgc3ZnT3BlcmF0b3IoKSBj
b25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT4oKTsgfQorICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8RkVDb21w
b3NpdGVPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMS0+
Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazItPmN1
cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgazMoKSBjb25zdCB7IHJldHVybiBtX2szLT5jdXJy
ZW50VmFsdWUoKTsgfQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBTVkdBbmltYXRl
ZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMTsgfQogICAgIFNWR0FuaW1hdGVk
U3RyaW5nJiBpbjJBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4yOyB9Ci0gICAgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3I7
IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBjb21wb3NpdGVPcGVyYXRvckFuaW1hdGVk
KCkgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVy
JiBrMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMTsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBr
MkFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrM0Fu
aW1hdGVkKCkgeyByZXR1cm4gbV9rMzsgfQpAQCAtMTA4LDEzICsxMDgsMTMgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRl
ckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0
ZWRTdHJpbmc+IG1faW4yIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAg
IFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07Cisg
ICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fY29tcG9zaXRlT3BlcmF0b3IgeyBTVkdB
bmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZF
UikgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazEgeyBTVkdBbmltYXRlZE51bWJl
cjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2syIHsgU1ZH
QW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJl
cj4gbV9rMyB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKaW5kZXggNzhlNDAyMDdmNWIwMmY2
NzBmMDQwYjI5Mzc1ZWFkN2MyYjQ1MmRlMC4uZmM2NzBjOWVjNTZjNDFjMTA5Mjg1NDg0MjdjNWY2
YThlMTg1YjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5pZGwKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmlt
YXRlZFN0cmluZyAgICAgIGluMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRT
dHJpbmcgICAgICBpbjI7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3JdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAgIFtJbXBsZW1l
bnRlZEFzPWNvbXBvc2l0ZU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRO
dW1iZXIgICAgICBrMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIg
ICAgICBrMjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBr
MzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
Y3BwCmluZGV4IGY3NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1YTgwYzZhMjZkZjEuLjY0ODIz
MjEwNWI5ZmU0YzM3NTNiYjg0OTE3OTU2YmU0MjBmNjk3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApAQCAtMTM4LDI4ICsxMzgs
NiBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdAogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVy
RWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZF
Q29udm9sdmVNYXRyaXgqIGNvbnZvbHZlTWF0cml4ID0gc3RhdGljX2Nhc3Q8RkVDb252b2x2ZU1h
dHJpeCo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0
dHIpCi0gICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0RWRnZU1vZGUoZWRnZU1vZGUo
KSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaXZpc29yQXR0cikKLSAgICAgICAg
cmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXREaXZpc29yKGRpdmlzb3IoKSk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpiaWFzQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0
cml4LT5zZXRCaWFzKGJpYXMoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJn
ZXRYQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRUYXJnZXRPZmZzZXQo
SW50UG9pbnQodGFyZ2V0WCgpLCB0YXJnZXRZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnRhcmdldFlBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldFRh
cmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFkoKSkpOwotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpCi0gICAgICAgIHJldHVybiBj
b252b2x2ZU1hdHJpeC0+c2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50KGtlcm5lbFVuaXRM
ZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgt
PnNldFByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6c2V0T3JkZXIoZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBtX29yZGVyWC0+c2V0
QmFzZVZhbEludGVybmFsKHgpOwpAQCAtMTkxLDEzICsxNjksMzYgQEAgdm9pZCBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8mIGNvbnZvbHZlTWF0cml4
ID0gZG93bmNhc3Q8RkVDb252b2x2ZU1hdHJpeD4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0RWRn
ZU1vZGUoZWRnZU1vZGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRp
dmlzb3JBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXREaXZpc29yKGRpdmlzb3IoKSk7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJpYXNBdHRyKQorICAgICAgICBj
b252b2x2ZU1hdHJpeC5zZXRCaWFzKGJpYXMoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnRhcmdldFhBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRUYXJnZXRP
ZmZzZXQoSW50UG9pbnQodGFyZ2V0WCgpLCB0YXJnZXRZKCkpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNl
dFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFkoKSkpOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKKyAgICAgICAg
Y29udm9sdmVNYXRyaXguc2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50KGtlcm5lbFVuaXRM
ZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCkpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNl
dFByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQogCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxk
ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGlmIChoYXNGaWx0ZXJFZmZlY3Qo
KSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25O
dWxsKCkgfSB9OworICAgIAogICAgIGludCBvcmRlclhWYWx1ZSA9IG9yZGVyWCgpOwogICAgIGlu
dCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVz
OjpvcmRlckF0dHIpKSB7CkBAIC0yMDYsMjIgKzIwNywyMiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQgogICAgIH0KICAgICAvLyBTcGVjIHNheXMgb3JkZXIgbXVzdCBiZSA+IDAuIEJhaWwgaWYg
aXQgaXMgbm90LgogICAgIGlmIChvcmRlclhWYWx1ZSA8IDEgfHwgb3JkZXJZVmFsdWUgPCAxKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvJiBr
ZXJuZWxNYXRyaXggPSB0aGlzLT5rZXJuZWxNYXRyaXgoKTsKICAgICBpbnQga2VybmVsTWF0cml4
U2l6ZSA9IGtlcm5lbE1hdHJpeC5pdGVtcygpLnNpemUoKTsKICAgICAvLyBUaGUgc3BlYyBzYXlz
IHRoaXMgaXMgYSByZXF1aXJlbWVudCwgYW5kIHNob3VsZCBiYWlsIG91dCBpZiBmYWlscwogICAg
IGlmIChvcmRlclhWYWx1ZSAqIG9yZGVyWVZhbHVlICE9IGtlcm5lbE1hdHJpeFNpemUpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaW50IHRhcmdl
dFhWYWx1ZSA9IHRhcmdldFgoKTsKICAgICBpbnQgdGFyZ2V0WVZhbHVlID0gdGFyZ2V0WSgpOwog
ICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSAmJiAodGFyZ2V0WFZh
bHVlIDwgMCB8fCB0YXJnZXRYVmFsdWUgPj0gb3JkZXJYVmFsdWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBk
ZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRYID0gZmxvb3IgKCBvcmRlclggLyAyICkpCiAgICAgaWYg
KCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSkKICAgICAgICAgdGFyZ2V0WFZh
bHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob3JkZXJYVmFsdWUgLyAyKSk7CiAgICAgaWYg
KGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpICYmICh0YXJnZXRZVmFsdWUgPCAw
IHx8IHRhcmdldFlWYWx1ZSA+PSBvcmRlcllWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQg
dmFsdWUgaXM6IHRhcmdldFkgPSBmbG9vciAoIG9yZGVyWSAvIDIgKSkKICAgICBpZiAoIWhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpKQogICAgICAgICB0YXJnZXRZVmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlcllWYWx1ZSAvIDIpKTsKQEAgLTIzNCwxMSArMjM1
LDExIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZ
VmFsdWUgPSAxOwogICAgIH0KICAgICBpZiAoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSA8PSAwIHx8
IGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUgPD0gMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBmbG9hdCBkaXZpc29yVmFsdWUgPSBkaXZpc29yKCk7
CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZGl2aXNvckF0dHIpICYmICFkaXZpc29y
VmFsdWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAg
IGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29yQXR0cikpIHsKICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBrZXJuZWxNYXRyaXhTaXplOyArK2kpCiAgICAgICAgICAgICBkaXZp
c29yVmFsdWUgKz0ga2VybmVsTWF0cml4Lml0ZW1zKClbaV0tPnZhbHVlKCk7CkBAIC0yNDYsOSAr
MjQ3LDEyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgICAgICBkaXZpc29yVmFs
dWUgPSAxOwogICAgIH0KIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3Jl
YXRlKGZpbHRlciwgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUpLCBkaXZpc29yVmFs
dWUsIGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9k
ZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZ
VmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJpeCk7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBhdXRvIGtl
cm5lbFNpemUgPSBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSk7CisgICAgYXV0byB0
YXJnZXRPZmZzZXQgPSBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSk7CisgICAg
YXV0byBrZXJuZWxVbml0TGVuZ3RoID0gRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVl
LCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKTsKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVDb252b2x2
ZU1hdHJpeDo6Y3JlYXRlKGtlcm5lbFNpemUsIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCB0YXJnZXRP
ZmZzZXQsIGVkZ2VNb2RlKCksIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEoKSwga2Vy
bmVsTWF0cml4KSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVs
ZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKaW5kZXggODVjMDAy
Njk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5MDQ5YjMzOS4uMGUwOGUyOWFjMzFjMTU4YjBkZDBj
N2JiNmQ1YmUyYjdjMTQ0YzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEwMiw4ICsxMDIsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0
JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5
OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li41ZTU4OGZlOTcwNjIyYTgxYWVmZDMxYmUwMzNhZWQ5
NjdjYTQ1MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcApAQCAtODEsNTAgKzgxLDYgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnMKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcqIGRpZmZ1c2VM
aWdodGluZyA9IHN0YXRpY19jYXN0PEZFRGlmZnVzZUxpZ2h0aW5nKj4oZWZmZWN0KTsKLQotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7Ci0gICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgICAgICBBU1NF
UlQocmVuZGVyZXIpOwotICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNv
bG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGln
aHRpbmdDb2xvcigpKTsKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0TGlnaHRp
bmdDb2xvcihjb2xvcik7Ci0gICAgfQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0U3VyZmFj
ZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRp
ZmZ1c2VDb25zdGFudEF0dHIpCi0gICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldERp
ZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7Ci0KLSAgICBhdXRvJiBsaWdodFNvdXJj
ZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmctPmxpZ2h0U291cmNl
KCkpOwotICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxp
Z2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBBU1NFUlQobGlnaHRFbGVt
ZW50KTsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCi0gICAg
ICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgp
KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCi0gICAgICAg
IHJldHVybiBsaWdodFNvdXJjZS5zZXRFbGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24o
KSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgcmV0dXJu
IGxpZ2h0U291cmNlLnNldFgobGlnaHRFbGVtZW50LT54KCkpOwotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0
RWxlbWVudC0+eSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnpBdHRyKQotICAg
ICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVsZW1lbnQtPnooKSk7Ci0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQotICAgICAgICByZXR1cm4gbGln
aHRTb3VyY2Uuc2V0UG9pbnRzQXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRYKCkpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKLSAgICAgICAgcmV0dXJuIGxp
Z2h0U291cmNlLnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCi0gICAgICAgIHJldHVybiBs
aWdodFNvdXJjZS5zZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2ludHNBdFooKSk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAg
cmV0dXJuIGxpZ2h0U291cmNlLnNldFNwZWN1bGFyRXhwb25lbnQobGlnaHRFbGVtZW50LT5zcGVj
dWxhckV4cG9uZW50KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdD
b25lQW5nbGVBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25l
QW5nbGUobGlnaHRFbGVtZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVB
dHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7CkBAIC0xNTEsMjggKzEwNyw4MCBAQCB2b2lkIFNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChj
b25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBj
b25zdAordm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJp
YnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7CisgICAgYXV0byYgZGlmZnVzZUxpZ2h0aW5nID0gZG93bmNhc3Q8RkVEaWZmdXNl
TGlnaHRpbmc+KGVmZmVjdCk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0
aW5nX2NvbG9yQXR0cikgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICAgICAgQ29sb3IgY29s
b3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJl
ci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CisgICAgICAgIGRpZmZ1c2VM
aWdodGluZy5zZXRDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKKyAgICAgICAgZGlm
ZnVzZUxpZ2h0aW5nLnNldFN1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaWZmdXNl
Q29uc3RhbnRBdHRyKSB7CisgICAgICAgIGRpZmZ1c2VMaWdodGluZy5zZXREaWZmdXNlQ29uc3Rh
bnQoZGlmZnVzZUNvbnN0YW50KCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgYXV0
byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5n
LnNvdXJjZSgpKTsKKyAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0g
U1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CisgICAgQVNTRVJUKGxp
Z2h0RWxlbWVudCk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRy
KQorICAgICAgICBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKKyAg
ICAgICAgbGlnaHRTb3VyY2Uuc2V0RWxldmF0aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0aW9uKCkp
OworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgbGln
aHRTb3VyY2Uuc2V0WChsaWdodEVsZW1lbnQtPngoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0RWxlbWVu
dC0+eSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAg
ICAgIGxpZ2h0U291cmNlLnNldFoobGlnaHRFbGVtZW50LT56KCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5z
ZXRQb2ludHNBdFgobGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNl
dFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0
UG9pbnRzQXRaKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRaKCkpOworICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgbGlnaHRTb3Vy
Y2Uuc2V0U3BlY3VsYXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQoKSk7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0
cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25lQW5nbGUobGlnaHRFbGVtZW50
LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVk
RWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAg
ICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0g
fTsKIAogICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExp
Z2h0RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJj
ZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8g
bGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGJ1aWxkZXIpOwogCiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmls
dGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBz
dXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtl
cm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHNldEZp
bHRlckVmZmVjdChGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUo
KSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5n
dGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZl
Y3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAppbmRleCA2ODk5OTYw
OWY0YjZiNTZhNzZjODhlYTU2OTVmMWUwZTllMjA1NTgwLi41ZmFkNzU5NTQ1MDYzZjMyZTU0MWY5
ZmQ0NjBhNzkwZmRhMDA5N2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3Qm
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2
YTI2OWVhNmQ3MjJkZmQwNTE3M2Q4YzIuLmE4M2JhYTRjZmIwNGIzMmMzMGRjYWVmN2JmY2U0MGIz
ZjgwMmQ0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwCkBAIC04NCwyMCArODQsNiBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
cwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRURpc3BsYWNlbWVudE1hcCogZGlzcGxhY2Vt
ZW50TWFwID0gc3RhdGljX2Nhc3Q8RkVEaXNwbGFjZW1lbnRNYXAqPihlZmZlY3QpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIpCi0gICAgICAgIHJl
dHVybiBkaXNwbGFjZW1lbnRNYXAtPnNldFhDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3Rv
cigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRy
KQotICAgICAgICByZXR1cm4gZGlzcGxhY2VtZW50TWFwLT5zZXRZQ2hhbm5lbFNlbGVjdG9yKHlD
aGFubmVsU2VsZWN0b3IoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzY2FsZUF0
dHIpCi0gICAgICAgIHJldHVybiBkaXNwbGFjZW1lbnRNYXAtPnNldFNjYWxlKHNjYWxlKCkpOwot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lk
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhDaGFubmVsU2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNl
bGVjdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CkBAIC0xMTUs
MjAgKzEwMSwzMSBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTgogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
Cit2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRl
Q2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgYXV0byYgZGlzcGxhY2VtZW50TWFwID0gZG93bmNhc3Q8RkVEaXNwbGFjZW1l
bnRNYXA+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNl
bGVjdG9yQXR0cikKKyAgICAgICAgZGlzcGxhY2VtZW50TWFwLnNldFhDaGFubmVsU2VsZWN0b3Io
eENoYW5uZWxTZWxlY3RvcigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eUNoYW5uZWxTZWxlY3RvckF0dHIpCisgICAgICAgIGRpc3BsYWNlbWVudE1hcC5zZXRZQ2hhbm5l
bFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnNjYWxlQXR0cikKKyAgICAgICAgZGlzcGxhY2VtZW50TWFwLnNldFNjYWxlKHNj
YWxlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVp
bGRlcikKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlm
ICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxl
Y3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVm
ZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQx
KTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZl
Y3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQor
ICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5l
bFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSkpOworCisgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCksIGlucHV0Mi5yZWxl
YXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRk
MGFlNWVjZDU4NjY1ZDMuLmQxNWY4OGU4ZTA5YWMzZWY5Njg2MGQ5M2Y2ZWUyZTJiZDY3ZWQyNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmgKQEAgLTkwLDggKzkwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAot
ICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdp
c3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0Fu
aW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKaW5kZXggYTY4NmJiOGZhMzhkOWRkZmEyOGUwMmFl
ZDk1ZTQxYjA4YTM2ZjJmNy4uOTE2ZjAzYzBmOTE1N2VjODI4YzkyZTk5YjYzYmQ2MjJlOTUyNmE0
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5j
cHAKQEAgLTM2LDcgKzM2LDcgQEAgUmVmPFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudD4gU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmEKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
KTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0
U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAorUmVmPExpZ2h0U291cmNlPiBTVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBj
b25zdAogewogICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCks
IGVsZXZhdGlvbigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuaAppbmRleCBmYmRmNzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNj
Li5iYmJmZTk0NzM5YjQ0MzljMDYwNmJjMTM4OGVkODBmNzIyNzI1ODRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNv
dXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291
cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBz
aXplb2YoU1ZHRkVMaWdodEVsZW1lbnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRiMzI2
YTg5YmZjNWI2ODEuLmZlMjMyOGI1Y2E2NjNiNGQ0YzliNzdlOTMyNzRjZWMwYThlMWRmNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAgLTg4
LDcgKzg4LDEzIEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvCiAKIHZvaWQgU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKLSAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNLbm93bkF0dHJpYnV0ZShhdHRy
TmFtZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0ciB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6ZHlBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRp
b25BdHRyKSB7CisgICAgICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMp
OworICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7
CiAgICAgICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwogICAgICAg
ICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk3LDI3ICsxMDMsNDQgQEAgdm9p
ZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRURyb3BTaGFkb3dF
bGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKKyAgICBhdXRvJiBmZURyb3BTaGFk
b3cgPSBkb3duY2FzdDxGRURyb3BTaGFkb3c+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpkeEF0dHIpCisgICAgICAgIGZlRHJvcFNoYWRvdy5zZXREeChkeCgpKTsKKyAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAgICBmZURyb3BT
aGFkb3cuc2V0RHkoZHkoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0
ZERldmlhdGlvbkF0dHIpIHsKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldFN0ZERldmlhdGlvblgo
c3RkRGV2aWF0aW9uWCgpKTsKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldFN0ZERldmlhdGlvblko
c3RkRGV2aWF0aW9uWSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MSgpKTsKKyAgICBpZiAoIWlucHV0MSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICho
YXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5w
dXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OworCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwg
MCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5k
ZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENv
bG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAot
ICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0g
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIHNldEZpbHRlckVm
ZmVjdChGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblko
KSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVE
cm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblko
KSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVy
RWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA5YjYyZDI0YjQ1NGJi
N2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFkLi43NmJmOTI1MzE1OTgzMTliMjUxZTU5ZmIxN2Y3
ZmUzNDM1ZDMwMjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVt
ZW50LmgKQEAgLTUzLDcgKzUzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5n
ZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3
ZDBiNGJjYWJkMjI0NDc1OGZjMi4uMjdjMTViMGZlMWM4YzdmNjQ0M2ViZjYzYWMxMjVhZjFlODYz
ZjVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC00Miwz
NCArNDIsMzggQEAgUmVmPFNWR0ZFRmxvb2RFbGVtZW50PiBTVkdGRUZsb29kRWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTVkdGRUZsb29kRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1ib29sIFNW
R0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBl
ZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQordm9pZCBTVkdGRUZsb29kRWxl
bWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBGRUZsb29kKiBm
bG9vZCA9IHN0YXRpY19jYXN0PEZFRmxvb2QqPihlZmZlY3QpOwotCisgICAgCisgICAgYXV0byYg
Zmxvb2QgPSBkb3duY2FzdDxGRUZsb29kPihlZmZlY3QpOwogICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Zmxvb2RfY29sb3JBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNldEZsb29k
Q29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0
Rmxvb2RPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOwotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmbG9vZC5zZXRG
bG9vZENvbG9yKHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKKyAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCisgICAgICAgIGZsb29kLnNl
dEZsb29kT3BhY2l0eShzdHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKTsKKyAgICBlbHNl
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmls
dGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KQogeworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVy
RWZmZWN0KCksIHsgfSB9OworCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3Zn
U3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAgICAgQ29sb3IgY29sb3Ig
PSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5m
bG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHko
KTsKIAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7
CisgICAgc2V0RmlsdGVyRWZmZWN0KEZFRmxvb2Q6OmNyZWF0ZShjb2xvciwgb3BhY2l0eSkpOwor
CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCmluZGV4IGI5NmE0M2FhMzEzZTc1ZTRhMzE2NzI0OGEx
YjZmNWNmNTFmZWU5MTEuLmE5ZDUyM2ViY2QwODcxZjAzNGZkNGNlYjA0ZGM2YTA3MzU5NzVkODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCkBAIC0zNSw4ICszNSw4IEBA
IHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJS
ZWdpc3RyeTxTVkdGRUZsb29kRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKLSAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4u
MWQ1NzE1NmE3ODJlYTk1YzYxNjdlMDY5N2UyNzI0ODg4ZTkwYTU0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTg2LDcgKzg2LDEz
IEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBCiAKIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewotICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkg
eworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0ciB8fCBhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CisgICAgICAgIEluc3RhbmNlSW52YWxp
ZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOworICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3Vh
cmQgZ3VhcmQoKnRoaXMpOwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTk1LDE4ICsxMDEsMzEgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBj
b25zdAordm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0
ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7CisgICAgYXV0byYgZmVHYXVzc2lhbkJsdXIgPSBkb3duY2FzdDxGRUdhdXNzaWFuQmx1
cj4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0
dHIpIHsKKyAgICAgICAgZmVHYXVzc2lhbkJsdXIuc2V0U3RkRGV2aWF0aW9uWChzdGREZXZpYXRp
b25YKCkpOworICAgICAgICBmZUdhdXNzaWFuQmx1ci5zZXRTdGREZXZpYXRpb25ZKHN0ZERldmlh
dGlvblkoKSk7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVB
dHRyKQorICAgICAgICBmZUdhdXNzaWFuQmx1ci5zZXRFZGdlTW9kZShlZGdlTW9kZSgpKTsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAg
YXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0
MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBp
ZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVy
RWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUdhdXNzaWFuQmx1cjo6Y3JlYXRl
KHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKSk7CiAKLSAgICBh
dXRvIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25Y
KCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBmaWx0
ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBkODllMWE3
NDhmYjJjNTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi4zODU1MThmZWYyYzhkZDYxOWJjOTUz
MDk0OTY1MWI3YWI0NDBhNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCkBAIC01Myw3ICs1Myw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJz
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJy
aWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRy
aWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIx
NzZmMDJhMTZjMDU1MGYwODExOTVkM2MyN2VjNGYuLmJkYWFiODg2NDY2YTMzNmViNjExODIwYjkx
MzcwMDRjYjZiOThmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNw
cApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCIKKyNpbmNs
dWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTc0LDE2ICsxNzUsNTMgQEAgdm9pZCBT
VkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBjb25zdCBO
ZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFu
ZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR0ZFSW1hZ2VF
bGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY2FjaGVk
SW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoZmlsdGVyLCBt
X2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpOwotCiAgICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVs
ZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgdHJlZVNjb3BlKCkpOworICAgIGlmICghaXM8U1ZH
RWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAg
IGlmIChpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZih0YXJnZXQuZWxlbWVudC5nZXQo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0
ZVdpdGhJUklSZWZlcmVuY2UoZmlsdGVyLCB0cmVlU2NvcGUoKSwgaHJlZigpLCBwcmVzZXJ2ZUFz
cGVjdFJhdGlvKCkpOworICAgIGF1dG8gY29udGV4dE5vZGUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0
PFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KTsKKyAgICBhdXRvIHJlbmRlcmVyID0gY29udGV4
dE5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlVHJhbnNmb3JtCisgICAgYXV0
byBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5z
Zm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKCpyZW5kZXJlcik7CisgICAgaWYg
KCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55
U2NhbGUoKSwgMCwgMCk7CisKKyAgICBhdXRvIHNyY1JlY3QgPSByZW5kZXJlci0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihpbWFnZVJlY3QsIHNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBjb250ZXh0ID0gaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKTsKKyAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0cmVlVG9Db250
ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgQWZmaW5lVHJhbnNmb3JtKCkpOworCisgICAgcmV0dXJu
IGltYWdlQnVmZmVyOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpCit7CisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4g
eyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CisKKyAgICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAg
ICAgc2V0RmlsdGVyRWZmZWN0KEZFSW1hZ2U6OmNyZWF0ZShSZWY8SW1hZ2U+IHsgKm1fY2FjaGVk
SW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSkgfSwgcHJlc2VydmVBc3BlY3RSYXRp
bygpKSk7CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVyRm9yRWZmZWN0
KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUltYWdlOjpjcmVhdGUoaW1hZ2VCdWZmZXIu
cmVsZWFzZU5vbk51bGwoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKSk7CisKKyAgICByZXR1cm4g
eyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1
NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li40NzA3ZmU2ODA2YmE4OTY1MTA0OWE2Zjg5NGM4YTcx
YWUyNTg1NGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUs
NyArNTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgp
IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGZpbHRlckVmZmVj
dEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlIHsgfQorICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlcXVlc3RJbWFn
ZVJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCmluZGV4IGNk
MGJmYjllZGNmZDdiNGUxYWYzOWI1NWVkYmJiZDc4NGFhZWE4OWQuLjFjYjI3ZGYzMTUwNDAxN2M2
OTllMDEwY2VkNGIwZDVkNjAwYmM2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUxpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxl
bWVudC5oCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBT
VkdGRUxpZ2h0RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKFNWR0ZFTGlnaHRFbGVtZW50KTsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIFJlZjxM
aWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0ID0gMDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1lbnQqIGZpbmRMaWdo
dEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXppbXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwCmluZGV4IGJlMmY2ZTAzMDdkYzU1MTYwMDc5MGZkNWJmMTgy
ZjFkOTQ2MjNkZDYuLjQ2NDdlNDY5MmRhZThjOTIwZDJiZDlhY2U0NDI4ZmFiZTBhNjk0Y2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtMjYsNyArMjYsNiBA
QAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVs
cGVycy5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTQ1LDI0ICs0NCwyNSBAQCBSZWY8U1ZHRkVNZXJnZUVs
ZW1lbnQ+IFNWR0ZFTWVyZ2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFTWVyZ2VFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBi
dWlsZGVyKQogewotICAgIGF1dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRlcik7Ci0g
ICAgYXV0byYgbWVyZ2VJbnB1dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4gbWVyZ2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8mIG1lcmdl
Tm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0g
ICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1l
cmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBidWlsZGVyLm5hbWVk
RWZmZWN0KG1lcmdlTm9kZS5pbjEoKSk7CiAgICAgICAgIGlmICghbWVyZ2VFZmZlY3QpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKFdURk1v
dmUobWVyZ2VFZmZlY3QpKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIG1lcmdl
SW5wdXRzLmFwcGVuZChtZXJnZUVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKICAg
ICBtZXJnZUlucHV0cy5zaHJpbmtUb0ZpdCgpOwotCiAgICAgaWYgKG1lcmdlSW5wdXRzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVNZXJn
ZTo6Y3JlYXRlKG1lcmdlSW5wdXRzLnNpemUoKSkpOwogCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAg
ICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgV1RGTW92ZShtZXJnZUlucHV0cykgfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3
NmM2Njk3ZGM1MTA3NTgwMmQyODNjZjRlM2MyLi5lODgwZTZlOTdiM2NlMmUyY2JmZjMzMmUxZDkz
YTExZDI0NmM5ZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAt
MzUsNyArMzUsNyBAQCBwcml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQ
cm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJv
cGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsg
fQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5j
cHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIxYi4uMGFiNTVi
MmFjMWY4MThlYzJlZjQ1NjE1NGY1NDJlOTRiYzhjYTNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMzksNyArMzksNyBAQCBpbmxpbmUg
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYQogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKICAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjppbkF0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50OjptX2luMT4oKTsKLSAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0
eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCAmU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6bV9zdmdPcGVyYXRvcj4oKTsKKyAgICAgICAgUHJvcGVydHlSZWdp
c3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBNb3JwaG9sb2d5
T3BlcmF0b3IsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX21vcnBob2xvZ3lPcGVyYXRvcj4o
KTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6
cmFkaXVzQXR0ciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fcmFkaXVzWCwgJlNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQ6Om1fcmFkaXVzWT4oKTsKICAgICB9KTsKIH0KQEAgLTU5LDkgKzU5LDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRSYWRpdXMoZmxvYXQgeCwgZmxvYXQg
eSkKIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewotICAgICAgICBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CisgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvciBw
cm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6ZnJv
bVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKLSAgICAgICAg
ICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgICAgIG1fbW9ycGhvbG9neU9wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9yPihwcm9wZXJ0eVZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODEsMjIgKzgxLDYgQEAgdm9pZCBTVkdGRU1vcnBo
b2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG8KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNl
QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFTW9ycGhvbG9neSogbW9ycGhvbG9neSA9
IHN0YXRpY19jYXN0PEZFTW9ycGhvbG9neSo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCi0gICAgICAgIHJldHVybiBtb3JwaG9sb2d5LT5zZXRN
b3JwaG9sb2d5T3BlcmF0b3Ioc3ZnT3BlcmF0b3IoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIC8vIEJvdGggc2V0UmFkaXVzIGZ1bmN0aW9u
cyBzaG91bGQgYmUgZXZhbHVhdGVkIHNlcGFyYXRlbHkuCi0gICAgICAgIGJvb2wgaXNSYWRpdXNY
Q2hhbmdlZCA9IG1vcnBob2xvZ3ktPnNldFJhZGl1c1gocmFkaXVzWCgpKTsKLSAgICAgICAgYm9v
bCBpc1JhZGl1c1lDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWShyYWRpdXNZKCkpOwot
ICAgICAgICByZXR1cm4gaXNSYWRpdXNYQ2hhbmdlZCB8fCBpc1JhZGl1c1lDaGFuZ2VkOwotICAg
IH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
dm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
b3BlcmF0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CkBAIC0x
MTQsMjEgKzk4LDM0IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3Zv
aWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChG
aWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAg
ICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwotICAgIGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZ
KCk7CisgICAgYXV0byYgbW9ycGhvbG9neSA9IGRvd25jYXN0PEZFTW9ycGhvbG9neT4oZWZmZWN0
KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICAgICAg
bW9ycGhvbG9neS5zZXRNb3JwaG9sb2d5T3BlcmF0b3IobW9ycGhvbG9neU9wZXJhdG9yKCkpOwor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CisgICAgICAg
IC8vIEJvdGggc2V0UmFkaXVzIGZ1bmN0aW9ucyBzaG91bGQgYmUgZXZhbHVhdGVkIHNlcGFyYXRl
bHkuCisgICAgICAgIG1vcnBob2xvZ3kuc2V0UmFkaXVzWChyYWRpdXNYKCkpOworICAgICAgICBt
b3JwaG9sb2d5LnNldFJhZGl1c1kocmFkaXVzWSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVy
Lm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVz
WCgpOworICAgIGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAw
IHx8IHlSYWRpdXMgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVm
ZmVjdChGRU1vcnBob2xvZ3k6OmNyZWF0ZShtb3JwaG9sb2d5T3BlcmF0b3IoKSwgeFJhZGl1cywg
eVJhZGl1cykpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0
ZXIsIHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpOwotICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsg
ZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li44
NDBiNWJhYWYyODM2MGM2ZjY1OWYzZTk5NzU0NzA3MTg5MzRjN2EwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI2LDEyICsyNiwxMiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBo
b2xvZ3lPcGVyYXRvcj4gewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkg
eyByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQogCi0gICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCisgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQogICAg
IHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAobW9ycGhvbG9neU9w
ZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046CiAg
ICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREU6CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yIGZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9
PSAiZXJvZGUiKQogICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9E
RTsKQEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSYWRpdXMoZmxvYXQg
cmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1
cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBz
dmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlPigpOyB9CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yLT5jdXJy
ZW50VmFsdWU8TW9ycGhvbG9neU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgcmFkaXVzWCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmFkaXVzWC0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCByYWRp
dXNZKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNZLT5jdXJyZW50VmFsdWUoKTsgfQogCiAgICAg
U1ZHQW5pbWF0ZWRTdHJpbmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KLSAgICBT
VkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9z
dmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIG1vcnBob2xvZ3lPcGVy
YXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7IH0KICAgICBTVkdB
bmltYXRlZE51bWJlciYgcmFkaXVzWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yYWRpdXNYOyB9CiAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXImIHJhZGl1c1lBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVz
WTsgfQogCkBAIC04MCwxMiArODAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdP
cGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1f
bW9ycGhvbG9neU9wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1i
ZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVh
dGUodGhpcykgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5pZGwKaW5kZXggYTJjMTgxZjJlNjM3Y2QzOTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4u
MmQyMWYyYTFkODg4ZDAyZWMxNzlkZjEwZTJkZTQzZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAog
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNWR19NT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAg
ID0gMjsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGlu
MTsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhv
bG9neU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBv
cGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBy
YWRpdXNYOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJh
ZGl1c1k7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXgg
MDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uNTk0NTA2YTNlYjZiZTBi
NmU3NWEyZjcwNGJiYWI2ODViNmQ1MDQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zm
c2V0RWxlbWVudC5jcHAKQEAgLTcyLDcgKzcyLDEzIEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3Ry
CiAKIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tu
b3duQXR0cmlidXRlKGF0dHJOYW1lKSkgeworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
ZHhBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKKyAgICAgICAgSW5zdGFu
Y2VJbnZhbGlkYXRpb25HdWFyZCBndWFyZCgqdGhpcyk7CisgICAgICAgIHByaW1pdGl2ZUF0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgSW5zdGFuY2VJbnZhbGlk
YXRpb25HdWFyZCBndWFyZCgqdGhpcyk7CiAgICAgICAgIGludmFsaWRhdGUoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtODEsMTYgKzg3LDI3IEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
Cit2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChG
aWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAg
ICBhdXRvJiBmZU9mZnNldCA9IGRvd25jYXN0PEZFT2Zmc2V0PihlZmZlY3QpOworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKQorICAgICAgICBmZU9mZnNldC5zZXREeChkeCgp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAgICBm
ZU9mZnNldC5zZXREeShkeSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQogCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgp
KTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0
ZXJFZmZlY3QoRkVPZmZzZXQ6OmNyZWF0ZShkeCgpLCBkeSgpKSk7CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVy
biB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IDU3NDczZGNjNzJk
YjY3YjEyNWVhMmVkNDY1ZTM1YjU3MzcwNDliZWUuLjlkM2RhZjA5ZGQ1MzFjNGMyM2I0ZTFiYWM2
NGZiNTU0NmE0YTQ0YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgK
QEAgLTQ3LDcgKzQ3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVw
bGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMzOGExYjZhNTVm
Y2RiODIxYTA5ZjBhY2MzYzIwN2VhODEuLjY0MDY0ZjVmNjgwODQ5NGNmN2FiMTBkZDAxOWMwYWFk
Njk4OWNkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAKQEAgLTM5LDE5ICszOCwxOSBAQCBSZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD4gU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU1ZHRkVQb2ludExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291
cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNW
R0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdAogewogICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKLSAgICBpZiAoYnVpbGRlci5w
cmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VO
RElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJn
ZXRCb3VuZGluZ0JveCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVu
Y2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlv
bi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwot
Ci0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9p
bnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0
bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAq
IGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVu
Y2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOworLy8gICAgaWYg
KGZpbHRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCkgeworLy8gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBm
aWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKKy8vCisvLyAgICAgICAgcG9zaXRpb24uc2V0WChy
ZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAg
IHBvc2l0aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWln
aHQoKSk7CisvLworLy8gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVy
cy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9T
VkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQorLy8gICAgICAgIHBvc2l0
aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29y
bmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsK
Ky8vICAgIH0gZWxzZQorLy8gICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgp
LCB6KCkpOwogICAgIAogICAgIHJldHVybiBQb2ludExpZ2h0U291cmNlOjpjcmVhdGUocG9zaXRp
b24pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKaW5k
ZXggMzNhNWJkNzQ5MjA4MjhjOTk4NjQ1YjcyMmY3MmE3NDVlNDhkYTc5ZS4uYzQ3YTYwNTZlODg3
ZGEwODFhMDRmM2I5NTJiZGU0NWJjZGE5ZDlmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgU1ZHRkVQb2ludExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoY29u
c3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVu
dCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQyOWE1
OS4uYmM4MjVmYTRhNDUxMTAzMWI5MmFlOWJhZDFlYjM3YmUyOWFkMGNkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApAQCAt
ODgsNTIgKzg4LDYgQEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb24KICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0K
IAotYm9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQotewotICAgIEZFU3BlY3VsYXJMaWdodGluZyogc3BlY3VsYXJMaWdodGluZyA9IHN0YXRpY19j
YXN0PEZFU3BlY3VsYXJMaWdodGluZyo+KGVmZmVjdCk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKLSAg
ICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0g
ICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsK
LSAgICB9Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQot
ICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VT
Y2FsZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRB
dHRyKQotICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0U3BlY3VsYXJDb25zdGFu
dChzcGVjdWxhckNvbnN0YW50KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Bl
Y3VsYXJFeHBvbmVudEF0dHIpCi0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRT
cGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7Ci0KLSAgICBhdXRvJiBsaWdodFNv
dXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLT5saWdodFNv
dXJjZSgpKTsKLSAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0gU1ZH
RkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7Ci0gICAgQVNTRVJUKGxpZ2h0
RWxlbWVudCk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKQot
ICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0QXppbXV0aChsaWdodEVsZW1lbnQtPmF6aW11
dGgoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQotICAg
ICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0RWxldmF0aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0
aW9uKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHJl
dHVybiBsaWdodFNvdXJjZS5zZXRYKGxpZ2h0RWxlbWVudC0+eCgpKTsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WShs
aWdodEVsZW1lbnQtPnkoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikK
LSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFoobGlnaHRFbGVtZW50LT56KCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikKLSAgICAgICAgcmV0dXJu
IGxpZ2h0U291cmNlLnNldFBvaW50c0F0WChsaWdodEVsZW1lbnQtPnBvaW50c0F0WCgpKTsKLSAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCi0gICAgICAgIHJldHVy
biBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFkobGlnaHRFbGVtZW50LT5wb2ludHNBdFkoKSk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQotICAgICAgICByZXR1
cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRaKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRaKCkpOwot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCi0gICAg
ICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRTcGVjdWxhckV4cG9uZW50KGxpZ2h0RWxlbWVudC0+
c3BlY3VsYXJFeHBvbmVudCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0
aW5nQ29uZUFuZ2xlQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldExpbWl0aW5n
Q29uZUFuZ2xlKGxpZ2h0RWxlbWVudC0+bGltaXRpbmdDb25lQW5nbGUoKSk7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VT
Y2FsZUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0ciB8fCBhdHRyTmFtZSA9
PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKQEAgLTE2MCwyOCArMTE0LDg1IEBA
IHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRl
Q2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChh
dHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8mIHNwZWN1bGFyTGlnaHRpbmcgPSBkb3duY2Fz
dDxGRVNwZWN1bGFyTGlnaHRpbmc+KGVmZmVjdCk7CiAKLSAgICBpZiAoIWlucHV0MSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaWdodGlu
Z19jb2xvckF0dHIpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJl
bmRlcmVyKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgICAgIENvbG9yIGNvbG9y
ID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXIt
PnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOworICAgICAgICBzcGVjdWxhckxp
Z2h0aW5nLnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFJl
ZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0
aGlzKTsKLSAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKSB7CisgICAgICAg
IHNwZWN1bGFyTGlnaHRpbmcuc2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNw
ZWN1bGFyQ29uc3RhbnRBdHRyKSB7CisgICAgICAgIHNwZWN1bGFyTGlnaHRpbmcuc2V0U3BlY3Vs
YXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KCkpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKCpm
aWx0ZXJCdWlsZGVyKTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKSB7CisgICAgICAgIHNwZWN1bGFyTGlnaHRpbmcuc2V0U3BlY3VsYXJFeHBvbmVu
dChzcGVjdWxhckV4cG9uZW50KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oc3BlY3VsYXJMaWdodGlu
Zy5zb3VyY2UoKSk7CisgICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9
IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOworICAgIEFTU0VSVChs
aWdodEVsZW1lbnQpOworCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0
cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0QXppbXV0aChsaWdodEVsZW1lbnQtPmF6aW11dGgo
KSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCisg
ICAgICAgIGxpZ2h0U291cmNlLnNldEVsZXZhdGlvbihsaWdodEVsZW1lbnQtPmVsZXZhdGlvbigp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eEF0dHIpCisgICAgICAgIGxp
Z2h0U291cmNlLnNldFgobGlnaHRFbGVtZW50LT54KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0WShsaWdodEVsZW1l
bnQtPnkoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnpBdHRyKQorICAg
ICAgICBsaWdodFNvdXJjZS5zZXRaKGxpZ2h0RWxlbWVudC0+eigpKTsKKyAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uu
c2V0UG9pbnRzQXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRYKCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5z
ZXRQb2ludHNBdFkobGlnaHRFbGVtZW50LT5wb2ludHNBdFkoKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNl
dFBvaW50c0F0WihsaWdodEVsZW1lbnQtPnBvaW50c0F0WigpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCisgICAgICAgIGxpZ2h0U291
cmNlLnNldFNwZWN1bGFyRXhwb25lbnQobGlnaHRFbGVtZW50LT5zcGVjdWxhckV4cG9uZW50KCkp
OworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0
dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldExpbWl0aW5nQ29uZUFuZ2xlKGxpZ2h0RWxlbWVu
dC0+bGltaXRpbmdDb25lQW5nbGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KIAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFt
ZWRFZmZlY3QoaW4xKCkpOworICAgIGlmICghaW5wdXQxKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXJFZmZl
Y3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CisgICAgCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBS
ZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQo
dGhpcyk7CisgICAgaWYgKCFsaWdodEVsZW1lbnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShidWlsZGVyKTsK
KwogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwor
ICAgIAorICAgIHNldEZpbHRlckVmZmVjdChGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb2xv
ciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgp
LCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0
U291cmNlKSkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0
ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVj
dWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCks
IFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBp
bnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgp
LCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggODk3YjhkZTE1
NmQxYzc5YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3YjE0Ni4uZmE2ODc4ZmI1Y2I0NzY0NmM0MmVlM2I5
MDc3YWY4ZTE3MjAxOTIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5oCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3Qm
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwb3RMaWdodEVsZW1lbnQuY3BwCmluZGV4IGQ2ZGEzMTA2NGNiMWIzN2U4Y2M5Mzg3NGVhNGFh
OWNmMmRmYmZmZWUuLjc0MTMxZjkzNGZjYzIxMmMwY2U4MjVhNjA2NjAyNjkzMWNjMzNhYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCkBAIC0yMSw3
ICsyMSw2IEBACiAjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgiCiAKICNpbmNsdWRl
ICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5oIgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0zOSwyNyArMzgsMjcgQEAgUmVmPFNWR0ZFU3BvdExp
Z2h0RWxlbWVudD4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGEKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVNwb3RMaWdodEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdGRVNwb3RMaWdo
dEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitS
ZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3Qg
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uOwog
ICAgIEZsb2F0UG9pbnQzRCBwb2ludHNBdDsKLQotICAgIGlmIChidWlsZGVyLnByaW1pdGl2ZVVu
aXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJvdW5kaW5n
Qm94KCk7Ci0gICAgICAgIAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkg
KyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNldFkocmVm
ZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRy
aWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmll
d3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRp
c3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1h
eFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Ci0KLSAgICAgICAgcG9pbnRzQXQuc2V0WChy
ZWZlcmVuY2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0g
ICAgICAgIHBvaW50c0F0LnNldFkocmVmZXJlbmNlQm94LnkoKSArIHBvaW50c0F0WSgpICogcmVm
ZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NW
Ry9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMu
b3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAg
IHBvaW50c0F0LnNldFoocG9pbnRzQXRaKCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VC
b3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3Fy
dE9mVHdvRmxvYXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2lu
dDNEKHgoKSwgeSgpLCB6KCkpOwotICAgICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQzRChwb2lu
dHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKLSAgICB9CisvLworLy8gICAgaWYg
KGZpbHRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCkgeworLy8gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBm
aWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKKy8vCisvLyAgICAgICAgcG9zaXRpb24uc2V0WChy
ZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAg
IHBvc2l0aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWln
aHQoKSk7CisvLyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0
bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9j
b29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9zaXRpb24u
c2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIo
KSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOworLy8K
Ky8vICAgICAgICBwb2ludHNBdC5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNBdFgoKSAq
IHJlZmVyZW5jZUJveC53aWR0aCgpKTsKKy8vICAgICAgICBwb2ludHNBdC5zZXRZKHJlZmVyZW5j
ZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7CisvLyAgICAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0
WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0
c192aWV3cG9ydF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFoo
KSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZl
cmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7CisvLyAgICB9IGVs
c2UgeworLy8gICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOwor
Ly8gICAgICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBvaW50c0F0WCgpLCBwb2ludHNBdFko
KSwgcG9pbnRzQXRaKCkpOworLy8gICAgfQogCiAgICAgcmV0dXJuIFNwb3RMaWdodFNvdXJjZTo6
Y3JlYXRlKHBvc2l0aW9uLCBwb2ludHNBdCwgc3BlY3VsYXJFeHBvbmVudCgpLCBsaW1pdGluZ0Nv
bmVBbmdsZSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RM
aWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQu
aAppbmRleCAzZjc3MTdjMTI2NWM0ZjMxZjUzMDg4NjhkNDdjOTc4Nzk3YTczMjExLi4wNzQzNmNj
MDE2NjNiNTIxNTYyNGE2ZTEyZDcxNjA2ODFlOTY1MjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCkBAIC0zMCw3ICszMCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHRkVTcG90TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShj
b25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2Vy
dChzaXplb2YoU1ZHRkVTcG90TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1l
bnQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCmluZGV4IDM5YmRj
Yzc3MzU5NjY1MDM2ZTFhZTc0NzYxMmVhZDZmOWFjMzczNzAuLjYzN2EzMmY5Y2RlMjhkNGM2MzJl
MTMxYjcyOTQ4OGFjOGNjYmEwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVRpbGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVu
dC5jcHAKQEAgLTcwLDE2ICs3MCwxNiBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBT
VkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAg
ICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5w
dXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRVRpbGU6
OmNyZWF0ZSgpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZm
ZWN0OworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVs
bCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGls
ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKaW5kZXgg
NDViMzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQyYTMzYTkxZi4uYmUzNzk2OTkwOTMwMWQy
OTZjZmY1ZTAxOTc0MmQ0MDVhMWIxMGY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxl
bWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAg
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7
CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
dXJidWxlbmNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAKaW5kZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0
ZC4uMTI5NGJmNGE1MWEwNTI0ZmMzOTJmMTg0NDZkY2VlMTMzNWQ0MGExZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtODgsMjQgKzg4LDYg
QEAgdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG8KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFVHVyYnVs
ZW5jZSogdHVyYnVsZW5jZSA9IHN0YXRpY19jYXN0PEZFVHVyYnVsZW5jZSo+KGVmZmVjdCk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICAgICAgcmV0dXJuIHR1
cmJ1bGVuY2UtPnNldFR5cGUodHlwZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN0aXRjaFRpbGVzQXR0cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFN0aXRjaFRp
bGVzKHN0aXRjaFRpbGVzKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YmFzZUZy
ZXF1ZW5jeUF0dHIpCi0gICAgICAgIHJldHVybiAodHVyYnVsZW5jZS0+c2V0QmFzZUZyZXF1ZW5j
eVgoYmFzZUZyZXF1ZW5jeVgoKSkgfHwgdHVyYnVsZW5jZS0+c2V0QmFzZUZyZXF1ZW5jeVkoYmFz
ZUZyZXF1ZW5jeVkoKSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIp
Ci0gICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5zZXRTZWVkKHNlZWQoKSk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1
bGVuY2UtPnNldE51bU9jdGF2ZXMobnVtT2N0YXZlcygpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
ewogICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkg
ewpAQCAtMTE3LDExICs5OSwzMyBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJO
YW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVm
ZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBhdXRv
JiB0dXJidWxlbmNlID0gZG93bmNhc3Q8RkVUdXJidWxlbmNlPihlZmZlY3QpOworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0VHVy
YnVsZW5jZVR5cGUodHlwZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3RpdGNoVGlsZXNBdHRyKQorICAgICAgICB0dXJidWxlbmNlLnNldFN0aXRjaFRpbGVzKHN0aXRj
aFRpbGVzKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJlcXVl
bmN5QXR0cikgeworICAgICAgICB0dXJidWxlbmNlLnNldEJhc2VGcmVxdWVuY3lYKGJhc2VGcmVx
dWVuY3lYKCkpOworICAgICAgICB0dXJidWxlbmNlLnNldEJhc2VGcmVxdWVuY3lZKGJhc2VGcmVx
dWVuY3lZKCkpOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNlZWRBdHRy
KQorICAgICAgICB0dXJidWxlbmNlLnNldFNlZWQoc2VlZCgpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpCisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0
TnVtT2N0YXZlcyhudW1PY3RhdmVzKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKQogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwgMCB8fCBiYXNlRnJlcXVl
bmN5WSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEZFVHVyYnVs
ZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVl
bmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENI
VFlQRV9TVElUQ0gpOworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJF
ZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5
cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBz
ZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKSk7CisKKyAgICBy
ZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUw
YTQwZTM0MjY3NzY5ZTE5OGEuLjM5OWViOGE1MmY2NDdmZjZlNWEzMWI1Nzg4YTAyZjljMmZjZDRh
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAt
MTE4LDggKzExOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBi
b29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5WCB7
IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJFbGVtZW50LmNwcAppbmRleCA1NTc4YjUxOWEzNjIyYmQ3MDZhZDI3YmZlNGM2MDAzOTE0
ODU4Y2EwLi45YzQzMTEzNGE4NzcwNGYwNjQ5ZDkyMmJhOTcxNjM2ZGQyNWUxYzk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCmlu
ZGV4IGZmNTIyMzA5NDY2YjA0MGJlZjA4OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjM4NjZkODljZDdl
M2YwODQ1ZDRhNTdiMzZmYjlmOTk4N2EzMmQ3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBA
IC0yNSw5ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1
aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY2LDExICs2
NCwxNSBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbgogICAgIFNWR0VsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25z
dCBRdWFsaWZpZWROYW1lJikKK3ZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSkKIHsKLSAgICAvLyBXaGVuIGFsbCBmaWx0ZXJzIHN1cHBvcnQgdGhpcyBtZXRob2QsIGl0
IHdpbGwgYmUgY2hhbmdlZCB0byBhIHB1cmUgdmlydHVhbCBtZXRob2QuCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9lZmZlY3QpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoKm1fZWZmZWN0
LCBhdHRyaWJ1dGUpOworCisgICAgaWYgKGF1dG8qIHByaW1pdGl2ZVJlbmRlcmVyID0gcmVuZGVy
ZXIoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRp
dmUqPihwcmltaXRpdmVSZW5kZXJlciktPnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0cmli
dXRlKTsKIH0KIAogdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC05Mywy
MiArOTUsNiBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2hp
bGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAgIGludmFsaWRhdGUoKTsKIH0K
IAotdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoZmlsdGVyRWZmZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVjdCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQotICAgICAgICBmaWx0
ZXJFZmZlY3QtPnNldEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
eUF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1kodHJ1ZSk7Ci0gICAgaWYgKGhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5z
ZXRIYXNXaWR0aCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRB
dHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWlnaHQodHJ1ZSk7Ci19Ci0KIFJl
bmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5k
ZXJUcmVlUG9zaXRpb24mKQogewogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuaAppbmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li5k
N2ZmZGRhZDI0YjJjMzZhNzk3ZGYyMjBiODllMTIyMDFmZWQyYThiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5oCkBAIC0zNiwxMiArMzYsNiBAQCBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyOwogY2xhc3MgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIDogcHVibGljIFNWR0VsZW1lbnQgewog
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKTsKIHB1YmxpYzoKLSAgICB2b2lkIHNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJF
ZmZlY3QqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0ID0gMDsKLSAgICAvLyBSZXR1cm5zIHRy
dWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUuCi0gICAg
dmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25z
dCBRdWFsaWZpZWROYW1lJik7Ci0KICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJv
cGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywg
U1ZHRWxlbWVudD47CiAKICAgICBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgeCgpIGNvbnN0IHsgcmV0
dXJuIG1feC0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTU2LDYgKzUwLDkgQEAgcHVibGljOgogICAg
IFNWR0FuaW1hdGVkTGVuZ3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJuIG1faGVpZ2h0OyB9
CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yZXN1
bHQ7IH0KIAorICAgIHZvaWQgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lKTsKKyAgICB2aXJ0dWFsIHN0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKQEAgLTY0LDcg
KzYxLDExIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGls
ZENoYW5nZSYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgdm9pZCBw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpOworICAgIHZpcnR1YWwgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRl
ckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KKworICAgIGJvb2wgaGFzRmlsdGVy
RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3Q7IH0KKyAgICB2b2lkIHNldEZpbHRlckVm
ZmVjdChSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3QpIHsgbV9lZmZlY3QgPSBXVEZNb3ZlKGVmZmVj
dCk7IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBmaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2VmZmVjdDsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgaXNGaWx0ZXJFZmZlY3QoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkBAIC03Myw2ICs3NCw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7
CiAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9l
ZmZlY3Q7CisgICAgCiAgICAgLy8gU3BlYzogSWYgdGhlIHgveSBhdHRyaWJ1dGUgaXMgbm90IHNw
ZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIwJSIgd2VyZSBzcGVjaWZp
ZWQuCiAgICAgLy8gU3BlYzogSWYgdGhlIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGUgaXMgbm90IHNw
ZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNp
ZmllZC4KICAgICBSZWY8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feCB7IFNWR0FuaW1hdGVkTGVuZ3Ro
OjpjcmVhdGUodGhpcywgU1ZHTGVuZ3RoTW9kZTo6V2lkdGgsICIwJSIpIH07CkBAIC05MCwxMiAr
OTMsNiBAQCBpbmxpbmUgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OmludmFsaWRhdGUoKQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFu
ZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwcmltaXRpdmVSZW5kZXJlcik7CiB9CiAKLWlu
bGluZSB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCi17Ci0gICAg
aWYgKGF1dG8qIHByaW1pdGl2ZVJlbmRlcmVyID0gcmVuZGVyZXIoKSkKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUqPihwcmltaXRpdmVSZW5kZXJl
ciktPnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAKaW5kZXggMTBjODg0MjljNzI0
MDNkY2VkM2EzZjdlYTQwNjAwYjU3NDcwM2NlOC4uNDE4NDAyYmIwMWFkOGIzMGYxMDE3OWNkMWYw
Y2EzZGZmOThkNDMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZS5jcHAKQEAgLTMxLDE1ICszMSwxNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlKCkKLSAgICA6IG1fYWxpZ24oU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlN
SUQpCi0gICAgLCBtX21lZXRPclNsaWNlKFNWR19NRUVUT1JTTElDRV9NRUVUKQorU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU3RyaW5nVmll
dyB2YWx1ZSkKIHsKKyAgICBwYXJzZSh2YWx1ZSk7CiB9CiAKLVNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1ZpZXcgdmFsdWUpCitT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBhbGlnbiwgU1ZHTWVldE9yU2xpY2VUeXBlIG1lZXRP
clNsaWNlKQorICAgIDogbV9hbGlnbihhbGlnbikKKyAgICAsIG1fbWVldE9yU2xpY2UobWVldE9y
U2xpY2UpCiB7Ci0gICAgcGFyc2UodmFsdWUpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnNldEFsaWduKHVuc2lnbmVkIHNob3J0IGFsaWduKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCmlu
ZGV4IDUxNDBmNjlkZjgyNzZiNWU3NDM2YjI4ZmQ1NGM4MzE3YzI5OWFiMzAuLjA5ZGM0NDc4NGQ3
NzI1OTljYWNhYjAxN2FjMGNmMzBjMjU5YmEyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgKQEAgLTUxLDggKzUxLDkgQEAgcHVibGlj
OgogICAgICAgICBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UgPSAyCiAgICAgfTsKIAotICAgIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgpOworICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSgpID0gZGVmYXVsdDsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU3RyaW5nVmll
dyk7CisgICAgV0VCQ09SRV9FWFBPUlQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9UeXBlLCBTVkdNZWV0T3JTbGljZVR5cGUpOwogCiAgICAgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0QWxpZ24odW5zaWduZWQgc2hvcnQpOwogICAgIHVuc2lnbmVkIHNob3J0
IGFsaWduKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbjsgfQpAQCAtNzAsMTMgKzcxLDM5IEBAIHB1
YmxpYzoKIAogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0g
ICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgbV9hbGlnbjsKLSAgICBTVkdNZWV0T3JTbGlj
ZVR5cGUgbV9tZWV0T3JTbGljZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBkZWNvZGUoRGVjb2Rl
ciYpOwogCitwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgcGFyc2VJbnRlcm5hbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiwgYm9v
bCB2YWxpZGF0ZSk7CisKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBtX2FsaWduIHsg
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQgfTsKKyAgICBTVkdNZWV0T3JTbGljZVR5
cGUgbV9tZWV0T3JTbGljZSB7IFNWR19NRUVUT1JTTElDRV9NRUVUIH07CiB9OwogCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9hbGlnbjsKKyAg
ICBlbmNvZGVyIDw8IG1fbWVldE9yU2xpY2U7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+
CitzdGQ6Om9wdGlvbmFsPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlPiBhbGlnbjsKKyAgICBkZWNvZGVyID4+
IGFsaWduOworICAgIGlmICghYWxpZ24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPFNWR01lZXRPclNsaWNlVHlwZT4gbWVldE9yU2xpY2U7CisgICAg
ZGVjb2RlciA+PiBtZWV0T3JTbGljZTsKKyAgICBpZiAoIW1lZXRPclNsaWNlKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSgqYWxpZ24sICptZWV0T3JTbGljZSk7Cit9CisKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1By
b3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewogICAgIHN0YXRpYyBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlKCk7IH0KICAgICBzdGF0aWMgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgcmV0dXJuIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShzdHJpbmcpOyB9CkBAIC04NSwzICsxMTIsMzUgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlPiB7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGU+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlLAorCisgICAgICAgIFdlYkNvcmU6OlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fVU5LTk9X
TiwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJF
U0VSVkVBU1BFQ1RSQVRJT19OT05FLAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOLAorICAgICAgICBX
ZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX1hNSURZTUlOLAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlOLAorICAgICAgICBXZWJDb3JlOjpT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5Z
TUlELAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlELAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlELAorICAg
ICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX1hNSU5ZTUFYLAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYLAorICAgICAgICBXZWJD
b3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNQVhZTUFYCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdNZWV0T3JTbGljZVR5cGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR01lZXRPclNsaWNlVHlwZSwKKworICAgICAgICBXZWJD
b3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19NRUVUT1JTTElDRV9VTktOT1dO
LAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19NRUVU
T1JTTElDRV9NRUVULAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWU6OlNWR19NRUVUT1JTTElDRV9TTElDRQorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAKaW5kZXggMzg1YWYyOTA4NDhhM2QwYjgzZjEyYWM5NjE5ZTZiZjk2YzlmMjM5Ni4uMzlh
Y2RjNGQ4NzMxOGZmYWM1OWU1YjE0NTYwYTIzNzVmYjA0YjVmNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTMsNiArMyw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIzLDEzMCArMjQsOTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTVkdGRUltYWdlLmgiCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZp
bHRlclJlc3VsdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJl
bmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAi
U1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwg
UmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1h
Z2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHBy
ZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFNvdXJjZUlt
YWdlJiYgc291cmNlSW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJl
c2VydmVBc3BlY3RSYXRpbykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKFdU
Rk1vdmUoc291cmNlSW1hZ2UpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLUZFSW1hZ2U6
OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJp
bmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3Bl
Y3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwg
bV90cmVlU2NvcGUoJnRyZWVTY29wZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJbWFnZTo6RkVJ
bWFnZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6
RkVJbWFnZSkKKyAgICAsIG1fc291cmNlSW1hZ2UoV1RGTW92ZShzb3VyY2VJbWFnZSkpCiAgICAg
LCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVm
PEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRy
PEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKQorRmxvYXRSZWN0IEZFSW1hZ2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7
Ci19CisgICAgYXV0byBpbWFnZVJlY3RPZlNvdXJjZUltYWdlID0gV1RGOjptYWtlVmlzaXRvcigK
KyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBhdXRv
IGRyYXdpbmdSZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOworICAgICAgICAgICAgYXV0byBzcmNS
ZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH07CisgICAgICAgICAgICBtX3By
ZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkcmF3aW5nUmVjdCwgc3JjUmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGRy
YXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgICAgICB9LAorICAgICAgICBbJl0o
Y29uc3QgUmVmPEltYWdlQnVmZmVyPiYpIHsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeS5j
bGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAg
IH0KKyAgICApOwogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5j
ZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJl
ZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUs
IGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdChpbWFn
ZVJlY3RPZlNvdXJjZUltYWdlLCBtX3NvdXJjZUltYWdlKTsKIH0KIAotdm9pZCBGRUltYWdlOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitib29sIEZFSW1hZ2U6OmFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9
IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAg
ICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2Vy
dmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBl
bHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQot
ICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJl
bmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLQotICAgIGlmIChjbGlw
c1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19
CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICgh
b3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0
ID0gb3V0cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGF1dG8mIG91dHB1dENvbnRleHQg
PSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIAorICAgIGF1dG8gZHJhd1NvdXJjZUltYWdl
ID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdl
KSB7CisgICAgICAgICAgICBhdXRvIHNyY1JlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5z
aXplKCkgfTsKKyAgICAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0
KGltYWdlUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5t
YXBJbWFnZVJlY3QoaW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICAgICAg
b3V0cHV0Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCwgc3JjUmVjdCk7CisgICAg
ICAgIH0sCisgICAgICAgIFsmXShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikg
eworICAgICAgICAgICAgaW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlUmVj
dCwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICAgICAgICAgIG91dHB1dENvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIH0s
CisgICAgICAgIFsmXShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgKTsKIAotUmVuZGVyRWxlbWVu
dCogRkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fdHJl
ZVNjb3BlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHRhcmdldCA9IFNWR1VS
SVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcobV9ocmVmLCAqbV90cmVlU2Nv
cGUpOwotICAgIGlmICghaXM8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gdGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7Cisg
ICAgc3RkOjp2aXNpdChkcmF3U291cmNlSW1hZ2UsIG1fc291cmNlSW1hZ2UpOworICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitUZXh0
U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBG
aWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpOwotICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGlu
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlcigpLmFi
c29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0K
LSAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1Jl
Y3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIGVsc2UgewotICAgICAgICBzcmNSZWN0
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9w
cmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwotICAg
IH0KLQotICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxv
Y2F0aW9uKCk7Ci0gICAgZGVzdFJlY3QubW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExv
Y2F0aW9uLnkoKSk7Ci0KLSAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKLQotICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAg
ICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOwotCi0gICAgICAgIFJlZlB0
ciBjb250ZXh0Tm9kZSA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkp
OwotICAgICAgICBpZiAoY29udGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7Ci0gICAg
ICAgICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoY29udGV4dE5vZGUuZ2V0KCkp
OwotICAgICAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKLQotICAgICAgICAgICAgLy8g
SWYgd2UncmUgcmVmZXJlbmNpbmcgYW4gZWxlbWVudCB3aXRoIHBlcmNlbnRhZ2UgdW5pdHMsIGVn
LiA8cmVjdCB3aXRoPSIzMCUiPiB0aG9zZSB2YWx1ZXMgd2VyZSByZXNvbHZlZCBhZ2FpbnN0IHRo
ZSB2aWV3cG9ydC4KLSAgICAgICAgICAgIC8vIEJ1aWxkIHVwIGEgdHJhbnNmb3JtYXRpb24gdGhh
dCBtYXBzIGZyb20gdGhlIHZpZXdwb3J0IHNwYWNlIHRvIHRoZSBmaWx0ZXIgcHJpbWl0aXZlIHN1
YnJlZ2lvbi4KLSAgICAgICAgICAgIGlmIChsZW5ndGhDb250ZXh0LmRldGVybWluZVZpZXdwb3J0
KHZpZXdwb3J0U2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5jb25jYXRDVE0obWFrZU1h
cEJldHdlZW5SZWN0cyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB2aWV3cG9ydFNpemUpLCBkZXN0
UmVjdCkpOworICAgIGF1dG8gc291cmNlSW1hZ2VTaXplID0gV1RGOjptYWtlVmlzaXRvcigKKyAg
ICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICByZXR1cm4g
aW1hZ2UtPnNpemUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZUJ1
ZmZlcj4mIGltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICByZXR1cm4gRmxvYXRTaXplKGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CiAgICAgICAgIH0KKyAgICApOwogCi0g
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0gICAgICAgIFNW
R1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQoY29udGV4dCwgKnJlbmRl
cmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGF1dG8gaW1hZ2VTaXplID0gc3RkOjp2aXNpdChzb3VyY2VJbWFnZVNpemUsIG1fc291cmNlSW1h
Z2UpOwogCi0gICAgY29udGV4dC5kcmF3SW1hZ2UoKm1faW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0
KTsKLX0KLQotVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAotewot
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemU7Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIGltYWdl
U2l6ZSA9IG1faW1hZ2UtPnNpemUoKTsKLSAgICBlbHNlIGlmIChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIGltYWdlU2l6ZSA9IGVuY2xvc2lu
Z0ludFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLnNpemUo
KTsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUltYWdlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIGlt
YWdlLXNpemU9XCIiIDw8IGltYWdlU2l6ZS53aWR0aCgpIDw8ICJ4IiA8PCBpbWFnZVNpemUuaGVp
Z2h0KCkgPDwgIlwiXVxuIjsKICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgZHVtcCBhbHNvIG9i
amVjdCByZXR1cm5lZCBieSBTVkdGRUltYWdlOjppbWFnZSgpID8KICAgICByZXR1cm4gdHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5k
ZXggYWMxNjBlZGNlN2MwZTBhMDY3YmRlZmJkNzA3ZjJhYmU1NTkwODFiNi4uNmY5Y2U5OTgwNGU4
ZmEyM2E0MWNlNTJhNDRjZTRlMjQ2MTIzOWY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjMsNDEgKzI0LDgwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBJbWFnZTsKLWNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBUcmVlU2NvcGU7CiAK
IGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1h
Z2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVm
PEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgdXNp
bmcgU291cmNlSW1hZ2UgPSBzdGQ6OnZhcmlhbnQ8CisgICAgICAgIFJlZjxJbWFnZT4sCisgICAg
ICAgIFJlZjxJbWFnZUJ1ZmZlcj4sCisgICAgICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cgorICAgID47CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCB+RkVJbWFnZSgpID0gZGVmYXVsdDsK
LSAgICBGRUltYWdlKEZpbHRlciYsIFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYpOwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGUoU291cmNlSW1hZ2UmJiwgY29uc3Qg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisKKyAgICBjb25zdCBTb3VyY2VJbWFnZSYg
c291cmNlSW1hZ2UoKSBjb25zdDsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVJbWFnZSI7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOwog
Ci0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9Citwcml2YXRlOgorICAgIEZFSW1hZ2UoU291
cmNlSW1hZ2UmJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAgICBS
ZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICAvLyBGRUltYWdl
IHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQorICAg
IHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
KSBvdmVycmlkZSB7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7
Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIGZpbmFsOwotICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZp
bHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICAvLyBtX3RyZWVTY29wZSB3
aWxsIG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0gICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7
IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVmOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QgZmluYWw7CisKKyAgICBTb3VyY2VJbWFnZSBtX3NvdXJjZUltYWdlOwogICAgIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiB9OwogCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRUltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKK3sKKyAgICBhdXRvIHNvdXJjZUltYWdlRW5jb2RlID0gV1RGOjptYWtlVmlz
aXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpKQorICAgICAgICAg
ICAgICAgIGVuY29kZXIgPDwgbmF0aXZlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpOworICAgICAgICB9LAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlQnVmZmVyPiYgaW1h
Z2VCdWZmZXIpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaW1hZ2VCdWZmZXItPnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpOworICAgICAgICB9LAorICAgICAgICBbJl0oUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAg
ICAgICAgZW5jb2RlciA8PCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgIH0K
KyAgICApOworCisgICAgc3RkOjp2aXNpdChzb3VyY2VJbWFnZUVuY29kZSwgbV9zb3VyY2VJbWFn
ZSk7CisgICAgZW5jb2RlciA8PCBtX3ByZXNlcnZlQXNwZWN0UmF0aW87Cit9CisKK3RlbXBsYXRl
PGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUltYWdlPj4gRkVJbWFnZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllcjsKKyAgICBkZWNvZGVyID4+IGltYWdlSWRl
bnRpZmllcjsKKyAgICBpZiAoIWltYWdlSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
PiBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGRlY29kZXIgPj4gcHJlc2VydmVBc3BlY3RSYXRp
bzsKKyAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKCppbWFnZUlkZW50aWZpZXIsICpw
cmVzZXJ2ZUFzcGVjdFJhdGlvKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJbWFnZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYw
MzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjc2ZjNiNGZhZDM0OWFhMjNiMWI2M2Nl
NTcyMWQyOTZjYjBlNjNjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1
ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6
OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wg
ZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBt
X2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24p
Ci0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9m
aWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RC
Qm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVs
ZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGJ1aWx0aW5F
ZmZlY3RzID0geworICAgICAgICBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSwKKyAgICAgICAgU291
cmNlQWxwaGE6OmNyZWF0ZSgpCisgICAgfTsKKworICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRl
cjsKKyAgICBhdXRvIFtmaWx0ZXJFZmZlY3RzLCBleHByZXNzaW9uXSA9IGJ1aWxkZXIuYnVpbGRF
ZmZlY3RzKGZpbHRlckVsZW1lbnQsIGJ1aWx0aW5FZmZlY3RzKTsKKyAgICBpZiAoZmlsdGVyRWZm
ZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNy
ZWF0ZShXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RG
TW92ZShleHByZXNzaW9uKSk7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3Jl
YXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Np
b24mJiBleHByZXNzaW9uKQoreworICAgIEZpbHRlckVmZmVjdFZlY3RvciBidWlsdGluRWZmZWN0
cyA9IHsgU291cmNlR3JhcGhpYzo6Y3JlYXRlKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKSB9Owor
ICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZShidWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVy
RWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbikpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBT
VkdGaWx0ZXI6OmNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmls
dGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4
cHJlc3Npb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIoV1RGTW92ZShi
dWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lv
bikpKTsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVp
bHRpbkVmZmVjdHMsIEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRl
ckV4cHJlc3Npb24mJiBleHByZXNzaW9uKQorICAgIDogRmlsdGVyKFR5cGU6OlNWR0ZpbHRlcikK
KyAgICAsIG1fYnVpbHRpbkVmZmVjdHMoV1RGTW92ZShidWlsdGluRWZmZWN0cykpCisgICAgLCBt
X2ZpbHRlckVmZmVjdHMoV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSkKKyAgICAsIG1fZXhwcmVzc2lv
bihXVEZNb3ZlKGV4cHJlc3Npb24pKQoreworICAgIEFTU0VSVChtX2J1aWx0aW5FZmZlY3RzLnNp
emUoKSA9PSAyKTsKKyAgICBBU1NFUlQoIW1fZmlsdGVyRWZmZWN0cy5pc0VtcHR5KCkpOworICAg
IEFTU0VSVCghbV9leHByZXNzaW9uLmlzRW1wdHkoKSk7Cit9CisKK1JlZjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZpbHRlcjo6aW5kZXhlZEVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSwgdW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbiA9IGFic29sdXRl
VHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyUmVnaW9uKTsKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZl
Y3RzWzBdOworCisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBo
YSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHNbMV07CisKKyAgICBBU1NFUlQoaW5k
ZXggPCBtX2ZpbHRlckVmZmVjdHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Rz
W2luZGV4XTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjpsYXN0RWZmZWN0
KCkgY29uc3QKK3sKKyAgICBpZiAobV9leHByZXNzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA9IG1fZXhwcmVzc2lv
bi5sYXN0KCk7CisgICAgcmV0dXJuIGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOwogfQogCi1G
bG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNp
emUpIGNvbnN0Citib29sIFNWR0ZpbHRlcjo6YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZp
bHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBj
b25zdAogewotICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAq
IG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIGlmICghbGFzdEVmZmVjdCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IHNvdXJjZUltYWdl
OworICAgIGlmICghc3RhY2suaXNFbXB0eSgpKQorICAgICAgICBzb3VyY2VJbWFnZSA9IHN0YWNr
LnRha2VMYXN0KCk7CisKKyAgICBBU1NFUlQoc3RhY2suaXNFbXB0eSgpKTsKKworICAgIGlmIChh
dXRvIGltYWdlID0gcmVzdWx0LmltYWdlcygpLmdldCh7ICp0aGlzIH0pKSB7CisgICAgICAgIHN0
YWNrLmFwcGVuZCh7ICppbWFnZSB9KTsKKyAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KIAot
ICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJz
b2x1dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9maWx0ZXJSZWdpb24uc2l6ZSgpOworICAgIGZv
ciAoYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBh
dXRvIGVmZmVjdCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOworICAgICAgICBhdXRvIGJv
dW5kYXJ5U2V0ID0gZ2VvbWV0cnkuYm91bmRhcnlTZXQodHlwZSwgaW5kZXgpOworCisgICAgICAg
IGlmIChlZmZlY3QtPnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMp
IHsKKyAgICAgICAgICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBzdGFjay5hcHBlbmQoeyAqc291cmNlSW1hZ2UgfSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIWVmZmVjdC0+YXBwbHkocmVzdWx0LCBzdGFjaywgZ2Vv
bWV0cnksIGJvdW5kYXJ5U2V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0
JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hN
b2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lv
biwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBhdXRvIGVuZCA9IG1fZXhwcmVzc2lvbi5yZW5kKCk7
CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2V4cHJlc3Npb24ucmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdID0gKml0OworICAgICAg
ICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQorICAgICAgICAg
ICAgKytpdDsKKworICAgICAgICBhdXRvIGVmZmVjdCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5k
ZXgpOworICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cywgbGV2
ZWwpOworICAgICAgICBlZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2Vu
dGF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmgKaW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2RhNDkzMDJmNWFlYTBmYjE3MDBjZi4uMzM0NWI4
ZTAwNmRmMWZjMTNiYWMwYmFjNWU3ZTIzYjEyOGMyNzhhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjAsNDEgKzIxLDQ0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1Jl
Zi5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RW
ZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFeHByZXNzaW9uLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKKwogY2xhc3MgU1ZHRmlsdGVyIGZp
bmFsIDogcHVibGljIEZpbHRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGJvb2wpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVy
RWxlbWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBj
cmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVz
c2lvbiYmKTsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdDsK
IAotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247IH0KKyAgICBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGZpbHRlckVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
ckVmZmVjdHM7IH0KKyAgICBjb25zdCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7Citwcml2YXRlOgorICAgIHN0
YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRp
bkVmZmVjdHMsIEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4
cHJlc3Npb24mJik7CiAKLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KLSAgICBGbG9hdFJl
Y3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94
OyB9CisgICAgU1ZHRmlsdGVyKEZpbHRlckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZlY3RzLCBG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYp
OwogCi0gICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
KyAgICBSZWY8RmlsdGVyRWZmZWN0PiBpbmRleGVkRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSwg
dW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFNWR0ZpbHRlcihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29s
dXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0Jv
eCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOwor
ICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZpbmFsOworCisgICAgVGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0IGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
OwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fi
c29sdXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKLSAgICBi
b29sIG1fZWZmZWN0QkJveE1vZGU7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1fYnVpbHRpbkVm
ZmVjdHM7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1fZmlsdGVyRWZmZWN0czsKKyAgICBTVkdG
aWx0ZXJFeHByZXNzaW9uIG1fZXhwcmVzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTVkdGaWx0ZXIpCiAg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJl
dHVybiBmaWx0ZXIuaXNTVkdGaWx0ZXIoKTsgfQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlz
U1ZHRmlsdGVyKCk7IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAKaW5kZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uMTdkNDM4
OTk1MzJlOWJkYzExMjg3YzFjNThhOWJlNTlmNTgxODgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsODcgKzIxLDE4NCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKIAot
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgor
I2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1
ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZU51bWJlcnMuaD4KKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJf
U1JHQikKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1TVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCitWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+IFNWR0ZpbHRl
ckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRlckVsZW1lbnQm
IGZpbHRlckVsZW1lbnQsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7Cisg
ICAgYXV0byBwcmltaXRpdmVVbml0cyA9IGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKTsK
KyAgICBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsK
KworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAg
YXV0byBib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVtZW50LCBwcmltaXRp
dmVVbml0cywgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAKKyAgICAgICAgT3B0aW9uU2V0
PEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncz4gZmxhZ3M7CisgICAgICAgIGlmIChlZmZlY3RFbGVt
ZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRk
KEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVs
ZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCisgICAgICAgICAgICBmbGFncy5h
ZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNZKTsKKworICAgICAgICBpZiAoZWZmZWN0
RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCisgICAgICAgICAgICBm
bGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAgICAgICAg
aWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKKyAg
ICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc0hlaWdodCk7
CisKKyAgICAgICAgZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzLmFwcGVuZCh7IGJvdW5kYXJpZXMs
IGZsYWdzIH0pOworICAgIH0KKworICAgIHJldHVybiBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7
Cit9CisKK3N0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9u
PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVy
RWxlbWVudCwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cykKK3sKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOworICAgIGlm
IChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgc2V0dXBCdWlsdGluRWZmZWN0cyhidWlsdGluRWZm
ZWN0cyk7CisKKyAgICBGaWx0ZXJFZmZlY3RzSW5wdXRzIGVmZmVjdHNJbnB1dHM7CisgICAgaWYg
KCFidWlsZEVmZmVjdHMoZmlsdGVyRWxlbWVudCwgZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBpZiAoIWJ1aWxkRXhwcmVzc2lvbihlZmZlY3RzSW5wdXRzKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB7IFdURk1vdmUobV9maWx0ZXJFZmZlY3Rz
KSwgV1RGTW92ZShtX2V4cHJlc3Npb24pIH07Cit9CisKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
c2V0dXBCdWlsdGluRWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZl
Y3RzKQoreworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKEZpbHRlckVmZmVjdDo6c291cmNlR3Jh
cGhpY05hbWUoKSwgYnVpbHRpbkVmZmVjdHNbMF0pOworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRk
KEZpbHRlckVmZmVjdDo6c291cmNlQWxwaGFOYW1lKCksIGJ1aWx0aW5FZmZlY3RzWzFdKTsKK30K
KworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KEZpbHRlckVmZmVjdDo6
c291cmNlR3JhcGhpY05hbWUoKSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRl
ckJ1aWxkZXI6OnNvdXJjZUFscGhhKCkgY29uc3QKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFk
ZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVp
bHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpj
cmVhdGUoKnNvdXJjZUdyYXBoaWMpKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOworICAgIHJl
dHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgp
KTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYgaWQs
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YWRk
TmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgUmVmPEZpbHRlckVmZmVjdD4gZWZm
ZWN0KQogewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZmZWN0ID0g
ZWZmZWN0OworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBtX2xhc3RFZmZlY3Qg
PSBlZmZlY3QucHRyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9idWls
dGluRWZmZWN0cy5jb250YWlucyhpZCkpCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFp
bnMobmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdDsK
LSAgICBtX25hbWVkRWZmZWN0cy5zZXQoaWQsIG1fbGFzdEVmZmVjdCk7CisgICAgbV9sYXN0RWZm
ZWN0ID0gZWZmZWN0LnB0cigpOworICAgIG1fbmFtZWRFZmZlY3RzLnNldChuYW1lLCBXVEZNb3Zl
KGVmZmVjdCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpn
ZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmIGlkKSBjb25zdAorUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFt
ZSkgY29uc3QKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CisgICAgaWYgKG5hbWUuaXNFbXB0
eSgpKSB7CiAgICAgICAgIGlmIChtX2xhc3RFZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4gbV9s
YXN0RWZmZWN0OwogCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCkpOworICAgICAgICByZXR1cm4gc291cmNlR3JhcGhpYygpOwog
ICAgIH0KIAotICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAgICAg
cmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KGlkKTsKKyAgICBpZiAobV9idWlsdGluRWZmZWN0
cy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KG5h
bWUpOwogCi0gICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCk7CisgICAgcmV0dXJuIG1f
bmFtZWRFZmZlY3RzLmdldChuYW1lKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphcHBl
bmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBlZmZlY3Qs
IFJlbmRlck9iamVjdCogb2JqZWN0KQorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFD
RV9MSU5FQVJfU1JHQikKK3N0YXRpYyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRlcnBvbGF0
aW9uRm9yRWxlbWVudChTVkdFbGVtZW50JiBlbGVtZW50KQogewotICAgIC8vIFRoZSBlZmZlY3Qg
bXVzdCBiZSBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1fZWZm
ZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAh
bV9lZmZlY3RSZW5kZXJlci5jb250YWlucyhvYmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5j
ZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVy
T2ZJbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAgIC8v
IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhZGQgdGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdpY2Uu
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kp
Ci0gICAgICAgIGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRkKGVm
ZmVjdC5nZXQoKSk7Ci0KLSAgICAvLyBJZiBvYmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0aGUg
ZWxlbWVudCBpc24ndCBhdHRhY2hlZCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2ggaW4g
dHVybiBtZWFuIHRoYXQgY2VydGFpbiB0eXBlcyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QKLSAg
ICAvLyB3b3JrICh0aGUgTGF5b3V0T2JqZWN0IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdpbGwg
bm90IGJlIGRlZmluZWQpLgotICAgIGlmIChvYmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVuZGVy
ZXIuYWRkKG9iamVjdCwgZWZmZWN0LmdldCgpKTsKKyAgICBpZiAoYXV0byByZW5kZXJlciA9IGVs
ZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0
eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpOworCisgICAgLy8gVHJ5IHRvIGRldGVy
bWluZSB0aGUgcHJvcGVydHkgdmFsdWUgZnJvbSB0aGUgY29tcHV0ZWQgc3R5bGUuCisgICAgaWYg
KGF1dG8gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKCZlbGVtZW50KS5wcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycykpIHsKKyAgICAgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIENvbG9y
SW50ZXJwb2xhdGlvbjo6QXV0bzsKIH0KKyNlbmRpZgogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6
OmNsZWFyRWZmZWN0cygpCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0cyhTVkdG
aWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3Rz
SW5wdXRzKQogewotICAgIG1fbGFzdEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9uYW1lZEVmZmVj
dHMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAgICBtX2VmZmVj
dFJlbmRlcmVyLmNsZWFyKCk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKyAgICBlZmZlY3Rz
SW5wdXRzLnNldCgqc291cmNlQWxwaGEoKSwgRmlsdGVyRWZmZWN0VmVjdG9yIHsgKnNvdXJjZUdy
YXBoaWMoKSB9KTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZU
eXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkp
IHsKKyAgICAgICAgYXV0byBbZWZmZWN0LCBpbnB1dHNdID0gZWZmZWN0RWxlbWVudC5idWlsZCgq
dGhpcyk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorICAgICAg
ICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xv
ckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CisjZW5k
aWYKKyAgICAKKyAgICAgICAgZWZmZWN0c0lucHV0cy5zZXQoeyAqZWZmZWN0IH0sIFdURk1vdmUo
aW5wdXRzKSk7CisgICAgICAgIGFkZE5hbWVkRWZmZWN0KGVmZmVjdEVsZW1lbnQucmVzdWx0KCks
IHsgKmVmZmVjdCB9KTsKKworICAgICAgICBtX2ZpbHRlckVmZmVjdHMuYXBwZW5kKGVmZmVjdC5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBT
VkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZl
Y3QpCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8Rmls
dGVyRWZmZWN0PiYgZWZmZWN0LCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5w
dXRzLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCB1bnNpZ25lZCBsZXZlbCkKIHsKLSAgICBp
ZiAoIWVmZmVjdC0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBBIGN5Y2xl
IGlzIGRldGVjdGVkLgorICAgIGlmIChzdGFjay5jb250YWlucyhlZmZlY3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWZmZWN0LnB0cigpID09IHNvdXJjZUdyYXBoaWMoKSkK
KyAgICAgICAgbV9leHByZXNzaW9uLmluc2VydCgwLCB7IEZpbHRlckVmZmVjdDo6VHlwZTo6U291
cmNlR3JhcGhpYywgMCwgbGV2ZWwgfSk7CisgICAgZWxzZSBpZiAoZWZmZWN0LnB0cigpID09IHNv
dXJjZUFscGhhKCkpCisgICAgICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUFscGhhLCAxLCBsZXZlbCB9KTsKKyAgICBlbHNlIHsKKyAgICAgICAg
QVNTRVJUKG1fZmlsdGVyRWZmZWN0cy5jb250YWlucyhlZmZlY3QpKTsKKyAgICAgICAgbV9leHBy
ZXNzaW9uLmluc2VydCgwLCB7IGVmZmVjdC0+dHlwZSgpLCBtX2ZpbHRlckVmZmVjdHMuZmluZChl
ZmZlY3QpLCBsZXZlbCB9KTsKKyAgICB9CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKKwor
ICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3QpKSB7
CisgICAgICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5wdXRz
LCBzdGFjaywgbGV2ZWwgKyAxKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAK
LSAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChzdGFjay5sYXN0KCkucHRyKCkgPT0gZWZmZWN0LnB0cigpKTsKKworICAg
IHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdGaWx0
ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZm
ZWN0c0lucHV0cykKK3sKKyAgICBpZiAoIW1fbGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOworICAgIEZpbHRl
ckVmZmVjdFZlY3RvciBzdGFjazsKKyAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uKHsgKm1fbGFz
dEVmZmVjdCB9LCBlZmZlY3RzSW5wdXRzLCBzdGFjaywgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0
NjBjZTk3ZmE3Li5lZWU4ZGQ1YThkNzBiNzU2OTBjMThjNmUzYTY2MDM2MGZlOTk4NGUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4
IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjAsNjggKzIxLDQ1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OwogCiBjbGFzcyBTVkdGaWx0
ZXJCdWlsZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0
eXBlZGVmIEhhc2hTZXQ8RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OworICAgIFNWR0Zp
bHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIHN0YXRpYyBWZWN0b3I8RmlsdGVyQm91
bmRhcnlTZXQ+IGJ1aWxkRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRlckVsZW1lbnQm
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KTsKIAotICAgIHZvaWQgc2V0VGFy
Z2V0Qm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3gg
PSByOyB9Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRCb3VuZGluZ0JveDsgfQotICAgIAotICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzOyB9Ci0g
ICAgdm9pZCBzZXRQcmltaXRpdmVVbml0cyhTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHVuaXRz
KSB7IG1fcHJpbWl0aXZlVW5pdHMgPSB1bml0czsgfQorICAgIHN0ZDo6dHVwbGU8RmlsdGVyRWZm
ZWN0VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9uPiBidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxl
bWVudCYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpOwogCi0gICAg
dm9pZCBhZGQoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBuYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1l
KSBjb25zdDsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGdldEVmZmVjdEJ5SWQoY29uc3Qg
QXRvbVN0cmluZyYpIGNvbnN0OwotICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdEVmZmVjdC5nZXQoKTsgfQotCi0gICAgdm9pZCBhcHBlbmRFZmZlY3RU
b0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiwgUmVuZGVyT2JqZWN0Kik7
Citwcml2YXRlOgorICAgIHVzaW5nIEZpbHRlckVmZmVjdHNJbnB1dHMgPSBIYXNoTWFwPFJlZjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PjsKIAotICAgIGlubGluZSBG
aWx0ZXJFZmZlY3RTZXQmIGVmZmVjdFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCi0g
ICAgewotICAgICAgICAvLyBPbmx5IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlz
IGJ1aWxkZXIuCi0gICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZm
ZWN0KSk7Ci0gICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT52
YWx1ZTsKLSAgICB9CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNv
dXJjZUdyYXBoaWMoKSBjb25zdDsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VBbHBo
YSgpIGNvbnN0OwogCi0gICAgLy8gUmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9m
IGEgZmlsdGVyIGR1cmluZyBhbiBzdmdBdHRyaWJ1dGVDaGFuZ2VkLgotICAgIGlubGluZSBGaWx0
ZXJFZmZlY3QqIGVmZmVjdEJ5UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgcmV0dXJu
IG1fZWZmZWN0UmVuZGVyZXIuZ2V0KG9iamVjdCk7IH0KKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0
KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+KTsKKyAgICBib29sIGJ1
aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi0g
ICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShG
aWx0ZXJFZmZlY3QqKTsKKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVy
RWZmZWN0PiYsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmLCBGaWx0ZXJFZmZlY3RWZWN0b3Im
IHN0YWNrLCB1bnNpZ25lZCBsZXZlbCk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3Qg
RmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi1wcml2YXRlOgotICAgIGlubGluZSB2b2lkIGFkZEJ1
aWx0aW5FZmZlY3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9idWls
dGluRWZmZWN0cy52YWx1ZXMoKSkKLSAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQo
ZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0gICAgfQotCi0gICAgSGFzaE1hcDxBdG9tU3Ry
aW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKLSAgICBIYXNoTWFw
PEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKLSAgICAv
LyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIgZWZmZWN0
cywKLSAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KLSAgICBI
YXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZmZWN0UmVm
ZXJlbmNlczsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZpbHRlckVmZmVjdCo+IG1fZWZm
ZWN0UmVuZGVyZXI7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1fZmlsdGVyRWZmZWN0czsKKyAg
ICBTVkdGaWx0ZXJFeHByZXNzaW9uIG1fZXhwcmVzc2lvbjsKIAorICAgIEhhc2hNYXA8QXRvbVN0
cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7CisgICAgSGFzaE1hcDxB
dG9tU3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7CiAgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5k
aW5nQm94OwotICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0cyB7
IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSB9OwogfTsKLSAgICAK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJi
NTAyYWRhOTYyNzBlNTAxOTMyYzZjMDdiNWY0Nzk1NjI0MDNiNDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9u
LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBTVkdG
aWx0ZXJFeHByZXNzaW9uID0gVmVjdG9yPHN0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0OjpUeXBlLCB1
bnNpZ25lZCwgdW5zaWduZWQ+PjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDdmNjNmOTZjMTVkM2U0MmNmOTQ4YjhkZmJhOTFmNWIx
ZjQxZDFjMTguLjA5NDgyYmNjYzVkMGUxZjUzNmJlOTViY2VjZTMwOTI0YzUyMzdlOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTMwMyw2ICszMDMsMjAgQEAgdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3UGF0dGVybldpdGhRdWFsaWZpZWRJZGVudGlmaWVy
KFF1YWxpZmllZFJlbmQKICAgICByZXNvdXJjZUNhY2hlKCkucmVjb3JkUmVzb3VyY2VVc2UoaW1h
Z2VJZGVudGlmaWVyKTsKIH0KIAordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3
RmlsdGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXI+IGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KQoreworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgaWYg
KGltYWdlQnVmZmVySWRlbnRpZmllcikgeworICAgICAgICBpbWFnZUJ1ZmZlciA9IHJlc291cmNl
Q2FjaGUoKS5jYWNoZWRJbWFnZUJ1ZmZlcih7ICppbWFnZUJ1ZmZlcklkZW50aWZpZXIsIG1fd2Vi
UHJvY2Vzc0lkZW50aWZpZXIgfSk7CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RHJhd0ZpbHRlckltYWdl
QnVmZmVyKGltYWdlQnVmZmVySWRlbnRpZmllciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIudGFr
ZUZpbHRlcigpLCBnZW9tZXRyeSksIGltYWdlQnVmZmVyLmdldCgpKTsKK30KKwogdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpCiB7CiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cihvcGFjaXR5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA2MmE0OTcwNmUyOGIw
MWUwYTZiODY5YmQzM2U2MjRlYzdkOGIzNjkxLi4yMmI2MzljOTQ5MzJmNzE5MWJhNjJjZmQ3OTI2
YjA3NjQ3ZGQ5MWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTM3LDYgKzM3LDEw
IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVyZW5jZTsKK30KKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CkBAIC04MCw2ICs4
NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogICAgIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJik7CiAgICAgdm9pZCBk
cmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgSVBD
OjpGaWx0ZXJSZWZlcmVuY2UsIGNvbnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Jik7CiAgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwogICAgIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluCmluZGV4IDVjMTQwOTNhM2I5YWJhMGExYmU3MjA2ODdlZmI0
NjY4YjU5NWEzNjEuLmE2ZTZhMWNiZjQ3MzJiNWYwMDM4ODU5YTYzOGMxZTgzMTViMjcwZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCkBAIC00Niw2ICs0
Niw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRl
ZCBTdHJlYW0gewogICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90
IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQogICAgIEJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzKFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbiwgV2ViQ29yZTo6RGVzdGluYXRpb25D
b2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgRW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKFdlYkNv
cmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbikKKyAgICBEcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJS
ZWZlcmVuY2UgZmlsdGVyLCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSBnZW9tZXRyeSkKICAgICBE
cmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCiAgICAgRHJh
d0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNv
cmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlv
bnMgb3B0aW9ucykKICAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6
ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVj
dCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAKaW5kZXggZjU4YzM2OTZmNTNlZmQxNTBiMWRiOTBlMzFiMzllYjU2NmI1
ZGNmYy4uNmM1MTM3YmVlOGRiMTcyMjNiYWZmNjY2NTc5OWYyYmM1YzM0NWIxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQogCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBAIC0zMDMsNiArMzA0LDM0IEBAIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXJXaXRoUXVh
bGlmaWVkSWRlbnRpCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKIH0K
IAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VC
dWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6RmlsdGVy
UmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnksCisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJlbmNlLnRha2VGaWx0ZXIoKTsKKyAg
ICAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZdKCkgeworICAg
ICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdl
QnVmZmVyKHsgaWRlbnRpZmllciwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9j
ZXNzSWRlbnRpZmllcigpIH0pOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZpbHRlcmVkSW1h
Z2UoZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKyAgICAgICAg
YXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKGlt
YWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9KTsKKyAgICAgICAgaWYgKCFi
aXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gY29udGV4dCA9IGJpdG1h
cC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlmICghY29udGV4dCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKCppbWFnZSwgRmxvYXRQ
b2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICB9KCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKK30KKwogdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuYXRpdmVJbWFn
ZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICAvLyBJbW1lZGlhdGVseSB0dXJuIHRoZSBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgKHdoaWNoIGlzIGVycm9yLXByb25lKSB0byBhIFF1YWxp
ZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4
IDMxYWQ5Mjk4OTliZGNmYjgwMGVhZWJkY2E5YjMxZjhhYTkzMGFjNDkuLjEzZjk3YmNjZDFlNWEw
YzdlN2M0NjhhYzk2OWExYzE3NGI4MjVhNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtNTks
NiArNTksMTAgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogfQogCituYW1l
c3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CkBAIC0xMDksNiArMTEzLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRTaGFyZWFi
bGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBnZXRGaWx0ZXJlZEltYWdl
Rm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBJUEM6
OkZpbHRlclJlZmVyZW5jZSYmLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOwogICAgIHZv
aWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVm
PFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggOTQ5ODg2MzA4YTM1NDY1ZGNlNWZm
YWNiY2M3YmMxYzZjNDU3YjQwYS4uNzEzNTRlZGQwNzY2MmM5N2Y2MTMyZGI0NzE3MzExZTU3ZWI4
NWE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTMxLDYg
KzMxLDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVk
IFN0cmVhbSB7CiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVy
bFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1p
bWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rv
cjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvcklt
YWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
ciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hy
b25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKKyAgICBHZXRGaWx0ZXJlZEltYWdlRm9ySW1h
Z2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVy
LCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIsIFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5IGdl
b21ldHJ5KSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNo
cm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CiAgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgTm90U3RyZWFtRW5j
b2RhYmxlCiAgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KSBOb3RTdHJlYW1F
bmNvZGFibGUKICAgICBEZWxldGVBbGxGb250cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyOWFkZWY0NGI5ZmMzMGE3N2ViZDFk
ZTM4MDExNzcwODgzMTVhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZFQmxlbmQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFQ29sb3JNYXRyaXguaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZFQ29tcG9uZW50VHJhbnNmZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZFQ29tcG9zaXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbnZvbHZlTWF0cml4Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GRURpc3BsYWNlbWVudE1hcC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRkVEcm9wU2hhZG93Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUZsb29kLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GRUdhdXNzaWFuQmx1ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVNZXJnZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRkVNb3JwaG9sb2d5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
RU9mZnNldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVUaWxlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GRVR1cmJ1bGVuY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRmlsdGVyRWZmZWN0VmVjdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGRUlt
YWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NWR0ZpbHRlckV4cHJlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUdyYXBoaWMu
aD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZpbHRlclJlZmVyZW5jZSB7CitwdWJsaWM6
CisgICAgRmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3JlOjpGaWx0ZXI+JiYgZmlsdGVyKQorICAg
ICAgICA6IG1fZmlsdGVyKFdURk1vdmUoZmlsdGVyKSkKKyAgICB7CisgICAgfQorCisgICAgUmVm
PFdlYkNvcmU6OkZpbHRlcj4gdGFrZUZpbHRlcigpIHsgcmV0dXJuIFdURk1vdmUobV9maWx0ZXIp
OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
RmlsdGVyUmVmZXJlbmNlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZUZpbHRlckVmZmVjdChjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3QmLCBFbmNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+IGRlY29kZUZpbHRlckVm
ZmVjdChEZWNvZGVyJiwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUpOworCisgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlU1ZHRmlsdGVyKGNvbnN0IFdl
YkNvcmU6OlNWR0ZpbHRlciYsIEVuY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlNWR0ZpbHRlcj4gZGVjb2RlU1ZHRmlsdGVyKERlY29k
ZXImKTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZUNT
U0ZpbHRlcihjb25zdCBXZWJDb3JlOjpDU1NGaWx0ZXImLCBFbmNvZGVyJik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpDU1NGaWx0ZXI+IGRlY29k
ZUNTU0ZpbHRlcihEZWNvZGVyJik7CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
c3RhdGljIHZvaWQgZW5jb2RlRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYsIEVuY29kZXIm
KTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OkZp
bHRlcj4gZGVjb2RlRmlsdGVyKERlY29kZXImKTsKKworICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+
IG1fZmlsdGVyOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsdGVyUmVm
ZXJlbmNlOjplbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAgQVNTRVJUKGVmZmVjdC50eXBlKCkgPj0g
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1pbmltdW0gJiYgZWZmZWN0LnR5cGUoKSA8
PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWF4aW11bSk7CisKKyAgICBlbmNvZGVy
IDw8IGVmZmVjdC50eXBlKCk7CisgICAgZW5jb2RlciA8PCBlZmZlY3Qub3BlcmF0aW5nQ29sb3JT
cGFjZSgpOworCisgICAgc3dpdGNoIChlZmZlY3QudHlwZSgpKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQmxlbmQ6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6
OkZFQmxlbmQ+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4OgorICAgICAg
ICBkb3duY2FzdDxXZWJDb3JlOjpGRUNvbG9yTWF0cml4PihlZmZlY3QpLmVuY29kZShlbmNvZGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlw
ZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcj4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9zaXRlOgorICAg
ICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUNvbXBvc2l0ZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rl
cik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFQ29udm9sdmVNYXRyaXg6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZzoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVE
aXNwbGFjZW1lbnRNYXA6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50
TWFwPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93OgorICAgICAgICBkb3du
Y2FzdDxXZWJDb3JlOjpGRURyb3BTaGFkb3c+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUZs
b29kOgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUZsb29kPihlZmZlY3QpLmVuY29kZShl
bmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6VHlwZTo6RkVHYXVzc2lhbkJsdXI6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZToKKyAgICAgICAgZG93
bmNhc3Q8V2ViQ29yZTo6RkVJbWFnZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWVyZ2U6
CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFTWVyZ2U+KGVmZmVjdCkuZW5jb2RlKGVuY29k
ZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6
OkZFTW9ycGhvbG9neT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zmc2V0OgorICAgICAg
ICBkb3duY2FzdDxXZWJDb3JlOjpGRU9mZnNldD4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
U3BlY3VsYXJMaWdodGluZzoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGRvd25jYXN0
PFdlYkNvcmU6OkZFVHVyYnVsZW5jZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdy
YXBoaWM6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlRmlsdGVyRWZmZWN0KERl
Y29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlIHR5cGUpCit7Cisg
ICAgaWYgKCEodHlwZSA+PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVt
ICYmIHR5cGUgPD0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWF4aW11bSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IG9wZXJhdGluZ0NvbG9yU3BhY2U7CisgICAgZGVjb2RlciA+PiBv
cGVyYXRpbmdDb2xvclNwYWNlOworICAgIGlmICghb3BlcmF0aW5nQ29sb3JTcGFjZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q+PiBlZmZlY3Q7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQmxlbmQ6CisgICAgICAgIGVmZmVjdCA9IFdl
YkNvcmU6OkZFQmxlbmQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJp
eDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNv
bXBvbmVudFRyYW5zZmVyOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9zaXRlOgorICAgICAgICBl
ZmZlY3QgPSBXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZl
TWF0cml4OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpkZWNv
ZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAgICAgICBicmVh
azsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVu
dE1hcDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmRlY29k
ZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVGbG9vZDoKKyAgICAgICAgZWZmZWN0ID0gV2Vi
Q29yZTo6RkVGbG9vZDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICAgICAg
ZWZmZWN0ID0gV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRlY29kZShkZWNvZGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFn
ZToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKGRlY29kZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpG
RU1lcmdlOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU1lcmdlOjpkZWNvZGUoZGVjb2Rl
cik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFTW9ycGhvbG9neToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpG
RU9mZnNldDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmc6CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZToKKyAg
ICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUoKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVUdXJidWxlbmNlOgor
ICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6
U291cmNlR3JhcGhpYzoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6
Y3JlYXRlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmIChlZmZlY3QpIHsKKyAgICAgICAgKCplZmZlY3Qp
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKCpvcGVyYXRpbmdDb2xvclNwYWNlKTsKKyAgICAgICAg
cmV0dXJuIHsgKCplZmZlY3QpLnB0cigpIH07CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5j
b2RlU1ZHRmlsdGVyKGNvbnN0IFdlYkNvcmU6OlNWR0ZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBl
bmNvZGVyKQoreworICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OlNWR0ZpbHRlcjsKKworICAgIGF1dG8mIGZpbHRlckVmZmVjdHMgPSBmaWx0ZXIuZmlsdGVyRWZm
ZWN0cygpOworICAgIGVuY29kZXIgPDwgZmlsdGVyRWZmZWN0cy5zaXplKCk7CisKKyAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IGZpbHRlckVmZmVjdHMpCisgICAgICAgIGVuY29kZUZpbHRlckVmZmVj
dChlZmZlY3QsIGVuY29kZXIpOworICAgIAorICAgIGF1dG8mIGV4cHJlc3Npb24gPSBmaWx0ZXIu
ZXhwcmVzc2lvbigpOworICAgIGVuY29kZXIgPDwgZXhwcmVzc2lvbi5zaXplKCk7CisKKyAgICBm
b3IgKGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBleHByZXNzaW9uKSB7CisgICAgICAgIGVu
Y29kZXIgPDwgdHlwZTsKKyAgICAgICAgZW5jb2RlciA8PCBpbmRleDsKKyAgICAgICAgZW5jb2Rl
ciA8PCBsZXZlbDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitSZWZQdHI8
V2ViQ29yZTo6U1ZHRmlsdGVyPiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZVNWR0ZpbHRlcihEZWNv
ZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRl
Y29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIFdlYkNvcmU6OkZpbHRlckVmZmVjdFZlY3RvciBmaWx0ZXJFZmZlY3Rz
OworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7ICsraSkgeworICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworICAg
ICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgICAgICBhdXRvIGVmZmVjdCA9IGRlY29kZUZpbHRlckVm
ZmVjdChkZWNvZGVyLCAqdHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgICAgIGZpbHRlckVmZmVjdHMuYXBwZW5kKGVmZmVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAg
aWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBXZWJD
b3JlOjpTVkdGaWx0ZXJFeHByZXNzaW9uIGV4cHJlc3Npb247CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5cGU7Cisg
ICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAK
KyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gaW5kZXg7CisgICAgICAgIGRlY29kZXIg
Pj4gaW5kZXg7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsZXZlbDsKKyAgICAgICAgZGVj
b2RlciA+PiBsZXZlbDsKKyAgICAgICAgaWYgKCFsZXZlbCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIGV4cHJlc3Npb24uYXBwZW5kKHsgKnR5cGUsICppbmRleCwgKmxl
dmVsIH0pOworICAgIH0KKworICAgIHJldHVybiBXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZShX
VEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGVDU1NGaWx0ZXIo
Y29uc3QgV2ViQ29yZTo6Q1NTRmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29kZXIpCit7Cisg
ICAgZW5jb2RlciA8PCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6Q1NTRmlsdGVyOwor
ICAgIGVuY29kZXIgPDwgZmlsdGVyLmZ1bmN0aW9ucygpLnNpemUoKTsKKyAgICAKKyAgICBmb3Ig
KGF1dG8mIGZ1bmN0aW9uIDogZmlsdGVyLmZ1bmN0aW9ucygpKSB7CisgICAgICAgIGlmIChpczxX
ZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uKSkKKyAgICAgICAgICAgIGVuY29kZVNWR0ZpbHRl
cihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uLmdldCgpKSwgZW5jb2Rlcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kZUZpbHRlckVmZmVjdChkb3duY2FzdDxX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLmdldCgpKSwgZW5jb2Rlcik7CisgICAgfQor
ICAgIAorICAgIGVuY29kZXIgPDwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJDb3JlOjpDU1NGaWx0ZXI+IEZpbHRlclJlZmVy
ZW5jZTo6ZGVjb2RlQ1NTRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRp
b25hbDxzaXplX3Q+IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSB8
fCAhKnNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVjdG9yPFJlZjxXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbj4+IGZ1bmN0aW9uczsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAg
ICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlm
ICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVTVkdGaWx0ZXIoZGVjb2RlcikpIHsK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBlZmZlY3QgPSBkZWNv
ZGVGaWx0ZXJFZmZlY3QoZGVjb2RlciwgKnR5cGUpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgZnVuY3Rpb25zLmFw
cGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorICAgIAorICAgIHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZTsKKyAgICBkZWNvZGVy
ID4+IHJlbmRlcmluZ01vZGU7CisgICAgaWYgKCFyZW5kZXJpbmdNb2RlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZShXVEZN
b3ZlKGZ1bmN0aW9ucyksICpyZW5kZXJpbmdNb2RlKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGVGaWx0ZXIoY29uc3QgV2ViQ29yZTo6
RmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAgaWYgKGlzPFdlYkNvcmU6
OkNTU0ZpbHRlcj4oZmlsdGVyKSkKKyAgICAgICAgZW5jb2RlQ1NTRmlsdGVyKGRvd25jYXN0PFdl
YkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSwgZW5jb2Rlcik7CisgICAgZWxzZQorICAgICAgICBl
bmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVyPihmaWx0ZXIpLCBlbmNv
ZGVyKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJDb3JlOjpGaWx0
ZXI+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAg
ICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6Q1NT
RmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlQ1NTRmlsdGVyKGRlY29kZXIpOworCisgICAg
aWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIpCisg
ICAgICAgIHJldHVybiBkZWNvZGVTVkdGaWx0ZXIoZGVjb2Rlcik7CisgICAgCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVy
ZW5jZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlRmlsdGVy
KG1fZmlsdGVyLCBlbmNvZGVyKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6
b3B0aW9uYWw8RmlsdGVyUmVmZXJlbmNlPiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIGlmIChhdXRvIGZpbHRlciA9IGRlY29kZUZpbHRlcihkZWNvZGVy
KSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkgfTsKKyAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDY1ODRkMWFkN2UxNTRlYjA5MjAyMzEwZGRm
YTZiNWUxMjFhZDJjMzkuLmViNmMyYjcwMTk4MjkyZjFhZGVmYzM1ODQwMzA4OTA4MjU1ZGY2ZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysr
IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjY2LDYgKzI2
Niw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAg
cmV0dXJuIGZyb3plbnNldChbCiAgICAgICAgICdDVlBpeGVsQnVmZmVyUmVmJywKICAgICAgICAg
J0lQQzo6RGF0YVJlZmVyZW5jZScsCisgICAgICAgICdJUEM6OkZpbHRlclJlZmVyZW5jZScsCiAg
ICAgICAgICdJUEM6OkZvbnRSZWZlcmVuY2UnLAogICAgICAgICAnSVBDOjpTZW1hcGhvcmUnLAog
ICAgICAgICAnTWFjaFNlbmRSaWdodCcsCkBAIC0yOTAsNyArMjkxLDYgQEAgZGVmIHR5cGVzX3Ro
YXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlh
S2V5U3lzdGVtUmVxdWVzdElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6TWVkaWFQbGF5
ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhU2Vzc2lvbklkZW50aWZpZXIn
LAotICAgICAgICAnV2ViQ29yZTo6TmF0aXZlSW1hZ2VSZWZlcmVuY2UnLAogICAgICAgICAnV2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UGxheWJhY2tUYXJnZXRD
bGllbnRDb250ZXh0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpQbHVnaW5Mb2FkQ2xp
ZW50UG9saWN5JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDY0NmVlNjQ2MTc2ZGNkZTE3NGZkNDdmOTU2ODA5NjQ3OGY0OTRiMjMuLjk5
Y2NlNTRhY2E5MmZkZDRiODA0YzExMzdiN2NhMDIwMTQ5YzJkMzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM0OCw2ICsxMzQ4LDcg
QEAKIAkJNzFCQUE3MzMyNUZGRDA5ODAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUJBQTczMTI1RkZDQ0JBMDBE
N0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLzsgfTsKIAkJNzFGQjgxMEIyMjYwNjI3RTAwMzIzNjc3
IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZCODEwQTIyNjA2MjdBMDAz
MjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLzsg
fTsKIAkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjhFODZFRjE3OTUx
ODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLzsgfTsKKwkJNzJFRTc5QkQyNzBF
NUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRl
clJlZmVyZW5jZS5oICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk3NUE4RDJENjE4
N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3RDFDMDEwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwogCQk3NjJCNzQ4RDEy
MEJDNzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDg0MTIwQkJBMkQwMDgxOTMz
OSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NzY4LDYgKzQ3NjksNyBAQAogCQk3MjhFODZGMDE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNTMxNTcyNTNDMUU0RDAwNDkyOTVBIC8qIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI1MzE1ODI1M0MxRTRE
MDA0OTI5NUEgLyogUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkVFNzlCQTI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50
ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0
b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0MTgsNiArNzQy
MCw3IEBACiAJCQkJQkMwMzJEOUUxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIuaCAqLywKIAkJ
CQlCQzAzMkQ5RjEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5jcHAgKi8sCiAJCQkJQkMwMzJE
QTAxMEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuaCAqLywKKwkJCQk3MkVFNzlCQTI3MEU1QUI5
MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8sCiAJCQkJOUJEOEFCNDkyNTgyMEU1MjAw
NTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCAqLywKIAkJCQk0MTUxRTVDMzFGQkI5MEE5MDBFNDdF
MkQgLyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdFNzhEMDBCQzBF
QzQgLyogSGFuZGxlTWVzc2FnZS5oICovLApAQCAtMTI0MzYsNiArMTI0MzksNyBAQAogCQkJCTkz
MTJCQUQ2MjZGMzNDMjkwMEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM1QjU3OUEyNkY1MTkzMzAwOEI0OEFDIC8qIEZpbGVTeXN0ZW1TdG9y
YWdlSGFuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMTJCQUQ1MjZGMzNDMjYw
MEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyRUU3OUJEMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTAwQjk2NjFBMThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAvKiBGb2N1c2Vk
RWxlbWVudEluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5LmNwcAppbmRleCA5NDIxZGQyMzhjYjZlYzYzZmUxYzA3ZDQ3
MzYxY2IwYjY1ZmY0MGNiLi4yNWU0ZWYwNTdhYzhhOGFkNWI0YmVmNDE1NjI1YTBhNjc0Yzk5ZTBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJGaWx0
ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0Rpc3BsYXlMaXN0Lmg+CkBAIC0yMTQsNiArMjE1LDExIEBAIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwg
dHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucykpOwogfQogCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlkZW50aWZpZXIsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihpbWFnZUlkZW50aWZpZXIsIHNv
dXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIg
fSksIGdlb21ldHJ5KSk7Cit9CisKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QmVnaW5UcmFuc3BhcmVuY3lM
YXllcihvcGFjaXR5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHku
aAppbmRleCA3MWZkYjYzZGY0YWM4NDk3NDcyMzI2OWI3ZjAzZDk5N2I4MTM5ODlkLi5mNzkwZjM3
MDU1NjAyMTJkZThjNjkyZjA5OWUwMWFmZmQ4YmUzMDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5LmgKQEAgLTk0LDYgKzk0LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lkIHJlY29y
ZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RmlsdGVySW1h
Z2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXI+LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6
RmlsdGVyJiwgY29uc3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmKSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKaW5kZXggNjkzNGJiNDYxNmNlMDBiZWFiMTQwYmFhOTQxMDliNmJhOTVmM2My
NC4uMmY1NmFjZTQwZGYwYjkwMjBiMmQzNTY5NDI5MGRlOWMxYjJmZjM5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKQEAgLTE5Nyw2ICsxOTcsMTQgQEAgcHJvdGVjdGVkOgogICAgICAg
ICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAorICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlciwg
Y29uc3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCisg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Cisg
ICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBmaWx0ZXIs
IGdlb21ldHJ5KTsKKyAgICB9CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVm
ZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZvcm1hdCYgZGVz
dGluYXRpb25Gb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IGZp
bmFsCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCA0
MTM1MTcyZmFiZmMxNjExZGQ1NjNkYjA5MjY5MmZkZWEyMDc2ODIwLi44NTc3YTczNzE5ZmUwZmQw
OWVmMmZiMjAyMTE4MDM2YjVlOWU1Mjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CiAKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjI1LDYgKzIyNiwyMiBAQCBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldFNoYXJlYWJsZUJp
dG1hcChSZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUp
OwogfQogCitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0Rmls
dGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUJ1ZmZlciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSkKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYXV0byBz
ZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Okdl
dEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZl
cmVuY2UgeyBSZWY8RmlsdGVyPiB7IGNvbnN0X2Nhc3Q8RmlsdGVyJj4oZmlsdGVyKSB9IH0sIGdl
b21ldHJ5KSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZpbHRlcmVkSW1h
Z2VGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSwgMV9zKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRSZXN1bHQpOwor
CisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAg
ICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgaWYg
KCFiaXRtYXApCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIGJpdG1hcC0+
Y3JlYXRlSW1hZ2UoKTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNh
Y2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSwgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsK
ICAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNhY2hl
TmF0aXZlSW1hZ2UoaGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDY0YmI5MjY3ZmU2YjMzNDk2YjMz
ZmU1NzBkOWE3MWVhY2E1NTRjY2YuLmUwZGY2MzZjZTBkODNlMDMyNDcyZjViNDQzZjE2ZWY3Y2Fh
MDQxMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVyUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJH
UFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIklQQ1NlbWFwaG9y
ZS5oIgpAQCAtOTMsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldERhdGFVUkxGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFZlY3Rvcjx1aW50OF90PiBnZXREYXRhRm9ySW1hZ2VC
dWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2U+IGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZpbHRlciYsIGNvbnN0
IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Jik7CiAgICAgdm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAg
ICAgdm9pZCBkZWxldGVBbGxGb250cygpOwo=
</data>
<flag name="commit-queue"
          id="466561"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442133</attachid>
            <date>2021-10-22 01:17:40 -0700</date>
            <delta_ts>2021-10-25 02:36:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211022011739.patch</filename>
            <type>text/plain</type>
            <size>921148</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExNmI1YjhiZDRmMjE4
OGYzYjIwODAyZDgxMjg1YWNhNGU5YTgxYy4uODYzOTgzNWZhYWE2ZjMxMjZmZjYyMDg5YzdiZTE0
NGMwZDc4NTcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjEtMTAtMjIgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5Q29yZUltYWdlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRU
cmFuc2ZlckNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUltYWdlOjpp
bWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzaGFyZWRDSUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VD
b3JlSW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUlt
YWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OkRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRl
ckltYWdlQnVmZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmltYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjpzb3VyY2VJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnNldEJsZW5kTW9kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQmxlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YmxlbmRNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9y
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0
YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzZXRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6c2V0Q29sb3JNYXRyaXhUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6dmFsdWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cmVkRnVuY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6Z3JlZW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpibHVlRnVuY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YWxwaGFGdW5jdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
RkVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlOjpzZXRLMik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZTo6c2V0SzMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNl
dEs0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmsxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjprMiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6azMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6Oms0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0UHJl
c2VydmVBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpmYXN0U2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6a2VybmVs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjprZXJuZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZGl2aXNvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpiaWFzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxwaGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRp
bmc6OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFu
bmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFlDaGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRY
Q2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5u
ZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNo
YW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnlDaGFubmVsU2VsZWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZF
RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojp0YWtlSW5w
dXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRHJvcFNoYWRvdzo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNldER5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0U2hhZG93Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpz
dGREZXZpYXRpb25YIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6c3RkRGV2aWF0aW9uWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmR4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6ZHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNoYWRvd09wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnNldEZsb29kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRv
S2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChnYXVzc2lhbktlcm5l
bEZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9u
WCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnN0YW5kYXJkQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91
dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRT
dGREZXZpYXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdl
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmVkZ2VNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnRha2VJbnB1dHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExl
bmd0aFgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVs
VW5pdExlbmd0aFkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldEtlcm5lbFVuaXRMZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNl
dEtlcm5lbFVuaXRMZW5ndGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNvdXJj
ZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6c3VyZmFjZVNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRTb3VyY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93
OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6
OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZSk6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGl4ZWxB
cnJheUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUGl4ZWxW
YWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWlu
T3JNYXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0cmVtdW0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZ
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cmFkaXVzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnJhZGl1c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpzZXREeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6c2V0RHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkeCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6OkZFU3BlY3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJD
b25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VGlsZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRC
YXNlRnJlcXVlbmN5WSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldEJhc2VGcmVxdWVuY3lYKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6c2V0U2VlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNt
b290aEN1cnZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0UGFpbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNo
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9p
c2UyRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OnNldFNlZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2VlZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5n
RGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
Qm91bmRhcnlTZXQ6OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5
U2V0Ojp5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmRlY29kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1
dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xl
YXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5w
dXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFz
UmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZ
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hl
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJz
b2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1h
bGl6ZWRGbG9hdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjp0
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0NTU0ZpbHRl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNTVkdGaWx0ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlckVmZmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlQWxwaGFOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VHcmFwaGljTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNhbGN1bGF0ZU91dHNl
dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpGaWx0
ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRl
RmlsdGVyU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJ
bWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1hcElt
YWdlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6bWFwUmVz
b2x2ZWRJbWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6
Om1hcEltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNs
aXBUb0ZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZmlsdGVyUmVnaW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpmaWx0ZXJTY2FsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRl
ckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6Y3JlYXRlRmlsdGVySW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
aW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OmVmZmVjdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291
cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5U29mdHdhcmUgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om1hdHJp
eCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBS
R0JBVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW50ZXJpb3JQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRPdXRlclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFk
b3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oLgorICAg
ICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpwaXhlbEFycmF5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjptaW5Pck1heCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRy
ZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlR1
cmJ1bGVuY2VQYWludGluZ0RhdGE6OlR1cmJ1bGVuY2VQYWludGluZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VHVyYnVsZW5jZVBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OnNtb290aEN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6aW5pdFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdh
cmU6OkZpbHRlckltYWdlU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VT
b2Z0d2FyZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgor
ICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0xpZ2h0aW5nRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2lu
ZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpsZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWxwaGFXaW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdp
bmRvdzo6c2V0UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0
aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmguCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjph
cHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRG
dW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0
ZU91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0
aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1p
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9w
ZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJRExFbnVtTGltaXRz
PENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6dG9TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
SW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
ZXJnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50
OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmhpZ2hlc3RFbnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
aGFzRmlsdGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6ZmlsdGVyRWZmZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpkZWNvZGUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVm
ZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpj
bGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmlt
aXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorCiAyMDIxLTEwLTIyICBLaW1tbyBLaW5udW5lbiAgPGtraW5u
dW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViR0wgbG93LXBvd2VyIGFuZCBoaWdoLXBlcmZv
cm1hbmNlIGNvbnRleHRzIHNob3VsZCB1c2UgZGlmZmVyZW50IEFOR0xFIE1ldGFsIEVHTERpc3Bs
YXlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGI1ZjVlMjQ4YmJkZDU2ZTM2ODNhYWExNzkzNjgxYTdmMzcxN2Y2MGIu
LmNiYTZhZDU4ZjlhNmE0Y2NmMTUxN2RkZTE3ZTA1OWE2YWQyNTY0OWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMjEtMTAtMjIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5j
b20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2Vz
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBQbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpG
aWx0ZXJSZWZlcmVuY2U6OkZpbHRlclJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OkZpbHRlclJl
ZmVyZW5jZTo6dGFrZUZpbHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5j
b2RlRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVG
aWx0ZXJFZmZlY3QpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZVNWR0Zp
bHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlU1ZHRmlsdGVyKToK
KyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGVDU1NGaWx0ZXIpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUNTU0ZpbHRlcik6CisgICAgICAgIChJUEM6
OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlRmlsdGVyKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVm
ZXJlbmNlOjpkZWNvZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKHR5cGVzX3RoYXRf
Y2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgor
CiAyMDIxLTEwLTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQWRkIHdlYnB1c2hkIHBsaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA2OTE1
OTZjMTkwZGJiYTRmZmQzNWIxMTQ1NTExYmE1OTdjOWZlZWI1Li44ZTYwODhjYzIzN2QwZWM1OTll
OGJhNjUxYmIyODc1ZGI3ZmE5NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MTksOCArMTQx
OSwzMCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJJbWFnZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZVZl
Y3Rvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2lzby9JU09Cb3guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09PcmlnaW5hbEZv
cm1hdEJveC5oCkBAIC0xNTkwLDYgKzE2MTIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGx1Z2lucy9ucHR5cGVzLmgKIAogICAgIHJlbmRlcmluZy9CcmVh
a0xpbmVzLmgKKyAgICByZW5kZXJpbmcvQ1NTRmlsdGVyLmgKICAgICByZW5kZXJpbmcvQ2xpcFBh
dGhPcGVyYXRpb24uaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCiAgICAgcmVuZGVyaW5nL0V2
ZW50UmVnaW9uLmgKQEAgLTE3MzAsMTIgKzE3NTMsMTcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHN2Zy9TVkdMZW5ndGhWYWx1ZS5oCiAgICAgc3ZnL1NWR1Bh
cnNlclV0aWxpdGllcy5oCiAgICAgc3ZnL1NWR1BhcnNpbmdFcnJvci5oCisgICAgc3ZnL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCiAgICAgc3ZnL1NWR1N0cmluZ0xpc3QuaAogICAgIHN2
Zy9TVkdUZXN0cy5oCiAgICAgc3ZnL1NWR1VuaXRUeXBlcy5oCiAKICAgICBzdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2VDYWNoZS5oCiAKKyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgK
KyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorICAgIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaAorCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHTGlz
dC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJpbWl0aXZlTGlzdC5oCiAgICAgc3ZnL3Byb3Bl
cnRpZXMvU1ZHUHJvcGVydHkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0YmVhMTRmNDRmYmY1MjExOTBm
NjMzYWI2NzMwNjkxMjMzYTU1YmY0Li4xNTNiYThjNDQxYzM3ZjE2Mjc0MTI5NmVmMzU2ZTdjNmI1
ZTkzYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA2MywxNCArMjA2MywzNiBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9ucy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29m
dHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRy
aXhTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJl
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3
YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFw
aGljU29mdHdhcmUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPQm94LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvaXNvL0lTT1Byb3RlY3Rpb25TY2hlbWVJbmZvQm94LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggOTA2YzI5OTg0NWRiMDNmNzczOGU1ODE4NTBkNGQwYzRhZTlhMzBjNi4uNTZiMGQ1
ZjE5M2EwNjRjODVkMTc0N2ZhMDVlY2VjMGFhZWVlM2Y1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC00MDAsNyArNDAwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0NWVXRpbGl0aWVz
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCitwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0KIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvcklPUy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlODQwYWEyODI0MjY0ZjY5MWVlMzM5YzAzNzExNTExNzdhNDQxMTU0Li5kYTFiZWNkZDEx
OTlmOGI5ZjkwZGYwMjAzMzcxM2JjYzgxODY1YjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzgsNyArMjM4LDYgQEAKIAkJ
MDgxNjY4RDQxMjU2MDNCRjAwNkYyNURFIC8qIFNWR1RleHRDaHVua0J1aWxkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MTY2OEQyMTI1NjAzQkYw
MDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggKi87IH07CiAJCTA4MTY2OERBMTI1NjAz
RDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEODEyNTYwM0Q1MDA2RjI1REUgLyogU1ZH
VGV4dExheW91dEVuZ2luZS5oICovOyB9OwogCQkwODFBQThEQTExMTEyMzdFMDAyQUIwNkUgLyog
U1ZHRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRh
LmggKi87IH07Ci0JCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODFFQkYz
OTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovOyB9OwogCQkwODNEQUVB
NzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUEzMEYwMUE3RkIw
MDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oICovOyB9OwogCQkwODNEQUVB
OTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBNTBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggKi87IH07CiAJCTA4NDU2
ODA4MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0NTY4MDcxMkI5MERBNjAwOTYwQTlGIC8qIEZv
bnRNZXRyaWNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTc4MSw4ICs3ODAsNiBAQAogCQkyQUVGNkZERDI2RTdFQ0NGMDAzMjZEMDIgLyogQ1NT
TnVtZXJpY1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBRUY2RkNFMjZFNzFGMkQwMDMyNkQwMiAvKiBDU1NOdW1lcmljVHlwZS5oICovOyB9Owog
CQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAw
REJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAw
RkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwotCQkyQzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyog
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oICovOyB9OwotCQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZS5oICovOyB9OwogCQkyRDA2MjE0NDFEQTYzOUI2MDBBN0ZCMjYgLyogV2ViS2l0
TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQwNjIxNDIxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5
TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQwNjIxNDUxREE2MzlCQTAwQTdGQjI2IC8qIFdl
YktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDA2MjE0MzFEQTYzOTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFL
ZXlNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJMkQwNjIxNEQxREE2M0E4QjAwQTdGQjI2IC8qIFdl
YktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDA2MjE0OTFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlzLmNwcCAq
LzsgfTsKQEAgLTEyNDQsNyArMTI0MSw3IEBACiAJCTQzMTA3QkUyMThDQzE5REUwMENDMThFOCAv
KiBTZWxlY3RvclBzZXVkb1R5cGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQzMTA3QkUxMThDQzE5REUwMENDMThFOCAvKiBTZWxlY3RvclBzZXVk
b1R5cGVNYXAuaCAqLzsgfTsKIAkJNDMyRDNGRTgxOEE4NjU4NDAwRDdEQzAzIC8qIFNlbGVjdG9y
Q2hlY2tlclRlc3RGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzMkQzRkU3MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJU
ZXN0RnVuY3Rpb25zLmggKi87IH07CiAJCTQzNThFODdEMTM2MEEyRUUwMEU0NzQ4QyAvKiBKU1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzNThFODdCMTM2MEEyRUUwMEU0NzQ4QyAvKiBKU1NWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQuaCAqLzsgfTsKLQkJNDM1OEU4ODExMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNo
YWRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM1
OEU4N0YxMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5oICovOyB9OworCQk0MzU4RTg4
MTEzNjBBMzE3MDBFNDc0OEMgLyogRkVEcm9wU2hhZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg3RjEzNjBBMzE3MDBFNDc0OEMgLyogRkVE
cm9wU2hhZG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDM1OEU4ODYxMzYwQTMzQjAwRTQ3NDhDIC8qIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNThFODgz
MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggKi87IH07CiAJCTQz
NjcwOEMxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4ODIxMkQ5Q0E0QTAwMDQ0MjM0
IC8qIFJlbmRlclNWR0Jsb2NrLmggKi87IH07CiAJCTQzNjcwOEMzMTJEOUNBNEIwMDA0NDIzNCAv
KiBSZW5kZXJTVkdDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzNjcwODg0MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdDb250YWlu
ZXIuaCAqLzsgfTsKQEAgLTIzMDYsMTEgKzIzMDMsMjQgQEAKIAkJNzI2RDU2RTIyNTNBRTI4RDAw
MDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2
RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyog
TmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI5NTkx
NkYyNzIwRUI4NzAwMzY5OTkzIC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4RjIyNDYxREQzRDFD
NTAwRTkyREEzIC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY3MjNENkE1MzIwMEND
Njg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIz
RDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOUQwNTMwMjUzMTQyNDMwMDQyMjA5OCAvKiBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MkE3M0JFRjI0NUEzRjkwMDAxQzlEMDMgLyogQW5pbWF0aW9uRnJhbWVS
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJB
ODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzMyNzE0MzQ0NzAw
M0U4OEM0IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0
cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MkFBNDZDNTI3MTQzNTIzMDAzRTg4QzQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkM0MjcxNDM1MDUwMDNF
ODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBGaWx0ZXJG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzcyNzE0MzY5QTAw
M0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVy
UmVwcmVzZW50YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkFBNDZDODI3MTQzNzMzMDAzRTg4QzQgLyogRmlsdGVySW1hZ2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzkwQTNBMjYzNjRB
MUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM5MjcxNDM3RDEwMDNFODhDNCAvKiBGaWx0ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY5
MjcwM0Q4RTUwMDNDNUFBRSAvKiBGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQTI3MTQzOTAxMDAzRTg4QzQgLyogQ1NTRmls
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4
M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0IyNzE0Mzk5NzAwM0U4OEM0IC8q
IEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcy
QUE0NkNDMjcxNDM5RDkwMDNFODhDNCAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBT
VkdGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkFBNDZDRDI3MTQzOUU1MDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQTQ2QkYyNzE0
MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZENDI3MTRGMThFMDAzRTg4QzQg
LyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQUE0NkI0MjcxNDJDRUIwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
QkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkVCQzdERDI3MTEzRDMxMDBGMEEyMEYgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyRjY2N0UxMjYwQzI2QUMwMEVFMzZBRCAvKiBE
aWFnbm9zdGljTG9nZ2luZ0RvbWFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJGNjY3REYyNjBDMjY0NDAwRUUzNkFEIC8qIERpYWdub3N0aWNMb2dn
aW5nRG9tYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYx
MDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5
M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyog
TWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC0yNzEzLDIxICsyNzIzLDE5IEBACiAJCTg0MjI0MTk0
MTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDIyNDE5MTEwN0U3OEE3MDA3NjZB
ODcgLyogU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oICovOyB9OwogCQk4NDMwMEJENjEyMEM5QUFD
MDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1Bh
dGhTdHJpbmdTb3VyY2UuaCAqLzsgfTsKIAkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNW
R1BhdGhTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi87IH07Ci0J
CTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBG
aWx0ZXIuaCAqLzsgfTsKLQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRkEw
RkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovOyB9OwogCQk4NDY1MEU3RTIzODdBRDdE
MDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlh
UXVlcnlMaXN0RXZlbnQuaCAqLzsgfTsKIAkJODQ3MzBENzcxMjQ4RjBCMzAwRDNBOUM5IC8qIERp
c3RhbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5o
ICovOyB9OwotCQk4NDczMEQ3OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUMx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCAqLzsgfTsKKwkJODQ3MzBENzkx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFQ29udm9sdmVNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVDMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RUNvbnZvbHZlTWF0cml4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODQ3MzBEN0IxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0aW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1
RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCAqLzsgfTsKLQkJODQ3MzBE
N0QxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlzcGxhY2VtZW50TWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2MDEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVEaXNwbGFjZW1lbnRNYXAuaCAqLzsgfTsKLQkJODQ3MzBEN0YxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRmxvb2QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDYyMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29kLmggKi87IH07CisJCTg0NzMw
RDdEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjAxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRGlzcGxhY2VtZW50TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEN0YxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRmxvb2QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDYyMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRUZsb29kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJODQ3MzBEODExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGlnaHRp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMw
RDY0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggKi87IH07Ci0JCTg0NzMwRDgzMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oICov
OyB9OwotCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2ODEyNDhGMEIz
MDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IH07Ci0JCTg0NzMwRDg3MTI0OEYwQjMwMEQz
QTlDOSAvKiBGRU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENkExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggKi87IH07CisJ
CTg0NzMwRDgzMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyog
RkVNZXJnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTg0NzMwRDg1MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY4MTI0OEYwQjMwMEQz
QTlDOSAvKiBGRU1vcnBob2xvZ3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk4NDczMEQ4NzEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZBMTI0
OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTg0NzMwRDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1
bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsg
fTsKLQkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFVGlsZS5oICovOyB9OwotCQk4NDczMEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJi
dWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi87IH07CisJCTg0NzMw
RDhCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDcz
MEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyog
RkVUdXJidWxlbmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODQ3MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NDEyNDhGMEIz
MDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLzsgfTsKIAkJODQ3MzBEOTIxMjQ4RjBCMzAwRDNB
OUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc1MTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291
cmNlLmggKi87IH07CiAJCTg0NzMwRDkzMTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMw
RDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2UuaCAqLzsgfTsKQEAgLTI3MzUs
MTQgKzI3NDMsMTQgQEAKIAkJODQ3NkM5RUIxMURGNkEyOTAwNTU1QjAyIC8qIFNWR1BhdGhCdWls
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDc2
QzlFODExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1aWxkZXIuaCAqLzsgfTsKIAkJODQ3NkM5
RUMxMURGNkEyOTAwNTU1QjAyIC8qIFNWR1BhdGhDb25zdW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3NkM5RTkxMURGNkEyOTAwNTU1QjAyIC8q
IFNWR1BhdGhDb25zdW1lci5oICovOyB9OwogCQk4NDc2QzlGMDExREY2QTU4MDA1NTVCMDIgLyog
U1ZHUGF0aFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ3NkM5RUUxMURGNkE1ODAwNTU1QjAyIC8qIFNWR1BhdGhQYXJzZXIuaCAqLzsgfTsK
LQkJODQ4MDE5NTUxMDhCQUZCMzAwQ0IyQjFGIC8qIEZFR2F1c3NpYW5CbHVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDgwMTk1MzEwOEJBRkIzMDBD
QjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCAqLzsgfTsKKwkJODQ4MDE5NTUxMDhCQUZCMzAwQ0Iy
QjFGIC8qIEZFR2F1c3NpYW5CbHVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDgwMTk1MzEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVzc2lhbkJsdXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NDgy
Qjc0NjExOThDMzU0MDBCRkIwMDUgLyogSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNDQyQkJGODExOTRDOUQzMDBENDk0Njkg
LyogSGFzaENoYW5nZUV2ZW50LmggKi87IH07CiAJCTg0ODJCNzUyMTE5OENCNkIwMEJGQjAwNSAv
KiBKU0hhc2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODQ4MkI3NTAxMTk4Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50
LmggKi87IH07CiAJCTg0ODUyMjdDMTE5MDE2MkMwMDZFREM3RiAvKiBKU1NWR0hLZXJuRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4NTIy
NzgxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVtZW50LmggKi87IH07CiAJCTg0ODUy
MjdFMTE5MDE2MkMwMDZFREM3RiAvKiBKU1NWR1ZLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4NTIyN0ExMTkwMTYyQzAwNkVEQzdG
IC8qIEpTU1ZHVktlcm5FbGVtZW50LmggKi87IH07CiAJCTg0ODUyMjhCMTE5MDE3M0MwMDZFREM3
RiAvKiBTVkdWS2VybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0ODUyMjg4MTE5MDE3M0MwMDZFREM3RiAvKiBTVkdWS2VybkVsZW1lbnQu
aCAqLzsgfTsKIAkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEE4MUYzQzBGQzdE
RkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCAqLzsgfTsKLQkJODRBODFGNDIwRkM3RTAyNzAw
OTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQwMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGlj
LmggKi87IH07CisJCTg0QTgxRjQyMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEE4MUY0MDBG
QzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0QjM0OUEyMjJGODZFNzUwMEQ0N0JDRiAvKiBF
dmVudFRhcmdldENvbmNyZXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NEIzNDlBMDIyRjg2RTc0MDBENDdCQ0YgLyogRXZlbnRUYXJnZXRDb25jcmV0
ZS5oICovOyB9OwogCQk4NEI2Qjk3ODEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RT
b3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
QjZCOTc2MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oICovOyB9Owog
CQk4NEM1QjJGQjEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRDNUIy
RjkxMjE2REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaCAqLzsg
fTsKQEAgLTM1MDMsMTAgKzM1MTEsMTAgQEAKIAkJQTc0MEI1QTUxNEM5MzVBQjAwQTc3RkE0IC8q
IEpTSW50ZXJuYWxTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdCNEVBNzkxNEM5MzQ4NDAwQzhGNUJGIC8qIEpTSW50ZXJuYWxTZXR0aW5n
cy5oICovOyB9OwogCQlBNzQwQjVBNzE0QzkzNUFGMDBBNzdGQTQgLyogSlNJbnRlcm5hbFNldHRp
bmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QjRFQTc4MTRDOTM0ODQwMEM4RjVCRiAvKiBKU0ludGVybmFsU2V0dGluZ3MuY3BwICovOyB9Owog
CQlBNzVFNDk3NjEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFNDk3NDEwNzUy
QUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc1RThCODkwRTFERTJENjAwN0YyNDgx
IC8qIEZFQmxlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NUU4QjgxMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmggKi87IH07Ci0JCUE3NUU4
QjhCMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbG9yTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4MzBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb2xvck1hdHJpeC5oICovOyB9OwotCQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVD
b21wb25lbnRUcmFuc2Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc1RThCODUwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIu
aCAqLzsgfTsKLQkJQTc1RThCOEYwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4NzBFMURF
MkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCAqLzsgfTsKKwkJQTc1RThCODkwRTFERTJENjAw
N0YyNDgxIC8qIEZFQmxlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3NUU4QjgxMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTc1RThCOEIwRTFERTJE
NjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4QjgzMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbG9yTWF0
cml4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QTc1RThCOEQwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg1MEUxREUyRDYw
MDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTc1RThCOEYwRTFERTJENjAwN0YyNDgxIC8qIEZF
Q29tcG9zaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzVFOEI4NzBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZFNUY3RjEzNUUwRENGMDBB
Njk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RTVGN0UxMzVFMERDRjAwQTY5ODM3IC8qIFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzc5NzkxNDBENkI5
RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc3OTc5MjkwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzc5
NzkyNTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCAqLzsgfTsKQEAgLTM4NjAsNyAr
Mzg2OCw3IEBACiAJCUIyMjJGNjlEMEFCNzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjJGNjlCMEFC
NzcxQjgwMDIyRUZBRCAvKiBKU1NWR0VsZW1lbnQuaCAqLzsgfTsKIAkJQjIyMzYyMjkwQzNBRjA0
QTAwMDhDQTlCIC8qIEpTU1ZHVGV4dFBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIzNjIyNzBDM0FGMDRBMDAwOENBOUIgLyogSlNT
VkdUZXh0UGF0aEVsZW1lbnQuaCAqLzsgfTsKIAkJQjIzNTQwRjMwRDAwNzgyRTAwMjM4MkZBIC8q
IFN0cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjIzNTQwRjEwRDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyNTU5OTg1
MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJ
bWFnZS5oICovOyB9OworCQlCMjU1OTk4NTBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk4RUIw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjU1OTlBNDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZH
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NTU5OTBDMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNTU5OUE1MEQwMEQ4QkEwMEJCODI1QyAv
KiBFbXB0eUNsaWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU2NTBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MzcwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRv
Y3VtZW50SW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNjEyMSw4ICs2MTI5LDYgQEAKIAkJMDgxNjY4RDcxMjU2MDNENTAwNkYyNURFIC8q
IFNWR1RleHRMYXlvdXRFbmdpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4MTY2OEQ4MTI1NjAzRDUwMDZGMjVERSAvKiBTVkdUZXh0TGF5b3V0RW5naW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRMYXlvdXRFbmdpbmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNW
R0VsZW1lbnRSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdF
bGVtZW50UmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzgw
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTA4MUVCRjM5MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckJ1aWxkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTIwRjAxQTdGQjAwMzQyNzU0
IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4M0RBRUE0MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzEsOCAr
NjI3Nyw2IEBACiAJCTBGNDk2NkE4MURCNDBDNDMwMEEyNzRCQiAvKiBKU0RPTVBvaW50UmVhZE9u
bHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01Qb2ludFJl
YWRPbmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTY2QTkxREI0MEM0
MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFkT25seS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RPTVBvaW50UmVhZE9ubHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8qIFNjcm9sbFR5cGVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZpbHRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODQyMTNCNzg2
NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlckxheWVyRmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzM4MiwxMCArNzM4Niw2IEBACiAJCTJCNDIzNUEwMTUyNTBGNjAwMERCQkNEOCAvKiBS
ZW5kZXJTVkdFbGxpcHNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNWR0VsbGlwc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkJFOEUyQzYxMkE1
ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNl
dFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MTWV0
YUNoYXJzZXRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQzg1NjUz
MzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MkM4NTY1MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkNBQTRBMzcyNEJFMThBMTAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDQUE0QTM5
MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyRDA2MjE0MjFEQTYzOTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFL
ZXlNZXNzYWdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRDA2MjE0MzFEQTYzOTg4MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlNZXNzYWdlRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0TWVkaWFLZXlNZXNz
YWdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQwNjIxNDcxREE2M0E3
OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TmVlZGVkRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU4MSw5ICsxMDU4MSw1MyBAQAogCQk3MjdB
RkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOTc4
RDQzMjZGRTlERTcwMEZEMkM1NiAvKiBGaWx0ZXJSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmls
dGVyUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY0MjNENjg2
QTYwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5
OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjlDMDlFRDI3
MjI4QTIxMDBCRTg4MzggLyogRmlsdGVyR2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RmlsdGVyR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjlEMDUy
RTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkE4M0Q2NjI3MDNENjZEMDAzQzVBQUUgLyogRmlsdGVyRnVuY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNENjkyNzAzRDhFNTAwM0M1QUFFIC8qIEZpbHRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBODNENkEyNzAzREE5QTAwM0M1QUFFIC8qIFNWR0ZpbHRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZEMjcwM0RDM0EwMDNDNUFBRSAv
KiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZFMjcwM0RGRDgwMDNDNUFB
RSAvKiBGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzAyNzA1NzUwNDAwM0M1QUFFIC8qIFNvdXJjZUdy
YXBoaWNTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdh
cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MTI3MDU3ODUyMDAz
QzVBQUUgLyogU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3Vy
Y2VBbHBoYVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNE
NzIyNzA1NzlDNzAwM0M1QUFFIC8qIEZFT2Zmc2V0U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVPZmZzZXRTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDczMjcwNTdDQkUwMDNDNUFBRSAvKiBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDc0MjcwNTgzN0QwMDNDNUFBRSAvKiBGRU1lcmdlU29mdHdh
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJnZVNvZnR3YXJlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzUyNzA1ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JN
YXRyaXhTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbG9yTWF0cml4U29mdHdh
cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NjI3MDU4OTAyMDAz
QzVBQUUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNv
bXBvc2l0ZVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNE
NzgyNzA1OEMwMzAwM0M1QUFFIC8qIEZFRmxvb2RTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGRUZsb29kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q3QTI3MDVBREZBMDAzQzVBQUUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdCMjcwNUIyQzkwMDNDNUFBRSAvKiBG
RUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFR2F1c3NpYW5C
bHVyU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3QzI3
MDVCRDg2MDAzQzVBQUUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3BsYWNlbWVudE1h
cFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3RTI3MDYzMzZCMDAz
QzVBQUUgLyogRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVE
cm9wU2hhZG93U29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVUaWxlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q4MDI3MDY0MUI2MDAzQzVBQUUgLyogRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkE4M0Q4MTI3MDY0NkUyMDAzQzVBQUUgLyogRkVMaWdodGluZ1NvZnR3
YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgyMjcwNjUxMUIwMDNDNUFBRSAvKiBGRUJs
ZW5kU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODMyNzA2Njc0QzAwM0M1QUFFIC8q
IEZpbHRlckdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckdlb21ldHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI0MjcxNDJDRUIwMDNFODhDNCAvKiBGaWx0
ZXJJbWFnZVZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCNjI3MTQyRjM3MDAzRTg4QzQgLyogRmls
dGVySW1hZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZVNvZnR3
YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjcyNzE0MkYzODAw
M0U4OEM0IC8qIEZpbHRlckltYWdlU29mdHdhcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1h
Z2VTb2Z0d2FyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCODI3MTQy
Rjc5MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjkyNzE0MkY3OTAwM0U4OEM0IC8qIFNvdXJjZUdy
YXBoaWNDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkFBNDZCQTI3MTQyRjdBMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZp
bHRlckVmZmVjdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJFZmZlY3RWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkMy
NzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJSZXN1bHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVwcmVzZW50YXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QkUyNzE0MzJERTAwM0U4OEM0
IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZC
RjI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQUE0NkMwMjcxNDMyREYwMDNFODhDNCAvKiBTVkdGaWx0ZXJCdWls
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlckJ1
aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZDNDI3MTQzNTA1
MDAzRTg4QzQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyQm91bmRhcnlTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBQTQ2RDcyNzE1OEE1NzAwM0U4OEM0IC8qIEZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZEOTI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb21w
b25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZFQ29tcG9u
ZW50VHJhbnNmZXJDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QjFCNzUxMjcxN0VBMkUwMDFCMkUwOCAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQjFCNzU0MjcxOTExNDMwMDFCMkUwOCAvKiBMaWdodGluZ0RhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGlnaHRpbmdEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E0
MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTYyM0UxNzMy
ODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTA1OTUsNiArMTA2MzksOCBAQAogCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3
IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdP
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTM5MjYzNjRBMUYw
MDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFn
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3
RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNF
WFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JH
Qi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRD
NTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNF
WFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3MjNGQ0NCM0Qw
MDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNTI4
LDkgKzExNTc0LDYgQEAKIAkJODQzMDBCRDUxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJp
bmdTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDMwMEJENzEyMEM5QUQ0
MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdQYXRoU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MzAw
QkQ5MTIwQzlBRUQwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NDVFNzJGOTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmls
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3
OSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmls
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTdDMjM4N0FEN0MwMDYy
NjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODQ2NTBFN0YyMzg3QUQ4QTAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NjUwRTgwMjM4N0FEOEIwMDYyNjZF
MiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRp
YVF1ZXJ5TGlzdEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTcz
LDggKzE5NjE2LDExIEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2Ug
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5
MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAot
CQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbSAqLywKKwkJCQk3MkFBNDZENzI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJp
eENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZEOTI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb21w
b25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQyRjdBMDAzRTg4
QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MkFBNDZCODI3MTQyRjc5MDAz
RTg4QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2QjkyNzE0MkY3
OTAwM0U4OEM0IC8qIFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8sCiAJCQkpOwogCQkJcGF0
aCA9IGNvcmVpbWFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzIwNCw2ICsy
MzI1MCwzMyBAQAogCQkJcGF0aCA9ICJtb2RlbC1lbGVtZW50IjsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCTcyQTgzRDZGMjcwNTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNEODIy
NzA2NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzUy
NzA1ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJB
ODNEN0EyNzA1QURGQTAwM0M1QUFFIC8qIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAg
Ki8sCisJCQkJNzJBODNENzYyNzA1ODkwMjAwM0M1QUFFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmUu
Y3BwICovLAorCQkJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RTI3MDYzMzZCMDAzQzVBQUUg
LyogRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc4MjcwNThDMDMwMDND
NUFBRSAvKiBGRUZsb29kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdCMjcwNUIyQzkwMDND
NUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MTI3MDY0
NkUyMDAzQzVBQUUgLyogRkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NDI3
MDU4MzdEMDAzQzVBQUUgLyogRkVNZXJnZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MzI3
MDU3Q0JFMDAzQzVBQUUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgz
RDcyMjcwNTc5QzcwMDNDNUFBRSAvKiBGRU9mZnNldFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4
M0Q3RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgz
RDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJ
NzJBQTQ2QjYyNzE0MkYzNzAwM0U4OEM0IC8qIEZpbHRlckltYWdlU29mdHdhcmUuY3BwICovLAor
CQkJCTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmggKi8s
CisJCQkJNzJCMUI3NTQyNzE5MTE0MzAwMUIyRTA4IC8qIExpZ2h0aW5nRGF0YS5oICovLAorCQkJ
CTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLywK
KwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NUZW1wbGF0
ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjUyNjAs
NiArMjUzMzMsNyBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNENkYyNzA1
NzREMDAwM0M1QUFFIC8qIHNvZnR3YXJlICovLAogCQkJCUExRTExNTQzMTMwMTVDM0QwMDU0QUM4
QyAvKiBEaXN0YW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDVBMTI0OEYwQjMwMEQz
QTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCAqLywKIAkJCQlBNzVFOEI4MDBFMURFMkQ2MDA3
RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCkBAIC0yNTI5NiwxNSArMjUzNzAsMjYgQEAKIAkJCQk4
NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBENkYxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4
N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUgLyogRmls
dGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8s
CisJCQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8s
CiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJ
CQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAotCQkJCTJD
ODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCi0J
CQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8s
CisJCQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICov
LAorCQkJCTcyQjFCNzUxMjcxN0VBMkUwMDFCMkUwOCAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8s
CisJCQkJNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJ
CQkJNzI5QzA5RUQyNzIyOEEyMTAwQkU4ODM4IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLywKKwkJ
CQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywKKwkJCQk3
MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcyQzkw
QTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovLAorCQkJCTcyQUE0NkI0Mjcx
NDJDRUIwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovLAogCQkJCTQ5RUNFQjYzMTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCRDI3MTQz
MEIxMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkFBNDZCQzI3
MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5
REU3MDBGRDJDNTYgLyogRmlsdGVyUmVzdWx0LmggKi8sCiAJCQkJODQ3MzBENzQxMjQ4RjBCMzAw
RDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8sCiAJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRBQzhD
IC8qIFBvaW50TGlnaHRTb3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDc1MTI0OEYwQjMwMEQzQTlD
OSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8sCkBAIC0yNzA2NywxMCArMjcxNTIsMTEgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCUIyNTU5OEVBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdl
LmNwcCAqLywKIAkJCQlCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICov
LAotCQkJCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovLAotCQkJ
CTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLywKLQkJCQkwODFFQkYz
ODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCi0JCQkJMDgxRUJG
MzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJCQk3MkE4M0Q2
QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2QjI3MDNE
QTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4
OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovLAorCQkJCTcyQUE0NkJFMjcxNDMyREUwMDNF
ODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBQTQ2QkYyNzE0MzJERTAwM0U4
OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVy
czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDIwNCw4ICszMDI5MCw4IEBACiAJ
CQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAq
LywKIAkJCQk5MzkyRjE0RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLAog
CQkJCTkzOTJGMTRCMEFEMTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJCTBG
NTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNGQjgz
MjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNEQzNB
MDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAzQzVB
QUUgLyogQ1NTRmlsdGVyLmggKi8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENT
U1ZhbHVlS2V5LmggKi8sCiAJCQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVn
aW9uLmNwcCAqLywKIAkJCQlFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24u
aCAqLywKQEAgLTMxNjI5LDYgKzMxNzE1LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3
Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRv
dy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjI4Nyw2ICszMjM3NCw3IEBACiAJCQkJQUEyMUVDQ0Qw
QUJGMEZDNjAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNzc5RTE0MUJCMjE1QkIwMENBQThCRiAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NDQ3NkJEQjFERkNBQzAzMDA2OTBFMjMgLyogQ1NTRGVmZXJy
ZWRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNBMjcxNDM5MDEwMDNFODhDNCAv
KiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCQjBDNUI4MTdCQkQ2MjkwMDNEMzY3
NyAvKiBDU1NGaWx0ZXJJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY0QjRENjBD
QjQyOThBMDA1RjJCNjIgLyogQ1NTRm9udEZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2
Q0ZEMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMzI3OTQsMTIgKzMyODgyLDE3IEBACiAJCQkJOTMwRTQ0ODYyNzBDMzcyMjAwREU3QUI3IC8q
IEZpbGVTeXN0ZW1TeW5jQWNjZXNzSGFuZGxlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM1RUI2OUYwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzEyQkU0ODMxRkU4NjVERDAwMjAzMUNDIC8qIEZpbGxNb2RlLmggaW4gSGVhZGVycyAq
LywKLQkJCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkFBNDZDOTI3MTQzN0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkFBNDZDNTI3MTQzNTIzMDAzRTg4QzQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZl
Y3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkNBQTRBM0EyNEJFMThCNzAw
OURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MkFBNDZDQjI3MTQzOTk3MDAzRTg4QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MkFBNDZDNjI3MTQzNUZEMDAzRTg4QzQgLyogRmlsdGVyRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkMzMjcxNDM0NDcwMDNFODhDNCAvKiBGaWx0
ZXJHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzgyNzE0MzczMzAwM0U4OEM0
IC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZENDI3MTRGMThFMDAz
RTg4QzQgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjZF
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MkFBNDZDNzI3MTQzNjlBMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5k
T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1NEYwOTAwMEE0MjM0IC8q
IEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjdEMkREMjUwRkQ4Mjgw
MDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtMzU3
MDYsOSArMzU3OTksOSBAQAogCQkJCUIyMjI3QTAzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVNw
b3RMaWdodEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA2MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRVRpbGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwOTBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJODQ1RTcyRkMwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMDgxRUJGM0IwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNDMjcxNDM5RDkwMDNFODhDNCAvKiBTVkdGaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaWx0
ZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDRDI3MTQzOUU1MDAzRTg4QzQg
LyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNW
R0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM1Nzc2LDYgKzM1ODY5LDcgQEAKIAkJ
CQlCMjIyN0E5MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seWdvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTk0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2x5bGluZUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTk3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Mjk1OTE2RjI3MjBFQjg3
MDAzNjk5OTMgLyogU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1NURDQzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5jcHAKaW5kZXggOGNmOTA5YWU5ZTUzNzI0YjkxZGI0YWNlMTRhZTI4NTcxZGQ5NTUy
Ni4uNWVkZmJmNTNlM2FhZmJhOTcwMjYwZGQ4MzM0NThjMDBiNmIzYTg4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyRWxlbWVudC5oIgpAQCAtMTE2LDI2ICsxMTcsMjMgQEAgUmVmUHRyPEltYWdl
PiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaXoKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBpbnRvIEltYWdlQnVmZmVyLgog
ICAgIC8vIEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0
aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgYXV0byByZW5kZXJp
bmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHRleHR1cmUg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIGlmICghdGV4dHVy
ZSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiAKICAgICBhdXRvIGltYWdl
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OwogICAgIHRleHR1cmUtPmNvbnRleHQoKS5k
cmF3SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOwogCi0gICAgYXV0byBjc3NGaWx0ZXIgPSBDU1NG
aWx0ZXI6OmNyZWF0ZSgpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2UoV1RGTW92ZSh0
ZXh0dXJlKSk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3QoaW1hZ2VSZWN0KTsK
LSAgICBjc3NGaWx0ZXItPnNldEZpbHRlclJlZ2lvbihpbWFnZVJlY3QpOwotICAgIGlmICghY3Nz
RmlsdGVyLT5idWlsZChyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1l
cjo6RmlsdGVyRnVuY3Rpb24pKQorICAgIGF1dG8gZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUo
cmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CisgICAgaWYgKCFm
aWx0ZXIpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwotICAgIGNzc0ZpbHRl
ci0+YXBwbHkoKTsKIAotICAgIGF1dG8qIG91dHB1dCA9IGNzc0ZpbHRlci0+b3V0cHV0KCk7Ci0g
ICAgaWYgKCFvdXRwdXQpCi0gICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOworICAg
IEZpbHRlckdlb21ldHJ5IGdlb21ldHJ5KGltYWdlUmVjdCk7CisgICAgaWYgKGF1dG8gZmlsdGVy
ZWRJbWFnZSA9IHRleHR1cmUtPmZpbHRlcmVkSW1hZ2UoKmZpbHRlciwgV1RGTW92ZShnZW9tZXRy
eSkpKQorICAgICAgICByZXR1cm4gZmlsdGVyZWRJbWFnZTsKIAotICAgIHJldHVybiBvdXRwdXQt
PmNvcHlJbWFnZSgpOworICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogfQogCiB2b2lk
IENTU0ZpbHRlckltYWdlVmFsdWU6OmZpbHRlckltYWdlQ2hhbmdlZChjb25zdCBJbnRSZWN0JikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1h
Z2VCdWZmZXIuaAppbmRleCBhNWRkMjhiNzM3YmM4MzVlODZlYTNlZjIwMmE3NGU0NmFiMjIyMTgx
Li43YzdlYjQyZTUzYzY0ZGZkY2VjODIzYmI0YjNlOGE5Yzk4NmE0NGJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5o
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCkBA
IC0xMzgsNiArMTM5LDE5IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCisgICAgUmVmUHRyPEltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKTsKKyAgICAgICAgaWYg
KCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAg
ICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworCisgICAgICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAg
ICAgIHN0ZDo6dGllKGltYWdlQnVmZmVyLCBzdGQ6Omlnbm9yZSkgPSBmaWx0ZXIuYXBwbHkodGhp
cywgeyB7IH0sIGxvZ2ljYWxTaXplKCkgfSwgZ2VvbWV0cnkpOworICAgICAgICByZXR1cm4gaW1h
Z2VCdWZmZXIgPyBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKCkgOiBudWxscHRyOworICAgIH0KKwog
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0YzFjNWY5MDg3
YTkzYTdkMTI1Yjg5MzY0NDhmMDRlZmVkMGY3MGMwLi42MTkwMzkzOTVjMTgxNDA5YmQ3NjRlZTkw
OTUyMTA0YmFmZDg4Nzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUg
IkJpZGlSZXNvbHZlci5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5k
ZWRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgpAQCAtNjI5LDYgKzYzMSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAgICAgSW1hZ2VC
dWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwg
c291cmNlLCBvcHRpb25zKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KQoreworICAgIGF1dG8gW2ZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0XSA9IGZpbHRlci5hcHBs
eShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBnZW9tZXRyeSk7CisgICAgaWYgKGZpbHRl
cmRJbWFnZSkKKyAgICAgICAgZHJhd0ltYWdlQnVmZmVyKCpmaWx0ZXJkSW1hZ2UsIGltYWdlUmVj
dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCkKIHsKICAgICBQYXRoIHBhdGg7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDA2YjcxMzM4
ZWY4ZDkxYWRlNDZjOTIwOWE1OWM3NzA5NTJkY2E5OTAuLjQ0ZGViYjVlNmQ0NjgyMjI5Njk4ZTA4
MzEwMTFhZTE0N2RmN2NjMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC04NSw2ICs4NSw4IEBAIHR5cGVkZWYgdW5zaWdu
ZWQgY2hhciBVSW50ODsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNm
b3JtOworY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CiBjbGFzcyBGbG9hdFJv
dW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU7CkBAIC00NTAsNiArNDUyLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhd0ZpbHRlckltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIGNvbnN0IEZpbHRlckdl
b21ldHJ5Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggYTA1OTJiOTliODhk
YmUwMThmYTk1YzVhMzA1ZDI5ODJjMDI0ZjZkOC4uMzZlNDU0Y2EwMmZiOTNmNGEyOTBiODY3NTZk
YTBkNzkzM2JiMWRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCkBAIC00Miw2ICs0Miw5IEBAIGNsYXNzIERyYXdpbmdDb250ZXh0Owogc3Ry
dWN0IEl0ZW1CdWZmZXJIYW5kbGU7CiB9CiAKK2NsYXNzIEZpbHRlcjsKK2NsYXNzIEZpbHRlckdl
b21ldHJ5OworCiBjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxJbWFnZUJ1ZmZlciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4sIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxJbWFnZUJ1ZmZlcj4gewogcHVibGljOgogICAgIC8vIFdpbGwgcmV0dXJuIGEg
bnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KQEAgLTEwNiw2ICsxMDksNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tp
bmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgPSAwOwogCiAgICAgLy8gQ3JlYXRlIGFuIGlt
YWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9t
IHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKaW5kZXggMTQzYmEwM2Fj
ZmY5YzZhNmZjNTc5MTE1NzhjYzNiODE5YzIzYmRkZC4uMGFkMjk3MDg4YjVmNjdkYzMyZGViZjhi
YTZhNDRiYTI0N2VmNWU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0luVXNlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUdyYXBoaWNzQ29udGV4
dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUdy
YXBoaWNzQ29udGV4dCgpIHsgfQogICAgIHZpcnR1YWwgVm9sYXRpbGl0eVN0YXRlIHNldFZvbGF0
aWxlKGJvb2wpIHsgcmV0dXJuIFZvbGF0aWxpdHlTdGF0ZTo6VmFsaWQ7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZUJ1ZmZlclRvUG9vbCgpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZp
bHRlcnNDb2NvYS5tbQppbmRleCAyZDAyMDE2YmI4ZWU2M2ViN2UzZjNhNzNmM2NhNjY5YmIwOWUw
ZTUyLi5hZmE0OTNjODMyNTFlMWVkZThlMWFiNDg2MGZlM2EyYmQ4NDMxMzgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmls
dGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogU2hvdWxkIHNoYXJlIHRoZXNlIHZhbHVlcyB3aXRo
IENTU0ZpbHRlcjo6YnVpbGQoKSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2MDA4KS4KKy8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggRmls
dGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYw
MDgpLgogc3RhdGljIGNvbnN0IGRvdWJsZSBzZXBpYUZ1bGxDb25zdGFudHNbM11bM10gPSB7CiAg
ICAgeyAwLjM5MywgMC43NjksIDAuMTg5IH0sCiAgICAgeyAwLjM0OSwgMC42ODYsIDAuMTY4IH0s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2Uv
RkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjZmE5
ZjE3OTY3YjkzZmI4N2VjODQzYjc5YTY1NGRmMjk1NDg3MDQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb2xvck1hdHJpeENv
cmVJbWFnZS5tbQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkZFQ29sb3JNYXRyaXguaCIKKworI2lmIFVTRShDT1JF
X0lNQUdFKQorCisjaW1wb3J0ICJGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oIgorI2ltcG9ydCA8Q29y
ZUltYWdlL0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0NJRmlsdGVyLmg+CisjaW1w
b3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBGRUNvbG9yTWF0cml4OjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fY29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RQorICAgICAgICB8fCBtX2NvbG9yTWF0cml4VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFCisgICAgICAgIHx8IG1fY29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVg7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeDo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdl
ID0gZG93bmNhc3Q8RmlsdGVySW1hZ2VDb3JlSW1hZ2U+KGlucHV0KS5pbWFnZSgpOworICAgIGlm
ICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byB2YWx1ZXMg
PSBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKKyAgICBmbG9hdCBj
b21wb25lbnRzWzldOworICAgIAorICAgIHN3aXRjaCAobV9jb2xvck1hdHJpeFR5cGUpIHsKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgRkVDb2xvck1hdHJp
eDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Cisg
ICAgICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFU
RToKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhj
b21wb25lbnRzLCB2YWx1ZXNbMF0pOworICAgICAgICBicmVhazsKKyAgICAKKyAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0xVTUlOQU5DRVRPQUxQSEE6IC8vIEZJWE1FOiBBZGQgTHVtaW5hbmNlIHRvIEFscGhhIElt
cGxlbWVudGF0aW9uCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBh
dXRvICpjb2xvck1hdHJpeEZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29s
b3JNYXRyaXgiXTsKKyAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZS5n
ZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07CisgICAgCisgICAgc3dpdGNoIChtX2NvbG9y
TWF0cml4VHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBbY29sb3JNYXRy
aXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpj
b21wb25lbnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJd
OworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rvcldp
dGhYOmNvbXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZv
cktleTpAImlucHV0R1ZlY3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6
Y29tcG9uZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAg
ICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZl
Y3RvciJdOworICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBX
OjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVl
c1sxXSAgWjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07
CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6dmFsdWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9y
S2V5OkAiaW5wdXRHVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNb
MTJdIFc6dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZ
OnZhbHVlc1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVj
dG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5
XV0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXRwdXQpLnNldEltYWdlKGNv
bG9yTWF0cml4RmlsdGVyLm91dHB1dEltYWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25l
bnRUcmFuc2ZlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2
MDYzMjU4MjNkNGU1ZDg1NWRiNDZmYmI5ODM5NmJlODk2Mjc1MzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRU
cmFuc2ZlckNvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDc2IEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgor
CisjaWYgVVNFKENPUkVfSU1BR0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0Cit7Cisg
ICAgYXV0byBpc051bGxPckxpbmVhciA9IFtdIChjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBmdW5jdGlvbikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgorICAgICAgICAgICAgfHwgZnVuY3Rpb24udHlwZSA9
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIH07CisKKyAgICByZXR1cm4g
aXNOdWxsT3JMaW5lYXIobV9yZWRGdW5jdGlvbikKKyAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIo
bV9ncmVlbkZ1bmN0aW9uKQorICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2JsdWVGdW5jdGlv
bikKKyAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIobV9hbHBoYUZ1bmN0aW9uKTsKK30KKworYm9v
bCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgcmVzdCBvZiBGRUNvbXBvbmVu
dFRyYW5zZmVyIGZ1bmN0aW9ucworICAgIEFTU0VSVChzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmlu
ZygpKTsKKworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0
ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gZG93bmNhc3Q8Rmls
dGVySW1hZ2VDb3JlSW1hZ2U+KGlucHV0KS5pbWFnZSgpOworICAgIGlmICghaW5wdXRJbWFnZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8gZmlsdGVyID0gW0NJRmlsdGVy
IGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvclBvbHlub21pYWwiXTsKKyAgICBbZmlsdGVyIHNldFZh
bHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOworICAgIAorICAg
IGF1dG8gc2V0Q29lZmZpY2llbnRzID0gWyZdIChOU1N0cmluZyAqa2V5LCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgeworICAgICAgICBpZiAoZnVuY3Rpb24udHlw
ZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSKQorICAgICAgICAgICAgW2ZpbHRl
ciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6ZnVuY3Rpb24uaW50ZXJjZXB0IFk6ZnVu
Y3Rpb24uc2xvcGUgWjowIFc6MF0gZm9yS2V5OmtleV07CisgICAgfTsKKyAgICBzZXRDb2VmZmlj
aWVudHMoQCJpbnB1dFJlZENvZWZmaWNpZW50cyIsIG1fcmVkRnVuY3Rpb24pOworICAgIHNldENv
ZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVudHMiLCBtX2dyZWVuRnVuY3Rpb24pOwor
ICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0Qmx1ZUNvZWZmaWNpZW50cyIsIG1fYmx1ZUZ1bmN0
aW9uKTsKKyAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwgbV9h
bHBoYUZ1bmN0aW9uKTsKKyAgICAKKyAgICBkb3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJbWFnZT4o
b3V0cHV0KS5zZXRJbWFnZShmaWx0ZXIub3V0cHV0SW1hZ2UpOworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9G
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZl
MmMwNDRhZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0KLSNp
bXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgiCi0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1MgQ0lJbWFnZTsKLU9C
SkNfQ0xBU1MgQ0lGaWx0ZXI7Ci1PQkpDX0NMQVNTIENJQ29udGV4dDsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBGRUNvbG9yTWF0cml4OwotY2xhc3MgRkVDb21wb25lbnRUcmFuc2Zl
cjsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlIDogcHVibGljIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0g
ICAgUmV0YWluUHRyPENJQ29udGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBhcHBs
eUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgYm9vbCBoYXNSZXN1bHQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX291dHB1dEltYWdlOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIG91dHB1
dCgpIGNvbnN0IGZpbmFsOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZl
Y3QmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7Ci0gICAgRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9pZCBy
ZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpIGZpbmFsOwotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwotICAgIHN0YXRpYyBi
b29sIGNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIAotICAgIFJl
dGFpblB0cjxDSUltYWdlPiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYpOwot
ICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xv
ck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7Ci0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVu
dFRyYW5zZmVyJiwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICAKLSAgICBSZWZQ
dHI8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+IG1fb3V0cHV0SW1hZ2VCdWZmZXI7Ci0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IG1fb3V0cHV0SW1hZ2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2UxMTM3YjI5ZDcxYzJiNTQ0
MTU3MzA2NzI0MDBiODI0MjhiMzYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9G
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMwOSAr
MCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0q
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIgotCi0jaWYgVVNFKENPUkVf
SU1BR0UpCi0KLSNpbXBvcnQgIkZFQ29sb3JNYXRyaXguaCIKLSNpbXBvcnQgIkZFQ29tcG9uZW50
VHJhbnNmZXIuaCIKLSNpbXBvcnQgIkZpbHRlci5oIgotI2ltcG9ydCAiRmlsdGVyRWZmZWN0Lmgi
Ci0jaW1wb3J0ICJGaWx0ZXJPcGVyYXRpb24uaCIKLSNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5o
IgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyLmgi
Ci0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJTb3VyY2VHcmFwaGljLmgiCi0jaW1wb3J0
IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+Ci0jaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4K
LSNpbXBvcnQgPENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KLSNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2ltcG9ydCA8d3RmL2NvY29hL1R5cGVDYXN0c0NvY29hLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKEZpbHRlckVmZmVj
dCYgbGFzdEVmZmVjdCkKLXsKLSAgICBpZiAoY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMobGFzdEVm
ZmVjdCkpCi0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlPigpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZXRhaW5QdHI8Q0lDb250ZXh0
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c2hhcmVkQ0lDb250ZXh0KCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9
IFtDSUNvbnRleHQgY29udGV4dFdpdGhPcHRpb25zOkB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JT
cGFjZTogYnJpZGdlX2lkX2Nhc3QoYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShr
Q0dDb2xvclNwYWNlU1JHQikpKS5nZXQoKSB9XTsKLSAgICByZXR1cm4gY2lDb250ZXh0OwotfQot
Ci1zdGF0aWMgYm9vbCBpc051bGxPckxpbmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oY29u
c3QgRkVDb21wb25lbnRUcmFuc2ZlciYgZWZmZWN0KQotewotICAgIGF1dG8gaXNOdWxsT3JMaW5l
YXIgPSBbXSAoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsKLSAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VO
S05PV04KLSAgICAgICAgICAgIHx8IGZ1bmN0aW9uLnR5cGUgPT0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX0xJTkVBUjsKLSAgICB9OwotICAgIHJldHVybiBpc051bGxPckxpbmVhcihlZmZlY3Qu
cmVkRnVuY3Rpb24oKSkgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSkK
LSAgICAgICAgJiYgaXNOdWxsT3JMaW5lYXIoZWZmZWN0LmJsdWVGdW5jdGlvbigpKSAmJiBpc051
bGxPckxpbmVhcihlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLX0KLQotYm9vbCBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZm
ZWN0JiBlZmZlY3QpCi17Ci0gICAgLy8gRklYTUU6IGNoYW5nZSByZXR1cm4gdmFsdWUgdG8gdHJ1
ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyRWZm
ZWN0Q2xhc3NUeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3Jh
cGhpYzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKLSAgICAgICAgc3dpdGNoIChkb3duY2FzdDxG
RUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9VTktOT1dOOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKLSAgICAgICAgcmV0dXJuIGlzTnVsbE9y
TGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2FzdDxGRUNvbXBvbmVudFRyYW5z
ZmVyPihlZmZlY3QpKTsKLQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaXNwbGFjZW1l
bnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRyb3BTaGFkb3c6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkltYWdlOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok1vcnBob2xvZ3k6
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VHVyYnVsZW5jZToKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewot
ICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxhc3RFZmZlY3QpOwotICAgIGlm
ICghbV9vdXRwdXRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHJlbmRlclRvSW1hZ2VCdWZm
ZXIobGFzdEVmZmVjdCk7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsK
LSAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiBpbnB1dEltYWdlczsKLSAgICAKLSAgICBm
b3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgYXV0byBpbnB1
dEltYWdlID0gY29ubmVjdENJRmlsdGVycygqaW4pOwotICAgICAgICBpZiAoIWlucHV0SW1hZ2Up
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaW5wdXRJbWFnZXMuYXBwZW5k
KGlucHV0SW1hZ2UpOwotICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNF
bXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBz
d2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JTb3Vy
Y2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVjdCkpOwotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yRkVD
b2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLCBpbnB1dEltYWdlcyk7
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgotICAgICAg
ICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRvd25jYXN0PEZFQ29tcG9uZW50
VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLQotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1
cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaXNwbGFj
ZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRyb3BTaGFkb3c6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkltYWdlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok1vcnBob2xv
Z3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VHVyYnVsZW5jZToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1S
ZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9y
U291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCi17Ci0gICAgSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFz
b3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKGlzPElP
U3VyZmFjZUltYWdlQnVmZmVyPigqc291cmNlSW1hZ2UpKQotICAgICAgICByZXR1cm4gW0NJSW1h
Z2UgaW1hZ2VXaXRoSU9TdXJmYWNlOmRvd25jYXN0PElPU3VyZmFjZUltYWdlQnVmZmVyPigqc291
cmNlSW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwotICAgIAotICAgIHJldHVybiBbQ0lJbWFn
ZSBpbWFnZVdpdGhDR0ltYWdlOnNvdXJjZUltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxhdGZv
cm1JbWFnZSgpLmdldCgpXTsKLX0KLQotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjppbWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJp
eCYgZWZmZWN0LCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYgaW5wdXRJbWFnZXMp
Ci17Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0KLSAgICBhdXRv
IHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoZWZmZWN0LnZhbHVlcygp
KTsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LnR5
cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgICAgICBG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFs
dWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfSFVFUk9UQVRFOgotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVD
b21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIAot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklYTUU6IEFkZCBMdW1pbmFuY2Ug
dG8gQWxwaGEgSW1wbGVtZW50YXRpb24KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
ICAgIAotICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhO
YW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpp
bnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5XTsKLSAgICAKLSAgICBzd2l0
Y2ggKGVmZmVjdC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKLSAgICAgICAgW2Nv
bG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRz
WzBdIFk6Y29tcG9uZW50c1sxXSBaOmNvbXBvbmVudHNbMl0gVzowXSBmb3JLZXk6QCJpbnB1dFJW
ZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2
ZWN0b3JXaXRoWDpjb21wb25lbnRzWzNdIFk6Y29tcG9uZW50c1s0XSBaOmNvbXBvbmVudHNbNV0g
VzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpjb21wb25lbnRzWzZdIFk6Y29tcG9uZW50
c1s3XSBaOmNvbXBvbmVudHNbOF0gVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKLSAgICAg
ICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowICAg
ICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAgICAgICAgVzoxXSBmb3JLZXk6QCJp
bnB1dEFWZWN0b3IiXTsKLSAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDowICAgICAgICAgICAgIFk6MCAgICAgICAgICAgICBaOjAgICAgICAg
ICAgICAgVzowXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDogewotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1swXSAg
WTp2YWx1ZXNbMV0gIFo6dmFsdWVzWzJdICBXOnZhbHVlc1szXV0gIGZvcktleTpAImlucHV0UlZl
Y3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhYOnZhbHVlc1s1XSAgWTp2YWx1ZXNbNl0gIFo6dmFsdWVzWzddICBXOnZhbHVlc1s4
XV0gIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVlc1sxMF0gWTp2YWx1ZXNbMTFdIFo6
dmFsdWVzWzEyXSBXOnZhbHVlc1sxM11dIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAg
ICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZhbHVl
c1sxNV0gWTp2YWx1ZXNbMTZdIFo6dmFsdWVzWzE3XSBXOnZhbHVlc1sxOF1dIGZvcktleTpAImlu
cHV0QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVj
dG9yIHZlY3RvcldpdGhYOnZhbHVlc1s0XSAgWTp2YWx1ZXNbOV0gIFo6dmFsdWVzWzE0XSBXOnZh
bHVlc1sxOV1dIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgcmV0dXJuIGNvbG9yTWF0cml4RmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1S
ZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9y
RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiBlZmZlY3QsIFZl
Y3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNmZXIgZnVuY3Rpb25zCi0gICAg
QVNTRVJUKGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihlZmZlY3QpKTsK
LQotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0SW1hZ2VzLmF0KDApOwotICAgIGF1dG8gZmls
dGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvclBvbHlub21pYWwiXTsKLSAg
ICAKLSAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0
SW1hZ2VLZXldOwotICAgIAotICAgIGF1dG8gc2V0Q29lZmZpY2llbnRzID0gWyZdIChOU1N0cmlu
ZyAqa2V5LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAg
ICAgICBpZiAoZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFS
KQotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6ZnVu
Y3Rpb24uaW50ZXJjZXB0IFk6ZnVuY3Rpb24uc2xvcGUgWjowIFc6MF0gZm9yS2V5OmtleV07Ci0g
ICAgfTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dFJlZENvZWZmaWNpZW50cyIsIGVmZmVj
dC5yZWRGdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEdyZWVuQ29lZmZp
Y2llbnRzIiwgZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7Ci0gICAgc2V0Q29lZmZpY2llbnRzKEAi
aW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgZWZmZWN0LmJsdWVGdW5jdGlvbigpKTsKLSAgICBzZXRD
b2VmZmljaWVudHMoQCJpbnB1dEFscGhhQ29lZmZpY2llbnRzIiwgZWZmZWN0LmFscGhhRnVuY3Rp
b24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIGZpbHRlci5vdXRwdXRJbWFnZTsKLX0KLQotYm9vbCBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmls
dGVyRWZmZWN0JiBlZmZlY3QpCi17Ci0gICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmlu
ZyhlZmZlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgZm9yIChhdXRvIGlu
IDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGlmICghc3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcoKmluKSB8fCAhY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoKmluKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUltYWdl
QnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6b3V0cHV0KCkgY29uc3QKLXsK
LSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJpbmcgIiA8PCB0
aGlzIDw8ICIgdXNpbmcgQ29yZUltYWdlXG4iKTsKLSAgICByZXR1cm4gbV9vdXRwdXRJbWFnZUJ1
ZmZlci5nZXQoKTsKLX0KLSAgICAKLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6
OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotICAgIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShsYXN0RWZmZWN0
LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291dHB1dEltYWdlQnVmZmVyID0g
SU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbGFzdEVmZmVjdC5maWx0
ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1fb3V0cHV0SW1hZ2VCdWZmZXIpIHsKLSAgICAgICAg
Y2xlYXJSZXN1bHQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtzaGFyZWRDSUNv
bnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0KCkgdG9JT1N1cmZhY2U6IG1f
b3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkgYm91bmRzOmRlc3RSZWN0KGxh
c3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkucGxhdGZv
cm1Db2xvclNwYWNlKCldOwotfQotICAgIAotRmxvYXRSZWN0IEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpIGNvbnN0
Ci17Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBkZXN0U2l6ZSk7Ci0gICAgcmV0dXJuIGRlc3RSZWN0OwotfQotCi12b2lkIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpjbGVhclJlc3VsdCgpCi17Ci0gICAgbV9vdXRwdXRJbWFnZUJ1
ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXRJbWFnZSA9IG51bGxwdHI7Ci19Ci0KLUZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgp
Ci0gICAgOiBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpCi17Ci19Ci0gICAgCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hNzRjNThhYjY2YTI4MTA1MDMwNmNmOTY3OGJiNzU4ZGE5YTIwZDNjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0Zp
bHRlckltYWdlQ29yZUltYWdlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0ICJGaWx0
ZXJJbWFnZS5oIgorCitPQkpDX0NMQVNTIENJSW1hZ2U7CitPQkpDX0NMQVNTIENJQ29udGV4dDsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJJbWFnZUNvcmVJbWFnZSA6IHB1
YmxpYyBGaWx0ZXJJbWFnZSB7CitwdWJsaWM6CisgICAgdXNpbmcgRmlsdGVySW1hZ2U6OkZpbHRl
ckltYWdlOworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoUmV0YWluUHRyPENJSW1hZ2U+JiYpOworICAg
IAorcHJpdmF0ZToKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3Rz
KCkgb3ZlcnJpZGU7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisK
KyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVySW1hZ2VDb3JlSW1hZ2UpCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckltYWdlJiByZXN1bHQpIHsg
cmV0dXJuIHJlc3VsdC5yZW5kZXJpbmdNb2RlKCkgPT0gV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8v
IFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckltYWdlQ29yZUltYWdlLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcxOWZlMDU4OGZmMDU1NGU5YjIxMjJjOGM2MWU1NjMzNjY0YzcxNDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVySW1hZ2VDb3JlSW1hZ2UubW0KQEAgLTAsMCArMSw3MyBAQAorLyoKKyogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkZpbHRlckltYWdlQ29yZUltYWdlLmgi
CisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
IgorI2ltcG9ydCA8Q29yZUltYWdlL0NJQ29udGV4dC5oPgorI2ltcG9ydCA8Q29yZUltYWdlL0Nv
cmVJbWFnZS5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0IDx3dGYv
Y29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
UmV0YWluUHRyPENJQ29udGV4dD4gc2hhcmVkQ0lDb250ZXh0KCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENJQ29udGV4dD4+IGNpQ29udGV4dCA9IFtDSUNvbnRleHQg
Y29udGV4dFdpdGhPcHRpb25zOkB7IGtDSUNvbnRleHRXb3JraW5nQ29sb3JTcGFjZTogYnJpZGdl
X2lkX2Nhc3QoYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNl
U1JHQikpKS5nZXQoKSB9XTsKKyAgICByZXR1cm4gY2lDb250ZXh0OworfQorCit2b2lkIEZpbHRl
ckltYWdlQ29yZUltYWdlOjpzZXRJbWFnZShSZXRhaW5QdHI8Q0lJbWFnZT4mJiBpbWFnZSkKK3sK
KyAgICBBU1NFUlQoaW1hZ2UpOworICAgIG1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKK30KKwor
UmVmUHRyPEltYWdlQnVmZmVyPiYgRmlsdGVySW1hZ2VDb3JlSW1hZ2U6OmltYWdlQnVmZmVySWZF
eGlzdHMoKQoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOworfQorCitJbWFnZUJ1ZmZlciog
RmlsdGVySW1hZ2VDb3JlSW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdl
QnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBtX3Jl
c29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlm
ICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGRl
c3RSZWN0ID0gRmxvYXRSZWN0IHsgRmxvYXRQb2ludCgpLCBtX2xvZ2ljYWxTaXplIH07CisgICAg
W3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjogbV9pbWFnZS5nZXQoKSB0b0lPU3VyZmFj
ZTogZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCptX2ltYWdlQnVmZmVyKS5zdXJmYWNl
KCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdCBjb2xvclNwYWNlOm1fY29sb3JTcGFjZS5wbGF0
Zm9ybUNvbG9yU3BhY2UoKV07CisgICAgCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMDlk
NmVhZDFiZjI1NDg4NWJiNTNlNzI2OGU4MGFiMzNiNmJkMWMzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWND
b3JlSW1hZ2UubW0KQEAgLTAsMCArMSw2MSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNvdXJjZUdyYXBoaWMuaCIKKworI2lmIFVTRShDT1JF
X0lNQUdFKQorCisjaW1wb3J0ICJGaWx0ZXJJbWFnZS5oIgorI2ltcG9ydCAiRmlsdGVySW1hZ2VW
ZWN0b3IuaCIKKyNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdl
JiBvdXB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1
dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5w
dXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZTsKKyAgICBpZiAoaXM8SU9TdXJm
YWNlSW1hZ2VCdWZmZXI+KCppbnB1dEltYWdlKSkKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBp
bWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCppbnB1dElt
YWdlKS5zdXJmYWNlKCkuc3VyZmFjZSgpXTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gW0NJ
SW1hZ2UgaW1hZ2VXaXRoQ0dJbWFnZTppbnB1dEltYWdlLT5jb3B5TmF0aXZlSW1hZ2UoKS0+cGxh
dGZvcm1JbWFnZSgpLmdldCgpXTsKKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBkb3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJbWFnZT4ob3VwdXQpLnNl
dEltYWdlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5F
T04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUJsZW5kTkVPTi5oCmluZGV4IDI2MTEwY2RmYjBiYjZjZjQ5MDQ1ODM4Nzc4N2FjMTBmYTE3MWNm
MTguLjExODE5ZTU3OWNlYzkyYTdjZTcxZjUwNjVhYjY5ODMwODQwYTBmMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5k
TkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUJsZW5kTkVPTi5oCkBAIC0yNSw4ICsyNSw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpZm5kZWYgRkVCbGVuZE5FT05faAotI2RlZmluZSBGRUJsZW5kTkVPTl9oCisjcHJhZ21h
IG9uY2UKIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKIApAQCAtMTA3LDE1ICsxMDYs
MTggQEAgcHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKK0ZpbHRlclJlc3VsdCogRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKEZp
bHRlclJlc3VsdHMmIHJlc3VsdHMsIEZpbHRlclJlc3VsdFZlY3RvciYgc3RhY2ssIEltYWdlQnVm
ZmVyKiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwor
ICAgIGF1dG8gaW4gPSBzdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gaW4yID0gc3RhY2sudGFr
ZUxhc3QoKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXN1bHRzLmdldCh7ICp0aGlzIH0pKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVy
KCkuY3JlYXRlRmlsdGVyUmVzdWx0KGFic29sdXRlUGFpbnRSZWN0KCksIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCisg
ICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcmVzdWx0LT5waXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0xMjksNyArMTMxLDcgQEAgdm9pZCBGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlM
ZW5ndGggPj0gOCkgewogICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5
QS0+ZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKICAgICB9CiAgICAgLy8gSWYgdGhlcmUgaXMg
anVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KICAgICBBU1NFUlQoc291cmNlUGl4
ZWxBcnJheUxlbmd0aCA+IDApOwpAQCAtMTQwLDYgKzE0Miw4IEBAIHZvaWQgRkVCbGVuZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKICAgICBwbGF0
Zm9ybUFwcGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIDgpOwogICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBd
OworCisgICAgcmV0dXJuIHJlc3VsdC5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgRkVCbGVuZDo6cGxh
dGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNo
YXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApAQCAtMjA1
LDUgKzIwOSwzIEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hh
ciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0KLSNlbmRpZiAvLyBG
RUJsZW5kTkVPTl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdi9DVlV0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2
L0NWVXRpbGl0aWVzLm1tCmluZGV4IDQwNzI3MDQzZmQxMmQ2MmE0Y2JkN2RiYjU5ZTQxMTYwYTI4
ZGRmMjIuLmFjZjk2ZmQwZDU0MGFiODZlNzcwZDQ2MTNjMTkwYTIyODNiNzA1ZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0NWVXRpbGl0aWVzLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0NWVXRpbGl0aWVzLm1tCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkNWVXRpbGl0aWVz
LmgiCiAKKyNpbXBvcnQgIkNvbG9yU3BhY2VDRy5oIgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAKaW5kZXggZGZmNDE0NDI2MTk2N2JmZThkZTJkZWM5MmM2ZjkzOTgzMmRlMTdlOC4uMzg1
ZWVlOWY2ZmI0ODAxZjdiZjkzMTZhMDNjMGI1ZTI3MWY1YzM2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3QuY3BwCkBAIC0yNTEsNiArMjUxLDggQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0
ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGl0
ZW0uZ2V0PERyYXdOYXRpdmVJbWFnZT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRl
cm46CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0PERyYXdQYXR0
ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPihpdGVtLmdldDxEcmF3Rmls
dGVySW1hZ2VCdWZmZXI+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgogICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdSZWN0PihpdGVtLmdldDxEcmF3UmVjdD4oKSk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwCmluZGV4IGMxMzllNTA5NDg1MTgwYjllYmQ5MDE3MjcyYmU5NmFhNTIyNjc1ZmUu
LmFhMmQ1N2FmMGRkYzUxNGFhYmYwMjNjNWE0N2YwOWYxYzUzMDhmMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCkBAIC0xMjYsNiArMTI2LDkgQEAgdm9p
ZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdHRlcm46CiAgICAgICAgIGdldDxEcmF3UGF0dGVybj4oKS5hcHBseShj
b250ZXh0KTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcjoKKyAgICAgICAgZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0Ogog
ICAgICAgICBnZXQ8RHJhd1JlY3Q+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTI1OSw2ICsyNjIsOSBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBQYXRoOgogICAgICAgICBnZXQ8Q2xpcFBhdGg+KCkufkNsaXBQYXRoKCk7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZm
ZXI6CisgICAgICAgIGdldDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KCkufkRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcigpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1BhdGg6CiAgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKS5+RHJhd0ZvY3VzUmlu
Z1BhdGgoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTAwLDYgKzUwNiw4IEBAIGJvb2wgSXRlbUhh
bmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwT3V0VG9QYXRoPihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CiAgICAgICAgIHJldHVybiBj
b3B5SW50bzxDbGlwUGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdGb2N1c1JpbmdQYXRoOgogICAgICAgICByZXR1cm4gY29weUludG88RHJhd0ZvY3VzUmluZ1Bh
dGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXggMjQ0
ZTBlMzVjMTI3NTYyMDk2OWM1YWJhNTg2NDIwNTE4YWU0ZWQ0MC4uMGFlOTA3NThkY2EyMjBiYjBk
YjZkYWI4YTIyZmY2OWI4MzU1NGY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1UeXBlLmNwcApAQCAtODgsNiArODgsOCBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5
dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoRHJhd05hdGl2ZUltYWdl
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKICAgICAgICAgcmV0dXJuIHNpemVv
ZihEcmF3UGF0dGVybik7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVy
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1JlY3QpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgpAQCAtMjIyLDYgKzIyNCw3IEBAIGJvb2wgaXNE
cmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ds
eXBoczoKQEAgLTI5Niw2ICsyOTksNyBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBl
KQogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOgogICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOgogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0czoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggOTkxOTQ1OGQyMzY1OWNlZWNiNzU4NTM4N2YxMjhl
ZmFmMGQ0N2EyNS4uMmIzMjA0NDNjYmRjNGU1NjA2NmI2OTQ3ZTEwYjhlYmVhMWI0NzYzNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBAIC01Miw2ICs1Miw3IEBAIGVu
dW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBDbGlwUGF0aCwKICAgICBCZWdpbkNs
aXBUb0RyYXdpbmdDb21tYW5kcywKICAgICBFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMsCisgICAg
RHJhd0ZpbHRlckltYWdlQnVmZmVyLAogICAgIERyYXdHbHlwaHMsCiAgICAgRHJhd0ltYWdlQnVm
ZmVyLAogICAgIERyYXdOYXRpdmVJbWFnZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcAppbmRleCBlNzI2ZDk0ZjMwMDUwMDIzMTJiYzY0MmIzMDE1ZWNiYWUzMTQ4NDhjLi5jM2Fh
NjUyM2Q2NmNlNGM2YjU1OTMzMjQwNzNiYzEzMTBjYWNiOTRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuY3BwCkBAIC00MjUsNiArNDI1LDMxIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKK0RyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjo6RHJhd0ZpbHRlckltYWdl
QnVmZmVyKHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KQorICAgIDogbV9pbWFnZUlkZW50aWZp
ZXIoaW1hZ2VJZGVudGlmaWVyKQorICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VS
ZWN0KQorICAgICwgbV9maWx0ZXIoZmlsdGVyKQorICAgICwgbV9nZW9tZXRyeShnZW9tZXRyeSkK
K3sKK30KKworTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBEcmF3RmlsdGVySW1hZ2VCdWZm
ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgRHJhd0ZpbHRlckltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIFdlYkNvcmU6OkltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSkKK3sKKyAg
ICBjb250ZXh0LmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgbV9zb3VyY2VJbWFn
ZVJlY3QsIG1fZmlsdGVyLCBtX2dlb21ldHJ5KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGaWx0ZXJJbWFnZUJ1ZmZlciYgaXRl
bSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlLWlkZW50aWZpZXIiLCBpdGVtLmltYWdl
SWRlbnRpZmllcigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1pbWFnZS1yZWN0Iiwg
aXRlbS5zb3VyY2VJbWFnZVJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCiB2b2lkIERyYXdS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKQEAgLTEwNzUsNiArMTEwMCw3
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlw
ZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjogdHMgPDwgImRyYXct
aW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdl
OiB0cyA8PCAiZHJhdy1uYXRpdmUtaW1hZ2UiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0dGVybjogdHMgPDwgImRyYXctcGF0dGVybiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjogdHMgPDwgImRyYXctZmlsdGVyLWltYWdlLWJ1ZmZl
ciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB0cyA8PCAiZHJhdy1yZWN0
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHRzIDw8ICJkcmF3LWxpbmUi
OyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB0cyA8PCAiZHJh
dy1saW5lcy1mb3ItdGV4dCI7IGJyZWFrOwpAQCAtMTIwNCw2ICsxMjMwLDkgQEAgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0dGVy
bj4oKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdl
QnVmZmVyOgorICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KCk7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgogICAgICAgICB0
cyA8PCBpdGVtLmdldDxEcmF3UmVjdD4oKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaAppbmRleCBjZWJmMzY5YmZhMmVmMGY2N2YxMzFmYjg1MjM2ZTlhYTg5
N2Q0NDgwLi5iNzJhN2E0YWJiOGIwZDVlNGU2YjAxYmMyODg0ODZmZGJiOTg1OGY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtQnVmZmVy
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0
Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKQEAgLTExMDAsNiArMTEwMiwzMCBAQCBwcml2YXRlOgogICAgIEltYWdlUGFpbnRpbmdPcHRp
b25zIG1fb3B0aW9uczsKIH07CiAKK2NsYXNzIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpE
cmF3RmlsdGVySW1hZ2VCdWZmZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKKworICAgIFdFQkNPUkVfRVhQT1JUIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBp
bWFnZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlSWRlbnRpZmllcjsgfQorICAg
IEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdl
UmVjdDsgfQorCisgICAgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSk7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisK
K3ByaXZhdGU6CisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
IG1faW1hZ2VJZGVudGlmaWVyOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKKyAg
ICBSZWY8RmlsdGVyPiBtX2ZpbHRlcjsKKyAgICBGaWx0ZXJHZW9tZXRyeSBtX2dlb21ldHJ5Owor
fTsKKwogY2xhc3MgQmVnaW5UcmFuc3BhcmVuY3lMYXllciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyOwpAQCAtMjQ0Myw2ICsyNDY5LDcgQEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3Rk
Ojp2YXJpYW50CiAgICAgLCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcgogICAgICwgRHJhd0VsbGlwc2UKKyAgICAsIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcgog
ICAgICwgRHJhd0ZvY3VzUmluZ1BhdGgKICAgICAsIERyYXdGb2N1c1JpbmdSZWN0cwogICAgICwg
RHJhd0dseXBocwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4
IDQ3Nzk0MjFmNDNkNmNhOTA5M2ZiYzVmNWYzMzJmZjQwOTlhNTNhNjEuLjUwMWJiMmYwMTcxOTRm
ZjZjMzA1ZjMyNDM0MjZkOGNiZDA3NzYzOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKQEAgLTE4Miw2ICsxODIsMjQgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QKICAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlcklt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnkpCit7CisgICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKworICAgIGlm
ICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHsg
fSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UpKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJjZUlt
YWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZ2VvbWV0cnkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIHJlY29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSk7CisgICAg
cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKK30KKwog
dm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVjb3JkU2F2ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggMDYwNWQ2ZjI0YmY0NTMyNDdhNGE4ZTg4ZmUz
YmRjMjYwNzc2MDc0NC4uZjk2YmI4ZjMzM2JhYzA0MDlkMzM5NTE5ZjExYWVkYjc0NjQ0MzE4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC05Miw2ICs5Miw3IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFn
ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lM
YXllcigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQpID0gMDsKQEAgLTIyOSw2ICsyMzAsOCBAQCBwcml2YXRlOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlckltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgZmluYWw7CisKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
SW1wbC5jcHAKaW5kZXggZjQ3NDMyNGZkNzMxYjJjNzk1ZmZjMTY4M2VhZmUxOGMxNjhmYjdhNS4u
NzhjMGM0NzNjNDM2YTk4MGRhZmUxYjlkNThlYzNhMGEwZTA0OTYzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBAIC0yMjgsNiArMjI4LDExIEBA
IHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyCiAgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlk
ZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdG
aWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkKK3sKKyAgICBhcHBl
bmQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPihpbWFnZUlkZW50aWZpZXIsIHNvdXJjZUltYWdlUmVj
dCwgZmlsdGVyLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgYXBwZW5kPEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuaAppbmRleCBiZWQ3MWY2NDg1MWQ3YmUxMzAxOThkYTIwZDQ4YWEzZGI2YjM5
NDE5Li4xMTYzMGExYWRlYjFhOTIzMWMxZWUwZmMzZTVjMDczNGFhY2UzMDI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtOTAsNiArOTAsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRl
cm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4
IGNkZWFhNjVlNjcwNGNkNjdmYjBhN2FmZTlhZjE4ZmJiNjJjMmNlZDkuLjhiODAyM2NmMzYyY2Q2
MGE2NzQ3MzgzMmNiYTg4ZGY4MjhjYmU3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtNSw2ICs1LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSw2NCArMjYsMzMg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUJsZW5kLmgiCiAKLSNpbmNsdWRl
ICJGRUJsZW5kTkVPTi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5j
bHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6RkVCbGVuZChGaWx0ZXImIGZp
bHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpC
bGVuZCkKLSAgICAsIG1fbW9kZShtb2RlKQorUmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShC
bGVuZE1vZGUgbW9kZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKG1vZGUp
KTsKIH0KIAotUmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQmxl
bmRNb2RlIG1vZGUpCitGRUJsZW5kOjpGRUJsZW5kKEJsZW5kTW9kZSBtb2RlKQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFQmxlbmQpCisgICAgLCBtX21vZGUobW9kZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKGZpbHRlciwgbW9kZSkpOwogfQogCi1ib29sIEZFQmxl
bmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKK0ZpbHRlckltYWdlVmVjdG9yIEZFQmxl
bmQ6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGlm
IChtX21vZGUgPT0gbW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9kZSA9IG1v
ZGU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSAyKTsKKyAg
ICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpLCBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKLSNp
ZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8
fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
Mi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCkpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7Ci19Ci0jZW5k
aWYKLQotVGV4dFN0cmVhbSYgRkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0
cmVhbSYgRkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVCbGVu
ZCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgdHMgPDwgIiBtb2RlPVwiIiA8PCAobV9tb2RlID09IEJsZW5kTW9kZTo6
Tm9ybWFsID8gIm5vcm1hbCIgOiBjb21wb3NpdGVPcGVyYXRvck5hbWUoQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSkpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0
czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuaAppbmRleCA3MGU4NDA3YmY1YzIwMGQ0NTIxNmI4ZjljMDg1MTdiNTA3OWU3OTY2
Li4yZGI2NWIyZDJhOGM5YzAzODVkNWEwOTkyY2U1NjEzZDJiNDE0ZDkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMyw2
ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMzMgKzI0LDQ4IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmls
dGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZFQmxlbmQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEJsZW5kTW9kZSk7CisKKyAgICB2
b2lkIHNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CiAKLSAg
ICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgYm9v
bCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFQmxlbmQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBw
cml2YXRlOgotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVCbGVuZCI7IH0KKyAgICBGRUJsZW5kKEJsZW5kTW9kZSk7CiAKLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVy
aWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVs
QXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3Jj
UGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKKyAgICBGaWx0ZXJJbWFn
ZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRNb2RlKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFQmxlbmQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgbV9tb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVCbGVuZD4+IEZFQmxlbmQ6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBtb2RlOworICAgIGRl
Y29kZXIgPj4gbW9kZTsKKyAgICBpZiAoIW1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gRkVCbGVuZDo6Y3JlYXRlKCptb2RlKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVC
bGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDM4MDY1Y2I5NmM3YjRiNGIwM2ZjNmIwZWVk
ODVhYzRiNmM5NjhhNTQuLjU2ZjAyZTljNDMyNmIyYWMwZmI1ZDQ2NmQwMTgwOTA0M2IzN2Y0ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMzAz
ICsyNCw2NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXgu
aCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxl
cmF0ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb2xvck1hdHJpeDo6
RkVDb2xvck1hdHJpeChGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3Rv
cjxmbG9hdD4mJiB2YWx1ZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb2xv
ck1hdHJpeCkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1
ZXMpKQotewotfQotCi1SZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZp
bHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVl
cykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZpbHRlciwgdHlw
ZSwgV1RGTW92ZSh2YWx1ZXMpKSk7Ci19Ci0KLWJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VHlwZShD
b2xvck1hdHJpeFR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1
ZXMpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4
VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogewotICAgIGlmIChtX3ZhbHVlcyA9
PSB2YWx1ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3ZhbHVlcyA9IHZhbHVlczsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4
KHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOwogfQogCi1pbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiB2YWx1ZXMpCi17Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAgICBmbG9hdCBnID0g
Z3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0gICAgZmxvYXQgYSA9IGFscGhhOwotCi0gICAg
cmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICog
YiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKLSAgICBncmVlbiAgID0gdmFs
dWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlcyBbN10gKiBiICsgdmFsdWVzWyA4
XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OwotICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciAr
IHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVl
c1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAq
IGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsK
LX0KLQotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCitGRUNvbG9yTWF0
cml4OjpGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSBjb2xvck1hdHJpeFR5cGUsIFZlY3Rv
cjxmbG9hdD4mJiB2YWx1ZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVDb2xvck1hdHJp
eCkKKyAgICAsIG1fY29sb3JNYXRyaXhUeXBlKGNvbG9yTWF0cml4VHlwZSkKKyAgICAsIG1fdmFs
dWVzKFdURk1vdmUodmFsdWVzKSkKIHsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcg
PSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLQotICAgIHJlZCAgICAgPSByICogY29tcG9u
ZW50c1swXSArIGcgKiBjb21wb25lbnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3Jl
ZW4gICA9IHIgKiBjb21wb25lbnRzWzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9u
ZW50c1s1XTsKLSAgICBibHVlICAgID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50
c1s3XSArIGIgKiBjb21wb25lbnRzWzhdOwogfQogCi0vLyBGSVhNRTogdGhpcyBzaG91bGQgdXNl
IHRoZSBsdW1pbmFuY2UoLi4uKSBmdW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5l
IHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZs
b2F0JiBhbHBoYSkKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBhbHBoYSA9IDAuMjEy
NSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKLSAgICByZWQgPSAwOwot
ICAgIGdyZWVuID0gMDsKLSAgICBibHVlID0gMDsKKyAgICBjb21wb25lbnRzWzBdID0gKDAuMjEz
ICsgMC43ODcgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICog
dmFsdWUpOworICAgIGNvbXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAg
ICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50
c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNV0gPSAoMC4w
NzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMg
KiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwor
ICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKIH0KIAotI2lmIFVT
RShBQ0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29s
IGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBi
dWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKIHsKLSAgICBBU1NFUlQocGl4ZWxB
cnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAotICAgIGlmIChm
aWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdklt
YWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFs
dWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAg
ICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAg
ICAgIGlmICh2YWx1ZXNbNF0gIT0gMCB8fCB2YWx1ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9
IDAgfHwgdmFsdWVzWzE5XSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0g
cGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVp
Z2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBz
cmMuZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qu
d2lkdGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXpl
LmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0Owot
ICAgIGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKLSAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBt
YXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sgMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyA1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCi0KLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WzExXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTZdICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3Ip
KSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWyA4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbMTNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCi0gICAgICAgIH07Ci0gICAgICAg
IHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlz
b3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0
cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAg
ICAgIDAsCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25l
bnRzWzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAs
Ci0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNv
bXBvbmVudHNbNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIDAsCi0KLSAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAg
IGRpdmlzb3IsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4
ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1h
Z2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhb
NCAqIDRdID0gewotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAw
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEyNSAqIGRpdmlz
b3IpKSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAqIGRpdmlzb3Ip
KSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRpdmlzb3IpKSwK
LQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVy
biB0cnVlOworICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBpRmxvYXQgLyAxODApOwor
ICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGNvbXBv
bmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVlICogMC4yMTM7CisgICAg
Y29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBzaW5IdWUgKiAwLjcxNTsK
KyAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiArIHNpbkh1ZSAqIDAu
OTI4OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzICsgc2luSHVl
ICogMC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29zSHVlICogMC4yODUgKyBz
aW5IdWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3
MiAtIHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNbNl0gPSAwLjIxMyAtIGNvc0h1ZSAq
IDAuMjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9uZW50c1s3XSA9IDAuNzE1IC0gY29z
SHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzhdID0gMC4wNzIg
KyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwogfQotI2VuZGlmCiAKLXRlbXBsYXRl
PENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFNpemUg
YnVmZmVyU2l6ZSkKK2Jvb2wgRkVDb2xvck1hdHJpeDo6aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJikgY29uc3QKIHsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAg
aWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFs
dWVzWzBdKTsKLSAgICBlbHNlIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBv
bmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLQotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
aWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVz
LCBjb21wb25lbnRzLCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlw
ZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVl
biA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAg
ICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsK
LSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKLSAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVu
c2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVu
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxv
YXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAg
ICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwot
ICAgICAgICAgICAgc2F0dXJhdGVBbmRIdWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9u
ZW50cyk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7
Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7
Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsK
LSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0
ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2Uo
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
IHJldHVybiBtX2NvbG9yTWF0cml4VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQTsKIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQorRmlsdGVySW1hZ2VWZWN0b3IgRkVDb2xvck1hdHJpeDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFn
ZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENv
bG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2Ut
PmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIXBpeGVsQnVmZmVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIt
PmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNp
emUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3Zh
bHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgZWZm
ZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywg
cGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAg
ICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJl
c3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAg
QVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkg
fTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIGNvbG9yTWF0cml4VHlwZSkK
IHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBzd2l0Y2ggKGNvbG9yTWF0cml4VHlwZSkgewog
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIHRzIDw8ICJVTktO
T1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMzksMTEgKzEwMiwxMCBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJl
cHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb2xvck1hdHJpeCI7Ci0gICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMg
PDwgIiB0eXBlPVwiIiA8PCBtX3R5cGUgPDwgIlwiIjsKKyAgICB0cyA8PCAiIHR5cGU9XCIiIDw8
IG1fY29sb3JNYXRyaXhUeXBlIDw8ICJcIiI7CiAgICAgaWYgKCFtX3ZhbHVlcy5pc0VtcHR5KCkp
IHsKICAgICAgICAgdHMgPDwgIiB2YWx1ZXM9XCIiOwogICAgICAgICBWZWN0b3I8ZmxvYXQ+Ojpj
b25zdF9pdGVyYXRvciBwdHIgPSBtX3ZhbHVlcy5iZWdpbigpOwpAQCAtMzU3LDkgKzExOSw2IEBA
IFRleHRTdHJlYW0mIEZFQ29sb3JNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uCiAgICAgICAgIHRzIDw8ICJcIiI7CiAgICAgfQogICAg
IHRzIDw8ICJdXG4iOwotICAgIAotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNj
b3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywg
cmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRl
eCAyOWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi45YTQ0NjQ2YTNiYjQ0
NWMzMTllNDYzNTA2OGQ5OWNlN2Q0ZWQ3NmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzgsNjIgKzM3LDc3IEBAIGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVD
b2xvck1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVDb2xvck1hdHJpeD4gY3JlYXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9y
PGZsb2F0PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+
IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CiAKLSAgICBDb2xvck1h
dHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIGJvb2wgc2V0VHlw
ZShDb2xvck1hdHJpeFR5cGUpOworICAgIHZvaWQgc2V0Q29sb3JNYXRyaXhUeXBlKENvbG9yTWF0
cml4VHlwZSBjb2xvck1hdHJpeFR5cGUpIHsgbV9jb2xvck1hdHJpeFR5cGUgPSBjb2xvck1hdHJp
eFR5cGU7IH0KKyAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMp
IHsgbV92YWx1ZXMgPSB2YWx1ZXM7IH0KIAotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9Ci0gICAgYm9vbCBzZXRWYWx1ZXMoY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9u
ZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVl
KTsKKyAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHZhbHVlcyk7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0
dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3Rh
dGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8UmVmPEZFQ29sb3JNYXRyaXg+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBw
cml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0
b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8
ZmxvYXQ+JiYpOworCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtl
SW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBj
b25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29sb3JNYXRy
aXgiOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0
IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwor
I2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmco
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBv
dXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICBDb2xvck1hdHJpeFR5cGUgbV90eXBlOworICAgIENvbG9yTWF0cml4VHlwZSBt
X2NvbG9yTWF0cml4VHlwZTsKICAgICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5s
aW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0
KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZFQ29sb3JNYXRyaXg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGNv
bXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzFd
ID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAt
IDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZh
bHVlKTsKLSAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7Ci0gICAg
Y29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNb
Nl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzddID0gKDAuNzE1
IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICog
dmFsdWUpOworICAgIGVuY29kZXIgPDwgbV9jb2xvck1hdHJpeFR5cGU7CisgICAgZW5jb2RlciA8
PCBtX3ZhbHVlczsKIH0KIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVl
Um90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVDb2xvck1hdHJpeD4+IEZFQ29s
b3JNYXRyaXg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIGZsb2F0IGNvc0h1ZSA9
IGNvcyh2YWx1ZSAqIHBpRmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAq
IDAuNzg3IC0gc2luSHVlICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29z
SHVlICogMC43MTUgLSBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIg
LSBjb3NIdWUgKiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAw
LjIxMyAtIGNvc0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0
XSA9IDAuNzE1ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25l
bnRzWzVdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNv
bXBvbmVudHNbNl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0g
ICAgY29tcG9uZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcx
NTsKLSAgICBjb21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAq
IDAuMDcyOwotfQorICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3JNYXRyaXhUeXBlPiBjb2xvck1hdHJp
eFR5cGU7CisgICAgZGVjb2RlciA+PiBjb2xvck1hdHJpeFR5cGU7CisgICAgaWYgKCFjb2xvck1h
dHJpeFR5cGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPFZlY3RvcjxmbG9hdD4+IHZhbHVlczsKKyAgICBkZWNvZGVyID4+IHZhbHVlczsKKyAgICBp
ZiAoIXZhbHVlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAorICAgIHJldHVybiBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoKmNvbG9yTWF0cml4VHlwZSwgV1RGTW92ZSgqdmFsdWVzKSk7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVm
ZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRy
aXg7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yTWF0cml4VHlwZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkNvbG9yTWF0
cml4VHlwZSwKKworICAgICAgICBXZWJDb3JlOjpGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTiwK
KyAgICAgICAgV2ViQ29yZTo6RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwKKyAgICAgICAgV2Vi
Q29yZTo6RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLAorICAgICAgICBXZWJDb3JlOjpGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLAorICAgICAgICBXZWJDb3JlOjpGRUNPTE9STUFUUklY
X1RZUEVfTFVNSU5BTkNFVE9BTFBIQQorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29sb3JNYXRyaXgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdlYTU4ZjVmOWIwMzg2NmQ5ZWFj
NTdmMTBjY2Y1NzQwMmY5ZTYzLi41ODRlZDkwZmY4OTk4OGJmOTU5ZDE2ZWUxZTViM2JlZDg5ZTZh
ODM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTQsNiArNCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxOCArMjUsMTggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9uZW50
VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxw
aGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVudFRy
YW5zZmVyKQorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNy
ZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29t
cG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJsdWVGdW5jdGlvbiwg
YWxwaGFGdW5jdGlvbikpOworfQorCitGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRy
YW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVDb21w
b25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVkRnVuY3Rpb24pCiAgICAgLCBt
X2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1fYmx1ZUZ1bmN0aW9uKGJsdWVG
dW5jdGlvbikKQEAgLTQzLDExOSArNDQsMTAgQEAgRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21w
b25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXIKIHsK
IH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVu
Y3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlv
biwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVyLCByZWRGdW5jdGlvbiwgZ3Jl
ZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7Ci19Ci0KLXZvaWQgRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKK0ZpbHRlckltYWdlVmVjdG9yIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAog
ewotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUoTG9v
a3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNm
ZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRy
YW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVz
LnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsgICAgICAgICAgICAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGRvdWJsZSBjID0gaSAvIDI1NS4wOyAgICAgICAgICAgICAgICAKLSAgICAgICAgdW5zaWduZWQg
ayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjICogKG4gLSAxKSk7Ci0gICAgICAgIGRvdWJsZSB2
MSA9IHRhYmxlVmFsdWVzW2tdOwotICAgICAgICBkb3VibGUgdjIgPSB0YWJsZVZhbHVlc1tzdGQ6
Om1pbigoayArIDEpLCAobiAtIDEpKV07Ci0gICAgICAgIGRvdWJsZSB2YWwgPSAyNTUuMCAqICh2
MSArIChjICogKG4gLSAxKSAtIGspICogKHYyIC0gdjEpKTsKLSAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgY29uc3QgVmVj
dG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwot
ICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Ci0gICAgaWYgKG4gPCAxKQotICAg
ICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICog
bikgLyAyNTUuMCk7Ci0gICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Ci0gICAgICAgIGRv
dWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgo
MC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIHZhbCA9IHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgKiBpICsgMjU1ICogdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQ7Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOwot
ICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOwotICAgIH0KLX0K
LQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJs
ZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0
aW9uKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgZG91YmxlIGV4cG9uZW50ID0gdHJhbnNmZXJGdW5jdGlvbi5leHBvbmVudDsg
Ly8gUkNWVCBkb2Vzbid0IGxpa2UgcGFzc2luZyBhIGRvdWJsZSBhbmQgYSBmbG9hdCB0byBwb3cs
IHNvIHByb21vdGUgdGhpcyB0byBkb3VibGUKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICog
KHRyYW5zZmVyRnVuY3Rpb24uYW1wbGl0dWRlICogcG93KChpIC8gMjU1LjApLCBleHBvbmVudCkg
KyB0cmFuc2ZlckZ1bmN0aW9uLm9mZnNldCk7Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwg
c3RkOjptaW4oMjU1LjAsIHZhbCkpOwotICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1
aW50OF90Pih2YWwpOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgTG9va3VwVGFibGUgcmVkVGFibGU7Ci0g
ICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsKLSAgICBMb29rdXBUYWJsZSBibHVlVGFibGU7Ci0g
ICAgTG9va3VwVGFibGUgYWxwaGFUYWJsZTsKLSAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRh
YmxlLCBncmVlblRhYmxlLCBibHVlVGFibGUsIGFscGhhVGFibGUpOwotCi0gICAgSW50UmVjdCBk
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICB1
bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJy
YXkubGVuZ3RoKCk7Ci0gICAgdWludDhfdCogZGF0YSA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5k
YXRhKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwg
ZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IGRhdGFbcGl4ZWxPZmZzZXRdID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwotICAgICAg
ICBkYXRhW3BpeGVsT2Zmc2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAx
XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVs
T2Zmc2V0ICsgMl1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxl
W2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBU
YWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFs
cGhhVGFibGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZFRhYmxlLnNpemUo
KTsgKytpKQotICAgICAgICByZWRUYWJsZVtpXSA9IGdyZWVuVGFibGVbaV0gPSBibHVlVGFibGVb
aV0gPSBhbHBoYVRhYmxlW2ldID0gaTsKLQotICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQg
KCopKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAg
IFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7Ci0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRh
YmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0gICAgICAgIGNvbXB1
dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQot
ICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfVEFCTEUKLSAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0RJU0NSRVRFCi0gICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8v
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIKLSAgICAgICAgY29tcHV0ZUdhbW1hVGFi
bGUgICAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCi0gICAgfTsKLQotICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9y
ZWRGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ncmVl
bkZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2JsdWVG
dW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9hbHBoYUZ1
bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0KLSAgICBjYWxs
RWZmZWN0W21fcmVkRnVuY3Rpb24udHlwZV0ocmVkVGFibGUsIG1fcmVkRnVuY3Rpb24pOwotICAg
IGNhbGxFZmZlY3RbbV9ncmVlbkZ1bmN0aW9uLnR5cGVdKGdyZWVuVGFibGUsIG1fZ3JlZW5GdW5j
dGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2JsdWVGdW5jdGlvbi50eXBlXShibHVlVGFibGUsIG1f
Ymx1ZUZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYWxwaGFGdW5jdGlvbi50eXBlXShhbHBo
YVRhYmxlLCBtX2FscGhhRnVuY3Rpb24pOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsK
KyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkK
QEAgLTIwOSwxMCArMTAxLDkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGYKICAgICByZXR1cm4g
dHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29tcG9uZW50VHJhbnNmZXI6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9uZW50VHJhbnNmZXIiOwotICAgIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRz
IDw8ICJcbiI7CiAgICAgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRT
Y29wZSh0cywgMik7CkBAIC0yMjEsOSArMTEyLDYgQEAgVGV4dFN0cmVhbSYgRkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW4K
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7Ymx1ZTogIiA8PCBtX2JsdWVGdW5jdGlvbiA8PCAi
fVxuIjsKICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJ7YWxwaGE6ICIgPDwgbV9hbHBoYUZ1bmN0
aW9uIDw8ICJ9XVxuIjsKICAgICB9Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRl
bnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVu
dFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1
MS4uNDYzNmU5M2IwYTA0N2VkZmNhZGQwMWJhYTE0YjQyMTI2MGM0NzVkZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIzLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDM3ICs0OCwzMSBAQCBzdHJ1Y3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB7CiAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OwogCiAg
ICAgVmVjdG9yPGZsb2F0PiB0YWJsZVZhbHVlczsKKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbj4g
ZGVjb2RlKERlY29kZXImKTsKIH07CiAKIGNsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXIgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29tcG9uZW50VHJh
bnNmZXI+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBy
ZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGFscGhhRnVuYyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRy
YW5zZmVyPiBjcmVhdGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rp
b24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbik7CiAKLSAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHJlZEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWRGdW5jdGlvbjsgfQot
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gZ3JlZW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZ3JlZW5GdW5jdGlvbjsgfQotICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gYmx1
ZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibHVlRnVuY3Rpb247IH0KLSAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FscGhh
RnVuY3Rpb247IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2
YXRlOgotICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFs
cGhhRnVuYyk7Ci0KLSAgICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJGRUNvbXBvbmVudFRyYW5zZmVyIjsgfQotCi0gICAgdXNpbmcgTG9va3VwVGFibGUg
PSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisgICAgRkVDb21wb25lbnRUcmFuc2Zlcihjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBh
bHBoYUZ1bmN0aW9uKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIEZpbHRl
ckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVk
VGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBM
b29rdXBUYWJsZSYgYWxwaGFUYWJsZSk7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpIG92ZXJyaWRlOworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgc3VwcG9ydHND
b3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5Q29yZUlt
YWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAotICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1f
cmVkRnVuY3Rpb247CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX2dyZWVuRnVuY3Rp
b247CkBAIC04Nyw4ICs4MCwxMTEgQEAgcHJpdmF0ZToKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIG1fYWxwaGFGdW5jdGlvbjsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2
b2lkIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb246OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgdHlwZTsKKyAgICBlbmNvZGVyIDw8IHNsb3BlOworICAg
IGVuY29kZXIgPDwgaW50ZXJjZXB0OworICAgIGVuY29kZXIgPDwgYW1wbGl0dWRlOworICAgIGVu
Y29kZXIgPDwgZXhwb25lbnQ7CisgICAgZW5jb2RlciA8PCBvZmZzZXQ7CisgICAgZW5jb2RlciA8
PCB0YWJsZVZhbHVlczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9u
YWw8Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb21wb25lbnRU
cmFuc2ZlclR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOworICAgIGlmICghdHlwZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IHNsb3BlOworICAgIGRlY29kZXIgPj4gc2xvcGU7CisgICAgaWYgKCFzbG9wZSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGludGVyY2Vw
dDsKKyAgICBkZWNvZGVyID4+IGludGVyY2VwdDsKKyAgICBpZiAoIWludGVyY2VwdCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGFtcGxp
dHVkZTsKKyAgICBkZWNvZGVyID4+IGFtcGxpdHVkZTsKKyAgICBpZiAoIWFtcGxpdHVkZSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGV4
cG9uZW50OworICAgIGRlY29kZXIgPj4gZXhwb25lbnQ7CisgICAgaWYgKCFleHBvbmVudCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9m
ZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPGZsb2F0Pj4g
dGFibGVWYWx1ZXM7CisgICAgZGVjb2RlciA+PiB0YWJsZVZhbHVlczsKKyAgICBpZiAoIXRhYmxl
VmFsdWVzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHJldHVybiB7
IHsgKnR5cGUsICpzbG9wZSwgKmludGVyY2VwdCwgKmFtcGxpdHVkZSwgKmV4cG9uZW50LCAqb2Zm
c2V0LCBXVEZNb3ZlKCp0YWJsZVZhbHVlcykgfSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fcmVkRnVuY3Rpb247CisgICAgZW5jb2RlciA8PCBt
X2dyZWVuRnVuY3Rpb247CisgICAgZW5jb2RlciA8PCBtX2JsdWVGdW5jdGlvbjsKKyAgICBlbmNv
ZGVyIDw8IG1fYWxwaGFGdW5jdGlvbjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8UmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+PiBGRUNvbXBvbmVudFRyYW5zZmVy
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24+IHJlZEZ1bmN0aW9uOworICAgIGRlY29kZXIgPj4gcmVkRnVuY3Rp
b247CisgICAgaWYgKCFyZWRGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gZ3JlZW5GdW5j
dGlvbjsKKyAgICBkZWNvZGVyID4+IGdyZWVuRnVuY3Rpb247CisgICAgaWYgKCFncmVlbkZ1bmN0
aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBibHVlRnVuY3Rpb247CisgICAgZGVjb2RlciA+PiBi
bHVlRnVuY3Rpb247CisgICAgaWYgKCFibHVlRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24+
IGFscGhhRnVuY3Rpb247CisgICAgZGVjb2RlciA+PiBhbHBoYUZ1bmN0aW9uOworICAgIGlmICgh
YWxwaGFGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnJlZEZ1bmN0aW9uLCAqZ3JlZW5GdW5jdGlv
biwgKmJsdWVGdW5jdGlvbiwgKmFscGhhRnVuY3Rpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb21wb25l
bnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVy
RWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9
PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOyB9Ci1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb21wb25lbnRUcmFuc2ZlclR5cGU+IHsKKyAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpDb21wb25lbnRUcmFu
c2ZlclR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VO
S05PV04sCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElU
WSwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFLAorICAg
ICAgICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUsCisgICAgICAg
IFdlYkNvcmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIsCisgICAgICAgIFdlYkNv
cmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQQorICAgID47Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29t
cG9uZW50VHJhbnNmZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZj
YmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTguLjI4NWQ0YjJjNzJlNTVhZmY0NDBhZTIxYTdiMTc4NTMyYjVi
NDE3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI1LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05F
T04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRlKQotICAgICwg
bV90eXBlKHR5cGUpCitSZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoRkVDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb3NpdGUo
Y29tcG9zaXRlT3BlcmF0b3IsIGsxLCBrMiwgazMsIGs0KSk7Cit9CisKK0ZFQ29tcG9zaXRlOjpG
RUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBl
OjpGRUNvbXBvc2l0ZSkKKyAgICAsIG1fY29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0
b3IpCiAgICAgLCBtX2sxKGsxKQogICAgICwgbV9rMihrMikKICAgICAsIG1fazMoazMpCkBAIC00
MiwyNjQgKzQ3LDMwIEBAIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvCiB7CiB9CiAKLVJlZjxGRUNv
bXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb3NpdGUoZmlsdGVyLCB0
eXBlLCBrMSwgazIsIGszLCBrNCkpOwotfQotCi1ib29sIEZFQ29tcG9zaXRlOjpzZXRPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQorRmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3QKIHsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQorICAgIC8vIEZv
ciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0
IG9mCisgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBw
YWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCisgICAgaWYgKG1fY29tcG9zaXRl
T3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4gfHwgbV9jb21wb3NpdGVPcGVyYXRv
ciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QKQorICAgICAgICByZXR1cm4gZ2VvbWV0cnku
Y2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0c1sxXS0+aW1hZ2VSZWN0KCksIHByaW1p
dGl2ZVN1YnJlZ2lvbik7CiAKLWJvb2wgRkVDb21wb3NpdGU6OnNldEsxKGZsb2F0IGsxKQotewot
ICAgIGlmIChtX2sxID09IGsxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMSA9IGsx
OwotICAgIHJldHVybiB0cnVlOwotfQorICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRo
ZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4ndAorICAgIC8vIG9w
dGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRv
ciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgICAgICByZXR1cm4gZ2Vv
bWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAKLWJvb2wgRkVD
b21wb3NpdGU6OnNldEsyKGZsb2F0IGsyKQotewotICAgIGlmIChtX2syID09IGsyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMiA9IGsyOwotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChpbnB1dHMsIGdlb21ldHJ5LCBw
cmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1ib29sIEZFQ29tcG9zaXRlOjpzZXRLMyhmbG9hdCBr
MykKLXsKLSAgICBpZiAobV9rMyA9PSBrMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
azMgPSBrMzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQo
ZmxvYXQgazQpCi17Ci0gICAgaWYgKG1fazQgPT0gazQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX2s0ID0gazQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRkVDb21wb3NpdGU6
OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3Jj
ZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotfQotICAgIAotc3RhdGljIHVuc2lnbmVkIGNo
YXIgY2xhbXBCeXRlKGludCBjKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVDb21wb3NpdGU6OnRha2VJ
bnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIHVuc2lnbmVkIGNo
YXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07Ci0g
ICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7Ci0gICAgcmV0dXJuIGJ1
ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07Ci19Ci0KLXRlbXBsYXRl
IDxpbnQgYjEsIGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1Bp
eGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBp
bnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQg
azQpCi17Ci0gICAgZmxvYXQgc2NhbGVkSzE7Ci0gICAgZmxvYXQgc2NhbGVkSzQ7Ci0gICAgaWYg
KGIxKQotICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOwotICAgIGlmIChiNCkKLSAgICAg
ICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKLQotICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5n
dGggPj0gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKLSAgICAgICAg
dW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKLSAgICAgICAgZmxvYXQgcmVzdWx0ID0g
azIgKiBpMSArIGszICogaTI7Ci0gICAgICAgIGlmIChiMSkKLSAgICAgICAgICAgIHJlc3VsdCAr
PSBzY2FsZWRLMSAqIGkxICogaTI7Ci0gICAgICAgIGlmIChiNCkKLSAgICAgICAgICAgIHJlc3Vs
dCArPSBzY2FsZWRLNDsKLQotICAgICAgICAqZGVzdGluYXRpb24gPSBjbGFtcEJ5dGUocmVzdWx0
KTsKLSAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQot
Ci0vLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9u
IG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xh
bXBpbmcKLS8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGls
ZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlvbi4KLXRlbXBsYXRlIDxp
bnQgYjEsIGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVs
c1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0
aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpCi17Ci0gICAgZmxvYXQgc2NhbGVkSzE7Ci0gICAgZmxvYXQgc2NhbGVkSzQ7Ci0g
ICAgaWYgKGIxKQotICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOwotICAgIGlmIChiNCkK
LSAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKLQotICAgIHdoaWxlICgtLXBpeGVsQXJy
YXlMZW5ndGggPj0gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKLSAg
ICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKLSAgICAgICAgZmxvYXQgcmVz
dWx0ID0gazIgKiBpMSArIGszICogaTI7Ci0gICAgICAgIGlmIChiMSkKLSAgICAgICAgICAgIHJl
c3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7Ci0gICAgICAgIGlmIChiNCkKLSAgICAgICAgICAg
IHJlc3VsdCArPSBzY2FsZWRLNDsKLQotICAgICAgICAqZGVzdGluYXRpb24gPSByZXN1bHQ7Ci0g
ICAgICAgICsrc291cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotI2lm
ICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRp
Y1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRp
b24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCkKLXsKLSAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3RkOjptYXgoMC4wZiwgazEpICsg
c3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMpICsgazQ7Ci0gICAgZmxvYXQg
bG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6bWluKDAuMGYsIGsyKSArIHN0
ZDo6bWluKDAuMGYsIGszKSArIGs0OwotICAgIGlmICgoazQgPj0gMC4wZiAmJiBrNCA8PSAxLjBm
KSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQgPD0gMS4wZikgJiYgKGxvd2Vy
TGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7Ci0gICAgICAgIGlmIChrNCkg
ewotICAgICAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGs0KSB7Ci0gICAgICAgIGlmIChrMSkKLSAgICAgICAgICAg
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVs
QXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxB
cnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChr
MSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDA+KHNvdXJjZSwgZGVz
dGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMD4oc291cmNlLCBkZXN0
aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgIH0KKyAgICBB
U1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCks
IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KLSNlbmRpZgogCi1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0
ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIs
IGZsb2F0IGszLCBmbG9hdCBrNCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBGRUNvbXBvc2l0ZU9wZXJhdG9yJiBjb21wb3NpdGVPcGVyYXRvcikK
IHsKLSAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5ndGgg
PT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOwotICAgIC8vIFRoZSBz
ZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCi0jaWYg
SEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4MykpOwot
ICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0
YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNlbHNlCi0gICAgYXJpdGhtZXRpY1NvZnR3
YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGsz
LCBrNCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAg
ICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0
aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0
aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0
aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4g
U28gd2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgot
ICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0
aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5w
dXRFZmZlY3QoMSk7Ci0KLSAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FS
SVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0K
LSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNv
dXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJh
eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5
LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1
cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsK
LSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAg
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgp
KTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0
aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVj
dCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCku
bG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVj
dCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWRE
ZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWRE
ZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZUluIH0pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpKSwgQ29t
cG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2lj
YWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29tcG9z
aXRlT3BlcmF0b3IpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAg
ICAgICAgIHRzIDw8ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjgsMTggKzk5LDEz
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3Ry
ZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVD
b21wb3NpdGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29tcG9zaXRl
IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2Vu
dGF0aW9uKTsKLSAgICB0cyA8PCAiIG9wZXJhdGlvbj1cIiIgPDwgbV90eXBlIDw8ICJcIiI7Ci0g
ICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgIHRz
IDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX2NvbXBvc2l0ZU9wZXJhdG9yIDw8ICJcIiI7CisgICAg
aWYgKG1fY29tcG9zaXRlT3BlcmF0b3IgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJ
QykKICAgICAgICAgdHMgPDwgIiBrMT1cIiIgPDwgbV9rMSA8PCAiXCIgazI9XCIiIDw8IG1fazIg
PDwgIlwiIGszPVwiIiA8PCBtX2szIDw8ICJcIiBrND1cIiIgPDwgbV9rNCA8PCAiXCIiOwogICAg
IHRzIDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUo
dHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRl
eCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi5jM2M5NjBmN2MzZmRl
YjEzNDNhMDYzMTZiNmNiNTliZmMzNzMxMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC0yLDYgKzIsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMiArMjQsOSBAQAog
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVt
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgeworZW51bSBGRUNvbXBvc2l0ZU9wZXJhdG9yIHsKICAg
ICBGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOICAgID0gMCwgCiAgICAgRkVDT01QT1NJVEVf
T1BFUkFUT1JfT1ZFUiAgICAgICA9IDEsCiAgICAgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4gICAg
ICAgICA9IDIsCkBAIC00MSw1MiArMzksOTggQEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBl
IHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKLQotICAgIENv
bXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgYm9vbCBzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSk7Ci0KLSAgICBm
bG9hdCBrMSgpIGNvbnN0IHsgcmV0dXJuIG1fazE7IH0KLSAgICBib29sIHNldEsxKGZsb2F0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRkVDb21w
b3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwog
Ci0gICAgZmxvYXQgazIoKSBjb25zdCB7IHJldHVybiBtX2syOyB9Ci0gICAgYm9vbCBzZXRLMihm
bG9hdCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRvcihGRUNvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yKSB7IG1fY29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVy
YXRvcjsgfQorICAgIHZvaWQgc2V0SzEoZmxvYXQgazEpIHsgbV9rMSA9IGsxOyB9CisgICAgdm9p
ZCBzZXRLMihmbG9hdCBrMikgeyBtX2syID0gazI7IH0KKyAgICB2b2lkIHNldEszKGZsb2F0IGsz
KSB7IG1fazMgPSBrMzsgfQorICAgIHZvaWQgc2V0SzQoZmxvYXQgazQpIHsgbV9rNCA9IGs0OyB9
CiAKLSAgICBmbG9hdCBrMygpIGNvbnN0IHsgcmV0dXJuIG1fazM7IH0KLSAgICBib29sIHNldEsz
KGZsb2F0KTsKLQotICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9rNDsgfQotICAgIGJv
b2wgc2V0SzQoZmxvYXQpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1aXJlc1ZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUNvbXBvc2l0ZT4+IGRlY29kZShEZWNvZGVyJik7CiAK
IHByaXZhdGU6Ci0gICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKLQotICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CisgICAg
RkVDb21wb3NpdGUoRkVDb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpOwogCi0gICAgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3Rv
ciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0
aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CisgICAgYm9vbCBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJJbWFnZSYsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3Q7CisgICAgYm9vbCBhcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShGaWx0ZXJJbWFnZSYsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3Q7CisgICAgCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgdGVtcGxh
dGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc05lb24oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBr
MywgZmxvYXQgazQpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljTmVvbihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Ci0jZW5kaWYK
LQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbV90eXBlOworICAgIEZFQ29tcG9zaXRlT3Bl
cmF0b3IgbV9jb21wb3NpdGVPcGVyYXRvcjsKICAgICBmbG9hdCBtX2sxOwogICAgIGZsb2F0IG1f
azI7CiAgICAgZmxvYXQgbV9rMzsKICAgICBmbG9hdCBtX2s0OwogfTsKIAordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KK3ZvaWQgRkVDb21wb3NpdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb21wb3NpdGVPcGVyYXRvcjsKKyAgICBlbmNvZGVy
IDw8IG1fazE7CisgICAgZW5jb2RlciA8PCBtX2syOworICAgIGVuY29kZXIgPDwgbV9rMzsKKyAg
ICBlbmNvZGVyIDw8IG1fazQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9w
dGlvbmFsPFJlZjxGRUNvbXBvc2l0ZT4+IEZFQ29tcG9zaXRlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZFQ29tcG9zaXRlT3BlcmF0b3I+IGNvbXBvc2l0
ZU9wZXJhdG9yOworICAgIGRlY29kZXIgPj4gY29tcG9zaXRlT3BlcmF0b3I7CisgICAgaWYgKCFj
b21wb3NpdGVPcGVyYXRvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8ZmxvYXQ+IGsxOworICAgIGRlY29kZXIgPj4gazE7CisgICAgaWYgKCFrMSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IGsyOworICAgIGRlY29kZXIgPj4gazI7CisgICAgaWYgKCFrMikKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGszOworICAgIGRlY29kZXIg
Pj4gazM7CisgICAgaWYgKCFrMykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGs0OworICAgIGRlY29kZXIgPj4gazQ7CisgICAgaWYgKCFr
NCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRUNvbXBvc2l0
ZTo6Y3JlYXRlKCpjb21wb3NpdGVPcGVyYXRvciwgKmsxLCAqazIsICprMywgKms0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGRUNvbXBvc2l0ZU9wZXJhdG9yPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6RkVDb21wb3NpdGVPcGVy
YXRvciwKKworICAgICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRPUl9VTktOT1dOLAor
ICAgICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSLAorICAgICAgICBXZWJD
b3JlOjpGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT1NJ
VEVfT1BFUkFUT1JfT1VULAorICAgICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRPUl9B
VE9QLAorICAgICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1IsCisgICAgICAg
IFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMsCisgICAgICAgIFdlYkNv
cmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVIKKyAgICA+OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBv
c2l0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDNiYmU3ODM1OThkNzA5MzVhOTVj
NmYxNTZlYzI5MzNjMGU5OWYwNTAuLmJhODI2MTkyZGU1NDY3YjQxN2U4YWZjNGExYzNlZGI3ZTcx
MGVhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUg
PHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQg
ZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCitSZWY8RkVD
b252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIGtl
cm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJn
ZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVs
VW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJu
ZWxNYXRyaXgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252b2x2ZU1hdHJpeChr
ZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxV
bml0TGVuZ3RoLCBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKK30KKworRkVDb252b2x2
ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9h
dCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJv
b2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29udm9sdmVNYXRyaXgpCiAgICAgLCBtX2tlcm5lbFNp
emUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihkaXZpc29yKQogICAgICwgbV9iaWFzKGJp
YXMpCkBAIC00OSwzODkgKzUxLDE1IEBAIEZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCiAgICAgQVNTRVJU
KG1fa2VybmVsU2l6ZS5oZWlnaHQoKSA+IDApOwogfQogCi1SZWY8RkVDb252b2x2ZU1hdHJpeD4g
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBr
ZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50
JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGZpbHRlciwga2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0
LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKLSAgICAgICAgcHJlc2VydmVBbHBoYSwga2Vy
bmVsTWF0cml4KSk7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsU2l6ZShj
b25zdCBJbnRTaXplJiBrZXJuZWxTaXplKQotewotICAgIEFTU0VSVChrZXJuZWxTaXplLndpZHRo
KCkgPiAwKTsKLSAgICBBU1NFUlQoa2VybmVsU2l6ZS5oZWlnaHQoKSA+IDApOwotICAgIG1fa2Vy
bmVsU2l6ZSA9IGtlcm5lbFNpemU7Ci19Ci0KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2Vy
bmVsKGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCkKLXsKLSAgICBtX2tlcm5lbE1hdHJpeCA9
IGtlcm5lbDsgCi19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcihmbG9hdCBk
aXZpc29yKQotewotICAgIEFTU0VSVChkaXZpc29yKTsKLSAgICBpZiAobV9kaXZpc29yID09IGRp
dmlzb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Rpdmlzb3IgPSBkaXZpc29yOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMoZmxv
YXQgYmlhcykKLXsKLSAgICBpZiAobV9iaWFzID09IGJpYXMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX2JpYXMgPSBiaWFzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29u
dm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldChjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0
KQotewotICAgIGlmIChtX3RhcmdldE9mZnNldCA9PSB0YXJnZXRPZmZzZXQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX3RhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldDsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZShFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaWYgKG1fZWRnZU1vZGUgPT0gZWRnZU1vZGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5pdExlbmd0aChj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoKQorRmxvYXRSZWN0IEZFQ29udm9sdmVN
YXRyaXg6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGtlcm5lbFVuaXRMZW5ndGgueCgpID4gMCk7Ci0g
ICAgQVNTRVJUKGtlcm5lbFVuaXRMZW5ndGgueSgpID4gMCk7Ci0gICAgaWYgKG1fa2VybmVsVW5p
dExlbmd0aCA9PSBrZXJuZWxVbml0TGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9rZXJuZWxVbml0TGVuZ3RoID0ga2VybmVsVW5pdExlbmd0aDsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lv
bik7CiB9CiAKLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHBy
ZXNlcnZlQWxwaGEpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbnZvbHZlTWF0cml4Ojp0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhID09IHByZXNlcnZlQWxwaGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3By
ZXNlcnZlQWxwaGEgPSBwcmVzZXJ2ZUFscGhhOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vKgot
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIENvbnZvbHZlTWF0
cml4IGltcGxlbWVudGF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICBUaGUgaW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5
OgotCi0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgICAgICAgICBBICAg
ICAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgfCAgICAg
ICAgICAgICB8ICAgfAotICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKLSAgICAgIHwgICB8
ICAgICAgICAgICAgIHwgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAg
fCAgICAgICAgICBFICAgICAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0K
LSAgIFdoZXJlIHJlZ2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCi0g
ICBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0
YW5nbGUuCi0KLSAgIEV4YW1wbGU6Ci0gICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdo
dDogMTAKLQotICAgICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWln
aHQgNAotICAgICAgVGFyZ2V0OiB4OjEsIHk6MwotCi0gICAgICBUaGUgZm9sbG93aW5nIGZpZ3Vy
ZSBzaG93cyB0aGUgdGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKLQotICAgICAgICAu
Li4KLSAgICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuWC4KLQotICAgVGhlIHJlZ2lv
bnMgaW4gdGhpcyBjYXNlIGFyZSB0aGUgZm9sbG93aW5nOgotICAgICAgTm90ZTogKHgxLCB5MSkg
dG9wLWxlZnQgYW5kICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCi0gICAgICBO
b3RlOiByb3cgeDIgYW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCi0gICAg
ICAgICAgICBvbmx5IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQg
eTEgPD0geSA8IHkyCi0KLSAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6
IDMKLSAgICAgIFJlZ2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKLSAgICAgIFJl
Z2lvbiBDOiB4MTogMSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKLSAgICAgIFJlZ2lvbiBEOiB4MTog
OSwgeTE6IDMsIHgyOiAxMCwgeTI6IDEwCi0gICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwg
eDI6IDEwLCB5MjogMTAgKGVtcHR5IHJlZ2lvbikKLQotICAgU2luY2UgcmVnaW9uIEMgKG9mdGVu
KSBjb250YWlucyBtb3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCi0gICBhIGZhc3Qg
YWxnb3JpdG0gdG8gY2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlv
clBpeGVscy4KLSAgIEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNl
ZCwgd2hpY2ggY2FsbHMgZ2V0UGl4ZWxWYWx1ZSwKLSAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lk
ZSBvZiB0aGUgaW1hZ2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCi0gICBrZXJuZWwgbWF0
cml4IGlzIGJpZ2dlciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBi
eSB0aGlzCi0gICBmdW5jdGlvbi4KLQotICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBo
YXZlIGxvdCBpbiBjb21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQotICAgY29tbW9uIGEgdGVt
cGxhdGUgZm9yIHRoZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwK
LSAgIGFuZCB3b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCi0qLwotCi1z
dGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNo
YW5uZWwsIHVuc2lnbmVkIGNoYXIgbWF4ID0gMjU1KQotewotICAgIGlmIChjaGFubmVsIDw9IDAp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjaGFubmVsID49IG1heCkKLSAgICAgICAgcmV0
dXJuIG1heDsKLSAgICByZXR1cm4gY2hhbm5lbDsKLX0KLQotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2
ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9h
dCBiaWFzKQotewotICAgIHVuc2lnbmVkIGNoYXIgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFs
dWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBkZXN0UGl4ZWxzLnNldChw
aXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxw
aGEpKTsKLQotICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGRlc3RQaXhl
bHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOwotICAgICAgICArK3BpeGVs
OwotICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhBbHBoYSk7
Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotLy8gSW5jb3JyZWN0bHkgZGlhZ25vc2luZyBvdmVy
d3JpdGUgb2Ygc3RhY2sgaW4gfHRvdGFsc3wgZHVlIHRvIHxwcmVzZXJ2ZUFscGhhVmFsdWVzfC4K
LSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3ODkpCi0j
ZW5kaWYKLQotLy8gT25seSBmb3IgcmVnaW9uIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50
ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGlu
dCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKLXsKLSAgICAvLyBlZGdlIG1vZGUg
ZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscwotICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9m
ZnNldC55KCkgKiBwYWludGluZ0RhdGEud2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsK
LSAgICBpbnQga2VybmVsSW5jcmVhc2UgPSBjbGlwUmlnaHQgKiA0OwotICAgIGludCB4SW5jcmVh
c2UgPSAobV9rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhl
IHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZl
QWxwaGFWYWx1ZXMgPyAwIDogMSldOwotCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZp
c29yKTsKLQotICAgIC8vIFNraXAgdGhlIGZpcnN0ICcoY2xpcEJvdHRvbSAtIHlFbmQpJyBsaW5l
cwotICAgIHBpeGVsICs9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNsaXBS
aWdodCArIDEpICogNCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWwgPSAoY2xpcEJvdHRvbSAt
IHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotCi0gICAgZm9yIChp
bnQgeSA9IHlFbmQgKyAxOyB5ID4geVN0YXJ0OyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9
IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsKLSAgICAgICAgICAgIGludCBrZXJuZWxWYWx1
ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIGlu
dCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7Ci0gICAgICAgICAgICBpbnQgd2lkdGgg
PSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAg
ICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAg
ICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFs
c1szXSA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAg
ICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJu
ZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQot
ICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7
Ci0gICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIS0t
d2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVh
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXREZXN0aW5h
dGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwg
cGFpbnRpbmdEYXRhLmJpYXMpOwotICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0Owot
ICAgICAgICB9Ci0gICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICAgICAgc3RhcnRLZXJu
ZWxQaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5MSU5FIGludCBGRUNv
bnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRo
ICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgcmV0dXJuICh5
ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLQotICAgIHN3aXRjaCAobV9lZGdlTW9k
ZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKLSAgICAgICAgcmV0dXJuIC0xOwot
ICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICBpZiAoeCA8IDApCi0gICAgICAg
ICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgpCi0g
ICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKLSAgICAgICAgaWYgKHkgPCAw
KQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRh
LmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKLSAgICAg
ICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICBjYXNlIEVE
R0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwgMCkKLSAgICAgICAgICAgIHggKz0gcGFp
bnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICAg
ICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0Owot
ICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHJldHVybiAoeSAqIHBh
aW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgfQotfQotCi0vLyBGb3Igb3RoZXIgcmVn
aW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLXZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCi17Ci0gICAgaW50IHBpeGVsID0g
KHkxICogcGFpbnRpbmdEYXRhLndpZHRoICsgeDEpICogNDsKLSAgICBpbnQgaGVpZ2h0ID0geTIg
LSB5MTsKLSAgICBpbnQgd2lkdGggPSB4MiAtIHgxOwotICAgIGludCBiZWdpbktlcm5lbFBpeGVs
WCA9IHgxIC0gbV90YXJnZXRPZmZzZXQueCgpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsWCA9
IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsWSA9IHkxIC0gbV90
YXJnZXRPZmZzZXQueSgpOwotICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndpZHRo
IC0gd2lkdGgpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25l
bnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07
Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0gICAgZm9yIChpbnQg
eSA9IGhlaWdodDsgeSA+IDA7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHgg
PiAwOyAtLXgpIHsKLSAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBz
dGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtl
cm5lbFBpeGVsWTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgp
OwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzFdID0g
MDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZl
QWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKLQotICAgICAgICAg
ICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJ
bmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBp
eGVsWSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAg
ICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxW
YWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRl
bShwaXhlbEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KHBpeGVsSW5kZXggKyAyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
ICghcHJlc2VydmVBbHBoYVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAg
ICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBp
eGVsSW5kZXggKyAzKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFg7Ci0gICAgICAg
ICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsK
LSAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0g
ICAgICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgICAgICAgICB3
aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZh
bHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFy
cmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKLSAgICAg
ICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0g
eEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxY
OwotICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxZOwotICAgIH0KLX0KLQotI2lmIENPTVBJTEVS
KE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKSAvLyBEaXNhYmxlIG9mIDQ3ODkKLSNlbmRpZgot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9t
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKLXsKLSAgICAvLyBNdXN0IGJlIGltcGxlbWVudGVkIGhl
cmUsIHNpbmNlIGl0IHJlZmVycyBhbm90aGVyIEFMV0FZU19JTkxJTkUKLSAgICAvLyBmdW5jdGlv
biwgd2hpY2ggZGVmaW5lZCBpbiB0aGlzIEMrKyBzb3VyY2UgZmlsZSBhcyB3ZWxsCi0gICAgaWYg
KG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPHRydWU+KHBh
aW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgIGVs
c2UKLSAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIGNs
aXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCi17Ci0gICAgLy8gQWx0aG91
Z2ggdGhpcyBmdW5jdGlvbiBjYW4gYmUgbW92ZWQgdG8gdGhlIGhlYWRlciwgaXQgaXMgaW1wbGVt
ZW50ZWQgaGVyZQotICAgIC8vIGJlY2F1c2Ugc2V0SW50ZXJpb3JQaXhlbHMgaXMgYWxzbyBpbXBs
ZW1lbnRlZCBoZXJlCi0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgZmFzdFNldE91
dGVyUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwotICAgIGVsc2UK
LSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwg
eDIsIHkyKTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEgPyBjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKLSAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGllZFJlc3Vs
dChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RE
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVs
QXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRl
clNjYWxlKCkpOwotCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKLSAgICAgICAg
KnNvdXJjZVBpeGVsQXJyYXksCi0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKLSAgICAg
ICAgcGFpbnRTaXplLndpZHRoKCksCi0gICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKLSAgICAg
ICAgbV9iaWFzICogMjU1LAotICAgICAgICBub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4
KQotICAgIH07Ci0KLSAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVyZWQgcGl4ZWxzCi0gICAgaW50
IGNsaXBSaWdodCA9IHBhaW50U2l6ZS53aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0g
ICAgaW50IGNsaXBCb3R0b20gPSBwYWludFNpemUuaGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUuaGVp
Z2h0KCk7Ci0KLSAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8fCBjbGlwQm90dG9tIDwgMCkgewotICAg
ICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVkCi0gICAgICAg
IHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIHBh
aW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW50
IGl0ZXJhdGlvbnMgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpICogYWJzb2x1dGVQYWlu
dFJlY3QoKS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uKSB7Ci0gICAgICAgIGlu
dCBzdHJpZGUgPSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKLSAgICAgICAgaW50IGNodW5rQ291
bnQgPSAoY2xpcEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOwotCi0gICAgICAgIENvbmN1
cnJlbnRXb3JrUXVldWU6OmFwcGx5KGNodW5rQ291bnQsIFsmXShzaXplX3QgaW5kZXgpIHsKLSAg
ICAgICAgICAgIGludCB5U3RhcnQgPSAoc3RyaWRlICogaW5kZXgpOwotICAgICAgICAgICAgaW50
IHlFbmQgPSBzdGQ6Om1pbjxpbnQ+KHN0cmlkZSAqIChpbmRleCArIDEpLCBjbGlwQm90dG9tKTsK
LQotICAgICAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQs
IGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgICAgIH0pOwotICAgIH0gZWxzZQotICAg
ICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgMCwgY2xpcEJvdHRvbSk7Ci0KLSAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgp
ICsgMTsKLSAgICBjbGlwQm90dG9tICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0gICAgaWYg
KG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5n
RGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7Ci0gICAg
aWYgKGNsaXBCb3R0b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LngoKSA+IDApCi0gICAgICAg
IHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgpLCBtX3Rh
cmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgIGlmIChjbGlwUmlnaHQgPCBwYWludFNp
emUud2lkdGgoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmln
aHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRTaXplLndpZHRoKCksIGNsaXBCb3R0b20pOwor
ICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFz
dCgpIH07CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCkBAIC00NTMsMTAgKzgxLDkgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYg
dHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlw
ZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQ29udm9sdmVNYXRyaXgiOwotICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwogICAgIHRzIDw8ICIgb3JkZXI9XCIiIDw8IG1fa2VybmVsU2l6ZSA8PCAiXCIgIgogICAgICAg
IDw8ICJrZXJuZWxNYXRyaXg9XCIiIDw8IG1fa2VybmVsTWF0cml4ICA8PCAiXCIgIgogICAgICAg
IDw8ICJkaXZpc29yPVwiIiA8PCBtX2Rpdmlzb3IgPDwgIlwiICIKQEAgLTQ2NSw5ICs5Miw2IEBA
IFRleHRTdHJlYW0mIEZFQ29udm9sdmVNYXRyaXg6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0CiAgICAgICAgPDwgImVkZ2VNb2RlPVwiIiA8PCBtX2Vk
Z2VNb2RlIDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5lbFVuaXRMZW5ndGg9XCIiIDw8IG1fa2Vy
bmVsVW5pdExlbmd0aCA8PCAiXCIgIgogICAgICAgIDw8ICJwcmVzZXJ2ZUFscGhhPVwiIiA8PCBt
X3ByZXNlcnZlQWxwaGEgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3Bl
IGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaAppbmRleCA2N2Q0YzY1NjdmY2U2YjI3ZWU1YWI4OTVhNmUxZTUwMDU0ZTEzZGJh
Li4xMzM5YmE3YTZiNmZlZDExYmUxNGE4YmMyMjYwYTlkMTY5ZDNmZTkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjUsNiBA
QAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzgsNzAgKzM4LDMwIEBAIGVudW0gRWRnZU1vZGVUeXBlIHsKIAogY2xh
c3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IEludFNp
emUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2Rl
VHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4
PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KLSAgICB2b2lkIHNldEtlcm5lbFNpemUoY29u
c3QgSW50U2l6ZSYpOworICAgIHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXplJiBrZXJu
ZWxTaXplKSB7IG1fa2VybmVsU2l6ZSA9IGtlcm5lbFNpemU7IH0KKyAgICB2b2lkIHNldERpdmlz
b3IoZmxvYXQgZGl2aXNvcikgeyBtX2Rpdmlzb3IgPSBkaXZpc29yOyB9CisgICAgdm9pZCBzZXRC
aWFzKGZsb2F0IGJpYXMpIHsgbV9iaWFzID0gYmlhczsgfQorICAgIHZvaWQgc2V0VGFyZ2V0T2Zm
c2V0KGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQpIHsgbV90YXJnZXRPZmZzZXQgPSB0YXJn
ZXRPZmZzZXQ7IH0KKyAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkg
eyBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7IH0KKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGgo
Y29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCkgeyBtX2tlcm5lbFVuaXRMZW5ndGgg
PSBrZXJuZWxVbml0TGVuZ3RoOyB9CisgICAgdm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJl
c2VydmVBbHBoYSkgeyBtX3ByZXNlcnZlQWxwaGEgPSBwcmVzZXJ2ZUFscGhhOyB9CisgICAgdm9p
ZCBzZXRLZXJuZWxNYXRyaXgoY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KSB7IG1f
a2VybmVsTWF0cml4ID0ga2VybmVsTWF0cml4OyB9CiAKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiBrZXJuZWwoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbE1hdHJpeDsgfQotICAgIHZvaWQgc2V0
S2VybmVsKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQotICAgIGZsb2F0IGRpdmlzb3IoKSBjb25z
dCB7IHJldHVybiBtX2Rpdmlzb3I7IH0KLSAgICBib29sIHNldERpdmlzb3IoZmxvYXQpOwotCi0g
ICAgZmxvYXQgYmlhcygpIGNvbnN0IHsgcmV0dXJuIG1fYmlhczsgfQotICAgIGJvb2wgc2V0Qmlh
cyhmbG9hdCk7Ci0KLSAgICBJbnRQb2ludCB0YXJnZXRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3RhcmdldE9mZnNldDsgfQotICAgIGJvb2wgc2V0VGFyZ2V0T2Zmc2V0KGNvbnN0IEludFBvaW50
Jik7Ci0KLSAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VN
b2RlOyB9Ci0gICAgYm9vbCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUpOwotCi0gICAgRmxvYXRQ
b2ludCBrZXJuZWxVbml0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3Ro
OyB9Ci0gICAgYm9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEZsb2F0UG9pbnQmKTsKLQot
ICAgIGJvb2wgcHJlc2VydmVBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVBbHBoYTsg
fQotICAgIGJvb2wgc2V0UHJlc2VydmVBbHBoYShib29sKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFQ29udm9sdmVNYXRyaXg+PiBkZWNv
ZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgorICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50
U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9p
bnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxV
bml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5l
bE1hdHJpeCk7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7
Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4
OwotICAgIH07Ci0KLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNvbnN0IEludFNpemUm
LCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlw
ZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKLQotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb252b2x2
ZU1hdHJpeCI7IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVy
cmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVj
dCgpKSk7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJl
c2VydmVBbHBoYVZhbHVlcz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQg
eVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBv
dXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZh
bHVlKFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSk7Ci0KLSAgICB0ZW1wbGF0ZTxib29sIHBy
ZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAgdm9pZCBmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdE
YXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFdyYXBwZXIg
ZnVuY3Rpb25zCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50
aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQg
eUVuZCk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0
YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBQYXJhbGxlbGl6
YXRpb24gcGFydHMKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgSW50U2l6
ZSBtX2tlcm5lbFNpemU7CiAgICAgZmxvYXQgbV9kaXZpc29yOwpAQCAtMTEzLDUgKzczLDgwIEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPGZsb2F0PiBtX2tlcm5lbE1hdHJpeDsKIH07CiAKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9rZXJuZWxTaXplOworICAgIGVu
Y29kZXIgPDwgbV9kaXZpc29yOworICAgIGVuY29kZXIgPDwgbV9iaWFzOworICAgIGVuY29kZXIg
PDwgbV90YXJnZXRPZmZzZXQ7CisgICAgZW5jb2RlciA8PCBtX2VkZ2VNb2RlOworICAgIGVuY29k
ZXIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoOworICAgIGVuY29kZXIgPDwgbV9wcmVzZXJ2ZUFscGhh
OworICAgIGVuY29kZXIgPDwgbV9rZXJuZWxNYXRyaXg7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUNvbnZvbHZlTWF0cml4Pj4gRkVDb252b2x2ZU1h
dHJpeDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxJbnRT
aXplPiBrZXJuZWxTaXplOworICAgIGRlY29kZXIgPj4ga2VybmVsU2l6ZTsKKyAgICBpZiAoIWtl
cm5lbFNpemUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPGZsb2F0PiBkaXZpc29yOworICAgIGRlY29kZXIgPj4gZGl2aXNvcjsKKyAgICBpZiAoIWRp
dmlzb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBiaWFzOworICAgIGRlY29kZXIgPj4gYmlhczsKKyAgICBpZiAoIWJpYXMpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50PiB0
YXJnZXRPZmZzZXQ7CisgICAgZGVjb2RlciA+PiB0YXJnZXRPZmZzZXQ7CisgICAgaWYgKCF0YXJn
ZXRPZmZzZXQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPEVkZ2VNb2RlVHlwZT4gZWRnZU1vZGU7CisgICAgZGVjb2RlciA+PiBlZGdlTW9kZTsKKyAg
ICBpZiAoIWVkZ2VNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFBvaW50PiBrZXJuZWxVbml0TGVuZ3RoOworICAgIGRlY29kZXIgPj4g
a2VybmVsVW5pdExlbmd0aDsKKyAgICBpZiAoIWtlcm5lbFVuaXRMZW5ndGgpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHByZXNlcnZlQWxw
aGE7CisgICAgZGVjb2RlciA+PiBwcmVzZXJ2ZUFscGhhOworICAgIGlmICgha2VybmVsVW5pdExl
bmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPGZsb2F0Pj4ga2VybmVsTWF0cml4OworICAgIGRlY29kZXIgPj4ga2VybmVsTWF0cml4
OworICAgIGlmICgha2VybmVsTWF0cml4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZSgqa2VybmVsU2l6ZSwgKmRpdmlz
b3IsICpiaWFzLCAqdGFyZ2V0T2Zmc2V0LCAqZWRnZU1vZGUsICprZXJuZWxVbml0TGVuZ3RoLCAq
cHJlc2VydmVBbHBoYSwgV1RGTW92ZSgqa2VybmVsTWF0cml4KSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViQ29yZTo6RWRnZU1vZGVUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKKyAgICAgICAgV2ViQ29yZTo6RWRnZU1vZGVUeXBlLAorCisgICAgICAgIFdlYkNvcmU6
OkVER0VNT0RFX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6OkVER0VNT0RFX0RVUExJQ0FURSwK
KyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVfV1JBUCwKKyAgICAgICAgV2ViQ29yZTo6RURHRU1P
REVfTk9ORQorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29udm9sdmVNYXRyaXgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuY3BwCmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1Yjlk
MDkuLmEzOWRkZGFkNDZmMzk5MWNhOWJiMjFiZTFlMjNmZmJmNzA2MGNhZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI3LDM2ICsyOCwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmls
dGVyLCBEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVz
ZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitSZWY8RkVEaWZmdXNl
TGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgc291
cmNlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGNvbG9y
LCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5l
bFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0
aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVz
ZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBk
aWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29s
b3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3Ro
WCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGln
aHRpbmcpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmls
dGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVs
VW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwog
fQogCi1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0Owot
Ci1ib29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVz
ZUNvbnN0YW50KQotewotICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3Rh
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2RpZmZ1c2VDb25zdGFudCA9IGRpZmZ1
c2VDb25zdGFudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVEaWZmdXNl
TGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2Vu
dGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRGlmZnVzZUxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZURpZmZ1c2VMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgImRpZmZ1c2VDb25zdGFudD1cIiIgPDwgbV9kaWZmdXNl
Q29uc3RhbnQgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9r
ZXJuZWxVbml0TGVuZ3RoWCA8PCAiLCAiIDw8IG1fa2VybmVsVW5pdExlbmd0aFkgPDwgIlwiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRmNjEx
NGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUxM2EwZGRkYzMuLmQ4ZTVmYWZhMTNmNjE5ZjM5ODk2
NGFjNmI5M2I4MzZmMDRlMTdkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTIsNiAr
Miw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjEgKzI2LDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGlnaHRTb3VyY2U7Ci0KIGNsYXNz
IEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZp
cnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7Ci0KLSAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQo
KSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsgfQotICAgIGJvb2wgc2V0RGlmZnVz
ZUNvbnN0YW50KGZsb2F0KTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xv
ciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
Jik7CiAKIHByaXZhdGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29s
b3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAg
ICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxv
YXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgCisgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRGlmZnVzZUxpZ2h0aW5n
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5
YmEwYTdjMzJiMTZjNTYzZmExLi45YjE5Yzc2OWQzNjBiNmM0ZmYyOWJiMGJmZTUxYTM5NmYxZGY0
NmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTMyICsyNSw0NiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlzcGxhY2VtZW50TWFwOjpG
RURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0
IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RGlzcGxhY2VtZW50TWFw
KQotICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0b3IpCi0gICAgLCBtX3lD
aGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1fc2NhbGUoc2NhbGUpCitS
ZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlz
cGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7
CiB9CiAKLVJlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLAotICAg
IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoZmlsdGVyLCB4Q2hhbm5l
bFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwotfQotCi1ib29sIEZFRGlzcGxh
Y2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvcikKLXsKLSAgICBpZiAobV94Q2hhbm5lbFNlbGVjdG9yID09IHhDaGFu
bmVsU2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3hDaGFubmVsU2VsZWN0
b3IgPSB4Q2hhbm5lbFNlbGVjdG9yOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFRGlz
cGxhY2VtZW50TWFwOjpzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvcikKLXsKLSAgICBpZiAobV95Q2hhbm5lbFNlbGVjdG9yID09IHlD
aGFubmVsU2VsZWN0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3lDaGFubmVsU2Vs
ZWN0b3IgPSB5Q2hhbm5lbFNlbGVjdG9yOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZF
RGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKK0ZFRGlzcGxhY2VtZW50TWFw
OjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Is
IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCisgICAg
OiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVEaXNwbGFjZW1lbnRNYXApCisgICAgLCBtX3hDaGFubmVs
U2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKKyAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hh
bm5lbFNlbGVjdG9yKQorICAgICwgbV9zY2FsZShzY2FsZSkKIHsKLSAgICBpZiAobV9zY2FsZSA9
PSBzY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc2NhbGUgPSBzY2FsZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKQorY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlKGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogVGhlICdjb2xvci1p
bnRlcnBvbGF0aW9uLWZpbHRlcnMnIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byB0aGUgJ2luMicg
c291cmNlIGltYWdlCiAgICAgLy8gYW5kIGRvZXMgbm90IGFwcGx5IHRvIHRoZSAnaW4nIHNvdXJj
ZSBpbWFnZS4gVGhlICdpbicgc291cmNlIGltYWdlIG11c3QgcmVtYWluIGluIGl0cwogICAgIC8v
IGN1cnJlbnQgY29sb3Igc3BhY2UuCiAgICAgLy8gVGhlIHJlc3VsdCBpcyBpbiB0aGF0IHNtYWUg
Y29sb3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVudCBvZiB0aGUgJ2luJyBpbWFn
ZS4KLSAgICBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoaW5wdXRFZmZlY3QoMCkt
PnJlc3VsdENvbG9yU3BhY2UoKSk7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50IGluZGV4KQot
ewotICAgIC8vIERvIG5vdCB0cmFuc2Zvcm0gdGhlIGZpcnN0IHByaW1pdGl2ZSBpbnB1dCwgYXMg
cGVyIHRoZSBzcGVjLgotICAgIGlmIChpbmRleCkKLSAgICAgICAgaW4tPnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBBU1NFUlQoaW5wdXRzLnNp
emUoKSA9PSAyKTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5jb2xvclNwYWNlKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWdu
ZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCitGbG9hdFJlY3QgRkVEaXNwbGFjZW1lbnRNYXA6OmNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNv
bnN0CiB7Ci0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7Ci0gICAgcmV0dXJu
IHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOworICAgIHJldHVybiBnZW9tZXRyeS5j
bGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRURpc3Bs
YWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlckltYWdlVmVjdG9yIEZF
RGlzcGxhY2VtZW50TWFwOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29u
c3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIEFTU0VSVChtX3hDaGFubmVsU2Vs
ZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLSAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9y
ICE9IENIQU5ORUxfVU5LTk9XTik7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlv
blBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJlY3QgZWZmZWN0
QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4
ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRp
cGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVu
bXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAgIGlmICghaW5w
dXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+bGVuZ3RoKCkp
OwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJbnRTaXplIHBh
aW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2Fs
ZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKLSAgICBmbG9h
dCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBmbG9hdCBzY2Fs
ZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVkT2Zm
c2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0
WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OwotICAgIAotICAgIGludCBkaXNwbGFjZW1l
bnRDaGFubmVsWCA9IHhDaGFubmVsSW5kZXgoKTsKLSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5l
bFkgPSB5Q2hhbm5lbEluZGV4KCk7Ci0KLSAgICBpbnQgcm93Qnl0ZXMgPSBwYWludFNpemUud2lk
dGgoKSAqIDQ7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQoKTsg
Kyt5KSB7Ci0gICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7Ci0KLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAg
ICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+
KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAg
aW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNl
bWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkg
KyBzY2FsZWRPZmZzZXRZKTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8
IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNp
emUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1
dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykp
OwotICAgICAgICB9Ci0gICAgfQorICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CisgICAg
cmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSwgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNl
bGVjdG9yVHlwZSYgdHlwZSkKQEAgLTE3NCwxNyArODksMTIgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5
cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEaXNwbGFjZW1lbnRNYXA6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRGlzcGxhY2VtZW50TWFwIjsKLSAg
ICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKICAgICB0cyA8PCAiIHNjYWxlPVwiIiA8PCBtX3NjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwg
InhDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feENoYW5uZWxTZWxlY3RvciA8PCAiXCIgIgogICAg
ICAgIDw8ICJ5Q2hhbm5lbFNlbGVjdG9yPVwiIiA8PCBtX3lDaGFubmVsU2VsZWN0b3IgPDwgIlwi
XVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAg
ICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgK
aW5kZXggZGQ3MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uY2YwNDZlZWIw
MDk2ODRiMzVkM2RmZjA1NzIxOWFjOGIwOTBkYmNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
aApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
Miw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDM4ICszNiw4MSBAQCBlbnVtIENoYW5uZWxTZWxl
Y3RvclR5cGUgewogCiBjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShG
aWx0ZXImLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JU
eXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rv
ciwgZmxvYXQgc2NhbGUpOwogCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yOyB9Ci0gICAgYm9vbCBzZXRY
Q2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOworICAgIHZvaWQgc2V0
WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0
b3IpIHsgbV94Q2hhbm5lbFNlbGVjdG9yID0geENoYW5uZWxTZWxlY3RvcjsgfQorICAgIHZvaWQg
c2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IpIHsgbV95Q2hhbm5lbFNlbGVjdG9yID0geUNoYW5uZWxTZWxlY3RvcjsgfQorICAgIHZv
aWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9zY2FsZSA9IHNjYWxlOyB9CiAKLSAgICBDaGFu
bmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3lDaGFu
bmVsU2VsZWN0b3I7IH0KLSAgICBib29sIHNldFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5l
bFNlbGVjdG9yVHlwZSk7Ci0KLSAgICBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGU7IH0KLSAgICBib29sIHNldFNjYWxlKGZsb2F0KTsKLQotICAgIHZvaWQgc2V0UmVzdWx0Q29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBvdmVy
cmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
UmVmPEZFRGlzcGxhY2VtZW50TWFwPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAg
ICBGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVs
U2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOwor
ICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rv
ciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAK
LSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlz
cGxhY2VtZW50TWFwIjsgfQorICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGltYWdlQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlk
ZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgp
KSk7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW50IHhDaGFubmVsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0gICAgaW50IHlD
aGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9Cisg
ICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2sp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBv
dXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CiAgICAgQ2hhbm5lbFNl
bGVjdG9yVHlwZSBtX3lDaGFubmVsU2VsZWN0b3I7CiAgICAgZmxvYXQgbV9zY2FsZTsKIH07CiAK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1feENoYW5uZWxTZWxl
Y3RvcjsKKyAgICBlbmNvZGVyIDw8IG1feUNoYW5uZWxTZWxlY3RvcjsKKyAgICBlbmNvZGVyIDw8
IG1fc2NhbGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxGRURpc3BsYWNlbWVudE1hcD4+IEZFRGlzcGxhY2VtZW50TWFwOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENoYW5uZWxTZWxlY3RvclR5cGU+IHhDaGFu
bmVsU2VsZWN0b3I7CisgICAgZGVjb2RlciA+PiB4Q2hhbm5lbFNlbGVjdG9yOworICAgIGlmICgh
eENoYW5uZWxTZWxlY3RvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8Q2hhbm5lbFNlbGVjdG9yVHlwZT4geUNoYW5uZWxTZWxlY3RvcjsKKyAgICBk
ZWNvZGVyID4+IHlDaGFubmVsU2VsZWN0b3I7CisgICAgaWYgKCF5Q2hhbm5lbFNlbGVjdG9yKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4g
c2NhbGU7CisgICAgZGVjb2RlciA+PiBzY2FsZTsKKyAgICBpZiAoIXNjYWxlKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFRGlzcGxhY2VtZW50TWFwOjpjcmVh
dGUoKnhDaGFubmVsU2VsZWN0b3IsICp5Q2hhbm5lbFNlbGVjdG9yLCAqc2NhbGUpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNoYW5uZWxTZWxlY3RvclR5cGU+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpDaGFubmVsU2VsZWN0b3JU
eXBlLAorCisgICAgICAgIFdlYkNvcmU6OkNIQU5ORUxfVU5LTk9XTiwKKyAgICAgICAgV2ViQ29y
ZTo6Q0hBTk5FTF9SLAorICAgICAgICBXZWJDb3JlOjpDSEFOTkVMX0csCisgICAgICAgIFdlYkNv
cmU6OkNIQU5ORUxfQiwKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9BCisgICAgPjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVEaXNwbGFjZW1lbnRNYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggNWNlN2JlM2E0NzFi
NDdiOGRkNTQyNmQ5NjViYmZlNzg5ZjZiYmRkOC4uZWJiOGEzYjZkYzVlZjBhMTI3ZWI3ZDAwMTYz
ZDQ4ZmE0NmJlMjhmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxOSArMjMsMjMgQEAKIAogI2lu
Y2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNs
dWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLUZF
RHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9h
dCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxv
YXQgc2hhZG93T3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRyb3BT
aGFkb3cpCi0gICAgLCBtX3N0ZFgoc3RkWCkKLSAgICAsIG1fc3RkWShzdGRZKQorCitSZWY8RkVE
cm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9h
dCBzdGREZXZpYXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RURyb3BTaGFkb3coc3RkRGV2aWF0aW9uWCwgc3RkRGV2aWF0aW9uWSwgZHgsIGR5LCBzaGFkb3dD
b2xvciwgc2hhZG93T3BhY2l0eSkpOworfQorCitGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhm
bG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKKyAgICA6
IEZpbHRlckVmZmVjdChUeXBlOjpGRURyb3BTaGFkb3cpCisgICAgLCBtX3N0ZERldmlhdGlvblgo
c3RkRGV2aWF0aW9uWCkKKyAgICAsIG1fc3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKQogICAg
ICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiAgICAgLCBtX3NoYWRvd0NvbG9yKHNoYWRvd0Nv
bG9yKQpAQCAtNDIsMTAwICs0Nyw0NiBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0
ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewogfQog
Ci1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwg
ZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYg
c2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitJbnRPdXRzZXRzIEZFRHJvcFNoYWRv
dzo6Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hh
ZG93T3BhY2l0eSkpOwotfQotCi12b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKQotewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAg
ICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGFic29sdXRlUGFp
bnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKLQotICAgIEludFNpemUga2Vy
bmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBt
X3N0ZFgsIG1fc3RkWSB9KTsKLQotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUg
YW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVl
IHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndp
ZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVs
U2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwotCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAg
ICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotCi0g
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVj
dCkpOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVP
dXRzZXRTaXplKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgcmV0
dXJuIHsKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9k
eSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCks
CisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAor
ICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCisgICAg
fTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9h
dFJlY3QgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVj
dCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiAKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOworICAgIGltYWdlUmVjdC5tb3ZlKGdlb21ldHJ5LnJlc29sdmVJbWFnZVNpemUo
eyBtX2R4LCBtX2R5IH0pKTsKICAgICAKLSAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9IDIgKiBm
aWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAg
Ymx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIG9m
ZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pOwot
Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldp
dGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7Ci0gICAgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQubW92
ZShvZmZzZXQpOwotCi0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gaW4tPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7Ci0gICAgcmVz
dWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uV2l0
aE9mZnNldCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYSgxKTsKLQotICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwotCi0g
ICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAg
ICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXpl
KCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIo
Zm9ybWF0LCBzaGFkb3dBcmVhKTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsK
LSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgp
LCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsK
KyAgICBpbWFnZVJlY3QudW5pdGUoaW5wdXRzWzBdLT5pbWFnZVJlY3QoKSk7CiAgICAgCi0gICAg
cmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Ci0K
LSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlSW4pOwotICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAg
ICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25PdmVyKTsKKyAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25Z
IH0pOworICAgIAorICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRp
cGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgor
ICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Cisg
ICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CiAK
LSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2Us
IGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVT
dWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1JbnRPdXRzZXRz
IEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CitGaWx0ZXJJbWFnZVZlY3RvciBGRURyb3BT
aGFkb3c6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAg
IEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXpl
KHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjptYXg8aW50
PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4o
MCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwg
b3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91
dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCi0gICAgfTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1w
dHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0U3RyZWFt
JiBGRURyb3BTaGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRHJv
cFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVw
cmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8
IltmZURyb3BTaGFkb3ciOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwiIiA8PCBt
X3N0ZFggPDwgIiwgIiA8PCBtX3N0ZFkgPDwgIlwiIGR4PVwiIiA8PCBtX2R4IDw8ICJcIiBkeT1c
IiIgPDwgbV9keSA8PCAiXCIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5k
ZXJUcmVlQXNUZXh0KG1fc2hhZG93Q29sb3IpIDw8IlwiIGZsb29kLW9wYWNpdHk9XCIiIDw8IG1f
c2hhZG93T3BhY2l0eSA8PCAiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGlu
ZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIgc3RkRGV2aWF0aW9uPVwiIiA8PCBt
X3N0ZERldmlhdGlvblggPDwgIiwgIiA8PCBtX3N0ZERldmlhdGlvblkgPDwgIlwiIGR4PVwiIiA8
PCBtX2R4IDw8ICJcIiBkeT1cIiIgPDwgbV9keSA8PCAiXCIgZmxvb2QtY29sb3I9XCIiIDw8IHNl
cmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KG1fc2hhZG93Q29sb3IpIDw8IlwiIGZsb29k
LW9wYWNpdHk9XCIiIDw8IG1fc2hhZG93T3BhY2l0eSA8PCAiXVxuIjsKICAgICByZXR1cm4gdHM7
CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJmZWRiN2I3N2JmM2UwNTczNGVl
ODhhMjllZmYzODRjLi5kZjkwMTc0NzhhMDIwZjRlYTFmYTg0Y2ViY2IzNjg4NzRkZmEwZTRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjAsNTMgKzIxLDkyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFRHJvcFNoYWRvdyA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBj
cmVhdGUoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwg
ZmxvYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBjcmVh
dGUoZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCi0gICAgZmxvYXQgc3RkRGV2
aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0
aW9uWChmbG9hdCBzdGRYKSB7IG1fc3RkWCA9IHN0ZFg7IH0KLQotICAgIGZsb2F0IHN0ZERldmlh
dGlvblkoKSBjb25zdCB7IHJldHVybiBtX3N0ZFk7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlv
blkoZmxvYXQgc3RkWSkgeyBtX3N0ZFkgPSBzdGRZOyB9Ci0KLSAgICBmbG9hdCBkeCgpIGNvbnN0
IHsgcmV0dXJuIG1fZHg7IH0KKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3RkRGV2
aWF0aW9uWCkgeyBtX3N0ZERldmlhdGlvblggPSBzdGREZXZpYXRpb25YOyB9CisgICAgdm9pZCBz
ZXRTdGREZXZpYXRpb25ZKGZsb2F0IHN0ZERldmlhdGlvblkpIHsgbV9zdGREZXZpYXRpb25ZID0g
c3RkRGV2aWF0aW9uWTsgfQogICAgIHZvaWQgc2V0RHgoZmxvYXQgZHgpIHsgbV9keCA9IGR4OyB9
Ci0KLSAgICBmbG9hdCBkeSgpIGNvbnN0IHsgcmV0dXJuIG1fZHk7IH0KICAgICB2b2lkIHNldER5
KGZsb2F0IGR5KSB7IG1fZHkgPSBkeTsgfQotCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dDb2xvcjsgfSAKICAgICB2b2lkIHNldFNoYWRvd0Nv
bG9yKGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikgeyBtX3NoYWRvd0NvbG9yID0gc2hhZG93Q29s
b3I7IH0KLQotICAgIGZsb2F0IHNoYWRvd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NoYWRv
d09wYWNpdHk7IH0KICAgICB2b2lkIHNldFNoYWRvd09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0
eSkgeyBtX3NoYWRvd09wYWNpdHkgPSBzaGFkb3dPcGFjaXR5OyB9CiAKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFRHJvcFNoYWRvdz4+IGRl
Y29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6Ci0gICAgRkVEcm9wU2hhZG93KEZpbHRlciYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRURy
b3BTaGFkb3coZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYsIGZsb2F0IG9wYWNpdHkpOwogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BTaGFkb3ciOyB9
CisgICAgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3Rv
ciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgZmxv
YXQgbV9zdGRYOwotICAgIGZsb2F0IG1fc3RkWTsKKyAgICBmbG9hdCBtX3N0ZERldmlhdGlvblg7
CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25ZOwogICAgIGZsb2F0IG1fZHg7CiAgICAgZmxvYXQg
bV9keTsKICAgICBDb2xvciBtX3NoYWRvd0NvbG9yOwogICAgIGZsb2F0IG1fc2hhZG93T3BhY2l0
eTsKIH07Ci0gICAgCisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFRHJvcFNoYWRv
dzo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3N0
ZERldmlhdGlvblg7CisgICAgZW5jb2RlciA8PCBtX3N0ZERldmlhdGlvblk7CisgICAgZW5jb2Rl
ciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwgbV9keTsKKyAgICBlbmNvZGVyIDw8IG1fc2hhZG93
Q29sb3I7CisgICAgZW5jb2RlciA8PCBtX3NoYWRvd09wYWNpdHk7Cit9CisKK3RlbXBsYXRlPGNs
YXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRURyb3BTaGFkb3c+PiBGRURyb3BTaGFk
b3c6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IHN0ZERldmlhdGlvblg7CisgICAgZGVjb2RlciA+PiBzdGREZXZpYXRpb25YOworICAgIGlmICgh
c3RkRGV2aWF0aW9uWCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6
b3B0aW9uYWw8ZmxvYXQ+IHN0ZERldmlhdGlvblk7CisgICAgZGVjb2RlciA+PiBzdGREZXZpYXRp
b25ZOworICAgIGlmICghc3RkRGV2aWF0aW9uWSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7Cisg
ICAgaWYgKCFkeCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IGR5OworICAgIGRlY29kZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHNoYWRv
d0NvbG9yOworICAgIGRlY29kZXIgPj4gc2hhZG93Q29sb3I7CisgICAgaWYgKCFzaGFkb3dDb2xv
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IHNoYWRvd09wYWNpdHk7CisgICAgZGVjb2RlciA+PiBzaGFkb3dPcGFjaXR5OworICAgIGlm
ICghc2hhZG93T3BhY2l0eSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJl
dHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZSgqc3RkRGV2aWF0aW9uWCwgKnN0ZERldmlhdGlvblks
ICpkeCwgKmR5LCAqc2hhZG93Q29sb3IsICpzaGFkb3dPcGFjaXR5KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVE
cm9wU2hhZG93KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggYjQyMzU1MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgw
ZjNiNmIwMS4uOTFhODg1NzZkMzM1ZWIxZTkwOGI0NDNlYzJlMTllMGQ5MzM1MDUwMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDU2ICsyNSwzMyBAQAogI2luY2x1ZGUg
IkZFRmxvb2QuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFRmxvb2Q6OkZFRmxvb2QoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3Qo
ZmlsdGVyLCBUeXBlOjpGbG9vZCkKLSAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQotICAg
ICwgbV9mbG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQotewotfQotCi1SZWY8RkVGbG9vZD4gRkVG
bG9vZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxv
YXQgZmxvb2RPcGFjaXR5KQorUmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShjb25zdCBDb2xv
ciYgY29sb3IsIGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVG
bG9vZChmaWx0ZXIsIGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFRmxvb2QoY29sb3IsIG9wYWNpdHkpKTsKIH0KIAotYm9vbCBGRUZsb29kOjpz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAobV9mbG9vZENvbG9y
ID09IGNvbG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZENvbG9yID0gY29s
b3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5
KGZsb2F0IGZsb29kT3BhY2l0eSkKK0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGZsb29k
Q29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUZs
b29kKQorICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29sb3IpCisgICAgLCBtX2Zsb29kT3BhY2l0
eShmbG9vZE9wYWNpdHkpCiB7Ci0gICAgaWYgKG1fZmxvb2RPcGFjaXR5ID09IGZsb29kT3BhY2l0
eSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZmxvb2RPcGFjaXR5ID0gZmxvb2RPcGFj
aXR5OwotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0
SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCku
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdElt
YWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0Zp
bHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1UZXh0U3RyZWFtJiBGRUZsb29k
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUZsb29kOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUZsb29kIjsKICAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
LSAgICB0cyA8PCAiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJl
ZUFzVGV4dChmbG9vZENvbG9yKCkpIDw8ICJcIiAiCi0gICAgICAgPDwgImZsb29kLW9wYWNpdHk9
XCIiIDw8IGZsb29kT3BhY2l0eSgpIDw8ICJcIl1cbiI7CisgICAgdHMgPDwgIiBmbG9vZC1jb2xv
cj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9mbG9vZENvbG9yKSA8
PCAiXCIgIiA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9mbG9vZE9wYWNpdHkgPDwgIlwiXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4
YjI0NjgyZmEwNjE3MzQ4ZS4uN2E1ZGNiZDM3OTFlMTgwMTY0MDVmZThiNDFmYzgwZTNkN2I4ZGE3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjIsNDIgKzIzLDYyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENv
bG9yJiwgZmxvYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3Jl
YXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKLSAgICBjb25zdCBDb2xvciYgZmxv
b2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xvcjsgfQotICAgIGJvb2wgc2V0Rmxv
b2RDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpIHsgbV9mbG9vZENvbG9yID0gY29sb3I7IH0KKyAgICB2b2lkIHNldEZsb29kT3Bh
Y2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpIHsgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7
IH0KIAotICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RPcGFj
aXR5OyB9Ci0gICAgYm9vbCBzZXRGbG9vZE9wYWNpdHkoZmxvYXQpOworICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVGbG9vZD4+IGRlY29kZShE
ZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgRkVGbG9vZChjb25zdCBDb2xvciYsIGZsb2F0IG9w
YWNpdHkpOwogCiAjaWYgIVVTRShDRykKICAgICAvLyBmZUZsb29kIGRvZXMgbm90IHBlcmZvcm0g
Y29sb3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJlc3VsdCBpcyBhbHdheXMg
aW4gdGhlIGN1cnJlbnQKICAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1
ZSBvZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9pZCBzZXRPcGVyYXRpbmdD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVy
RWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsgfQotICAgIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAjZW5kaWYK
IAotcHJpdmF0ZToKLSAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwot
Ci0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZs
b29kIjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAg
ICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKICAgICBmbG9hdCBtX2Zsb29kT3BhY2l0eTsKIH07
CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFRmxvb2Q6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9mbG9vZENvbG9yOworICAgIGVu
Y29kZXIgPDwgbV9mbG9vZE9wYWNpdHk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+Citz
dGQ6Om9wdGlvbmFsPFJlZjxGRUZsb29kPj4gRkVGbG9vZDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gZmxvb2RDb2xvcjsKKyAgICBkZWNvZGVy
ID4+IGZsb29kQ29sb3I7CisgICAgaWYgKCFmbG9vZENvbG9yKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZmxvb2RPcGFjaXR5OworICAg
IGRlY29kZXIgPj4gZmxvb2RPcGFjaXR5OworICAgIGlmICghZmxvb2RPcGFjaXR5KQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0ZSgqZmxv
b2RDb2xvciwgKmZsb29kT3BhY2l0eSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRmxvb2QpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuY3BwCmluZGV4IDA4ZTg1YTA4YWEwMWIwODEyMjNmMzZlYmI2YmJiOGFiMzYzOTQzNjUu
LmJkMzRjMDJkMjE3OTY1OTBlY2NmYmM0ZjVkOWYyM2I3M2RkY2MyMmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5M
LgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDQ1MCAr
MjYsNDEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5o
IgogCi0jaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2Vs
ZXJhdGUuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KLQotc3RhdGljIGlubGlu
ZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCi17Ci0gICAgcmV0dXJuIDMgLyA0LmYgKiBz
cXJ0ZigyICogcGlGbG9hdCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQgZ01heEtlcm5lbFNpemUg
PSA1MDA7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIHZvaWQga2VybmVsUG9zaXRp
b24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBp
bnQmIGRlbHRhUmlnaHQpCitSZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQogewotICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0
ZXJzLmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgotICAgIHN3aXRjaCAo
Ymx1ckl0ZXJhdGlvbikgewotICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKCEocmFkaXVzICUgMikp
IHsKLSAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOwotICAgICAgICAgICAg
ZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDI7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0g
cmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
MToKLSAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKLSAgICAgICAgICAgIGRlbHRhTGVmdCsr
OwotICAgICAgICAgICAgZGVsdGFSaWdodC0tOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKLSAgICAgICAgICAgIGRl
bHRhUmlnaHQrKzsKLSAgICAgICAgICAgIHJhZGl1cysrOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihzdGRE
ZXZpYXRpb25YLCBzdGREZXZpYXRpb25ZLCBlZGdlTW9kZSkpOwogfQogCi1GRUdhdXNzaWFuQmx1
cjo6RkVHYXVzc2lhbkJsdXIoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkdhdXNz
aWFuQmx1cikKLSAgICAsIG1fc3RkWCh4KQotICAgICwgbV9zdGRZKHkpCitGRUdhdXNzaWFuQmx1
cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9u
WSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFR2F1
c3NpYW5CbHVyKQorICAgICwgbV9zdGREZXZpYXRpb25YKHN0ZERldmlhdGlvblgpCisgICAgLCBt
X3N0ZERldmlhdGlvblkoc3RkRGV2aWF0aW9uWSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUp
CiB7CiB9CiAKLVJlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRn
ZU1vZGUpKTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9h
dCB4KQotewotICAgIG1fc3RkWCA9IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0
ZERldmlhdGlvblkoZmxvYXQgeSkKLXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1
c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9l
ZGdlTW9kZSA9IGVkZ2VNb2RlOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMg
b24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhl
bEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQm
IHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhl
aWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0
UGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVy
by1pbmRleCBiYXNlZC4KLSAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lID0geSAq
IHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW0gPSAwOwotCi0gICAgICAgIC8vIEZpbGwgdGhl
IGtlcm5lbC4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kp
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAg
ICAgICAgIHN1bSArPSBzcmNQdHJbY2hhbm5lbF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBC
bHVycmluZy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlk
ZSArIGNoYW5uZWw7Ci0gICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4
ZWxCeXRlT2Zmc2V0OwotICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN1bSAvIGR4KTsKLQotICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAg
aWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9
IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBjb25z
dCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAg
ICBzdW0gLT0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHggKyBk
eFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9m
ZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAg
ICAgICAgICAgIHN1bSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotfQotCi1pbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1bnNpZ25l
ZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5l
LCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3Rk
OjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAg
ICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBk
eCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZm
ZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEg
PSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxB
cnJheS5kYXRhKCk7Ci0KLSAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6
IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhl
bHMgd2lsbCBiZQotICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUg
PSB5ICogc3RyaWRlTGluZTsKLSAgICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9
IDAsIHN1bUEgPSAwOwotCi0gICAgICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7
Ci0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAq
c3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAg
ICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRy
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAg
ICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAg
ICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgp
OwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcg
LyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
c3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAg
ICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBz
cmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxC
eXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAg
ICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQ
dHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgJ3dyYXAnIGhlcmUuCi0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9y
IGVkZ2VNb2RlICdkdXBsaWNhdGUnLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZh
bHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRn
ZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJp
ZGUpOwotCi0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3Ig
KGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFs
dWVMZWZ0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07
Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1
ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisr
OwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNy
Y1B0cjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IEJsdXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsg
Kyt4KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSAr
IHggKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSAr
IHBpeGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysg
PSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQ
dHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1C
IC09IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZh
bHVlTGVmdFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRl
OwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsg
bGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBz
dW1CIC09IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49
IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmln
aHRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5
dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1
aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0
clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5l
IHZvaWQgYWNjZWxlcmF0ZUJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50
OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlk
ZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQotewotICAgIGlmICghaW9CdWZm
ZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChlZmZlY3RXaWR0aCA8
PSAwIHx8IGVmZmVjdEhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbXVz
dCBhbHdheXMgdXNlIGFuIG9kZCByYWRpdXMuCi0gICAgaWYgKGtlcm5lbFNpemUgJSAyICE9IDEp
Ci0gICAgICAgIGtlcm5lbFNpemUgKz0gMTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0SW5C
dWZmZXI7Ci0gICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihpb0J1
ZmZlci5kYXRhKCkpOwotICAgIGVmZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0g
ICAgZWZmZWN0SW5CdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdEluQnVm
ZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RPdXRCdWZm
ZXI7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsKLSAgICBl
ZmZlY3RPdXRCdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RPdXRCdWZmZXIu
aGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OwotICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRlcyA9IHN0
cmlkZTsKLQotICAgIC8vIERldGVybWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBidWZmZXIg
YnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4gdkltYWdl
IHdpbGwgcmV0dXJuCi0gICAgLy8gdGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAod2hpY2gg
YXJlIGFsbCBuZWdhdGl2ZSkuCi0gICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIDAsIDAs
IDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwga3ZJbWFn
ZUdldFRlbXBCdWZmZXJTaXplKTsKLSAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB2b2lkKiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1ZmZlclNp
emUpOwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVm
ZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAw
LCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVm
ZmVjdE91dEJ1ZmZlciwgJmVmZmVjdEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNp
emUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252
b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZl
ciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwot
ICAgIFdURjo6ZmFzdEZyZWUodG1wQnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQg
c2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3Ro
KCkgPT0gdGVtcEJ1ZmZlci5sZW5ndGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwg
dGVtcEJ1ZmZlci5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxp
bmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50
OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVk
IGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBo
YUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0g
ICAgaW50IGR4UmlnaHQgPSAwOwotICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0
ID0gMDsKLSAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZl
cjsKLSAgICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkg
ewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhS
aWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFp
c0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0
b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNp
emUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBk
eExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5o
ZWlnaHQoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZy
b21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3Ry
aWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2Us
IGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRv
QnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAg
ICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1h
Z2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwg
a2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0
KCksIHBhaW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5
UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwg
dHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIs
ICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWlu
dFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2Rl
KTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0
b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAg
ICAgICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsK
LSAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1
ZmZlci5sZW5ndGgoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6
cGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENs
YW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVk
IGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQg
KiBwYWludFNpemUud2lkdGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJu
ZWxTaXplWCA9PSBrZXJuZWxTaXplWSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8
IG1fZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRl
Qm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFp
bnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJh
eSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUlt
YWdlKCksIG1fZWRnZU1vZGUpOwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFw
cGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIElu
dFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwot
ICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMt
PmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtl
cm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKLX0KLQotaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2Vy
bmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0
aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKIHsKLSNpZiAhVVNFKEFDQ0VM
RVJBVEUpCi0gICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotICAgIGlu
dCBleHRyYUhlaWdodCA9IDMgKiBrZXJuZWxTaXplWSAqIDAuNWY7Ci0gICAgaW50IG9wdGltYWxU
aHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8g
KHNfbWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgp
KTsKLQotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6OlBh
cmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9y
bUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICBpbnQgam9icyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0g
ICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2Jz
IGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2lu
Y2UKLSAgICAgICAgICAgIC8vIGJsb2NrSGVpZ2h0ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNl
IGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAg
ICAgICAgICAgIGNvbnN0IGludCBibG9ja0hlaWdodCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpv
YnM7Ci0gICAgICAgICAgICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWln
aHQoKSAlIGpvYnM7Ci0KLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAg
IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0KLSAgICAgICAg
ICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0Owot
ICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hl
aWdodCArIDEgOiBibG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBpbnQgZW5kWSA9IGpvYiA9
PSBqb2JzIC0gMSA/IGN1cnJlbnRZIDogY3VycmVudFkgKyBleHRyYUhlaWdodDsKLQotICAgICAg
ICAgICAgICAgIGludCBibG9ja1NpemUgPSAoZW5kWSAtIHN0YXJ0WSkgKiBzY2FubGluZTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWpvYikgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9Q
aXhlbEFycmF5ID0gJmlvQnVmZmVyOwotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudG1wUGl4
ZWxBcnJheSA9ICZ0bXBQaXhlbEFycmF5OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMudG1wUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVk
KGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMuaW9QaXhlbEFy
cmF5LT5kYXRhKCksIGlvQnVmZmVyLmRhdGEoKSArIHN0YXJ0WSAqIHNjYW5saW5lLCBibG9ja1Np
emUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHBhcmFtcy53aWR0aCA9
IHBhaW50U2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZ
IC0gc3RhcnRZOwotICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNp
emVYOwotICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotCi0g
ICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCi0gICAg
ICAgICAgICBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2Ig
PCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
aW50IHNvdXJjZU9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IGFkanVzdGVk
QmxvY2tIZWlnaHQgPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxv
Y2tIZWlnaHQ7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBhZGp1c3RlZEJsb2NrSGVp
Z2h0OwotICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldCA9IGV4dHJhSGVpZ2h0ICogc2Nhbmxp
bmU7Ci0gICAgICAgICAgICAgICAgZGVzdGluYXRpb25PZmZzZXQgPSBjdXJyZW50WSAqIHNjYW5s
aW5lOwotICAgICAgICAgICAgICAgIHNpemUgPSBhZGp1c3RlZEJsb2NrSGVpZ2h0ICogc2Nhbmxp
bmU7Ci0KLSAgICAgICAgICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpICsgZGVzdGluYXRp
b25PZmZzZXQsIHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSArIHNvdXJjZU9mZnNldCwgc2l6
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotI2VuZGlmCi0K
LSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFt
aWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVm
ZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7
CisgICAgcmV0dXJuIDMgLyA0LmYgKiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKIHN0YXRpYyBp
bnQgY2xhbXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKIHsKICAgICAvLyBMaW1pdCB0aGUg
a2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZm
ZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAogICAgIC8vIGluZmxhdGVzIHRoZSBhYnNv
bHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94
JyBiZWhhdmlvci4KKyAgICBzdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwog
ICAgIHVuc2lnbmVkIHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGZsb29yZih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwog
ICAgIHJldHVybiBjbGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGdNYXhLZXJuZWxTaXplKSkpOwogfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6
Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCisKK0lu
dFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBG
bG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRo
KCkgPj0gMCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJu
ZWxTaXplOwpAQCAtNDgzLDEyICs3NCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1
cm4ga2VybmVsU2l6ZTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2Vy
bmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0lu
dFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXpl
JiBzdGREZXZpYXRpb24pCiB7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6
ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJl
dHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uIC8qZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKi8pOwogfQogCi1JbnRTaXplIEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24p
CitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVu
c2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOwogCkBAIC00OTYsNzIgKzg3LDQzIEBAIElu
dFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERl
dmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtl
cm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0ludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6OmNhbGN1
bGF0ZU91dHNldHMoKSBjb25zdAogewotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0
ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgSW50U2l6ZSBv
dXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGRE
ZXZpYXRpb25ZIH0pOworICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNp
emUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07Cit9
CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJz
b2x1dGVQYWludFJlY3QoKTsKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
Cit7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dHNbMF0tPmltYWdlUmVjdCgpOwogICAgIC8v
IEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVk
IHBhaW50IHJlY3QuCi0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAg
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRS
ZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURH
RU1PREVfTk9ORSkKKyAgICAgICAgcmV0dXJuIGltYWdlUmVjdDsKIAotICAgIC8vIFdlIHRha2Ug
dGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ug
d2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxh
dGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVj
dC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIGF1dG8ga2Vy
bmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZ2VvbWV0cnkucmVzb2x2ZUltYWdlU2l6ZSh7
IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25ZIH0pKTsKIAotICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZm
ZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0
aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4K
KyAgICBpbWFnZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwor
ICAgIGltYWdlUmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwog
Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50
UmVjdCkpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24o
aW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUdhdXNzaWFuQmx1cjo6aXNBbHBoYUlt
YWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUo
KSk7Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRv
IHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKLSAgICBpZiAoIXRtcEltYWdlRGF0YSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJ
bWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplKTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotSW50T3V0
c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0CitGaWx0ZXJJbWFnZVZlY3RvciBG
RUdhdXNzaWFuQmx1cjo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0
CiB7Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3Rk
WCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNp
emUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07Cisg
ICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0
KCkgfTsKIH0KIAotVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKK1RleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZUdhdXNzaWFuQmx1ciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZp
YXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgdHMg
PDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3RkRGV2aWF0aW9uWCA8PCAiLCAiIDw8IG1fc3Rk
RGV2aWF0aW9uWSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5oCmluZGV4IDVmYjk3ZmZiMDcwYzJkYWViNmViMjgzYmVhYWExNzY0N2NiYjJkM2UuLjBlOGU0
OWQ3OGRhMjZkM2NlYjVmZGRiOGVlYzkzYzE3NjRhMjdlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIs
NjQgKzIzLDczIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXgu
aCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUdhdXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKGZsb2F0IHN0ZERldmlhdGlvblgsIGZs
b2F0IHN0ZERldmlhdGlvblksIEVkZ2VNb2RlVHlwZSk7CiAKLSAgICBmbG9hdCBzdGREZXZpYXRp
b25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9Ci0gICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0KTsKKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQgc3RkRGV2aWF0aW9uWCkg
eyBtX3N0ZERldmlhdGlvblggPSBzdGREZXZpYXRpb25YOyB9CisgICAgdm9pZCBzZXRTdGREZXZp
YXRpb25ZKGZsb2F0IHN0ZERldmlhdGlvblkpIHsgbV9zdGREZXZpYXRpb25ZID0gc3RkRGV2aWF0
aW9uWTsgfQorICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7IG1f
ZWRnZU1vZGUgPSBlZGdlTW9kZTsgfQogCi0gICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCk7Cisg
ICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0
ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBj
YWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAotICAg
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KLSAg
ICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBzdGF0aWMgSW50U2l6ZSBj
YWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24p
OwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXpl
KEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVHYXVzc2lhbkJsdXI+PiBkZWNvZGUoRGVjb2RlciYp
OwogCiBwcml2YXRlOgotICAgIEZFR2F1c3NpYW5CbHVyKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwg
RWRnZU1vZGVUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiRkVHYXVzc2lhbkJsdXIiOyB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IHNf
bWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0
IGZvciBwYXJhbGxlbCBqb2JzCisgICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQgc3RkRGV2aWF0aW9u
WCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgRWRnZU1vZGVUeXBlKTsKIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKKyAgICBJbnRPdXRz
ZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0cnVjdCBQbGF0
Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5CbHVyKiBmaWx0ZXI7Ci0g
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0
aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7Ci0g
ICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07CisgICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3Rv
ciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQg
a2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0
ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIElu
dFNpemUmIHBhaW50U2l6ZSk7Ci0KLSAgICBmbG9hdCBtX3N0ZFg7Ci0gICAgZmxvYXQgbV9zdGRZ
OworICAgIGZsb2F0IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBmbG9hdCBtX3N0ZERldmlhdGlvblk7
CiAgICAgRWRnZU1vZGVUeXBlIG1fZWRnZU1vZGU7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgordm9pZCBGRUdhdXNzaWFuQmx1cjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBtX3N0ZERldmlhdGlvblg7CisgICAgZW5jb2RlciA8PCBtX3N0
ZERldmlhdGlvblk7CisgICAgZW5jb2RlciA8PCBtX2VkZ2VNb2RlOworfQorCit0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVHYXVzc2lhbkJsdXI+PiBGRUdhdXNz
aWFuQmx1cjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gc3RkRGV2aWF0aW9uWDsKKyAgICBkZWNvZGVyID4+IHN0ZERldmlhdGlvblg7CisgICAg
aWYgKCFzdGREZXZpYXRpb25YKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWTsKKyAgICBkZWNvZGVyID4+IHN0ZERl
dmlhdGlvblk7CisgICAgaWYgKCFzdGREZXZpYXRpb25ZKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxFZGdlTW9kZVR5cGU+IGVkZ2VNb2RlOworICAg
IGRlY29kZXIgPj4gZWRnZU1vZGU7CisgICAgaWYgKCFlZGdlTW9kZSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCpzdGRE
ZXZpYXRpb25YLCAqc3RkRGV2aWF0aW9uWSwgKmVkZ2VNb2RlKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVHYXVz
c2lhbkJsdXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBkZjE3NmY4ZTA3MGE0MThjMjA4NTE4MDkwZWU3
YTZjYTExM2U1NmY1Li5kMDZhNDk1ZmFhY2U3NzI2MTdmMzkyM2RlMWZlZWY5MjdmODc0ODBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEw
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6
ZWcKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw0NzAgKzI4LDMzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgot
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRkVMaWdodGluZzo6RkVMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgTGlnaHRpbmdUeXBlIGxp
Z2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQotICAg
IDogRmlsdGVyRWZmZWN0KGZpbHRlciwgdHlwZSkKLSAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0
aW5nVHlwZSkKLSAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCi0gICAg
LCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKK0ZFTGlnaHRpbmc6OkZFTGlnaHRpbmco
Y29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYgc291cmNlLCBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckVm
ZmVjdCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1
cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKICAg
ICAsIG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwgbV9zcGVjdWxh
ckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtl
cm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVu
Z3RoWSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAotYm9vbCBGRUxp
Z2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQorRmxvYXRSZWN0IEZF
TGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3VyZmFjZVNjYWxlID09IHN1cmZhY2VTY2Fs
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNl
U2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0TGlnaHRp
bmdDb2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKLXsKLSAgICBpZiAobV9saWdodGlu
Z0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1f
bGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0
aFgpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2VybmVsVW5pdExlbmd0aFgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJu
ZWxVbml0TGVuZ3RoWDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpz
ZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAgICBpZiAo
bV9rZXJuZWxVbml0TGVuZ3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3RleHByIGludCBjUGl4ZWxTaXplID0g
NDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOwotc3RhdGlj
IGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4
RkYpOwotCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50cyBjb21l
IGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5o
dG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2
MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAtMSAv
IDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7Ci0K
LWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogY2VudGVyICsgMiAqIHJp
Z2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogY2VudGVyIC0gcmlnaHQg
KyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAot
ewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIHJpZ2h0
IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIg
LSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9Owot
fQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIgKiBj
ZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIg
KyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZF
TGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50
IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9m
ZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVy
biB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBi
b3R0b20gKyBib3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBi
b3R0b20gKyBib3R0b21SaWdodAotICAgIH07CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0Zp
bHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2lu
ZG93JiBhbHBoYVdpbmRvdykgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9yIEZFTGlnaHRpbmc6OnRh
a2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGludCByaWdo
dEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7
Ci0gICAgCi0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmln
aHRBbHBoYU9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkp
OwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJp
Z2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotCi0gICAgaW50
IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRv
dy50b3BMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwotCi0gICAgaW50
IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0gICAgaW50IGJvdHRvbSA9
IGFscGhhV2luZG93LmJvdHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVu
IHNoaWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICBhbHBo
YVdpbmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzFd
WzJdID0gcmlnaHQ7Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsK
LSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGgg
c29tZSBzcG90LWNoZWNrcy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAgICBBU1NFUlQoYWxwaGFX
aW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQotICAgIHJldHVybiB7Ci0g
ICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRv
bUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmln
aHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRv
cCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAy
ICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLXRvcExlZnQgLSAyICog
dG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAg
IGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJp
Z2h0LAotICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0g
ICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0
b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAg
ICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAg
IC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCwKLSAgICAgICAgLXRv
cExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0g
ICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0
b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRv
cCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsg
bGVmdCArIDIgKiBjZW50ZXIKLSAgICB9OwotfQotCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVs
KGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17Ci0gICAgc2V0UGl4ZWxJ
bnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9y
WSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKGludCBv
ZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0
IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQotewotICAgIGZs
b2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291cmNlLT5jb21wdXRlUGl4
ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0
U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7Ci0gICAgICAgIC8v
IE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2Fz
ZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdo
dGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0
b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAg
ICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9y
TGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1
bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVj
dWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1
bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0
aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBmYWN0b3JYICogbm9y
bWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgZmFj
dG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAg
ICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0
aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndh
eVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgp
LAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCi0gICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlW
ZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9y
bWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBv
d2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAq
IGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAq
IDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBs
aWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkg
KiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxW
YWx1ZSwgMywgb2Zmc2V0KTsKLX0KLQotLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQg
d3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxw
aGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3
ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3Rh
cnRZKTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3Rh
cnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dT
dGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
LSAgICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2Fs
IGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNv
bHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgot
ICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZp
bGwgdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0g
ICAgICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0
YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BS
aWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0
YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0g
ICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBo
YVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRh
LnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotCi0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNp
emU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
OyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5z
aGlmdCgpOwotICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JO
b3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dv
cmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAg
cGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KHBhcmFtZXRlcnMt
PmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJh
bWV0ZXJzLT55RW5kKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJv
d3NUb1Byb2Nlc3MgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6
Om1pbjx1bnNpZ25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgLSAxKSAqIHJvd3NUb1By
b2Nlc3MpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYg
KG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgcGFyYWxs
ZWwgam9icwotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIsIG9wdGlt
YWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQot
ICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBp
ZiAoam9iID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJ5U3RlcCIt
c2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkg
bGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMgPCB0b3RhbCBzaXplLiBU
aGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIu
Ci0gICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9jZXNzIC8gam9iOwotICAg
ICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Qcm9jZXNzICUgam9iOwot
Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAgICAgICAgICAgIGZvciAoLS1qb2I7IGpv
YiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlHZW5lcmljUGFy
YW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAg
ICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5kYXRh
ID0gZGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFpbnRpbmdE
YXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3RhcnQ7Ci0gICAgICAgICAg
ICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3RlcCArIDEgOiB5U3RlcDsK
LSAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0g
ICAgfQotCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0RhdGEs
IDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUxpZ2h0
aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAgIC8vIFRoZSBzZWxlY3Rp
b24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0
Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGlu
Z0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0Rh
dGEpOwotI2VuZGlmCi19Ci0KLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsK
LQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3Ro
KSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNh
c2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBo
ZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSAm
cGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7
Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6
ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwotCi0gICAgbV9saWdodFNvdXJjZS0+
aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKLQotICAgIC8vIFRvcCBsZWZ0
LgotICAgIGludCBvZmZzZXQgPSAwOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRp
bmdEYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9y
bWFsKG9mZnNldCkpOwotCi0gICAgLy8gVG9wIHJpZ2h0LgotICAgIG9mZnNldCA9IGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0
b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0g
ICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0
LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0
b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7Ci0K
LSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmln
aHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICBpZiAod2lkdGggPj0gMykgewotICAgICAgICAvLyBU
b3Agcm93LgotICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4
ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVs
U2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4
LCAwLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0
KSk7Ci0KLSAgICAgICAgLy8gQm90dG9tIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4
ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRC
eU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9m
ZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBj
RmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7
Ci0gICAgfQotCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIExlZnQgY29sdW1u
LgotICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwg
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBj
RmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAv
LyBSaWdodCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBk
YXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWlu
dGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFj
dG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAg
aWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4
ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0gICAgfQot
Ci0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBo
ZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VMaWdodGluZykgewotICAg
ICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSAr
PSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxw
aGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVs
OyBpICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVs
cy0+aXRlbShpKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShp
ICsgMSk7Ci0gICAgICAgICAgICB1aW50OF90IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIp
OwotICAgICAgICAgICAgLy8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKLSAg
ICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8g
YTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7Ci0KLSAgICBJbnRSZWN0
IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQo
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKLSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0
aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwotICAgIC8vIHN0YW5kYXJk
IGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJl
Zm94KSBoYXMgc3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVu
Z3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCi0gICAgLy8gQW55d2F5
LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KLQot
ICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KTsKLSAgICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50
U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKCFz
dGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCAwZmZmY2QwNjQzOTZkOGY0YjY0
MDgyMjY5Y2MyMDc0ZjdjOWRiZGJjLi5hNjI5NDNiNmNjMGE0ZjIyZjViYTE3YTIwOTg5NmU5ZTM3
Y2U0YmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4g
SGVyY3plZworICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0MiArMjgsNDIg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KLQotLy8gQ29tbW9uIGJhc2UgY2xh
c3MgZm9yIEZFRGlmZnVzZUxpZ2h0aW5nIGFuZCBGRVNwZWN1bGFyTGlnaHRpbmcKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247Ci0K
IGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICBmbG9h
dCBzdXJmYWNlU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQotICAgIGJv
b2wgc2V0U3VyZmFjZVNjYWxlKGZsb2F0KTsKKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikgeyBtX2NvbG9yID0gY29sb3I7IH0KKyAgICB2b2lkIHNldFN1cmZhY2VTY2FsZShm
bG9hdCBzdXJmYWNlU2NhbGUpIHsgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7IH0KKyAg
ICB2b2lkIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpIHsgbV9kaWZm
dXNlQ29uc3RhbnQgPSBkaWZmdXNlQ29uc3RhbnQ7IH0KIAotICAgIGNvbnN0IENvbG9yJiBsaWdo
dGluZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9saWdodGluZ0NvbG9yOyB9Ci0gICAgYm9vbCBz
ZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRTcGVjdWxhckNvbnN0
YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpIHsgbV9zcGVjdWxhckNvbnN0YW50ID0gc3BlY3Vs
YXJDb25zdGFudDsgfQorICAgIHZvaWQgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxh
ckV4cG9uZW50KSB7IG1fc3BlY3VsYXJFeHBvbmVudCA9IHNwZWN1bGFyRXhwb25lbnQ7IH0KIAot
ICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0
TGVuZ3RoWDsgfQotICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOworICAgIHZv
aWQgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpIHsgbV9rZXJu
ZWxVbml0TGVuZ3RoWCA9IGtlcm5lbFVuaXRMZW5ndGhYOyB9CisgICAgdm9pZCBzZXRLZXJuZWxV
bml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkgeyBtX2tlcm5lbFVuaXRMZW5ndGhZ
ID0ga2VybmVsVW5pdExlbmd0aFk7IH0KIAotICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWTsgfQotICAgIGJvb2wgc2V0S2VybmVs
VW5pdExlbmd0aFkoZmxvYXQpOwotCi0gICAgY29uc3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsgfQorICAgIGNvbnN0IExpZ2h0
U291cmNlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAw
ICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAg
ZW51bSBMaWdodGluZ1R5cGUgewotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIFNw
ZWN1bGFyTGlnaHRpbmcKLSAgICB9OwotICAgIAotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0g
ICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
IGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBl
YXNpZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzBdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tTGVm
dCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9Ci0KLSAgICAgICAgdWlu
dDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0K
LSAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMV1bMV07IH0KLSAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMl1bMV07IH0KLQotICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZh
bHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRD
ZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9Ci0gICAg
ICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2
YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsg
YWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFs
dWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0
b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9Ci0KLSAgICAg
ICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKLSAgICAgICAgICAgIGFscGhhWzFdID0gYWxw
aGFbMl07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2hpZnQoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7Ci0gICAgICAgICAgICBzaGlmdFJv
dyhhbHBoYVsxXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7Ci0gICAgICAgIC8vIFRoaXMgc3Ry
dWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogcGl4ZWxzOwotICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0g
ICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRo
RGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAg
ICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Owot
ICAgICAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdp
bmRvdyYpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICB9OworICAgIEZFTGlnaHRpbmcoY29uc3Qg
Q29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIEZp
bHRlckVmZmVjdDo6VHlwZSk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZy
aWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewotICAgICAgICBGRUxp
Z2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotICAgICAgICBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHlTdGFydDsK
LSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0
aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxp
Z2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiopOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVMaWdodGluZyhGaWx0ZXIm
LCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKLQotICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQot
ICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0g
ICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBM
aWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBm
bG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbElu
dGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rv
clksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7Ci0KLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmLCBj
b25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25z
dCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSNpZiBDUFUoQVJNX05FT04pICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQotICAgIHN0YXRp
YyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxvYXQgZXhwb25lbnQpOwotICAgIGlubGluZSB2
b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmKTsKLSNlbmRpZgotCi0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRp
bmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKLQotICAgIENvbG9y
IG1fbGlnaHRpbmdDb2xvcjsKKyAgICBDb2xvciBtX2NvbG9yOwogICAgIGZsb2F0IG1fc3VyZmFj
ZVNjYWxlOwogICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50OwogICAgIGZsb2F0IG1fc3BlY3Vs
YXJDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxvYXQgbV9r
ZXJuZWxVbml0TGVuZ3RoWDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFJl
ZjxMaWdodFNvdXJjZT4gbV9zb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVy
Z2UuY3BwCmluZGV4IDBhMjAwMDFiMTczYmQ4ZmRmNmJiYTYzNmNkMjNjZTQ3MDI2ZTdiM2YuLjRi
NDY5NTUwMjY1ZWQyNWE1YzAzNzczZGNkZjEzYzhlZTgxZmE5MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNTEgKzIz
LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
RmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNZXJnZTo6RkVNZXJnZShGaWx0ZXImIGZpbHRlcikK
LSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1lcmdlKQorUmVmPEZFTWVyZ2U+IEZF
TWVyZ2U6OmNyZWF0ZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cykKIHsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKG51bWJlck9mRWZmZWN0SW5wdXRzKSk7CiB9CiAKLVJl
ZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCitGRU1lcmdlOjpGRU1l
cmdlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKQorICAgIDogRmlsdGVyRWZmZWN0KFR5
cGU6OkZFTWVyZ2UpCisgICAgLCBtX251bWJlck9mRWZmZWN0SW5wdXRzKG51bWJlck9mRWZmZWN0
SW5wdXRzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UoZmlsdGVyKSk7Cisg
ICAgQVNTRVJUKG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogfQogCi12b2lkIEZFTWVyZ2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU1lcmdlOjp0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBzaXpl
ID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOworICAgIEFT
U0VSVChzdGFjay5zaXplKCkgPj0gbV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiAKLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
ICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8UmVmPEZpbHRlcklt
YWdlPj4gaW5wdXRzOworICAgIGZvciAoYXV0byBpbnB1dHNTaXplID0gbV9udW1iZXJPZkVmZmVj
dElucHV0czsgaW5wdXRzU2l6ZS0tOyApCisgICAgICAgIGlucHV0cy5hcHBlbmQoc3RhY2sudGFr
ZUxhc3QoKSk7CiAKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAg
IGlmIChJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAg
ICAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIH0KKyAg
ICByZXR1cm4gaW5wdXRzOwogfQogCi1UZXh0U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBp
bmRlbnQgPDwgIltmZU1lcmdlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZF
ZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOwotICAgIHRzIDw8ICIgbWVyZ2VO
b2Rlcz1cIiIgPDwgc2l6ZSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIGlucHV0RWZmZWN0KGkpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CisgICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBtX251bWJlck9m
RWZmZWN0SW5wdXRzIDw8ICJcIl1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCmluZGV4IDVj
ZmM1Y2I3OTgxOWNlY2VkNTA3M2U1N2IwMTk0ZWJjZjE4ZjI2MDcuLmIxMDMxZjA0OTY0OWE4YTMx
ZTk1NjE0ZjhkNWZiNjNmZDg0ZWI3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyMyArMjMsNDUgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKHVuc2lnbmVkIG51bWJl
ck9mRWZmZWN0SW5wdXRzKTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8RkVNZXJnZT4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6
Ci0gICAgRkVNZXJnZShGaWx0ZXImKTsKKyAgICBGRU1lcmdlKHVuc2lnbmVkIG51bWJlck9mRWZm
ZWN0SW5wdXRzKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVNZXJnZSI7IH0KKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZp
bHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRWZmZWN0SW5wdXRzOwogfTsKIAor
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVNZXJnZTo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX251bWJlck9mRWZmZWN0SW5wdXRzOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVNZXJnZT4+
IEZFTWVyZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IG51bWJlck9mRWZmZWN0SW5wdXRzOworICAgIGRlY29kZXIgPj4gbnVtYmVyT2ZF
ZmZlY3RJbnB1dHM7CisgICAgaWYgKCFudW1iZXJPZkVmZmVjdElucHV0cykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRU1lcmdlOjpjcmVhdGUoKm51bWJlck9m
RWZmZWN0SW5wdXRzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVNZXJnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRl
eCA4YTdlNWI2NjdhYjc3M2I5MGI4OTBlMzgzODYzOTM1NjJiOWQ4ZGY1Li4wMDBmOWMzNTNmNGZl
ZmU0YjRiZTU2OTg0ZTBhMTI4NGQxZmVhYzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC00LDcg
KzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDE4IEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIx
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDI2NSArMjUs
NTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKIAot
I2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgotI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEpvYnMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KEZpbHRlciYgZmls
dGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNb3JwaG9sb2d5KQotICAg
ICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKLSAgICAsIG1fcmFkaXVz
WShyYWRpdXNZKQotewotfQotCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRp
dXNYLCBmbG9hdCByYWRpdXNZKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhv
bG9neShmaWx0ZXIsIHR5cGUsIHJhZGl1c1gsIHJhZGl1c1kpKTsKLX0KLQotYm9vbCBGRU1vcnBo
b2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUp
Ci17Ci0gICAgaWYgKG1fdHlwZSA9PSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV90eXBlID0gdHlwZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1goZmxvYXQgcmFkaXVzWCkKLXsKLSAgICBpZiAobV9yYWRpdXNYID09IHJhZGl1
c1gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3JhZGl1c1ggPSByYWRpdXNYOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCBy
YWRpdXNZKQotewotICAgIGlmIChtX3JhZGl1c1kgPT0gcmFkaXVzWSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fcmFkaXVzWSA9IHJhZGl1c1k7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lmlu
ZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRp
dXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50
ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5k
ZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4
KSAqIDQ7Ci19Ci0KLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9y
Q29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAg
IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19Ci0KLWlubGluZSBQ
YWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3Qg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKQotewotICAgIHJldHVybiBQ
YWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29t
cG9uZW50cykgfTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3Qg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4mIGIpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJu
IHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQotewotICAgIGF1dG8gZXh0cmVtdW0g
PSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsg
cGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkg
PSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxB
cnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8
dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQot
Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11
bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3Rh
cnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK1Jl
ZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvciBt
b3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCiB7Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
Y29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhlbEFycmF5
LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLQotICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlF
bmQsIHdpZHRoKTsKLX0KLQotdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4sIDE2PjsKLQotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVs
RXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsKQotewotICAgIGF1dG8gZXh0cmVt
dW0gPSBrZXJuZWxbMF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBrZXJuZWwuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIGtlcm5l
bFtpXSk7Ci0KLSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEm
IGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJl
bXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKLQotICAgIHJldHVybiBr
ZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOwotfQot
Ci12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQotewotICAgIEFTU0VSVChl
bmRZID4gc3RhcnRZKTsKLQotICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVsQXJyYXkgPSAqcGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXk7Ci0gICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9ICpwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheTsKLQotICAgIGNvbnN0IGludCByYWRpdXNYID0gcGFpbnRpbmdE
YXRhLnJhZGl1c1g7Ci0gICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWludGluZ0RhdGEucmFkaXVz
WTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgY29uc3Qg
aW50IGhlaWdodCA9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0KLSAgICBBU1NFUlQocmFkaXVzWCA8
PSB3aWR0aCB8fCByYWRpdXNZIDw9IGhlaWdodCk7Ci0gICAgQVNTRVJUKHN0YXJ0WSA+PSAwICYm
IGVuZFkgPD0gaGVpZ2h0ICYmIHN0YXJ0WSA8IGVuZFkpOwotCi0gICAgQ29sdW1uRXh0cmVtYSBl
eHRyZW1hOwotICAgIGV4dHJlbWEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyICogcmFkaXVzWCAr
IDEpOwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAg
ICBpbnQgeVJhZGl1c1N0YXJ0ID0gc3RkOjptYXgoMCwgeSAtIHJhZGl1c1kpOwotICAgICAgICBp
bnQgeVJhZGl1c0VuZCA9IHN0ZDo6bWluKGhlaWdodCwgeSArIHJhZGl1c1kgKyAxKTsKLQotICAg
ICAgICBleHRyZW1hLnNocmluaygwKTsKLQotICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVm
dCBlZGdlLCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCi0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAgICAgICAgICAgZXh0cmVt
YS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5
UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7Ci0KLSAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxl
ZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAg
ICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5
LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7
Ci0KLSAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRyZW1h
LnJlbW92ZSgwKTsKLQotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRl
eCh4LCB5LCB3aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVl
RnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpKS52YWx1
ZTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xv
Z3kobW9ycGhvbG9neU9wZXJhdG9yLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKLXZvaWQgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBw
YXJhbSkKK0ZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvciBtb3Jw
aG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCisgICAgOiBGaWx0
ZXJFZmZlY3QoVHlwZTo6RkVNb3JwaG9sb2d5KQorICAgICwgbV9tb3JwaG9sb2d5T3BlcmF0b3Io
bW9ycGhvbG9neU9wZXJhdG9yKQorICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCisgICAgLCBtX3Jh
ZGl1c1kocmFkaXVzWSkKIHsKLSAgICBwYXJhbS0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJp
YygqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOwogfQog
Ci12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSkKK0Zsb2F0UmVjdCBGRU1vcnBob2xvZ3k6OmNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAg
IC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJveGltYXRlbHkgbGluZWFyIG92ZXIgcmVh
c29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3BlIG9mIGFib3V0IDAuNjUuCi0gICAgZmxv
YXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0RhdGEucmFkaXVzWCAqIHBhaW50aW5nRGF0
YS5yYWRpdXNZKSAqIDAuNjU7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byBpbWFnZVJlY3QgPSBpbnB1dHNbMF0tPmltYWdlUmVjdCgpOwogCi0gICAgc3RhdGljIGNv
bnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icwotICAgIAotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBw
YWludGluZ0RhdGEuaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVy
ID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEu
aGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKLSAg
ICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLSAgICAg
ICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAg
ICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9i
IGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVk
IHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8gam9iU2l6ZSAqIGpv
YnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRl
ciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBpbnQgam9iU2l6ZSA9IHBhaW50aW5nRGF0
YS5oZWlnaHQgLyBudW1PZlRocmVhZHM7Ci0gICAgICAgICAgICBpbnQgam9ic1dpdGhFeHRyYSA9
IHBhaW50aW5nRGF0YS5oZWlnaHQgJSBudW1PZlRocmVhZHM7Ci0gICAgICAgICAgICBpbnQgY3Vy
cmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gbnVtT2ZUaHJlYWRzIC0gMTsg
am9iID49IDA7IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRl
cnMmIHBhcmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAg
IHBhcmFtLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW0uc3RhcnRZID0gY3Vy
cmVudFk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/
IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKLSAgICAgICAgICAgICAgICBwYXJhbS5lbmRZID0gY3Vy
cmVudFk7Ci0gICAgICAgICAgICAgICAgcGFyYW0ucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0
YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZCBtb2RlbAotICAgIH0KKyAgICBpbWFnZVJlY3QuaW5mbGF0ZShnZW9tZXRyeS5y
ZXNvbHZlSW1hZ2VTaXplKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwogCi0gICAgcGxhdGZv
cm1BcHBseUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKKyAg
ICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwg
cHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKK2Jvb2wgRkVNb3JwaG9s
b2d5Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QK
IHsKLSAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFy
YWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0g
ICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7
CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVy
SW1hZ2VWZWN0b3IgRkVNb3JwaG9sb2d5Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKLQotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotCi0gICAgSW50U2l6
ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kp
KTsKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5
LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0g
ICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhl
bEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShm
aWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkp
OwotICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAt
IDEsIHJhZGl1cy53aWR0aCgpKTsKLSAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERy
YXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKLQotICAgIGlmIChwbGF0
Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdS
ZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFBhaW50
aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBz
b3VyY2VQaXhlbEFycmF5LmdldCgpOwotICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0g
JmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihl
ZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBh
aW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAqIGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJh
ZGl1c1ggKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kg
PSBjZWlsZihyYWRpdXNZICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgcGxhdGZvcm1B
cHBseShwYWludGluZ0RhdGEpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBy
ZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBl
KQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1v
cnBob2xvZ3lPcGVyYXRvciYgbW9ycGhvbG9neU9wZXJhdG9yKQogewotICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAgY2FzZSBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAg
ICBicmVhazsKQEAgLTI5NywxNSArODIsMTAgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0
aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZU1vcnBob2xvZ3kiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgb3BlcmF0
b3I9XCIiIDw8IG1vcnBob2xvZ3lPcGVyYXRvcigpIDw8ICJcIiAiCi0gICAgICAgPDwgInJhZGl1
cz1cIiIgPDwgcmFkaXVzWCgpIDw8ICIsICIgPDwgcmFkaXVzWSgpIDw8ICJcIl1cbiI7Ci0KLSAg
ICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZl
Y3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0
cyA8PCAiIG9wZXJhdG9yPVwiIiA8PCBtX21vcnBob2xvZ3lPcGVyYXRvciA8PCAiXCIgIiA8PCAi
cmFkaXVzPVwiIiA8PCBtX3JhZGl1c1ggPDwgIiwgIiA8PCBtX3JhZGl1c1kgPDwgIlwiXVxuIjsK
ICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IDQ4ZmMzNTQxMTdmYzI3Y2Nm
YzhlOTNmMTRlZGYwNzVkZTM5YzVhMTEuLjc2YzllNjgxNDI2MDU0NTEzMzVlNmVkZTIxMWUxYzcw
NmY1YTM1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTEgKzIzLDEwIEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CitlbnVtIE1vcnBo
b2xvZ3lPcGVyYXRvciB7CiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04gPSAwLAog
ICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSA9IDEsCiAgICAgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX0RJTEFURSA9IDIKQEAgLTM0LDU1ICszNCw3NiBAQCBlbnVtIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRlciYsIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9n
eU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9Ci0gICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSk7CisgICAgdm9pZCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yIG1v
cnBob2xvZ3lPcGVyYXRvcikgeyBtX21vcnBob2xvZ3lPcGVyYXRvciA9IG1vcnBob2xvZ3lPcGVy
YXRvcjsgfQorICAgIHZvaWQgc2V0UmFkaXVzWChmbG9hdCByYWRpdXNYKSB7IG1fcmFkaXVzWCA9
IHJhZGl1c1g7IH0KKyAgICB2b2lkIHNldFJhZGl1c1koZmxvYXQgcmFkaXVzWSkgeyBtX3JhZGl1
c1kgPSByYWRpdXNZOyB9CiAKLSAgICBmbG9hdCByYWRpdXNYKCkgY29uc3QgeyByZXR1cm4gbV9y
YWRpdXNYOyB9Ci0gICAgYm9vbCBzZXRSYWRpdXNYKGZsb2F0KTsKLQotICAgIGZsb2F0IHJhZGl1
c1koKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1k7IH0KLSAgICBib29sIHNldFJhZGl1c1koZmxv
YXQpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZWY8RkVNb3JwaG9sb2d5Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU1v
cnBob2xvZ3koRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwg
ZmxvYXQgcmFkaXVzWSk7CisgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvciwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFTW9ycGhvbG9neSI7IH0KKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KSBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdl
VmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wgcGxhdGZvcm1BcHBseURlZ2VuZXJhdGUo
VWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVj
dCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1w
ZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQg
aGVpZ2h0OwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50IHJhZGl1c1k7Ci0gICAg
fTsKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbV9tb3JwaG9sb2d5T3BlcmF0b3I7CisgICAgZmxv
YXQgbV9yYWRpdXNYOworICAgIGZsb2F0IG1fcmFkaXVzWTsKK307CiAKLSAgICBzdHJ1Y3QgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMgewotICAgICAgICBGRU1vcnBob2xvZ3kqIGZpbHRlcjsKLSAg
ICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgICAgIGNvbnN0IFBhaW50
aW5nRGF0YSogcGFpbnRpbmdEYXRhOwotICAgIH07Cit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
dm9pZCBGRU1vcnBob2xvZ3k6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgbV9tb3JwaG9sb2d5T3BlcmF0b3I7CisgICAgZW5jb2RlciA8PCBtX3JhZGl1
c1g7CisgICAgZW5jb2RlciA8PCBtX3JhZGl1c1k7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU1vcnBob2xvZ3k+PiBGRU1vcnBob2xvZ3k6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8TW9ycGhvbG9neU9wZXJh
dG9yPiBtb3JwaG9sb2d5T3BlcmF0b3I7CisgICAgZGVjb2RlciA+PiBtb3JwaG9sb2d5T3BlcmF0
b3I7CisgICAgaWYgKCFtb3JwaG9sb2d5T3BlcmF0b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiByYWRpdXNYOworICAgIGRlY29kZXIg
Pj4gcmFkaXVzWDsKKyAgICBpZiAoIXJhZGl1c1gpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiByYWRpdXNZOworICAgIGRlY29kZXIgPj4g
cmFkaXVzWTsKKyAgICBpZiAoIXJhZGl1c1kpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoKm1vcnBob2xvZ3lPcGVyYXRvciwg
KnJhZGl1c1gsICpyYWRpdXNZKTsKK30KIAotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlX
b3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmKTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGlu
dCBlbmRZKTsKK25hbWVzcGFjZSBXVEYgewogCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBt
X3R5cGU7Ci0gICAgZmxvYXQgbV9yYWRpdXNYOwotICAgIGZsb2F0IG1fcmFkaXVzWTsKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6TW9ycGhvbG9neU9wZXJhdG9yPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6TW9ycGhvbG9n
eU9wZXJhdG9yLAorCisgICAgICAgIFdlYkNvcmU6OkZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktO
T1dOLAorICAgICAgICBXZWJDb3JlOjpGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUsCisgICAg
ICAgIFdlYkNvcmU6OkZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUKKyAgICA+OwogfTsKIAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV1RGCiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1vcnBob2xvZ3kpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDAy
NzBkYjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLjYxMjIxODJiODNhNjFhYWNi
OTZlYmE4NjE1N2YzMzY3ZjkzNjE1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC00LDYgKzQsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNzEgKzI1LDUwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkK
LSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok9mZnNldCkKK0ZFT2Zmc2V0OjpGRU9m
ZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVPZmZz
ZXQpCiAgICAgLCBtX2R4KGR4KQogICAgICwgbV9keShkeSkKIHsKIH0KIAotUmVmPEZFT2Zmc2V0
PiBGRU9mZnNldDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCitS
ZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGZpbHRlciwgZHgsIGR5KSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZHgsIGR5KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6
OnNldER4KGZsb2F0IGR4KQorRmxvYXRSZWN0IEZFT2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAg
ICBtX2R4ID0gZHg7Ci19CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0
byBpbWFnZVJlY3QgPSBpbnB1dHNbMF0tPmltYWdlUmVjdCgpOwogCi12b2lkIEZFT2Zmc2V0Ojpz
ZXREeShmbG9hdCBkeSkKLXsKLSAgICBtX2R5ID0gZHk7CisgICAgaW1hZ2VSZWN0Lm1vdmUoZ2Vv
bWV0cnkucmVzb2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworCisgICAgcmV0dXJuIGdl
b21ldHJ5LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1
YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK2Jvb2wgRkVPZmZzZXQ6OmlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVjdCgw
KS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRl
cigpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24o
eyBtX2R4LCBtX2R5IH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWlu
dFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWlu
dFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxw
aGFJbWFnZSgpOwogfQogCi12b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQor
RmlsdGVySW1hZ2VWZWN0b3IgRkVPZmZzZXQ6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGRy
YXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwg
bV9keSB9KSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlu
QnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0U3RyZWFtJiBGRU9mZnNl
dDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
IGR4PVwiIiA8PCBkeCgpIDw8ICJcIiBkeT1cIiIgPDwgZHkoKSA8PCAiXCJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgdHMg
PDwgIiBkeD1cIiIgPDwgbV9keCA8PCAiXCIgZHk9XCIiIDw8IG1fZHkgPDwgIlwiXVxuIjsKICAg
ICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAppbmRleCA2NWFiZGE5MGE0N2IxYmZlNzZhZTVjNzRhYWI1
YWExNjdmYjFlNjllLi4xYWFhZWRiYzhhYzBiOWZiY2ZlMDk1YWU1MTZjMzBmNzVmYTIwNTE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiwzNCArMjMsNTkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVPZmZzZXQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFT2Zmc2V0PiBjcmVhdGUoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFT2Zmc2V0PiBjcmVhdGUoZmxvYXQgZHgsIGZsb2F0
IGR5KTsKIAotICAgIGZsb2F0IGR4KCkgY29uc3QgeyByZXR1cm4gbV9keDsgfQotICAgIHZvaWQg
c2V0RHgoZmxvYXQpOworICAgIHZvaWQgc2V0RHgoZmxvYXQgZHgpIHsgbV9keCA9IGR4OyB9Cisg
ICAgdm9pZCBzZXREeShmbG9hdCBkeSkgeyBtX2R5ID0gZHk7IH0KIAotICAgIGZsb2F0IGR5KCkg
Y29uc3QgeyByZXR1cm4gbV9keTsgfQotICAgIHZvaWQgc2V0RHkoZmxvYXQpOworICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVPZmZzZXQ+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFT2Zmc2V0KEZpbHRlciYsIGZsb2F0
IGR4LCBmbG9hdCBkeSk7CisgICAgRkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVPZmZzZXQi
OyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhG
aWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmls
dGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9keDsKICAg
ICBmbG9hdCBtX2R5OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVPZmZz
ZXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9k
eDsKKyAgICBlbmNvZGVyIDw8IG1fZHk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+Citz
dGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IEZFT2Zmc2V0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkeDsKKyAgICBkZWNvZGVyID4+IGR4
OworICAgIGlmICghZHgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGZsb2F0PiBkeTsKKyAgICBkZWNvZGVyID4+IGR5OworICAgIGlmICghZHkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVPZmZzZXQ6OmNyZWF0
ZSgqZHgsICpkeSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuY3BwCmluZGV4IDU5OTcyMzA2ODg2YTYzZmE0MTJiNWI3MTQxZjc0ZjljNDg3YTE0NGMuLjY5
OTI0NDMzZjkzZmU0ZjIxZmViYmFiZjQ4NDQ1ODc2NmVlZTZjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDQ5ICsyMywyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFU3BlY3VsYXJMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291
cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5n
Q29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSwgVHlwZTo6U3BlY3VsYXJMaWdodGluZykKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZF
U3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBzb3VyY2UpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxh
ckxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFy
RXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShz
b3VyY2UpKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4
cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK0ZFU3BlY3VsYXJMaWdodGluZzo6RkVT
cGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
JiBzb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpLCBUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9u
ZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpKSk7CiB9CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6fkZFU3BlY3VsYXJMaWdodGluZygp
ID0gZGVmYXVsdDsKLQotYm9vbCBGRVNwZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3Rh
bnQoZmxvYXQgc3BlY3VsYXJDb25zdGFudCkKLXsKLSAgICBpZiAobV9zcGVjdWxhckNvbnN0YW50
ID09IHNwZWN1bGFyQ29uc3RhbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1
bGFyQ29uc3RhbnQgPSBzcGVjdWxhckNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCBzcGVjdWxh
ckV4cG9uZW50KQotewotICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gc3BlY3VsYXJFeHBv
bmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJFeHBvbmVudCA9IHNw
ZWN1bGFyRXhwb25lbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIEZFU3Bl
Y3VsYXJMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVTcGVj
dWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVNwZWN1
bGFyTGlnaHRpbmciOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc3VyZmFjZVNjYWxlPVwiIiA8PCBtX3N1
cmZhY2VTY2FsZSA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWFsQ29uc3RhbnQ9XCIiIDw8IG1f
c3BlY3VsYXJDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJzcGVjdWxhckV4cG9uZW50PVwi
IiA8PCBtX3NwZWN1bGFyRXhwb25lbnQgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06Oklu
ZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5
ODE4YmYzYjI0OTU4YS4uNWRlOTMzOWRjMzA2NmEzOGVlN2JhMWJlNjQ4YjE5NzVlYmY4YzE2MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywyMCArMjgsMTQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXIm
LCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExp
Z2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1bGFyTGlnaHRpbmcoKTsKLQotICAg
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyQ29uc3Rh
bnQ7IH0KLSAgICBib29sIHNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQpOwotCi0gICAgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQot
ICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCk7Ci0KLSAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGlu
Zz4gY3JlYXRlKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKIHByaXZh
dGU6Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIEZF
U3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwor
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNU
KEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFlN2Rj
YTBjNWRiMmZjYWMyMGFkLi4yNzNhZTE3YzI3ODQ2Zjk5MjkzZTNmZjlmOWZjNTNmOGRlNTcwNzQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4
IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIxLDgwICsyMiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFVGls
ZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRl
ciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK1JlZjxG
RVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRp
bGUoKSk7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQor
RkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVGlsZSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVUaWxl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFVGlsZTo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLS8v
IEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNv
bXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciog
aW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
IHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGlu
LT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRl
bnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUK
LSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0
IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHRp
bGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0
TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0
TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRl
ckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBmaWx0
ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJS
ZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7
Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQg
PSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgt
aW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0gICAg
dGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7Ci0gICAgaWYg
KCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0g
cGF0dGVyblRyYW5zZm9ybTsKLSAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVm
ZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOwotCi0gICAgYXV0byBwYXR0ZXJuID0g
UGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVlLCB0
cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJD
b250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmaWx0ZXJDb250ZXh0LnNldEZp
bGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKyAg
ICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3MgZHJhd2luZ1JlY3QgZm9yIDxmZVRpbGU+LgorICAg
IHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsK
IH0KIAotVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0Citib29sIEZF
VGlsZTo6aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0
CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxu
IjsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKK30KIAotICAgIFRleHRT
dHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworRmlsdGVySW1hZ2VW
ZWN0b3IgRkVUaWxlOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QK
K3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFr
ZUxhc3QoKSB9OworfQogCitUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAoreworICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlVGlsZV1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRleCA0
OWJkOTlmMDk0NDdkYWUxY2YwOWFmMTIzNThjNmRlODQwNjg3NzE0Li43YmUyNWUyODFkNTM0Y2Fh
YTNmOGJlYmU1YTMwZDU2NDFiYjk0MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI3ICsyMywyNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXImKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAKIHByaXZhdGU6
Ci0gICAgRkVUaWxlKEZpbHRlciYpOworICAgIEZFVGlsZSgpOwogCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CisgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9CisgICAg
Ym9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwor
ICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZm
ZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VG
RkVDVChGRVRpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYWMyMzQ2ZThhNGJhNThhYWE5MjRh
NmQ2N2JkNWU0Yjc3ZGQyMjY4Zi4uN2EzYmQ4ZjFmZTk3NGY4NmI2NDFkMjU3NDY0OWM2MmNhOGM5
ZGViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5j
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwzMSArMjYsMTkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4g
QWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0
dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4
MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5v
LiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3Vs
ZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5l
cmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNvbnN0
IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGlt
dW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1w
bGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBjb25z
dCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5k
UiA9IDI4MzY7IC8vIG0gJSBhCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0
ZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVl
bmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Cit9
CiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNl
VHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGlu
dCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDogRmlsdGVy
RWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKLSAgICAsIG1fdHlwZSh0eXBlKQorRkVU
dXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUsIGZs
b2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMs
IGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6
RkVUdXJidWxlbmNlKQorICAgICwgbV90dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkKICAg
ICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVu
Y3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBAIC01
OSw0MDUgKzQ3LDkgQEAgRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0ZXIs
IFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWUKIHsKIH0KIAotUmVmPEZFVHVy
YnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VU
eXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50
IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwotfQotCi1i
b29sIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxlbmNlVHlwZSB0eXBlKQotewotICAgIGlm
IChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5
cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJl
cXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKLXsKLSAgICBpZiAobV9iYXNlRnJlcXVlbmN5
WSA9PSBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFzZUZy
ZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBG
RVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQotewot
ICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYID09IGJhc2VGcmVxdWVuY3lYKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQot
ewotICAgIGlmIChtX3NlZWQgPT0gc2VlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
c2VlZCA9IHNlZWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpz
ZXROdW1PY3RhdmVzKGludCBudW1PY3RhdmVzKQotewotICAgIGlmIChtX251bU9jdGF2ZXMgPT0g
bnVtT2N0YXZlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbnVtT2N0YXZlcyA9IG51
bU9jdGF2ZXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRT
dGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKLXsKLSAgICBpZiAobV9zdGl0Y2hUaWxlcyA9PSBzdGl0
Y2gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0aXRjaFRpbGVzID0gc3RpdGNoOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2Rl
IGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3Bl
Y2lmaWNhdGlvbjoKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNm
ZVR1cmJ1bGVuY2UKLQotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGluZSBs
b25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcgcmVz
dWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2Vl
ZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9IHNf
cmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gdCAqIHQg
KiAoMyAtIDIgKiB0KTsKLX0KLQotaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxv
YXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOwot
fQotCi12b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhKQotewotICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0KLSAgICAvLyBUaGUgc2Vl
ZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KLSAgICBp
ZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSAt
KHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlmIChw
YWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQotICAgICAgICBwYWludGluZ0Rh
dGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOwotCi0gICAgZmxvYXQqIGdyYWRpZW50OwotICAg
IGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgewotICAgICAgICAgICAgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7Ci0gICAgICAgICAgICBncmFkaWVudCA9
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKLSAgICAgICAgICAgIGRvIHsKLSAg
ICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdE
YXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9j
a1NpemU7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
KHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXpl
KSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYmICFn
cmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpoeXBv
dChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0g
bm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6
YXRpb25GYWN0b3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gc19ibG9j
a1NpemUgLSAxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRhLmxh
dHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9tKCkg
JSBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VSVChq
IDwgMiAqIHNfYmxvY2tTaXplICsgMik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwotICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbaV07Ci0gICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytj
aGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19i
bG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVswXTsK
LSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSAr
IGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOwotICAgICAgICB9
Ci0gICAgfQotfQotCi1GRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpjb21w
dXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdAotewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGZsb2F0IHRpbGVXaWR0aCA9IHRpbGVTaXplLndpZHRo
KCk7Ci0gICAgZmxvYXQgdGlsZUhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpOwotICAgIEFTU0VS
VCh0aWxlV2lkdGggPiAwICYmIHRpbGVIZWlnaHQgPiAwKTsKLQotICAgIC8vIFdoZW4gc3RpdGNo
aW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVkCi0g
ICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KLSAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVgpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3Jm
KHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgZmxvYXQg
aGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVX
aWR0aDsKLSAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGFj
Y29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WCAvIGxv
d0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgICAg
IGJhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBiYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotICAgIGlmIChiYXNlRnJl
cXVlbmN5WSkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZUhlaWdo
dCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVx
dWVuY3kgPSBjZWlsZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsK
LSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5j
eSAvIGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBsb3dGcmVx
dWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gaGlnaEZy
ZXF1ZW5jeTsKLSAgICB9Ci0KLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgc3RpdGNo
RGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAgc3Rp
dGNoRGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwotICAgIHN0
aXRjaERhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7Ci0g
ICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsK
LQotICAgIHJldHVybiBzdGl0Y2hEYXRhOwotfQotCi0vLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9t
IFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJi
dWxlbmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpu
b2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRh
JiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKLXsKLSAg
ICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7Ci0gICAgICAgIGludCBpbmRleDsgLy8gYngwLCBieTAg
aW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgaW50IG5leHRJbmRleDsgLy8gYngxLCBieTEgaW4g
dGhlIHNwZWMgdGV4dC4KLSAgICAgICAgZmxvYXQgZnJhY3Rpb247IC8vIHJ4MCwgcnkwIGluIHRo
ZSBzcGVjIHRleHQuCi0KLSAgICAgICAgTm9pc2VQb3NpdGlvbihmbG9hdCBjb21wb25lbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vICB0ID0gdmVjWzBdICsgUGVybGluTjsKLSAgICAgICAg
ICAgIC8vICBieDAgPSAoaW50KXQ7Ci0gICAgICAgICAgICAvLyAgYngxID0gYngwKzE7Ci0gICAg
ICAgICAgICAvLyAgcngwID0gdCAtIChpbnQpdDsKLSAgICAgICAgICAgIGZsb2F0IHBvc2l0aW9u
ID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIGluZGV4ID0gc3RhdGlj
X2Nhc3Q8aW50Pihwb3NpdGlvbik7Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleCArIDE7
Ci0gICAgICAgICAgICBmcmFjdGlvbiA9IHBvc2l0aW9uIC0gaW5kZXg7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHZvaWQgc3RpdGNoKGludCBzaXplLCBpbnQgd3JhcFNpemUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIGlmIChieDAgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAg
ICAgICAgICAgIC8vICAgYngwIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBp
ZiAoaW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgaW5kZXggLT0gc2l6ZTsKLQot
ICAgICAgICAgICAgLy8gaWYgKGJ4MSA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAgICAg
ICAgLy8gICBieDEgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChuZXh0
SW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgbmV4dEluZGV4IC09IHNpemU7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVgobm9pc2VWZWN0b3Iu
eCgpKTsKLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lzZVZlY3Rvci55KCkpOwotCi0gICAg
Ly8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0gICAg
aWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndp
ZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRh
LmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJNOwot
ICAgIC8vIGJ4MSAmPSBCTTsKLSAgICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJNOwot
ICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4ICY9
IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lz
ZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0
b3JbYngwXTsKLSAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBsYXR0
aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07Ci0g
ICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25v
aXNlWC5uZXh0SW5kZXhdOwotCi0gICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsKLSAg
ICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3RoQ3Vy
dmUobm9pc2VYLmZyYWN0aW9uKTsKLSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5m
cmFjdGlvbik7Ci0KLSAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5lbCkg
ewotICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAgIGlu
dCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNl
WS5pbmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAwXTsg
dSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9IHBh
aW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0gbm9p
c2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAgICAg
Ly8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRl
eF07Ci0gICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGll
bnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAg
ICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAgIGZs
b2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICog
cVsxXTsKLSAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBhID0g
bGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxhdHRp
Y2VTZWxlY3RvcltpICsgYnkxXTsKLSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8v
IHJ5MSA9IHJ5MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5l
bF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRp
bmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJhY3Rp
b24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAvLyBi
MTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRl
eF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9IHJ4
MSAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50
W2NoYW5uZWxdW2IxMV07Ci0gICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBd
ICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAoc3gs
IHUsIHYpOwotICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7
Ci0KLSAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4gbGlu
ZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0gICAg
ICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAotICAg
ICAgICBub2lzZUZvckNoYW5uZWwoMiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQotICAg
IH07Ci19Ci0KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlVHVy
YnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21wb25l
bnRzLgotLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDg+
PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KLXN0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQorRmxvYXRSZWN0
IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6OmNsYW1w
PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwg
MjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0
Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhf
dD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUpLAot
ICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25l
bnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OwotfQotCi1Db2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKLSAgICBGbG9hdFBvaW50IG5vaXNlVmVj
dG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICog
cGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0gICAg
Zm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewot
ICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0gICAg
ICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0
aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwotCi0gICAgICAgIG5vaXNlVmVj
dG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNldFko
bm9pc2VWZWN0b3IueSgpICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0KLSAgICAgICAgaWYg
KG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBT
dWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCi0g
ICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3Rp
bmcgaXQgb25jZS4KLSAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKLSAgICAgICAg
ICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGluTm9p
c2U7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOwotICAgICAgICAgICAgc3Rp
dGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAyNTUp
IC8gMiBieSBmcmFjdGFsTm9pc2UKLSAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3Vs
dCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4KLSAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBl
OjpGcmFjdGFsTm9pc2UpCi0gICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwotCi0gICAgcmV0dXJuIHRvSW50QmFz
ZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKLX0KLQotdm9pZCBG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGlu
dCBzdGFydFksIGludCBlbmRZKSBjb25zdAotewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsK
LQotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBm
aWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2lu
dCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBp
eGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNm
b3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAo
aW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2lu
dC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAg
ICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2lu
dCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAg
ICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50
aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5
LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5l
bCk7Ci0gICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25Q
YXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJl
Z2lvbigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwg
cGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5l
bmRZKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVl
bmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAg
U3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZy
ZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAg
ICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUu
YXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBt
YXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBt
YXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygm
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVt
YmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0
byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVt
Sm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNp
emVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9i
c1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8g
bnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBu
dW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAg
IEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkp
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
LnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9
IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAg
ICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlz
IG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwu
Ci0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVn
aW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpAQCAtNDc2LDE1ICs2OCwx
MCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVs
ZW5jZVR5cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFVHVyYnVs
ZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRp
b25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwot
ICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImJhc2VG
cmVxdWVuY3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVlbmN5
WSgpIDw8ICJcIiAiCi0gICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgotICAg
ICAgIDw8ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKLSAgICAgICA8
PCAic3RpdGNoVGlsZXM9XCIiIDw8IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxuIjsKKyAgICB0cyA8
PCAiIHR5cGU9XCIiIDw8IG1fdHVyYnVsZW5jZVR5cGUgPDwgIlwiICIgPDwgImJhc2VGcmVxdWVu
Y3k9XCIiIDw8IG1fYmFzZUZyZXF1ZW5jeVggPDwgIiwgIiA8PCBtX2Jhc2VGcmVxdWVuY3lZIDw8
ICJcIiAiIDw8ICJzZWVkPVwiIiA8PCBtX3NlZWQgPDwgIlwiICIgPDwgIm51bU9jdGF2ZXM9XCIi
IDw8IG1fbnVtT2N0YXZlcyA8PCAiXCIgIiA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IG1fc3RpdGNo
VGlsZXMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4
IDRkNTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjdlMDM4NzQyMjY3N2Ni
NjVkZTBjNjBmYWI0NTcwYzhlNTczODE1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4K
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI0LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zOCw5MSArMzYsMjggQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAKIGNs
YXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZs
b2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwg
Ym9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKKyAgICB2
b2lkIHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlKSB7IG1f
dHVyYnVsZW5jZVR5cGUgPSB0dXJidWxlbmNlVHlwZTsgfQorICAgIHZvaWQgc2V0QmFzZUZyZXF1
ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpIHsgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVx
dWVuY3lYOyB9CisgICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5
WSkgeyBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7IH0KKyAgICB2b2lkIHNldE51
bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpIHsgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsgfQor
ICAgIHZvaWQgc2V0U2VlZChmbG9hdCBzZWVkKSB7IG1fc2VlZCA9IHNlZWQ7IH0KKyAgICB2b2lk
IHNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoVGlsZXMpIHsgbV9zdGl0Y2hUaWxlcyA9IHN0aXRj
aFRpbGVzOyB9CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFzZUZyZXF1ZW5jeVg7IH0KLSAgICBib29sIHNldEJhc2VGcmVxdWVuY3lYKGZsb2F0KTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFVHVy
YnVsZW5jZT4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVk7IH0KLSAgICBib29sIHNldEJhc2VGcmVx
dWVuY3lZKGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIGZsb2F0IHNlZWQoKSBj
b25zdCB7IHJldHVybiBtX3NlZWQ7IH0KLSAgICBib29sIHNldFNlZWQoZmxvYXQpOworICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtT2N0YXZlczsgfQotICAgIGJvb2wgc2V0TnVtT2N0YXZlcyhpbnQpOworICAgIGJv
b2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgYm9vbCBzdGl0Y2hUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RpdGNoVGlsZXM7IH0KLSAg
ICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2Nr
U2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1Np
emUgLSAxOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0g
KDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgot
Ci0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBh
aW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJlcXVl
bmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRpbmdT
ZWVkKQotICAgICAgICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAgICAg
ICwgYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VGcmVx
dWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBs
b25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsg
Ml07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwot
ICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lY
OwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9uZyBy
YW5kb20oKTsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBTdGl0
Y2hEYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11
Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3JhcFgg
eyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7IDAg
fTsKLSAgICAgICAgaW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1Y3Qg
RmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKLSAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5nRGF0
YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgICAg
IGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KLSAgICBGRVR1cmJ1
bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwg
Ym9vbCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNo
aW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VG
cmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQo
Y29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZ
KSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwotCi0g
ICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOworICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHVyYnVsZW5j
ZVR5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBtX2Jhc2VGcmVx
dWVuY3lZOwogICAgIGludCBtX251bU9jdGF2ZXM7CkBAIC0xMzAsNSArNjUsNjcgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fc3RpdGNoVGlsZXM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBGRVR1cmJ1bGVuY2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV90dXJidWxlbmNlVHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fYmFzZUZy
ZXF1ZW5jeVg7CisgICAgZW5jb2RlciA8PCBtX2Jhc2VGcmVxdWVuY3lZOworICAgIGVuY29kZXIg
PDwgbV9udW1PY3RhdmVzOworICAgIGVuY29kZXIgPDwgbV9zZWVkOworICAgIGVuY29kZXIgPDwg
bV9zdGl0Y2hUaWxlczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9u
YWw8UmVmPEZFVHVyYnVsZW5jZT4+IEZFVHVyYnVsZW5jZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxUdXJidWxlbmNlVHlwZT4gdHVyYnVsZW5jZVR5cGU7
CisgICAgZGVjb2RlciA+PiB0dXJidWxlbmNlVHlwZTsKKyAgICBpZiAoIXR1cmJ1bGVuY2VUeXBl
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9uYWw8
ZmxvYXQ+IGJhc2VGcmVxdWVuY3lYOworICAgIGRlY29kZXIgPj4gYmFzZUZyZXF1ZW5jeVg7Cisg
ICAgaWYgKCFiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBiYXNlRnJlcXVlbmN5WTsKKyAgICBkZWNvZGVy
ID4+IGJhc2VGcmVxdWVuY3lZOworICAgIGlmICghYmFzZUZyZXF1ZW5jeVkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gbnVtT2N0YXZlczsK
KyAgICBkZWNvZGVyID4+IG51bU9jdGF2ZXM7CisgICAgaWYgKCFudW1PY3RhdmVzKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2VlZDsK
KyAgICBkZWNvZGVyID4+IHNlZWQ7CisgICAgaWYgKCFzZWVkKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzdGl0Y2hUaWxlczsKKyAgICBk
ZWNvZGVyID4+IHN0aXRjaFRpbGVzOworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoKnR1
cmJ1bGVuY2VUeXBlLCAqYmFzZUZyZXF1ZW5jeVgsICpiYXNlRnJlcXVlbmN5WSwgKm51bU9jdGF2
ZXMsICpzZWVkLCAqc3RpdGNoVGlsZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6
OlR1cmJ1bGVuY2VUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAg
ICAgV2ViQ29yZTo6VHVyYnVsZW5jZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6VHVyYnVsZW5j
ZVR5cGU6OlVua25vd24sCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFs
Tm9pc2UsCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpUdXJidWxlbmNlCisgICAg
PjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJ
TFRFUl9FRkZFQ1QoRkVUdXJidWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNzY5NjUwMjg5NDYy
MGIwMjdhODI0YzY0MmY2NGMwNDNhMDFhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9t
ZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VW
ZWN0b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjph
cHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgRmls
dGVySW1hZ2VWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyUmVzdWx0IHJlc3VsdChyZW5kZXJpbmdN
b2RlKCkpOworCisgICAgaWYgKHNvdXJjZUltYWdlKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBG
aWx0ZXJJbWFnZTo6Y3JlYXRlKGdlb21ldHJ5LmZpbHRlclJlZ2lvbigpLCBzb3VyY2VJbWFnZVJl
Y3QsIHsgKnNvdXJjZUltYWdlIH0pOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgc3RhY2suYXBwZW5kKGltYWdlLnJlbGVhc2VOb25OdWxsKCkp
OworICAgIH0KKworICAgIGlmICghYXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBh
dXRvIGltYWdlID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBpbWFnZS0+dHJhbnNmb3JtVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4geyBpbWFn
ZS0+aW1hZ2VCdWZmZXIoKSwgZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlLT5pbWFnZVJlY3Qo
KSkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1
OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uZmRmNTk5YzJjYzAyMTZiNDc2ZjU5MzM0MzE2NDkz
MTAwYjU3YzJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDU5ICsyMSwyMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewor
ICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAg
ICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1f
ZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkg
PSBkZWZhdWx0OworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCi0gICAgdm9pZCBz
ZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3Vy
Y2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQotCi0gICAgRmxvYXRTaXpl
IGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0K
LSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNv
bHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KLQotICAg
IGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAg
IHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxl
OyB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQotCi0gICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9Ci0gICAgdm9p
ZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRl
cmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NTU0ZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBzY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNpemUg
KiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVn
aW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNl
clNwYWNlKCkgY29uc3QgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6dHVwbGU8UmVmUHRy
PEltYWdlQnVmZmVyPiwgRmxvYXRSZWN0PiBhcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0U2l6
ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAgOiBtX2ZpbHRlclJlc29sdXRpb24oZmlsdGVy
UmVzb2x1dGlvbikKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gbV9zb3VyY2VJbWFnZTsKLSAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwot
ICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01v
ZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAg
IGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CisgICAgdXNpbmcgRmlsdGVyRnVuY3Rpb246OkZp
bHRlckZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3Vu
ZGFyeVNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiZTc3ZGVjZDMxZjI4ZTVlMjU4MDJkZTNmY2NmOGQ0MTNk
NDM2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyQm91bmRhcnlTZXQgeworcHVibGljOgorICAg
IGVudW0gY2xhc3MgRmxhZ3MgeworICAgICAgICBIYXNYICAgICAgPSAxIDw8IDAsCisgICAgICAg
IEhhc1kgICAgICA9IDEgPDwgMSwKKyAgICAgICAgSGFzV2lkdGggID0gMSA8PCAyLAorICAgICAg
ICBIYXNIZWlnaHQgPSAxIDw8IDMKKyAgICB9OworCisgICAgRmlsdGVyQm91bmRhcnlTZXQoKSA9
IGRlZmF1bHQ7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldChjb25zdCBGbG9hdFJlY3QmIGJvdW5k
YXJpZXMsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgICAgIDogbV9ib3VuZGFyaWVzKGJv
dW5kYXJpZXMpCisgICAgICAgICwgbV9mbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4geCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFn
cy5jb250YWlucyhGbGFnczo6SGFzWCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVz
LngoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiB5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRh
aW5zKEZsYWdzOjpIYXNZKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMueSgpOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8
ZmxvYXQ+IHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5z
KEZsYWdzOjpIYXNXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLndpZHRo
KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4gaGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNv
bnRhaW5zKEZsYWdzOjpIYXNIZWlnaHQpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmll
cy5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVyQm91bmRh
cnlTZXQ+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fYm91
bmRhcmllczsKKyAgICBPcHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7Cit9OworCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJCb3VuZGFyeVNldDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2JvdW5kYXJpZXM7CisgICAgZW5jb2Rl
ciA8PCBtX2ZsYWdzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25h
bDxGaWx0ZXJCb3VuZGFyeVNldD4gRmlsdGVyQm91bmRhcnlTZXQ6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBib3VuZGFyaWVzOworICAg
IGRlY29kZXIgPj4gYm91bmRhcmllczsKKyAgICBpZiAoIWJvdW5kYXJpZXMpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPE9wdGlvblNldDxGbGFncz4+
IGZsYWdzOworICAgIGRlY29kZXIgPj4gZmxhZ3M7CisgICAgaWYgKCFmbGFncykKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGaWx0ZXJCb3VuZGFyeVNldCgqYm91
bmRhcmllcywgKmZsYWdzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJC
b3VuZGFyeVNldDo6RmxhZ3M+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3MsCisKKyAgICAgICAgV2ViQ29y
ZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNYLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1ksCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckJvdW5k
YXJ5U2V0OjpGbGFnczo6SGFzV2lkdGgsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5
U2V0OjpGbGFnczo6SGFzSGVpZ2h0CisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1MWMzNDhlYzdmNjNlNGNjOTI3
ZGIxMDguLjQ3OTFjOWEzZjVhNDViYmQ3ZGZjOTNiMjM1OGZjZGI3YTFkZmY2ZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAKQEAgLTI0LDY2MCArMjQsMTA4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVy
UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgPGFybV9u
ZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJh
dGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsdGVy
RWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIsIFR5cGUgdHlwZSkKLSAgICA6IG1f
ZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKHR5cGUpCi17Ci19
Ci0KLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBGaWx0
ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGaWx0ZXJF
ZmZlY3Q6OmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJv
dW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICBtX2Fic29sdXRlUGFpbnRSZWN0
ID0gSW50UmVjdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCi0g
ICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLX0KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGltcGxlbWVudHMgaHR0cHM6Ly93d3cudzMub3JnL1RSL2ZpbHRlci1lZmZlY3RzLTEvI0Zp
bHRlclByaW1pdGl2ZVN1YlJlZ2lvbi4KKyAgICBGbG9hdFJlY3QgZGVmYXVsdFByaW1pdGl2ZVN1
YnJlZ2lvbjsKIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpCi17
Ci0gICAgLy8gRmlsdGVycyBpbiBTVkcgY2xpcCB0byBwcmltaXRpdmUgc3VicmVnaW9uLCB3aGls
ZSBDU1MgZG9lc24ndC4KLSAgICBpZiAobV9jbGlwc1RvQm91bmRzKQotICAgICAgICBtX2Fic29s
dXRlUGFpbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkp
OwotICAgIGVsc2UKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlbmNsb3NpbmdJ
bnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotfQotCi1GbG9hdFBvaW50IEZpbHRlckVmZmVjdDo6
bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCB1c2VyU3BhY2VQb2ludCkg
Y29uc3QKLXsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQb2ludCh1c2VyU3Bh
Y2VQb2ludCwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1dGVVbmNsaXBwZWRT
dWJyZWdpb24pOwotICAgIGFic29sdXRlUG9pbnQubW92ZUJ5KC1tX2Fic29sdXRlUGFpbnRSZWN0
LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OwotfQotCi1JbnRSZWN0IEZp
bHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJl
Y3QmIGVmZmVjdFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29s
dXRlUGFpbnRSZWN0LmxvY2F0aW9uKCk7Ci0gICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0
LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaGFzUmVzdWx0KCkpOwotCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIEltYWdlQnVmZmVy
OjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOwotCi0gICAg
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoc2NhbGUpLnRy
YW5zbGF0ZSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gdHJh
bnNmb3JtLm1hcFJlY3Qoc3JjUmVjdCk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgLy8gRkVUaWxlLCBGRVR1
cmJ1bGVuY2UsIEZFRmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0
ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCi0gICAgRmxvYXRSZWN0IHN1YnJlZ2lvbjsKLSAgICBp
ZiAodW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBpbnB1dEVmZmVjdHMoKS5zaXplKCkp
IHsKLSAgICAgICAgc3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVt
YmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2
ZVN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKTsKLSAgICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFByaW1pdGl2ZVN1YnJl
Z2lvbik7Ci0gICAgICAgIH0KKyAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3Mgc3VicmVnaW9u
IGZvciA8ZmVUaWxlPi4KKyAgICBpZiAoIWlucHV0cy5pc0VtcHR5KCkgJiYgdHlwZSgpICE9IEZp
bHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlKSB7CisgICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBp
bnB1dHMpCisgICAgICAgICAgICBkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLnVuaXRlKGlucHV0
LT5wcmltaXRpdmVTdWJyZWdpb24oKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9
IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAvLyBBZnRlciBjYWxs
aW5nIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUgdGFyZ2V0IGVmZmVj
dCwgcmVzZXQgdGhlIHN1YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0gICAgaWYgKGZpbHRl
ckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAgICAgc3VicmVnaW9u
ID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIGF1dG8gYm91bmRh
cmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQotICAgICAgICBzdWJy
ZWdpb24uc2V0WChib3VuZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkKLSAgICAgICAgc3Vi
cmVnaW9uLnNldFkoYm91bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0aCgpKQotICAgICAg
ICBzdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAgICBpZiAoaGFzSGVp
Z2h0KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmllcy5oZWlnaHQoKSk7
Ci0KLSAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKLQotICAgIGF1
dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBtX2ZpbHRlci5maWx0
ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1
dGlvbik7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0
IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGlu
YXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lv
bik7CisgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24gPSBnZW9tZXRyeS5maWx0ZXJS
ZWdpb24oKTsKIAotICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVy
IHJlZ2lvbi4KLSAgICBhdXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIu
ZmlsdGVyUmVnaW9uKCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmls
dGVyUmVzb2x1dGlvbik7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRl
U2NhbGVkRmlsdGVyUmVnaW9uKTsKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uOwog
Ci0gICAgc2V0TWF4RWZmZWN0UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0gICAgcmV0dXJuIHN1
YnJlZ2lvbjsKLX0KKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WChib3VuZGFyeVNldC54KCku
dmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi54KCkpKTsKKyAgICBwcmltaXRpdmVT
dWJyZWdpb24uc2V0WShib3VuZGFyeVNldC55KCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1
YnJlZ2lvbi55KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0V2lkdGgoYm91bmRhcnlT
ZXQud2lkdGgoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLndpZHRoKCkpKTsK
KyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJ5U2V0LmhlaWdodCgpLnZh
bHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24uaGVpZ2h0KCkpKTsKIAotRmlsdGVyRWZm
ZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKLXsK
LSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihudW1iZXIgPCBtX2lucHV0RWZm
ZWN0cy5zaXplKCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgp
OwotfQotCi1zdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0
KmVmZmVjdCwgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKLXsKLSAg
ICBhbGxFZmZlY3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPm51
bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChp
KTsKLSAgICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0KLSAgICBy
ZXR1cm4gYWxsRWZmZWN0cy5zaXplKCk7Ci19Ci0KLXVuc2lnbmVkIEZpbHRlckVmZmVjdDo6dG90
YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxjb25zdCBGaWx0
ZXJFZmZlY3QqPiBhbGxFZmZlY3RzOwotICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cyh0aGlzLCBh
bGxFZmZlY3RzKTsKKyAgICByZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6YXBwbHkoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
CiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQg
c2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0
cy5hdChpKS5nZXQoKTsKLSAgICAgICAgaW4tPmFwcGx5KCk7Ci0gICAgICAgIGlmICghaW4tPmhh
c1Jlc3VsdCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVj
dDsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKQorICAgICAgICBkcmF3aW5nUmVjdC51
bml0ZShpbnB1dC0+aW1hZ2VSZWN0KCkpOwogCi0gICAgICAgIC8vIENvbnZlcnQgaW5wdXQgcmVz
dWx0cyB0byB0aGUgY3VycmVudCBlZmZlY3QncyBjb2xvciBzcGFjZS4KLSAgICAgICAgdHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShpbiwgaSk7Ci0gICAgfQotCi0gICAgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKLSAgICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JT
cGFjZSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJF
ZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8
PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBh
YnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdp
b24gPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwg
IlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNj
YWxlICIgPDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9u
ICIgPDwgbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpKTsKLQotICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocmVx
dWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJl
Y3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAgIH0KLSAgICAKLSAgICAvLyBBZGQgcGxhdGZv
cm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgotICAg
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQ
cmltaXRpdmVTdWJyZWdpb24oZHJhd2luZ1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCitib29s
IEZpbHRlckVmZmVjdDo6YXBwbHlQbGF0Zm9ybShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnks
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgY29uc3QKIHsKLSAgICAvLyBNdXN0IG9wZXJh
dGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBp
bnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRh
dGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7Ci0K
LSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBw
aXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0jaWYgSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7Ci0g
ICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3Ro
ICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVs
RGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxk
NHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1p
bnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAg
ICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxb
MV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFs
WzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNd
KTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7Ci0gICAg
ICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxh
c3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwotICAgICAgICBp
ZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorI2lmIFVT
RShDT1JFX0lNQUdFKQorICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkKQorICAgICAgICByZXR1cm4gYXBwbHlDb3JlSW1hZ2Uob3V0cHV0LCBpbnB1dHMs
IGdlb21ldHJ5KTsKICNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5n
dGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhh
IGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAo
LS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4g
YSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAv
LyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwg
bG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsK
LSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVu
dCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQorICAgIHJldHVybiBhcHBs
eVNvZnR3YXJlKG91dHB1dCwgaW5wdXRzLCBnZW9tZXRyeSk7CiB9CiAKLXZvaWQgRmlsdGVyRWZm
ZWN0OjpjbGVhclJlc3VsdCgpCitib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoRmlsdGVyUmVzdWx0
JiByZXN1bHQsIEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAogewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwot
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIGFwcGx5KHJl
c3VsdCwgc3RhY2ssIGdlb21ldHJ5LCBGaWx0ZXJCb3VuZGFyeVNldCgpKTsKIH0KIAotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCitib29sIEZpbHRlckVmZmVjdDo6
YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91
bmRhcnlTZXQpIGNvbnN0CiB7Ci0gICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJlZ2FyZGxlc3Mg
dGhhdCB0aGUgY3VycmVudCBlZmZlY3QgaGFzCi0gICAgLy8gYSByZXN1bHQuIENhbiBiZSB1c2Vk
IGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCi0gICAgaWYgKGhhc1Jlc3Vs
dCgpKQotICAgICAgICBjbGVhclJlc3VsdCgpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1faW5w
dXRFZmZlY3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKS0+Y2xlYXJSZXN1bHRzUmVjdXJz
aXZlKCk7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0
KCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3Vs
dCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
IDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIWhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBhdXRvIGlucHV0cyA9IHRha2VJbnB1dHMoc3RhY2spOwogCi0gICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnVubXVsdGlw
bGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5z
aXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxl
ZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVs
QXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi1S
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3Vs
dChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsK
LSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCBy
ZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKLX0KLQotdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0gICAgc2NhbGVkUmVjdC5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRp
b24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBz
b3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAg
fHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRS
ZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbWVtc2V0KGRl
c3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOwotCi0gICAgLy8gRWFy
bHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2Uu
Ci0gICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0g
MCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRS
ZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0gMDsKLSAg
ICBpZiAoeE9yaWdpbiA8IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAgICAgICAg
eE9yaWdpbiA9IDA7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSByZXN1bHQuaW1hZ2VzKCkuZ2V0KHsg
KnRoaXMgfSkpIHsKKyAgICAgICAgc3RhY2suYXBwZW5kKHsgKmltYWdlIH0pOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1heFgoKTsKLSAg
ICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICB4RW5kID0gc2Nh
bGVkUGFpbnRTaXplLndpZHRoKCk7CiAKLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgp
OwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHlE
ZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAgIH0KLSAgICBpbnQgeUVu
ZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpOworICAgIGF1
dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGlucHV0
cywgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KTsKKyAgICBpZiAocHJpbWl0aXZlU3VicmVnaW9uLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IHNpemUgPSAoeEVuZCAt
IHhPcmlnaW4pICogNDsKLSAgICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qu
d2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNvdXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCkgKiA0OwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5k
YXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAg
Y29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICog
c2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworICAgIGF1dG8gaW1hZ2VS
ZWN0ID0gY2FsY3VsYXRlSW1hZ2VSZWN0KGlucHV0cywgZ2VvbWV0cnksIHByaW1pdGl2ZVN1YnJl
Z2lvbik7CisgICAgYXV0byBhYnNvbHV0ZUltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChpbWFnZVJlY3QpOwogCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAgIG1l
bWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4ZWwg
Kz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9Ci19CisgICAgaWYg
KGFic29sdXRlSW1hZ2VSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci1zdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNp
emUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0
ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisgICAgYXV0byBpc0FscGhhSW1hZ2UgPSB0aGlz
LT5pc0FscGhhSW1hZ2UoaW5wdXRzKTsKKyAgICBhdXRvIGltYWdlQ29sb3JTcGFjZSA9IHRoaXMt
PmltYWdlQ29sb3JTcGFjZShpbnB1dHMpOwogCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAg
c3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6
ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOworICAgIGF1dG8gaW1hZ2Ug
PSByZXN1bHQuY3JlYXRlRmlsdGVySW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3Qs
IGlzQWxwaGFJbWFnZSwgYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZUNvbG9yU3BhY2Up
OworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVz
dC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5
dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9u
LmRhdGEoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8
PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBw
bHkoKToiCisgICAgICAgIDw8ICJcbiAgcHJpbWl0aXZlU3VicmVnaW9uICIgPDwgcHJpbWl0aXZl
U3VicmVnaW9uCisgICAgICAgIDw8ICJcbiAgbWF4UHJpbWl0aXZlU3VicmVnaW9uICIgPDwgZ2Vv
bWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAgICAgPDwg
IlxuICBpbWFnZVJlY3QgIiA8PCBpbWFnZVJlY3QKKyAgICAgICAgPDwgIlxuICBhYnNvbHV0ZUlt
YWdlZ1JlY3QgIiA8PCBhYnNvbHV0ZUltYWdlUmVjdCk7CiAKLSAgICB2SW1hZ2VQcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAg
Y29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25z
dCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQp
LnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlv
bi5kYXRhKCk7CisgICAgaWYgKCFhcHBseVBsYXRmb3JtKCppbWFnZSwgaW5wdXRzLCBnZW9tZXRy
eSwgcmVzdWx0LnJlbmRlcmluZ01vZGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291
cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRp
Y19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25l
bnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNv
bnN0IEludFNpemUmIGlucHV0U2l6ZSkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXpl
X3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVy
IHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0
ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAg
IHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgp
OwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0
ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihk
ZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4
ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhf
dCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBl
bmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0g
ICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0g
ICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBz
b3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsw
XSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAw
OwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0g
ICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
cikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUg
Y29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVj
dGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZm
ZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VC
dWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBhdXRvIGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwg
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVj
dCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xv
clNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVmZmVyLmZvcm1hdCgpLmFs
cGhhRm9ybWF0KTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0
Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBkaXJlY3RseSB1c2luZyBQaXhl
bEJ1ZmZlckNvbnZlcnNpb24uCi0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdl
QnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFu
ZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwg
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBzdGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgcmVzdWx0LmltYWdlcygp
LmFkZCh7ICp0aGlzIH0sIFJlZjxGaWx0ZXJJbWFnZT4oKmltYWdlKSk7CiAKLSAgICAvLyBDb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBv
bmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQo
KS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IG91dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgs
IHRhcmdldENvbG9yU3BhY2UgfTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQorVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV9pbWFnZUJ1ZmZl
clJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVs
QnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsICptX2lt
YWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
IH0sIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRh
KCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENv
bnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQg
c2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252
ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxCdWZmZXIpOwotICAg
IGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1h
Z2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJl
Y3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEFTU0VSVCho
YXNSZXN1bHQoKSk7Ci0gICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29w
eVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9t
IHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0g
ICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNv
bG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9E
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29s
b3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0p
OwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5w
dXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAg
aW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNv
bG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwg
aW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWlu
Z0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRp
b24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKQotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk7Ci0KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAg
IC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAg
ICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAg
ICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpj
b2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFT
U0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRD
b2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1f
aW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAg
ICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9Owot
ICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29w
eVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNw
YWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Ci19
Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkK
LXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCAlZHglZCIsIGZpbHRlck5hbWUoKSwgdGhpcywgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotCi0g
ICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jl
c3VsdCgpKTsKLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZm
ZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIu
cmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUo
KSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAg
IEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZSht
X2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZl
cj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAg
ICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0
IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsK
LSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7
Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJl
c3VsdFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQot
Ym9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gZGVzdGluYXRpb25Db2xvclNw
YWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hl
dGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24K
LSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9y
IHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKLSAgICAvLyBBTkQgMikgdGhlIGZpbHRl
ciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9y
U3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0j
ZWxzZQotICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVl
ZGVkIG9uIG5vbi1DRwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwot
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBz
cGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlv
bkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFn
ZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZwotICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9y
bSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KLSAgICBpbWFnZUJ1
ZmZlclJlc3VsdCgpLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoZGVzdGluYXRpb25Db2xvclNwYWNl
KTsKLQotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLQot
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0jZW5kaWYKLX0KLQotVGV4dFN0
cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAotewotICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgZHVtcCB0aGUgc3ViUmVnaW9ucyBvZiB0aGUgZmlsdGVyIHByaW1p
dGl2ZXMgaGVyZSBsYXRlci4gVGhpcyBpc24ndAotICAgIC8vIHBvc3NpYmxlIGF0IHRoZSBtb21l
bnQsIGJlY2F1c2Ugd2UgbmVlZCBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9ucyBmcm9tIHRoZSB0
YXJnZXQgb2JqZWN0LgotICAgIAotICAgIGlmIChyZXByZXNlbnRhdGlvblR5cGUgPT0gUmVwcmVz
ZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpIHsKKyAgICBpZiAocmVwcmVzZW50YXRpb24gPT0gRmls
dGVyUmVwcmVzZW50YXRpb246OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRl
bnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEg
aW1hZ2UiLCBtX2FscGhhSW1hZ2UpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGlu
ZyBjb2xvcnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7CiAgICAgICAg
IHRzIDw8ICJcbiIgPDwgaW5kZW50OwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbHRlckVmZmVjdCYgZmls
dGVyKQotewotICAgIC8vIFVzZSBhIG5ldyBzdHJlYW0gYmVjYXVzZSB3ZSB3YW50IG11bHRpbGlu
ZSBtb2RlIGZvciBsb2dnaW5nIGZpbHRlcnMuCi0gICAgVGV4dFN0cmVhbSBmaWx0ZXJTdHJlYW07
Ci0gICAgZmlsdGVyLmV4dGVybmFsUmVwcmVzZW50YXRpb24oZmlsdGVyU3RyZWFtLCBGaWx0ZXJF
ZmZlY3Q6OlJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKTsKLSAgICAKLSAgICByZXR1cm4g
dHMgPDwgZmlsdGVyU3RyZWFtLnJlbGVhc2UoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmgKaW5kZXggMTJkZWQyNjVhNjU1YzM3ZTc3ZTJjZjA1YjUyNzczZjJiOTZi
NDcxYy4uMmFkNmM2MjZkMGE2ZDg3OGU4YmRkNmVhOTM2NTUyMDdhMTYxN2Q5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCkBAIC0yMiwyMzcgKzIyLDU4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZS5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQorI2luY2x1ZGUgIlJlbmRlcmluZ01v
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEZpbHRlcjsKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVmZmVyOwot
Ci10eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9y
OwotCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVVbmtub3du
LAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVGlsZSwK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07CitjbGFzcyBGaWx0ZXJCb3VuZGFy
eVNldDsKIAotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZm
ZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVi
bGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVuZCwKLSAg
ICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAgICAgICBD
b21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNlTGlnaHRp
bmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywKLSAgICAg
ICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0gICAgICAg
IExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAgICAgICAg
T2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAotICAgICAg
ICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNlR3JhcGhp
YwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFy
UmVzdWx0KCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLQotICAgIEltYWdl
QnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlV
bm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxs
b3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQotICAgIEZpbHRlckVmZmVjdCog
aW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwotICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0
SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9Ci0gICAgdW5z
aWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OworICAgIHZpcnR1YWwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBpbWFnZUNvbG9yU3BhY2UoY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KICAgICAK
LSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhp
cyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkg
bWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIH0KLQot
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBj
b25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25z
dCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5wdXRzLgotICAg
IEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIC8v
IFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KLSAgICBib29s
IGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsgfQotICAgIHZvaWQg
c2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1hZ2UgPSBhbHBoYUlt
YWdlOyB9Ci0KLSAgICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9hYnNvbHV0ZVBhaW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29u
c3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFi
c29sdXRlUGFpbnRSZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChj
b25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZm
ZWN0UmVjdDsgfSAKLQotICAgIHZvaWQgYXBwbHkoKTsKLQotICAgIC8vIENvcnJlY3QgYW55IGlu
dmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3Bl
cmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVs
IHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9u
bHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0g
Y29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVk
KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
LQotICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qg
eyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KLQotICAgIHZpcnR1YWwgSW50T3V0
c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gSW50T3V0c2V0cygpOyB9Ci0KLSAgICBlbnVt
IGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwotICAg
IHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91
dHB1dCkgY29uc3Q7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgU1ZHIHNw
ZWNpZmljIGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
Ci0gICAgLy8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDU2MTQuCi0gICAgYm9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgdm9p
ZCBzZXRIYXNYKGJvb2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFz
WSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShib29sIHZhbHVl
KSB7IG1faGFzWSA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNXaWR0aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hh
c1dpZHRoID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9oYXNIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFz
SGVpZ2h0ID0gdmFsdWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZv
aWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNv
bnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0RWZmZWN0Qm91
bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZlY3RCb3Vu
ZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBw
ZWRTdWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2Vy
U3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBlIGZpbHRlckVm
ZmVjdENsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9
Ci0KLSAgICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0gICAgY29uc3Qg
RmlsdGVyJiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0gICAgYm9vbCBj
bGlwc1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9Ci0gICAgdm9p
ZCBzZXRDbGlwc1RvQm91bmRzKGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRzID0gdmFsdWU7
IH0KLQogICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0gICAg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdENv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fcmVz
dWx0Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9Ci0gICAgdm9p
ZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
OwotICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0g
PSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRW
YWx1ZXM7Ci0gICAgfQorICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1hZ2VW
ZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5
U2V0JikgY29uc3Q7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOworICAgIHVz
aW5nIEZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbjsKICAgICAKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgICBJbWFnZUJ1ZmZlciogY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYg
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgRmxvYXRSZWN0
IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JikgY29u
c3Q7CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRl
IGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFsw
LDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVh
bCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKIAotICAgIC8vIElmIGEgcHJlLW11bHRpcGxp
ZWQgaW1hZ2UsIGNoZWNrIGV2ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQgY29ycmVjdCBpZiBu
ZWNlc3NhcnkuCi0gICAgdm9pZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOworICAg
IHZpcnR1YWwgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsK
KyAgICB2aXJ0dWFsIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0
b3ImKSBjb25zdCB7IHJldHVybiB7IH07IH0KIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgPSAwOwotCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFn
ZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZl
cnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29u
dmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IFBpeGVsQnVmZmVyJik7CisgICAgdmlydHVhbCBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1h
Z2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVy
R2VvbWV0cnkmKSBjb25zdCA9IDA7CiAgICAgCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmly
dHVhbCBib29sIGFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisj
ZW5kaWYKIAotICAgIEZpbHRlciYgbV9maWx0ZXI7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1f
aW5wdXRFZmZlY3RzOwotCi0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVz
dWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7Ci0KLSAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7Ci0gICAgCi0gICAg
Ly8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbHRlciBwcmltaXRpdmUuIEluIFNWRyB0aGlzIGlz
IHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2UuCi0g
ICAgLy8gVGhlIGFic29sdXRlIHBhaW50IHJlY3Qgc2hvdWxkIG5ldmVyIGJlIGJpZ2dlciB0aGFu
IG1fbWF4RWZmZWN0UmVjdC4KLSAgICBGbG9hdFJlY3QgbV9tYXhFZmZlY3RSZWN0OwotICAgIAot
ICAgIC8vIFRoZSBzdWJyZWdpb24gb2YgYSBmaWx0ZXIgcHJpbWl0aXZlIGFjY29yZGluZyB0byB0
aGUgU1ZHIEZpbHRlciBzcGVjaWZpY2F0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIC8v
IFRoaXMgaXMgU1ZHIHNwZWNpZmljIGFuZCBuZWVkcyB0byBtb3ZlIHRvIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLgotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbjsKKyAgICBib29sIGFwcGx5UGxhdGZvcm0oRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBSZW5kZXJp
bmdNb2RlKSBjb25zdDsKIAotICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFj
dHVhbCBTVkdGRSpFbGVtZW50LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24g
b2YgdGhlCi0gICAgLy8gZmlsdGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxv
YXRSZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKKyAgICBib29sIGFwcGx5KEZpbHRlclJlc3VsdCYs
IEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBm
aW5hbDsKICAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFwcGVkIHRvIGFi
c29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJlY3QgbV9hYnNv
bHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJvb2wgbV9hbHBoYUltYWdlIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7
IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRp
dmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlu
cHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQotI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5l
YXJTUkdCKCkgfTsKLSNlbHNlCiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5n
Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0jZW5kaWYKLSAg
ICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkgfTsKLSAgICAKLSAgICBjb25zdCBUeXBlIG1fZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlOwogfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVyRWZmZWN0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzRmlsdGVyRWZmZWN0KCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0ZJTFRFUl9FRkZFQ1QoQ2xhc3NOYW1lKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OkNsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LnR5cGUoKSA9
PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNsYXNzTmFtZTsgfSBcCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGE4NTVjZGI5NjMxN2I4MmRlMzU2N2ZjMzFlNWI5
ZTlhOWVjNjA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaCIKLQotI2lmIFVTRShDT1JFX0lNQUdFKQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVu
aXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlD
cmVhdGUoYm9vbCBhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQsIEZpbHRlckVmZmVj
dCYgbGFzdEVmZmVjdCkKLXsKLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoYWNjZWxlcmF0
ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKQotICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OnRyeUNyZWF0ZShsYXN0RWZmZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGxhc3RFZmZlY3QpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQotfSAv
LyBuYW1zcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTcz
ZTljYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0q
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRl
ckVmZmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSA9IDA7
Ci0gICAgCi0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0g
ICAgCi1wcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgPSAwOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0VmVjdG9yLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzVmNGM4MzJjZTNhZTE2ZDllYTkyMDljZjg3MmVkYjc4YzBjYjc5MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0VmVjdG9yLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJFZmZlY3Q7CisK
K3VzaW5nIEZpbHRlckVmZmVjdFZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj47CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YThjMzAwM2JlMjc3YTU3YjJjOTM0ZTNkNWMxYjkxMTFkNmQ2ODQ4MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rp
b24uY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0
aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKFR5cGUgdHlw
ZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitzdGF0aWMgaW5saW5lIGF1dG8mIGZpbHRl
ck5hbWVzKCkKK3sKKyAgICB1c2luZyBGaWx0ZXJOYW1lTWFwID0gSGFzaE1hcDxGaWx0ZXJGdW5j
dGlvbjo6VHlwZSwgQXRvbVN0cmluZywgV1RGOjpJbnRIYXNoPEZpbHRlckZ1bmN0aW9uOjpUeXBl
PiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxGaWx0ZXJGdW5jdGlvbjo6VHlwZT4+OworCisg
ICAgc3RhdGljIGF1dG8gZmlsdGVyTmFtZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoW10geworICAg
ICAgICBGaWx0ZXJOYW1lTWFwIGZpbHRlck5hbWVzID0geworICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6Q1NTRmlsdGVyLCAgICAgICAgICAgIkNTU0ZpbHRlciJfcyAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlciwgICAg
ICAgICAgICJTVkdGaWx0ZXIiX3MgICAgICAgICAgIH0sCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsICAgICAgICAgICAgICJGRUJsZW5k
Il9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUNvbG9yTWF0cml4LCAgICAgICAiRkVDb2xvck1hdHJpeCJfcyAgICAgICB9LAorICAgICAgICAg
ICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwgIkZFQ29tcG9u
ZW50VHJhbnNmZXIiX3MgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29tcG9zaXRlLCAgICAgICAgICJGRUNvbXBvc2l0ZSJfcyAgICAgICAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4LCAgICAiRkVDb252b2x2
ZU1hdHJpeCJfcyAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVE
aWZmdXNlTGlnaHRpbmcsICAgIkZFRGlmZnVzZUxpZ2h0aW5nIl9zICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwLCAgICJGRURpc3BsYWNl
bWVudE1hcCJfcyAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURy
b3BTaGFkb3csICAgICAgICAiRkVEcm9wU2hhZG93Il9zICAgICAgICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZCwgICAgICAgICAgICAgIkZFRmxvb2QiX3Mg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1
c3NpYW5CbHVyLCAgICAgICJGRUdhdXNzaWFuQmx1ciJfcyAgICAgIH0sCisgICAgICAgICAgICB7
IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLCAgICAgICAgICAgICAiRkVJbWFnZSJfcyAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJn
ZSwgICAgICAgICAgICAgIkZFTWVyZ2UiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwgICAgICAgICJGRU1vcnBob2xvZ3ki
X3MgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNl
dCwgICAgICAgICAgICAiRkVPZmZzZXQiX3MgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLCAgIkZFU3BlY3VsYXJMaWdo
dGluZyJfcyAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZSwg
ICAgICAgICAgICAgICJGRVRpbGUiX3MgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2UsICAgICAgICAiRkVUdXJidWxlbmNlIl9z
ICAgICAgICB9LAorCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VB
bHBoYSwgICAgICAgICAiU291cmNlQWxwaGEiX3MgICAgICAgICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhpYywgICAgICAgIlNvdXJjZUdyYXBoaWMi
X3MgICAgICAgfQorCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBmaWx0ZXJOYW1lczsKKyAg
ICB9KCkpOworICAgIAorICAgIHJldHVybiBmaWx0ZXJOYW1lcy5nZXQoKTsKK30KKworQXRvbVN0
cmluZyBGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZShUeXBlIHR5cGUpCit7CisgICAgcmV0dXJu
IGZpbHRlck5hbWVzKCkuZ2V0KHR5cGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTUwZTFjMmE0NGYyNzg0MDE0MWMxZTQ1MDUzNTEx
NjE3NTc1NzVhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVwcmVzZW50
YXRpb24uaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlclJlc3VsdDsKK2NsYXNzIEltYWdlQnVmZmVy
OworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1bmN0
aW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAg
IENTU0ZpbHRlciwKKyAgICAgICAgU1ZHRmlsdGVyLAorCisgICAgICAgIEZFTWluaW11bSwKKwor
ICAgICAgICBGRUJsZW5kID0gRkVNaW5pbXVtLAorICAgICAgICBGRUNvbG9yTWF0cml4LAorICAg
ICAgICBGRUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAgICAg
RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgRkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAgIEZF
RGlzcGxhY2VtZW50TWFwLAorICAgICAgICBGRURyb3BTaGFkb3csCisgICAgICAgIEZFRmxvb2Qs
CisgICAgICAgIEZFR2F1c3NpYW5CbHVyLAorICAgICAgICBGRUltYWdlLAorICAgICAgICBGRU1l
cmdlLAorICAgICAgICBGRU1vcnBob2xvZ3ksCisgICAgICAgIEZFT2Zmc2V0LAorICAgICAgICBG
RVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxlbmNl
LAorICAgICAgICBTb3VyY2VBbHBoYSwKKyAgICAgICAgU291cmNlR3JhcGhpYywKKworICAgICAg
ICBGRU1heGltdW0gPSBTb3VyY2VHcmFwaGljCisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0aW9u
KFR5cGUpOworICAgIHZpcnR1YWwgfkZpbHRlckZ1bmN0aW9uKCkgPSBkZWZhdWx0OworCisgICAg
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICBib29sIGlzQ1NTRmls
dGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkNTU0ZpbHRlcjsgfQorICAgIGJv
b2wgaXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U1ZHRmlsdGVy
OyB9CisgICAgYm9vbCBpc0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpD
U1NGaWx0ZXIgfHwgbV90eXBlID09IFR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0
ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPj0gVHlwZTo6RkVNaW5pbXVtICYmIG1f
dHlwZSA8PSBUeXBlOjpGRU1heGltdW07IH0KKworICAgIHN0YXRpYyBBdG9tU3RyaW5nIGZpbHRl
ck5hbWUoVHlwZSk7CisgICAgc3RhdGljIEF0b21TdHJpbmcgc291cmNlQWxwaGFOYW1lKCkgeyBy
ZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VBbHBoYSk7IH0KKyAgICBzdGF0aWMgQXRvbVN0
cmluZyBzb3VyY2VHcmFwaGljTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNl
R3JhcGhpYyk7IH0KKyAgICBBdG9tU3RyaW5nIGZpbHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBm
aWx0ZXJOYW1lKG1fdHlwZSk7IH0KKworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisjZW5kaWYKKworICAgIHZpcnR1YWwgSW50T3V0c2V0cyBjYWxjdWxhdGVPdXRzZXRzKCkgY29u
c3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0
JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uID0gRmlsdGVyUmVwcmVz
ZW50YXRpb246OlRlc3RPdXRwdXQpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBUeXBlIG1f
dHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZSwKKworICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6Q1NTRmlsdGVyLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U1ZHRmlsdGVyLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJs
ZW5kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1hdHJp
eCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJh
bnNmZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0
ZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRy
aXgsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdo
dGluZywKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2Vt
ZW50TWFwLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEcm9wU2hh
ZG93LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZCwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3NpYW5CbHVyLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwKKyAgICAgICAgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2UsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNldCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFVGlsZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFVHVyYnVsZW5jZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OlNvdXJjZUFscGhhLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291
cmNlR3JhcGhpYworICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9t
ZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWE3OGQzNjM2YWY5Nzc5ODA3ZjU2ZWRjYWFjMjJjNzdhNzc5
ZTMzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zp
bHRlckdlb21ldHJ5OjpGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgZmxvYXQgZmlsdGVyU2NhbGUsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICA6
IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAsIG1fZmlsdGVyU2NhbGUoRmxvYXRT
aXplKGZpbHRlclNjYWxlLCBmaWx0ZXJTY2FsZSkpCisgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xp
cE9wZXJhdGlvbikKK3sKK30KKworRmlsdGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0
IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4mIHRhcmdldEJvdW5kaW5nU2l6ZSwgVmVjdG9y
PEZpbHRlckJvdW5kYXJ5U2V0PiYmIGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cykKKyAgICA6IEZp
bHRlckdlb21ldHJ5KGZpbHRlclJlZ2lvbiwgZmlsdGVyU2NhbGUsIHRhcmdldEJvdW5kaW5nU2l6
ZSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpLCBDbGlwT3BlcmF0aW9uOjpJbnRl
cnNlY3QpCit7Cit9CisKK0ZpbHRlckdlb21ldHJ5OjpGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3Qg
c3RkOjpvcHRpb25hbDxGbG9hdFNpemU+JiB0YXJnZXRCb3VuZGluZ1NpemUsIFZlY3RvcjxGaWx0
ZXJCb3VuZGFyeVNldD4mJiBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMsIENsaXBPcGVyYXRpb24g
Y2xpcE9wZXJhdGlvbikKKyAgICA6IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAs
IG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCisgICAgLCBtX3RhcmdldEJvdW5kaW5nU2l6ZSh0
YXJnZXRCb3VuZGluZ1NpemUpCisgICAgLCBtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhXVEZN
b3ZlKGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cykpCisgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xp
cE9wZXJhdGlvbikKK3sKK30KKworRmxvYXRTaXplIEZpbHRlckdlb21ldHJ5OjpjYWxjdWxhdGVG
aWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRT
aXplJiBhYnNvbHV0ZVNjYWxlKQoreworICAgIGF1dG8gYWJzb2x1dGVTb3VyY2VJbWFnZVJlY3Qg
PSBzb3VyY2VJbWFnZVJlY3Q7CisgICAgYWJzb2x1dGVTb3VyY2VJbWFnZVJlY3Quc2NhbGUoYWJz
b2x1dGVTY2FsZSk7CisgICAgYXV0byBjbGFtcGluZ1NjYWxlID0gRmxvYXRTaXplIHsgMSwgMSB9
OworICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZVNvdXJjZUltYWdl
UmVjdC5zaXplKCksIGNsYW1waW5nU2NhbGUpOworICAgIHJldHVybiBhYnNvbHV0ZVNjYWxlICog
Y2xhbXBpbmdTY2FsZTsKK30KKworRmxvYXRTaXplIEZpbHRlckdlb21ldHJ5OjpyZXNvbHZlSW1h
Z2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBp
bWFnZVNpemUgKiBtX3RhcmdldEJvdW5kaW5nU2l6ZS52YWx1ZV9vcihGbG9hdFNpemUoMSwgMSkp
OworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6Om1hcEltYWdlU2l6ZShjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaW1hZ2VTaXplICogbV9maWx0
ZXJTY2FsZTsKK30KKworRmxvYXRTaXplIEZpbHRlckdlb21ldHJ5OjptYXBSZXNvbHZlZEltYWdl
U2l6ZShjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFw
SW1hZ2VTaXplKHJlc29sdmVJbWFnZVNpemUoaW1hZ2VTaXplKSk7Cit9CisKKworRmxvYXRSZWN0
IEZpbHRlckdlb21ldHJ5OjptYXBJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3Qp
IGNvbnN0Cit7CisgICAgYXV0byBzY2FsZWRJbWFnZVJlY3QgPSBpbWFnZVJlY3Q7CisgICAgc2Nh
bGVkSW1hZ2VSZWN0LnNjYWxlKG1fZmlsdGVyU2NhbGUpOworICAgIHJldHVybiBzY2FsZWRJbWFn
ZVJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6bWFwSW1hZ2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEltYWdlUmVjdCkg
Y29uc3QKK3sKKyAgICBhdXRvIG1vdmVkSW1hZ2VSZWN0ID0gaW1hZ2VSZWN0OworICAgIG1vdmVk
SW1hZ2VSZWN0Lm1vdmVCeSgtdGFyZ2V0SW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVy
biBtYXBJbWFnZVJlY3QobW92ZWRJbWFnZVJlY3QpOworfQorCitGaWx0ZXJCb3VuZGFyeVNldCBG
aWx0ZXJHZW9tZXRyeTo6Ym91bmRhcnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlIHR5cGUsIHVuc2ln
bmVkIGluZGV4KSBjb25zdAoreworICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6
U291cmNlR3JhcGhpYyB8fCB0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAobV9maWx0ZXJFZmZlY3RCb3VuZGFyeVNl
dHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGluZGV4ID49IG1f
ZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzLnNpemUoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9maWx0
ZXJFZmZlY3RCb3VuZGFyeVNldHNbaW5kZXhdOworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0
cnk6OmNsaXBUb0ZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKK3sKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHByaW1pdGl2ZVN1YnJlZ2lvbiwg
bV9maWx0ZXJSZWdpb24pOworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6OmNsaXBUb1By
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xpcE9wZXJh
dGlvbiA9PSBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QgPyBpbnRlcnNlY3Rpb24oaW1hZ2VSZWN0
LCBwcmltaXRpdmVTdWJyZWdpb24pIDogdW5pb25SZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3Vi
cmVnaW9uKTsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjpjbGlwVG9NYXhQcmltaXRp
dmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBjbGlwVG9QcmltaXRpdmVT
dWJyZWdpb24oaW1hZ2VSZWN0LCBjbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NzczZDVmYTg3ODM2MzRmM2YzNDQ4NDQyZjRlYjhmMWMzZTkwNDRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJH
ZW9tZXRyeS5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyQm91bmRh
cnlTZXQuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmlsdGVyR2VvbWV0cnkgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVyc2VjdCwgVW5pdGUgfTsKKwor
ICAgIEZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBmbG9hdCBm
aWx0ZXJTY2FsZSA9IDEsIENsaXBPcGVyYXRpb24gPSBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3Qp
OworICAgIEZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4m
IHRhcmdldEJvdW5kaW5nU2l6ZSwgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiYmKTsKKworICAg
IHN0YXRpYyBGbG9hdFNpemUgY2FsY3VsYXRlRmlsdGVyU2NhbGUoY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgYWJzb2x1dGVTY2FsZSk7CisKKyAgICBG
bG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
KyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxl
OyB9CisKKyAgICBGbG9hdFNpemUgcmVzb2x2ZUltYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSkgY29uc3Q7CisKKyAgICBGbG9hdFNpemUgbWFwSW1hZ2VTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplKSBjb25zdDsKKyAgICBGbG9hdFNpemUgbWFwUmVzb2x2ZWRJbWFnZVNp
emUoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IG1h
cEltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IG1hcEltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJlZ3RJbWFnZVJlY3QpIGNvbnN0OworCisgICAgRmlsdGVyQm91bmRhcnlTZXQgYm91
bmRhcnlTZXQoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCkgY29uc3Q7CisKKyAgICBGbG9h
dFJlY3QgY2xpcFRvRmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBjbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RmlsdGVyR2VvbWV0cnk+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
RmxvYXRTaXplPiYgdGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+
JiYsIENsaXBPcGVyYXRpb24pOworCisgICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworICAg
IEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+
IG1fdGFyZ2V0Qm91bmRpbmdTaXplOworICAgIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4gbV9m
aWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisKKyAgICBDbGlwT3BlcmF0aW9uIG1fY2xpcE9wZXJh
dGlvbiB7IENsaXBPcGVyYXRpb246OkludGVyc2VjdCB9OworfTsKKwordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgRmlsdGVyR2VvbWV0cnk6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgbV9maWx0ZXJSZWdpb247CisgICAgZW5jb2RlciA8PCBt
X2ZpbHRlclNjYWxlOworCisgICAgZW5jb2RlciA8PCBtX3RhcmdldEJvdW5kaW5nU2l6ZTsKKyAg
ICBlbmNvZGVyIDw8IG1fZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzOworCisgICAgZW5jb2RlciA8
PCBtX2NsaXBPcGVyYXRpb247Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9w
dGlvbmFsPEZpbHRlckdlb21ldHJ5PiBGaWx0ZXJHZW9tZXRyeTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGZpbHRlclJlZ2lvbjsKKyAg
ICBkZWNvZGVyID4+IGZpbHRlclJlZ2lvbjsKKyAgICBpZiAoIWZpbHRlclJlZ2lvbikKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBm
aWx0ZXJTY2FsZTsKKyAgICBkZWNvZGVyID4+IGZpbHRlclNjYWxlOworICAgIGlmICghZmlsdGVy
U2NhbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPj4gdGFyZ2V0Qm91bmRpbmdTaXplOworICAgIGRlY29k
ZXIgPj4gdGFyZ2V0Qm91bmRpbmdTaXplOworICAgIGlmICghdGFyZ2V0Qm91bmRpbmdTaXplKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8
RmlsdGVyQm91bmRhcnlTZXQ+PiBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisgICAgZGVjb2Rl
ciA+PiBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisgICAgaWYgKCFmaWx0ZXJFZmZlY3RCb3Vu
ZGFyeVNldHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPENsaXBPcGVyYXRpb24+IGNsaXBPcGVyYXRpb247CisgICAgZGVjb2RlciA+PiBjbGlwT3Bl
cmF0aW9uOworICAgIGlmICghY2xpcE9wZXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHJldHVybiBGaWx0ZXJHZW9tZXRyeSgqZmlsdGVyUmVnaW9uLCAqZmlsdGVy
U2NhbGUsICp0YXJnZXRCb3VuZGluZ1NpemUsIFdURk1vdmUoKmZpbHRlckVmZmVjdEJvdW5kYXJ5
U2V0cyksICpjbGlwT3BlcmF0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpG
aWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uLAor
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpJbnRlcnNl
Y3QsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpVbml0
ZQorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2JhNTEwMDI0NmNmOTk3NjUwMGZlOTRjZTg2NTFkOTgxZjY0MDI5MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
SW1hZ2UuY3BwCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJJ
bWFnZS5oIgorCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VTb2Z0d2FyZS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorI2luY2x1ZGUgIkZpbHRlckltYWdl
Q29yZUltYWdlLmgiCisjZW5kaWYKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNp
bmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNs
dWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJv
b2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24u
aXNFbXB0eSgpIHx8IGltYWdlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobG9naWNhbFNp
emUpKTsKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmls
dGVySW1hZ2VDb3JlSW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGlzQWxwaGFJ
bWFnZSwgbG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsdGVySW1hZ2VTb2Z0
d2FyZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCBsb2dpY2Fs
U2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7Cit9CisK
K1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIFJlZjxJbWFn
ZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0
ZXJJbWFnZVNvZnR3YXJlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBXVEZNb3ZlKGlt
YWdlQnVmZmVyKSkpOworfQorCitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29s
IGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6IG1fcHJpbWl0aXZlU3VicmVnaW9uKHByaW1p
dGl2ZVN1YnJlZ2lvbikKKyAgICAsIG1faW1hZ2VSZWN0KGltYWdlUmVjdCkKKyAgICAsIG1faXNB
bHBoYUltYWdlKGlzQWxwaGFJbWFnZSkKKyAgICAsIG1fbG9naWNhbFNpemUobG9naWNhbFNpemUp
CisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
eworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qg
cm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNy
Yy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwor
ICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMg
PSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0
aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0g
c291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKTsKKyAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKwor
ICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0g
c291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21w
b25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9Cisj
ZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBz
aXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVm
ZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVp
Z2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwor
ICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisK
KyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93
Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdl
dCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0
YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFs
cGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhh
OworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZp
bHRlckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0
KQoreworICAgIGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZv
cm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVy
LnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0g
aW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXpl
KG1fbG9naWNhbFNpemUpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsK
KyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzY2FsZWRTaXplKG1fbG9naWNhbFNpemUpOworICAg
IEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAg
ICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVsQnVmZmVy
ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAgIGlmICgh
cGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHBpeGVsQnVm
ZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAg
ICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5k
YXRhKCksIHNjYWxlZFNpemUpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKS0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXpl
KTsKKworICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6ZSBzY2FsZWRT
aXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhzY2FsZWRTaXplKSk7CisgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJm
bG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gVWludDhDbGFt
cGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOworICAgIGlmICgh
cGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weVBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJl
dHVybiBwaXhlbEJ1ZmZlcjsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9y
IHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVy
c2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKKyAgICAv
LyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAgIHJldHVy
biBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNlCisgICAg
Ly8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9u
LUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwor
ICAgIHNjYWxlZFJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50U2l6ZSBz
Y2FsZWRQYWludFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAgc2NhbGVkUGFpbnRTaXplLnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9u
IHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291
cmNlLgorICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8
IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkZXN0
aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKKworICAgIC8vIEVhcmx5
IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgor
ICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAg
fHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOworICAgIGludCB4RGVzdCA9IDA7CisgICAg
aWYgKHhPcmlnaW4gPCAwKSB7CisgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CisgICAgICAgIHhP
cmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOworICAg
IGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKTsKKworICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7
CisgICAgaW50IHlEZXN0ID0gMDsKKyAgICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURl
c3QgPSAteU9yaWdpbjsKKyAgICAgICAgeU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5k
ID0gc2NhbGVkUmVjdC5tYXhZKCk7CisgICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCisgICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisKKyAgICBp
bnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OworICAgIGludCBkZXN0aW5hdGlvblNjYW5s
aW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBz
Y2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7CisgICAgdWludDhfdCogZGVzdGluYXRpb25QaXhl
bCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsg
eERlc3QpICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRh
KCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7
CisKKyAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0
aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbCAr
PSBkZXN0aW5hdGlvblNjYW5saW5lOworICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2Fu
bGluZTsKKyAgICAgICAgKyt5T3JpZ2luOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVy
JiBpbWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7
CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJl
Y3Quc2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVj
dCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVy
c2lvbgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRl
ZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9y
IHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9u
ZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZl
ckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNw
YWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIHJlY3QpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFn
ZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZm
ZXIuc2l6ZSgpKTsKKyAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7CisgICAg
RmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6
ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQ
aXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2Fs
ZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0ZWRQ
aXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsK
K30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNv
bG9yU3BhY2UpCit7CisgICAgYXV0byogcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3Rz
KGFscGhhRm9ybWF0KSA/ICZwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KS52YWx1ZSgp
IDogbnVsbHB0cjsKKworICAgIGlmICghcGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAg
ICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisg
ICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkg
eworICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNp
emUobV9sb2dpY2FsU2l6ZSkgfTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFG
b3JtYXQsIHJlY3QsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgICAgICAgICAgY29weUltYWdl
Qnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3Qp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHBpeGVsQnVmZmVyID0gdGhpcy0+cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAg
IH0KKworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChy
ZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1
ZmZlcigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAg
ICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgc3JjUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRl
cyhwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQg
RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8v
IE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNh
bm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgorICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFy
cmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBw
aXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEoKTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9
IGltYWdlQXJyYXkubGVuZ3RoKCk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBw
ZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhlbHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVu
Z3RoICUgNCkpOworCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhl
bEFycmF5TGVuZ3RoID49IDY0KSB7CisgICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVs
RGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYgfjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAg
ICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2
eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNp
eHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRl
ZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1p
bnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAg
ICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxb
Ml0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0
YSwgc2l4dGVlblBpeGVscyk7CisgICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAg
IH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQaXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxl
bmd0aCAmPSAweDNmOworICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJh
eUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcg
YWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdo
aWxlICgtLW51bVBpeGVscyA+PSAwKSB7CisgICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0
ZSBpbiBhIHBpeGVsCisgICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAg
ICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBw
aXhlbCBsb2NhdGlvbgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEg
PSBhOworICAgICAgICAgICAgKytwaXhlbERhdGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5j
cmVtZW50IGZvciBhbHBoYQorICAgICAgICArK3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQg
RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFj
ZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgorICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsK
KyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2UgPT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNl
c3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFj
ZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBp
bWFnZUJ1ZmZlci0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UsIGNvbG9yU3BhY2Up
OworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAgICBtX3VucHJlbXVsdGlwbGll
ZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1fcHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVySW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NGZhODdjMDcyYmI3NmM1Y2I2ODkwOTMwMGE4ZjBjYmYw
NWViZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdl
QnVmZmVyOworY2xhc3MgUGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZpbHRlckltYWdlIDogcHVibGlj
IFJlZkNvdW50ZWQ8RmlsdGVySW1hZ2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEZp
bHRlckltYWdlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlcklt
YWdlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgaW1hZ2VSZWN0LCBSZWY8SW1hZ2VCdWZmZXI+JiYpOworCisgICAgdmlydHVhbCB+
RmlsdGVySW1hZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVn
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVTdWJyZWdpb247IH0KKyAgICBGbG9hdFJl
Y3QgaW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZVJlY3Q7IH0KKyAgICBib29sIGlz
QWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbHBoYUltYWdlOyB9CisKKyAgICBGbG9h
dFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdN
b2RlOyB9CisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSA9IDA7CisgICAgdmlydHVhbCBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIoKSA9IDA7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYg
cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBQaXhlbEJ1
ZmZlciogcGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24s
IGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOworICAgIHZvaWQgY29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAg
CisgICAgdm9pZCBjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJvdGVjdGVk
OgorICAgIEZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisKKyAgICBG
bG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgRmxvYXRSZWN0IG1faW1hZ2VSZWN0
OworICAgIGJvb2wgbV9pc0FscGhhSW1hZ2UgeyBmYWxzZSB9OworCisgICAgRmxvYXRTaXplIG1f
bG9naWNhbFNpemU7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgZmxv
YXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JT
cGFjZTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVk
UGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBs
aWVkUGl4ZWxCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlVmVj
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlcklt
YWdlVmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE3NTM1OTJhN2M2YTlkMmY2ZmM1NDllNGQ3ZWY5NGNm
NzIwMDhmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2VWZWN0b3IuaApAQCAtMCwwICsxLDM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZp
bHRlckltYWdlOworCit1c2luZyBGaWx0ZXJJbWFnZVZlY3RvciA9IFZlY3RvcjxSZWY8RmlsdGVy
SW1hZ2U+PjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRh
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRkYmZmN2Q4MDQ3Y2VmOWVmNjNhMzZlY2MzNWU1ZTliMjAxMWNl
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgRmlsdGVyUmVwcmVzZW50YXRpb24gOiB1aW50
OF90IHsKKyAgICBUZXN0T3V0cHV0LAorICAgIERlYnVnZ2luZworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkMjg3ZDE1M2MwNDFiMjk5
ODFhNjlkYWZlM2E2NDllOTc1NGMzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisKKyNpbmNsdWRlICJG
aWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRmlsdGVyUmVzdWx0OjpGaWx0ZXJSZXN1bHQoUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKQorICAgIDogbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCit7Cit9CisK
K1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVyUmVzdWx0OjpjcmVhdGVGaWx0ZXJJbWFnZShjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBkcmF3aW5n
UmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICByZXR1cm4gRmls
dGVySW1hZ2U6OmNyZWF0ZShwcmltaXRpdmVTdWJyZWdpb24sIGRyYXdpbmdSZWN0LCBpc0FscGhh
SW1hZ2UsIGxvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZGM4ODM0
Zjc3ZmY5ZDNlZGNjZjBhYjI4MWY4MjEyMzNlODhjNzIyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyRnVu
Y3Rpb247CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKK2NsYXNzIEZpbHRlckltYWdlOworCitjbGFz
cyBGaWx0ZXJSZXN1bHQgeworcHVibGljOgorICAgIHVzaW5nIEltYWdlcyA9IEhhc2hNYXA8UmVm
PGNvbnN0IEZpbHRlckZ1bmN0aW9uPiwgUmVmPEZpbHRlckltYWdlPj47CisKKyAgICBGaWx0ZXJS
ZXN1bHQoUmVuZGVyaW5nTW9kZSk7CisKKyAgICBJbWFnZXMmIGltYWdlcygpIHsgcmV0dXJuIG1f
aW1hZ2VzOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZUZp
bHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIGRyYXdpbmdSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKK3ByaXZhdGU6Cisg
ICAgSW1hZ2VzIG1faW1hZ2VzOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKaW5k
ZXggMWFiNWUxOWUxMWE0ZjM2ZWEyYTQyNmE3NTAzODc5MTI4ZjU0YjQ0Yi4uNGJjNmJjNzFjODVk
ZmIxYWUzOTFkZWIyNDNkYzgxNDU3NWRiMGMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3Bw
CkBAIC0zNiwxMiArMzYsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFBvaW50
TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJF
ZmZlY3QsIFBhaW50aW5nRGF0YSYpCit2b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikKIHsKLSAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZl
cihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKLSAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBw
b2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBi
eSB6LgotICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21V
c2VyU3BhY2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQ
b3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOwotICAgIG1fYnVmZmVyUG9z
aXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKKy8vICAgIG1f
YnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOworLy8gICAgLy8gVG8gc2NhbGUgWiwg
bWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJl
Y3Rpb24gYnkgei4KKy8vICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQ
b2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91
c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOworLy8gICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkp
OwogfQogCiBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgUG9pbnRMaWdodFNvdXJj
ZTo6Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCmluZGV4IDc2
NDlmMDU4YWM4NjliNTU0YWYwZGM1MDdmZmY5MDkwYWQ2Y2YzYTMuLjFkMzczMTA3ZDNiZDNkYWZk
Y2EzNWIyZWU4ZDNjOTk4NTRkMzE3NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw2MCArMjEsMzIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Cisj
aW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlQWxwaGE+IFNvdXJj
ZUFscGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCitSZWY8U291cmNlQWxw
aGE+IFNvdXJjZUFscGhhOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNv
dXJjZUFscGhhKHNvdXJjZUVmZmVjdCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJj
ZUFscGhhKCkpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFt
ZSgpCitTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6
OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VBbHBoYSIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19lZmZlY3ROYW1lOwogfQogCi12b2lk
IFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGaWx0ZXJJbWFnZVZl
Y3RvciBTb3VyY2VBbHBoYTo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNv
bnN0CiB7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7
Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRS
ZWN0KCkpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFj
ay50YWtlTGFzdCgpIH07CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCi17Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAg
R3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsK
LQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0KDApLT5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpi
bGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJ
bnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7Ci19Ci0KLVRleHRT
dHJlYW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CitUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlQWxwaGFdXG4iOwogICAgIHJl
dHVybiB0czsKIH0KIAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291
cmNlRWZmZWN0KQotICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgVHlw
ZTo6U291cmNlQWxwaGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZl
Y3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNv
dXJjZUVmZmVjdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRl
eCA2NjI5YTM2N2ZkNDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi5mYjY2ZGI4ZGNkYzk3
ZmIxNDAwZWMyNjQ2M2ViNmVmNWZlZWU3ZjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNyw4ICsxOCw3IEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUFscGhhX2gKLSNkZWZpbmUgU291
cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIApA
QCAtMjYsMjEgKzI2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNlQWxw
aGEgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBS
ZWY8U291cmNlQWxwaGE+IGNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLQotICAgIHN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CisgICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4g
Y3JlYXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgU291cmNlQWxwaGEoRmlsdGVyRWZm
ZWN0Jik7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0OyB9CisgICAgU291cmNl
QWxwaGEoKTsKKworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VW
ZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlQWxwaGEiOyB9CisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwog
fTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTb3VyY2VBbHBoYV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcAppbmRleCA4OGEzNmE0MTAyNmJkM2E1ODU0NDc4MjAyNzRjMTEwN2Q3
ODM5MmU5Li5lNjIyZWE5ZDM3OWI1ZTYwOTBjNjI3MmJlYmJiMDI1MjZjYzkzNGUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDQ3ICsyMSwzNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBo
aWMuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3JlYXRl
KEZpbHRlciYgZmlsdGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYyhmaWx0ZXIpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKCkpOwogfQogCi1jb25zdCBB
dG9tU3RyaW5nJiBTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKK1NvdXJjZUdyYXBoaWM6OlNv
dXJjZUdyYXBoaWMoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OlNvdXJjZUdyYXBoaWMpCiB7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBz
X2VmZmVjdE5hbWUoIlNvdXJjZUdyYXBoaWMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGlj
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsKLSAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0
ZXIuc291cmNlSW1hZ2VSZWN0KCk7Ci0gICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJS
ZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7
Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsK
KyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5p
bWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorRmlsdGVySW1hZ2VWZWN0b3IgU291cmNlR3JhcGhpYzo6dGFrZUlucHV0cyhGaWx0ZXJJ
bWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJj
ZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpz
b3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAotVGV4dFN0cmVhbSYgU291cmNl
R3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7
CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7CiAgICAgcmV0dXJuIHRz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaAppbmRleCAzMGNkNTRmMjQ1M2JiYThhMzc3NjMyMTMyOGVmMjEwNmI3
ZmNhNWJmLi44ZGRjYmRlMDI3NDZiNDE3NzJjNjdkNjQ1OTkzZDc2ZGNiMzI2NDZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxl
eCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTE4LDQxICsxOSwzMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3Jh
cGhpYz4gY3JlYXRlKEZpbHRlciYpOwotCi0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVm
ZmVjdE5hbWUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+
IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIp
Ci0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAg
ICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KKyAgICBTb3VyY2VHcmFwaGljKCk7CiAK
LSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
RmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0OyB9Ci19OworICAgIEZpbHRlckltYWdlVmVj
dG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsK
IAotfSAvL25hbWVzcGFjZSBXZWJDb3JlCisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6U291cmNlR3JhcGhpYykKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBo
aWM7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKyNpZiBVU0UoQ09SRV9JTUFHRSkK
KyAgICBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBj
b25zdCBvdmVycmlkZTsKK307CiAKLSNlbmRpZiAvLyBTb3VyY2VHcmFwaGljX2gKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAppbmRleCA3MTYwN2FiMDBmZjlk
NmE2ZDAxNjkxZDliYmI4NTUzZDFmMzQ4ZDAwLi5kMWJlYzEyMDIwNmE1MzZlMTBiMTBiZjJjMTEz
MGY0ZjM0MmJiYTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCkBAIC00MSwzNiArNDEsMzYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gYWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxp
Z2h0IHJlZ3Jlc3Npb24gdGVzdHMKIHN0YXRpYyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9s
ZCA9IDAuMDE2ZjsKIAotdm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29u
c3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
KQordm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZm
ZWN0JiwgUGFpbnRpbmdEYXRhJikKIHsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRl
ckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9u
Lnh5KCkpKTsKLSAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3Vz
ZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgotICAgIEZsb2F0UG9pbnQg
bWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1f
dXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNw
YWNlUG9zaXRpb24ueSgpIH0pOwotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngo
KSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKLSAgICAKLSAgICBwYWludGluZ0RhdGEuZGlyZWN0
aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRpb247Ci0g
ICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKLQotICAgIGlmICgh
bV9saW1pdGluZ0NvbmVBbmdsZSkgewotICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxp
bWl0ID0gMC4wZjsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFs
aWFzVHJlc2hvbGQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5n
bGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUg
PCAwLjBmKQotICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5n
bGU7Ci0gICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQotICAgICAgICAgICAg
bGltaXRpbmdDb25lQW5nbGUgPSA5MC4wZjsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRP
ZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAuMGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOwotICAg
ICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2Zm
TGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKLSAgICB9Ci0KLSAgICAvLyBPcHRpbWl6YXRpb24g
Zm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcwotICAgIGlmICghbV9zcGVjdWxhckV4
cG9uZW50KQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7Ci0gICAg
ZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCi0gICAgICAgIHBhaW50aW5nRGF0
YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKLSAgICBlbHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBu
b3IgMS4wZgotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CisvLyAg
ICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3Bh
Y2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKy8vICAgIC8vIFRvIHNjYWxl
IFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHgg
ZGlyZWN0aW9uIGJ5IHouCisvLyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3Qu
bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSAr
IG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKy8v
ICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24u
eCgpKTsKKy8vCisvLyAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3Bh
Y2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRpb247CisvLyAgICBwYWludGluZ0RhdGEuZGly
ZWN0aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOworLy8KKy8vICAgIGlmICghbV9saW1pdGluZ0NvbmVB
bmdsZSkgeworLy8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSAwLjBmOwor
Ly8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xk
OworLy8gICAgfSBlbHNlIHsKKy8vICAgICAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSA9IG1f
bGltaXRpbmdDb25lQW5nbGU7CisvLyAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4w
ZikKKy8vICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7
CisvLyAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlID4gOTAuMGYpCisvLyAgICAgICAgICAg
IGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7CisvLyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVD
dXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAuMGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOwor
Ly8gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gcGFpbnRpbmdEYXRhLmNvbmVD
dXRPZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xkOworLy8gICAgfQorLy8KKy8vICAgIC8vIE9w
dGltaXphdGlvbiBmb3IgY29tbW9uIHNwZWN1bGFyRXhwb25lbnQgdmFsdWVzCisvLyAgICBpZiAo
IW1fc3BlY3VsYXJFeHBvbmVudCkKKy8vICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBv
bmVudCA9IDA7CisvLyAgICBlbHNlIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKKy8v
ICAgICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7CisvLyAgICBlbHNlIC8v
IEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgorLy8gICAgICAgIHBhaW50aW5nRGF0YS5zcGVj
dWxhckV4cG9uZW50ID0gMjsKIH0KIAogTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRh
IFNwb3RMaWdodFNvdXJjZTo6Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
QmxlbmRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVlYjA3MmQ1ZjZi
NzIwZDE3NDFmOGU1MzRjZDE2MjgzNTM2YTMwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJl
LmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVCbGVuZC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKK2Jvb2wgRkVCbGVuZDo6YXBwbHlTb2Z0d2FyZShGaWx0
ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMik7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYg
aW5wdXQyID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQu
aW1hZ2VCdWZmZXIoKTsKKyAgICBhdXRvIGlucHV0MkltYWdlID0gaW5wdXQyLmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFpbnB1dEltYWdlIHx8ICFpbnB1dDJJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
aW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVjdCgpLCBvdXRw
dXQuaW1hZ2VSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VSZWN0MiA9IGdlb21ldHJ5Lm1hcEltYWdl
UmVjdChpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAg
IAorICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW1hZ2VS
ZWN0Mik7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlt
YWdlUmVjdCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIHJldHVybiB0cnVlOworfQorI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjMzZGRiYjI2ZGUxZTdkOTZk
MWY1NjgxYmU0MDc3ZWM5MzkwYzI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUu
Y3BwCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnku
aCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9y
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisj
aW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBm
bG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7
CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9
IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0g
KiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsg
dmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNb
IDZdICogZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICog
MjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFs
dWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxw
aGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiAr
IHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0
dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwg
Y29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9h
dCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNv
bXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAg
IGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNv
bXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBv
bmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxk
IHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lu
bGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVl
LCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBn
cmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAg
Ymx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4
VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNv
bXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJh
eS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdl
TWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUg
aW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAg
ICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAg
IGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRp
dmlzb3IgPSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisg
ICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgp
OworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRl
cyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAor
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0
aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJv
d0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOwor
CisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBk
aXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3Ip
KSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlz
b3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThd
ICogZGl2aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9B
UkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBr
dkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3Ip
KSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNd
ICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNv
bXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9Owor
ICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4
LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
OiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAs
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07Cisg
ICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgs
IGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0
ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50
OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJ
bnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlm
IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVl
c1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVu
Z3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlm
IChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywg
Y29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUp
IHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5z
aWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxl
bmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBp
eGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4g
PSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9h
dCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAg
ICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Cisg
ICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgor
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAg
ICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVu
dHMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Cisg
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9M
VU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9
IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCAr
PSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zm
c2V0ICsgMywgYWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
VmVjdG9yPGZsb2F0PiBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHZhbHVlcykKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXMo
dmFsdWVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFs
dWVzW2ldKTsKKyAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKK30KKworYm9vbCBGRUNvbG9y
TWF0cml4OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlu
cHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZm
ZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvIGltYWdlQnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VC
dWZmZXIpIHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qo
aW5wdXQuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisgICAgICAgIG91dHB1dElt
YWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsK
KyAgICB9CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9y
U3BhY2UoKSB9OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIG91dHB1dEltYWdl
LT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZm
ZXItPmRhdGEoKTsKKyAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXIt
PnNpemUoKTsKKworICAgIGF1dG8gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7
CisKKyAgICBzd2l0Y2ggKG1fY29sb3JNYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZm
ZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywg
cGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVs
QnVmZmVyLCBpbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJh
bnNmZXJTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM3YTJmOTAxMTlkNmExNTMyY2Q3MDY1MzQ3
NTlhMjE3YWRkOWFiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNw
cApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgorCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgTG9v
a3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKK3N0YXRpYyB2b2lkIGNvbXB1
dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYpCit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFi
bGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5j
dGlvbikKK3sKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVy
RnVuY3Rpb24udGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUo
KTsKKyAgICBpZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1
NS4wOworICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAt
IDEpKTsKKyAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107CisgICAgICAgIGRvdWJs
ZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKKyAgICAgICAg
ZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkp
OworICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxl
VmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4g
PCAxKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVl
cy5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KChpICogbikgLyAyNTUuMCk7CisgICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7Cisg
ICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAgdmFsID0g
c3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21w
dXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2Zl
ckZ1bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0Owor
ICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAg
ICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUg
ZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlr
ZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRv
IGRvdWJsZQorICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5h
bXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24u
b2Zmc2V0KTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFs
KSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAg
fQorfQorCitzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxl
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkK
KyAgICAgICAgdGFibGVbaV0gPSBpOworCisgICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAo
KikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAg
VHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFi
bGUsCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLAorICAgICAgICBjb21wdXRlVGFidWxh
clRhYmxlLAorICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwKKyAgICAgICAgY29tcHV0ZUxp
bmVhclRhYmxlLAorICAgICAgICBjb21wdXRlR2FtbWFUYWJsZQorICAgIH07CisKKyAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgo
Y2FsbEVmZmVjdCkpOworICAgIGNhbGxFZmZlY3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0
aW9uKTsKKworICAgIHJldHVybiB0YWJsZTsKK30KKworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVy
OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1sw
XS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91
dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBp
eGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5t
YXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAg
ICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBlbmNsb3NpbmdJbnRSZWN0KG91dHB1dEltYWdlUmVj
dCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBMb29rdXBUYWJsZSByZWRUYWJsZSA9
IGNvbXB1dGVMb29rdXBUYWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBncmVl
blRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZ3JlZW5GdW5jdGlvbik7CisgICAgTG9va3Vw
VGFibGUgYmx1ZVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1ZUZ1bmN0aW9uKTsKKyAg
ICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYWxwaGFGdW5j
dGlvbik7CisKKyAgICB1bnNpZ25lZCBvdXRwdXRQaXhlbEFycmF5TGVuZ3RoID0gb3V0cHV0UGl4
ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0gb3V0cHV0UGl4ZWxBcnJheS5k
YXRhKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQg
PCBvdXRwdXRQaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXRdID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOworICAgICAgICBk
YXRhW3BpeGVsT2Zmc2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07
CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0ICsgMl1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2Rh
dGFbcGl4ZWxPZmZzZXQgKyAzXV07CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBv
c2l0ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZmQxZjliZDU4MDA1ZjI5YzUxYzI5ZWZiNjE0
YjYwYTBhNGUzOWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCww
ICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZS5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnku
aCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9y
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBC
eXRlKGludCBjKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oYyk7CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAm
IH4ofjB1ID4+IDEpKV07Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2Us
IHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7
CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsx
IC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsK
KworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25l
ZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5h
dGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAg
IGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAg
ICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAq
ZGVzdGluYXRpb24gPSBjbGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAgKytzb3VyY2U7CisgICAg
ICAgICsrZGVzdGluYXRpb247CisgICAgfQorfQorCisvLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVs
c1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
IGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlzIG5vdCBuZWNlc3Nhcnku
IFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1
dG8tdmVjdG9yaXphdGlvbi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBz
b3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwg
ZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2Nh
bGVkSzE7CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRL
MSA9IGsxIC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1
NS4wZjsKKworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1
bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpk
ZXN0aW5hdGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7Cisg
ICAgICAgIGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7
CisgICAgICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAg
ICAgICAqZGVzdGluYXRpb24gPSByZXN1bHQ7CisgICAgICAgICsrc291cmNlOworICAgICAgICAr
K2Rlc3RpbmF0aW9uOworICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
CitzdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNv
dXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCB1cHBl
ckxpbWl0ID0gc3RkOjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjpt
YXgoMC4wZiwgazMpICsgazQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYs
IGsxKSArIHN0ZDo6bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OworICAg
IGlmICgoazQgPj0gMC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYm
IHVwcGVyTGltaXQgPD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0
IDw9IDEuMGYpKSB7CisgICAgICAgIGlmIChrNCkgeworICAgICAgICAgICAgaWYgKGsxKQorICAg
ICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZDwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoazEpCisgICAgICAg
ICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
PDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGs0KSB7
CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEs
IDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwg
MT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgs
IGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHM8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOworICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQg
cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZs
b2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwor
ICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgo
KSkpOworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4g
ZHluYW1pY2FsbHkuCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIEFTU0VSVCgh
KGxlbmd0aCAmIDB4MykpOworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEo
KSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbHNlCisg
ICAgYXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwg
bGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisjZW5kaWYKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6
YXBwbHlBcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25z
dAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8mIGlucHV0ID0g
aW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0c1sxXS5nZXQoKTsKKwor
ICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9
IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9
IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0LmltYWdlUmVj
dCgpKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VS
ZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIWlucHV0UGl4ZWxBcnJheSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXQySW1hZ2VSZWN0ID0gZ2Vv
bWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQyLmltYWdlUmVjdCgp
KTsKKyAgICBpbnB1dDIuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVuY2xvc2luZ0ludFJlY3Qob3V0cHV0Mklt
YWdlUmVjdCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBwbGF0Zm9ybUFyaXRobWV0
aWNTb2Z0d2FyZSgqaW5wdXRQaXhlbEFycmF5LCBvdXRwdXRQaXhlbEFycmF5LCBtX2sxLCBtX2sy
LCBtX2szLCBtX2s0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6
YXBwbHlOb25Bcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmls
dGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBj
b25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8mIGlucHV0
ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0c1sxXS5nZXQoKTsK
KworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBp
bnB1dDJJbWFnZSA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSB8
fCAhaW5wdXQySW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0
SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQg
PSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGdl
b21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgp
KTsKKyAgICBhdXRvIGlucHV0MkltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1
dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBzd2l0Y2ggKG1fY29t
cG9zaXRlT3BlcmF0b3IpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogeworICAgICAg
ICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAgICAgYXV0
byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICAgICAgYXV0byBpbWFnZVJlY3Qy
ID0gaW5wdXQyLmltYWdlUmVjdCgpOworICAgICAgICBhdXRvIG91dHB1dFJlY3QgPSBvdXRwdXQu
aW1hZ2VSZWN0KCk7CisKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbWFnZVJlY3Q7
CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0Mik7CisgICAgICAg
IGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qob3V0cHV0UmVjdCk7CisgICAgICAgIGlmIChkZXN0
aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0
byBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgYWRq
dXN0ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5KC1vdXRwdXRSZWN0LmxvY2F0aW9uKCkpOworICAg
ICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChhZGp1
c3RlZERlc3RpbmF0aW9uUmVjdCk7CisKKyAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gZGVzdGlu
YXRpb25SZWN0OworICAgICAgICBzb3VyY2VSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0LmxvY2F0aW9u
KCkpOworICAgICAgICBzb3VyY2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KHNvdXJjZVJl
Y3QpOworCisgICAgICAgIGF1dG8gc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7CisgICAg
ICAgIHNvdXJjZTJSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0Mi5sb2NhdGlvbigpKTsKKyAgICAgICAg
c291cmNlMlJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qoc291cmNlMlJlY3QpOworCisgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgYWRqdXN0ZWRE
ZXN0aW5hdGlvblJlY3QsIHNvdXJjZTJSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VS
ZWN0LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0Mklt
YWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dDJJbWFnZS0+bG9naWNhbFNpemUoKSks
IENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmlucHV0MkltYWdlLCBpbnB1dDJJbWFnZVJlY3QpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3Qs
IEludFJlY3QoSW50UG9pbnQoKSwgaW5wdXRJbWFnZS0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9YT1I6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0LCBJbnRSZWN0KEludFBv
aW50KCksIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9S
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgorICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCk7CisgICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVj
dCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9z
aXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFwcGx5U29mdHdhcmUoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJh
dG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBh
cHBseUFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOworICAgIHJl
dHVybiBhcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0
d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE4MzA0ODdjMzc3
MGI1MDZjY2NlOGM4MThkNTQwZmEyOWY2YmQ3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKKworI2luY2x1ZGUg
IkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3Jr
UXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9u
CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUgaW1hZ2Ug
cmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAgICArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwKKyAgICAgICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAorICAg
ICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8
CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBFICAgICAg
ICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIHJlZ2lvbiBD
IGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUgY2FsY3VsYXRl
ZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisKKyAgIEV4YW1w
bGU6CisgICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKworICAgICAgT3Jk
ZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAgICAgVGFyZ2V0
OiB4OjEsIHk6MworCisgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGFyZ2V0
IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAgICAgLi4uCisg
ICAgICAgIC4uLgorICAgICAgICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhpcyBjYXNlIGFy
ZSB0aGUgZm9sbG93aW5nOgorICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQgYW5kICh4Miwg
eTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cgeDIgYW5kIGNv
bHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBvbmx5IHRob3Nl
ICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8IHkyCisKKyAg
ICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAgIFJlZ2lvbiBC
OiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4MTogMSwgeTE6
IDMsIHgyOiA5LCB5MjogMTAKKyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMsIHgyOiAxMCwg
eTI6IDEwCisgICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5MjogMTAgKGVt
cHR5IHJlZ2lvbikKKworICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlucyBtb3N0IG9m
IHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0gdG8gY2FsY3Vs
YXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4KKyAgIEZvciBv
dGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2ggY2FsbHMgZ2V0
UGl4ZWxWYWx1ZSwKKyAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUgaW1hZ2UuIElu
IGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJpZ2dlciB0aGFu
IHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisgICBmdW5jdGlv
bi4KKworICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBpbiBjb21tb24s
IEkgZGVjaWRlZCBub3QgdG8gbWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9yIHRoZW0sIHNp
bmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3b3VsZCBtYWtl
IGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCisqLworCisvLyBQYXJhbGxlbGl6YXRpb24g
cGFydHMKK3N0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAw
ICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKworc3Ry
dWN0IFBhaW50aW5nRGF0YSB7CisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVs
QXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAgaW50IHdp
ZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXplOworICAg
IGZsb2F0IGRpdmlzb3I7CisgICAgZmxvYXQgYmlhczsKKyAgICBJbnRQb2ludCB0YXJnZXRPZmZz
ZXQ7CisgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgIGJvb2wgcHJlc2VydmVBbHBoYTsK
KyAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKK307CisKK3N0YXRpYyBBTFdBWVNfSU5M
SU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQg
Y2hhciBtYXggPSAyNTUpCit7CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKGNoYW5uZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4gbWF4OworICAgIHJl
dHVybiBjaGFubmVsOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0
aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCB0b3RhbHNbNF0sIGZsb2F0
IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcykKK3sKKyAgICB1
bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1w
UkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDM7ICsraSkKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JB
VmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CisKKyAgICBpZiAo
cHJlc2VydmVBbHBoYVZhbHVlcykgeworICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291
cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKKyAgICAgICAgKytwaXhlbDsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOworfQorCitzdGF0aWMgQUxX
QVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQp
Cit7CisgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKKyAgICBp
bnQgcGl4ZWwgPSAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGluZ0RhdGEu
d2lkdGggKyBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGludCBrZXJu
ZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChwYWludGlu
Z0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAgIC8vIENvbnRhaW5zIHRoZSBz
dW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAgICBmbG9hdCB0b3RhbHNbNF07CisKKyAgICAvLyBt
X2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMg
dGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICAvLyBTa2lwIHRo
ZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKKyAgICBwaXhlbCArPSAoY2xpcEJv
dHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOworICAgIGlu
dCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAo
Y2xpcFJpZ2h0ICsgMSkgKiA0KTsKKworICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlT
dGFydDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsg
LS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtl
cm5lbFBpeGVsOworICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNp
emUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAgICAgIHRv
dGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKKyAg
ICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50
aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOworICAgICAgICAg
ICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICsra2Vy
bmVsUGl4ZWw7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2Vy
bmVsSW5jcmVhc2U7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRh
LmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7
CisgICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAg
cGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFz
ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYgKHggPj0g
MCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRh
LmhlaWdodCkKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwg
MjsKKworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7CisgICAgZGVmYXVsdDog
Ly8gRURHRU1PREVfTk9ORQorICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBFREdFTU9ERV9E
VVBMSUNBVEU6CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHggPSAwOworICAgICAg
ICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgICAgIHggPSBwYWlu
dGluZ0RhdGEud2lkdGggLSAxOworICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAgICB5ID0g
MDsKKyAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICAg
ICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOworICAgICAgICByZXR1cm4gKHkgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIGNhc2UgRURHRU1PREVfV1JBUDoKKyAgICAg
ICAgd2hpbGUgKHggPCAwKQorICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7Cisg
ICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB3aGlsZSAoeSA8IDApCisg
ICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHkgJT0gcGFpbnRp
bmdEYXRhLmhlaWdodDsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsg
eCkgPDwgMjsKKyAgICB9Cit9CisKKy8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQworc3RhdGlj
IHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGlu
Z0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOworICAgIGlu
dCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBi
ZWdpbktlcm5lbFBpeGVsWDsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIHBhaW50
aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdE
YXRhLndpZHRoIC0gd2lkdGgpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihh
KSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gbV9kaXZpc29yIGNh
bm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKKyAgICBB
U1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOworCisgICAgZm9yIChpbnQgeSA9IGhlaWdodDsg
eSA+IDA7IC0teSkgeworICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAtLXgpIHsK
KyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXgu
c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBp
eGVsWDsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBpeGVsWTsK
KyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7
CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMV0gPSAw
OworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7
CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4
ZWxYLCBrZXJuZWxQaXhlbFkpOworICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxN
YXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNb
MV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2Fz
dDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkp
OworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1h
dHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXgg
Pj0gMCkKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAgICArK2tl
cm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAgICAgICAg
ICAgIGlmICghLS13aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBz
dGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Cisg
ICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERl
c3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50
aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICAr
K3N0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJbmNyZWFz
ZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICAg
ICAgKytzdGFydEtlcm5lbFBpeGVsWTsKKyAgICB9Cit9CisKK2Jvb2wgRkVDb252b2x2ZU1hdHJp
eDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNb
MF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVm
ZmVyKG1fcHJlc2VydmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICgh
b3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91
dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBv
dXRwdXRJbWFnZVJlY3QgPSBJbnRSZWN0KGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1h
Z2VSZWN0KCksIGlucHV0LmltYWdlUmVjdCgpKSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGlucHV0UGl4ZWxBcnJheTsKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAg
ICBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIG91dHB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIG91dHB1dElt
YWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIGlmICghaW5wdXRQaXhlbEFy
cmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IElu
dFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworCisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YSA9IHsKKyAgICAgICAgKmlucHV0UGl4ZWxBcnJheSwKKyAgICAgICAgb3V0cHV0UGl4ZWxB
cnJheSwKKyAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCisgICAgICAgIHBhaW50U2l6ZS5oZWln
aHQoKSwKKyAgICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rpdmlzb3IsCisgICAgICAg
IG1fYmlhcyAqIDI1NSwKKyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisgICAgICAgIG1fZWRnZU1v
ZGUsCisgICAgICAgIG1fcHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6bm9y
bWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICB9OworCisgICAgLy8gRHJhd2luZyBm
dWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgo
KSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXpl
LmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworCisgICAgaWYgKGNsaXBSaWdodCA8
IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBv
cHRpbWl6aWVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAocGFpbnRTaXpl
LndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikg
eworICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7CisgICAgICAg
IGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKKwor
ICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90
IGluZGV4KSB7CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKKyAg
ICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwg
Y2xpcEJvdHRvbSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOworICAgICAgICB9KTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmln
aHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xpcFJpZ2h0ICs9IG1fdGFy
Z2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkg
KyAxOworICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNl
dC55KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQorICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53
aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkg
PiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zm
c2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJp
Z2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5n
RGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBj
bGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM5MDMyOWQ2N2JiMTkxOTA0N2NiMjBiOWRhNGFhYWZhMjU5
MGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKQEAgLTAsMCAr
MSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9t
ZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VW
ZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5
dGVzKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAgIHJldHVy
biB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKK30KKworYm9vbCBGRURpc3BsYWNl
bWVudE1hcDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwor
ICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKKyAgICAK
KyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0
c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBh
dXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRw
dXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9t
ZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7
CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChvdXRwdXRJ
bWFnZVJlY3QpKTsKKyAgICAKKyAgICBhdXRvIG91dHB1dDJJbWFnZVJlY3QgPSBnZW9tZXRyeS5t
YXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dDIuaW1hZ2VSZWN0KCkpOworICAg
IC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKA
mSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KKyAg
ICBhdXRvIGlucHV0MlBpeGVsQnVmZmVyID0gaW5wdXQyLmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChvdXRwdXQy
SW1hZ2VSZWN0KSk7CisKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIgfHwgIWlucHV0MlBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoaW5wdXRQaXhlbEJ1
ZmZlci0+bGVuZ3RoKCkgPT0gaW5wdXQyUGl4ZWxCdWZmZXItPmxlbmd0aCgpKTsKKworICAgIGF1
dG8gcGFpbnRTaXplID0gZXhwYW5kZWRJbnRTaXplKG91dHB1dC5sb2dpY2FsU2l6ZSgpKTsKKwor
ICAgIGF1dG8gc2NhbGUgPSBnZW9tZXRyeS5tYXBJbWFnZVNpemUoeyBtX3NjYWxlLCBtX3NjYWxl
IH0pOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOwor
ICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKyAgICBm
bG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKKyAgICBmbG9h
dCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7CisgICAgCisgICAg
aW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOworICAgIGludCBkaXNw
bGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKworICAgIGludCByb3dCeXRlcyA9
IHBhaW50U2l6ZS53aWR0aCgpICogNDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRT
aXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiBy
b3dCeXRlczsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgp
OyArK3gpIHsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zm
c2V0ICsgeCAqIDQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0
YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBpbnB1dDJQaXhlbEJ1ZmZlci0+aXRlbShk
ZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7
CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29s
b3JZICogaW5wdXQyUGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNl
bWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOworCisgICAgICAgICAgICB1bnNpZ25lZCog
b3V0cHV0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob3V0cHV0UGl4ZWxB
cnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKKyAgICAgICAgICAgIGlmIChzcmNYIDwg
MCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFp
bnRTaXplLmhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gMDsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Km91dHB1dFBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVs
QnVmZmVyLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2Fy
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODA0ZTllZWEyZjlmMWZjYjcwMTI0N2JjZGYzZGI5N2FiZjU2NWZk
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hh
ZG93LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRv
JiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAg
aWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBibHVy
UmFkaXVzID0gMiAqIGdlb21ldHJ5Lm1hcFJlc29sdmVkSW1hZ2VTaXplKHsgbV9zdGREZXZpYXRp
b25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgYXV0byBvZmZzZXQgPSBnZW9tZXRyeS5tYXBS
ZXNvbHZlZEltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VS
ZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW5wdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5t
YXBJbWFnZVJlY3QoaW5wdXRJbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCA9IGlucHV0SW1hZ2VSZWN0OworICAgIGlucHV0
SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBhdXRvJiBvdXRwdXRDb250
ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldEFscGhh
KG1fc2hhZG93T3BhY2l0eSk7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlu
cHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCk7CisgICAgb3V0cHV0Q29udGV4dC5z
ZXRBbHBoYSgxKTsKKworICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBv
ZmZzZXQsIG1fc2hhZG93Q29sb3IpOworCisgICAgYXV0byBmb3JtYXQgPSBQaXhlbEJ1ZmZlckZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIGF1dG8gc2hhZG93QXJlYSA9IElu
dFJlY3QgeyBJbnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+bG9naWNhbFNpemUoKSB9OworICAgIGF1
dG8gc2hhZG93UGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0
LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXNoYWRvd1BpeGVsQnVmZmVyKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJyYXkgPSBzaGFkb3dQaXhlbEJ1
ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc2hhZG93UGl4
ZWxBcnJheS5kYXRhKCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBzaGFkb3dQaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworCisgICAgb3V0cHV0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKCpzaGFkb3dQaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAgICBvdXRwdXRDb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOworICAg
IG91dHB1dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0Lmxv
Z2ljYWxTaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKworICAg
IG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVj
dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmJlYWUxMGJl
NTBlZWNmMTk5NGI3ZWY1Yzk0YWQ1MWY2MDk1ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
RmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVGbG9vZDo6YXBw
bHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICBhdXRvIG91dHB1dEltYWdlID0g
b3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fZmxvb2RDb2xvci5jb2xvcldpdGhBbHBo
YU11bHRpcGxpZWRCeShtX2Zsb29kT3BhY2l0eSk7CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQo
KS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRJbWFnZS0+bG9naWNhbFNp
emUoKSksIGNvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2NlNjQwNDIyNTY3NGNhNTc1YjgxNWM4ZjE4NDJjMmNmNWQ4Y2U5ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFR2F1c3NpYW5C
bHVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBi
bHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0
YVJpZ2h0KQoreworICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJz
Lmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgorICAgIHN3aXRjaCAoYmx1
ckl0ZXJhdGlvbikgeworICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsK
KyAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOworICAgICAgICAgICAgZGVs
dGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDI7CisgICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFk
aXVzIC0gZGVsdGFMZWZ0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToK
KyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCsrOwor
ICAgICAgICAgICAgZGVsdGFSaWdodC0tOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgMjoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRh
UmlnaHQrKzsKKyAgICAgICAgICAgIHJhZGl1cysrOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNo
YW5uZWwuCitzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJy
YXksCisgICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3Ry
aWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0
LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCit7CisgICAgY29uc3QgdWludDhfdCogc3JjRGF0
YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOworICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhl
bEFycmF5LmRhdGEoKTsKKyAgICAvLyBNZW1vcnkgYWxpZ25tZW50IGlzOiBSR0JBLCB6ZXJvLWlu
ZGV4IGJhc2VkLgorICAgIGNvbnN0IGludCBjaGFubmVsID0gMzsKKworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50IGxpbmUgPSB5ICogc3Ry
aWRlTGluZTsKKyAgICAgICAgaW50IHN1bSA9IDA7CisKKyAgICAgICAgLy8gRmlsbCB0aGUga2Vy
bmVsLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7CisgICAgICAg
ICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OworICAgICAgICAg
ICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJsdXJy
aW5nLgorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlICsg
Y2hhbm5lbDsKKyAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5
dGVPZmZzZXQ7CisgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
IC8gZHgpOworCisgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisgICAgICAgICAgICBpZiAo
eCA+PSBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4
ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgIHN1
bSAtPSAqc3JjUHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoeCArIGR4Umln
aHQgPCBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBj
b25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgc3VtICs9ICpzcmNQdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKKyAgICB1bnNp
Z25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVM
aW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0g
c3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOworICAgIGlmIChhbHBoYUltYWdlKQorICAg
ICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5
LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwg
ZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0Rh
dGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4
ZWxBcnJheS5kYXRhKCk7CisKKyAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5n
dGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBw
aXhlbHMgd2lsbCBiZQorICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgorICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50IGxp
bmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3Vt
QiA9IDAsIHN1bUEgPSAwOworCisgICAgICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05F
KSB7CisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisgICAgICAgICAgICAgICAgc3VtUiAr
PSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7CisgICAgICAg
ICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgc3VtQSArPSAqc3Jj
UHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCbHVycmluZy4KKyAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgeworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOworICAgICAg
ICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7CisK
KyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8g
ZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1
bUcgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtQiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3VtQSAvIGR4KTsKKworICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KKyAg
ICAgICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOworICAgICAgICAg
ICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiAt
PSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVj
dFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4
ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OworICAgICAgICAgICAg
ICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBz
cmNQdHJbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOworICAgICAg
ICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUuCisgICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMg
Zm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUnLgorICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRn
ZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOworICAgICAgICAgICAgY29uc3QgdWludDhfdCog
ZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBz
dHJpZGUpOworCisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBm
b3IgKGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisKKyAgICAg
ICAgICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdl
VmFsdWVMZWZ0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRb
MV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKKyAgICAg
ICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBzdW1S
ICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VW
YWx1ZVJpZ2h0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0
WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0
cisrOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0g
KnNyY1B0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIEJsdXJyaW5nLgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0
aDsgKyt4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGlu
ZSArIHggKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0
YSArIHBpeGVsQnl0ZU9mZnNldDsKKworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOworICAgICAgICAgICAgICAgICpk
c3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOworCisgICAgICAgICAgICAg
ICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOworICAgICAgICAgICAgICAgICAgICBz
dW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRn
ZVZhbHVlTGVmdFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3Ry
aWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRh
ICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Cisg
ICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOworICAgICAgICAgICAgICAgICAg
ICBzdW1CIC09IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJb
M107CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0
ID49IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVl
UmlnaHRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07
CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07CisgICAgICAg
ICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhl
bEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25z
dCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNy
Y1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07CisgICAgICAg
ICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3Rh
dGljIGlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUs
IGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKK3sKKyAgICBp
ZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZWZm
ZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgorICAgIGlmIChrZXJuZWxTaXpl
ICUgMiAhPSAxKQorICAgICAgICBrZXJuZWxTaXplICs9IDE7CisKKyAgICB2SW1hZ2VfQnVmZmVy
IGVmZmVjdEluQnVmZmVyOworICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2
b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKKyAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVmZmVj
dFdpZHRoOworICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBl
ZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIHZJbWFnZV9CdWZmZXIgZWZm
ZWN0T3V0QnVmZmVyOworICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5kYXRh
KCk7CisgICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7CisgICAgZWZmZWN0
T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZlY3RPdXRCdWZmZXIucm93
Qnl0ZXMgPSBzdHJpZGU7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1wb3Jh
cnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFsIGZs
YWcuIHZJbWFnZSB3aWxsIHJldHVybgorICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4gZXJy
b3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgorICAgIHNpemVfdCB0bXBCdWZmZXJTaXplID0g
dkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVm
ZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVu
ZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7CisgICAgaWYgKHRtcEJ1ZmZlclNpemUgPD0g
MCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxvYyh0
bXBCdWZmZXJTaXplKTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5C
dWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2Vy
bmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFnZUJveENvbnZvbHZlX0FS
R0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAw
LCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7CisgICAgdklt
YWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVy
LCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdl
RXh0ZW5kKTsKKyAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7CisKKyAgICAvLyBUaGUgZmlu
YWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisgICAgQVNTRVJUKGlvQnVm
ZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZl
ci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Cit9CisjZW5k
aWYKKworc3RhdGljIGlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50
U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBp
bnQgZHhMZWZ0ID0gMDsKKyAgICBpbnQgZHhSaWdodCA9IDA7CisgICAgaW50IGR5TGVmdCA9IDA7
CisgICAgaW50IGR5UmlnaHQgPSAwOworICAgIAorICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBmcm9t
QnVmZmVyID0gJmlvQnVmZmVyOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9ICZ0
ZW1wQnVmZmVyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAg
aWYgKGtlcm5lbFNpemVYKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxT
aXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisg
ICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hCbHVyTkVP
TigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZl
ciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lk
dGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQorICAgICAg
ICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0
LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0
KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBzdGQ6OnN3
YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtlcm5l
bFNpemVZKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwgZHlM
ZWZ0LCBkeVJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgICAgICAg
ICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1
ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQs
IHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVs
U2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQorICAgICAgICAgICAgYm94
Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0
LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlzQWxw
aGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1
ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlIGZpbmFsIHJl
c3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIGlmICgmaW9CdWZmZXIgIT0g
ZnJvbUJ1ZmZlcikgeworICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJvbUJ1
ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9tQnVm
ZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIs
IFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwg
dW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1h
Z2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50
U2l6ZS53aWR0aCgpOworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgaWYgKGtlcm5lbFNpemVY
ID09IGtlcm5lbFNpemVZICYmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IGVkZ2VNb2Rl
ID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKKyAgICAgICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9C
dWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0
aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNp
emVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1v
ZGUpOworfQorCisjaWYgIVVTRShBQ0NFTEVSQVRFKQorc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBs
eVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBJbnRT
aXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKKyAg
ICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5p
b1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJu
ZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Cit9CisjZW5kaWYK
Kworc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlv
QnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNB
bHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisjaWYgIVVTRShBQ0NFTEVSQVRF
KQorICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKKyAgICBpbnQgZXh0
cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworICAgIGludCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChzX21p
bmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CisK
KyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxl
bEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBs
eVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgaW50IGpvYnMgPSBwYXJh
bGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChqb2JzID4gMSkgeworICAgICAg
ICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQg
dGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCisg
ICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRy
YXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCisgICAgICAg
ICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOwor
ICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkg
JSBqb2JzOworCisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9y
IChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBQbGF0
Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2Ip
OworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOworCisgICAgICAgICAgICAg
ICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQg
KyAxIDogYmxvY2tIZWlnaHQ7CisgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9i
cyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CisKKyAgICAgICAgICAg
ICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7CisgICAgICAg
ICAgICAgICAgaWYgKCFqb2IpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxB
cnJheSA9ICZpb0J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJy
YXkgPSAmdG1wUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRt
cFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9j
a1NpemUpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+
ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBwYWlu
dFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0
YXJ0WTsKKyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsK
KyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKworICAgICAg
ICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgorICAgICAgICAg
ICAgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsgam9iIDwgam9i
czsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFy
YW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAgICAgIGludCBz
b3VyY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uT2Zmc2V0OworICAg
ICAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgICAgIGludCBhZGp1c3RlZEJsb2Nr
SGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVp
Z2h0OworCisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0ZWRCbG9ja0hlaWdodDsK
KyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdodCAqIHNjYW5saW5lOwor
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBzY2FubGluZTsK
KyAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNjYW5saW5lOwor
CisgICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3RpbmF0aW9uT2Zm
c2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0KKyNlbmRpZgorCisgICAg
Ly8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxs
eSBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwg
dG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUsIGlzQWxw
aGFJbWFnZSwgZWRnZU1vZGUpOworfQorCitib29sIEZFR2F1c3NpYW5CbHVyOjphcHBseVNvZnR3
YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5w
dXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKwor
ICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9
IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgCisgICAgYXV0byBvdXRwdXRJbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFn
ZVJlY3QoKSk7CisKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJheSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChv
dXRwdXRJbWFnZVJlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghbV9zdGRE
ZXZpYXRpb25YICYmICFtX3N0ZERldmlhdGlvblkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRyeS5tYXBSZXNv
bHZlZEltYWdlU2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25ZIH0pKTsKKyAg
ICBhdXRvIHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworCisgICAg
YXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChwYWludFNpemUuYXJlYSgpICogNCk7CisgICAgaWYgKCF0bXBJbWFnZURhdGEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHBsYXRmb3JtQXBwbHkob3V0cHV0UGl4ZWxBcnJheSwg
KnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBw
YWludFNpemUsIG91dHB1dC5pc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3
YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODVhMGY0MGJhOGM5NjEwZWI0
Njc2ODM0MzUxMTAzYmY5MWZiYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVMaWdodGluZy5oIgorCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlVmVjdG9yLmgiCisKKyNpbmNsdWRlICJMaWdodGluZ0RhdGEuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgp
ID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBv
dXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4
ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnku
bWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VSZWN0KCkpOworCisg
ICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5n
dGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCisgICAg
Ly8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJz
IChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtl
cm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KKyAg
ICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1l
bnRhdGlvbgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDQ4
NTJjOTRlZmJhMzEzYzdmYzlhYTg3YTAwZWE5MjFiMmUwYjIzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdl
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9t
ZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VW
ZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0
d2FyZShGaWx0ZXJJbWFnZSYgcmVzdWx0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFp
bnB1dHMuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOworCisgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykgeworICAgICAgICBhdXRvIGlt
YWdlQnVmZmVyID0gaW5wdXQtPmltYWdlQnVmZmVyKCk7CisgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBpbWFnZVJlY3Qg
PSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQtPmltYWdlUmVjdCgpLCByZXN1bHQuaW1hZ2VS
ZWN0KCkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGltYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0
d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYmVmOTgzYjQ5MDRhY2VjZjZiMjRmY2FiNWUzMDI1NjlmNTkw
OGU5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBw
bGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRz
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEgewor
ICAgIE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I7CisgICAgaW50IHJhZGl1
c1g7CisgICAgaW50IHJhZGl1c1k7CisKKyAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3Jj
UGl4ZWxBcnJheTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICBp
bnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKK307CisKK3N0cnVjdCBQbGF0Zm9ybUFwcGx5UGFy
YW1ldGVycyB7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IE1vcnBob2xvZ3lQYWludGlu
Z0RhdGEmLCBpbnQsIGludCk+IGZpbGxSZWdpb247CisgICAgaW50IHN0YXJ0WTsKKyAgICBpbnQg
ZW5kWTsKKyAgICBjb25zdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Cit9
OworCit1c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiwgMTY+OworCitzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgpCit7CisgICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Cit9CisK
K2lubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zy
b21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQoreworICAgIHJldHVybiBhc0Nv
bG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Cit9CisKK2lubGluZSBQYWNrZWRDb2xvcjo6
UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKQoreworICAgIHJldHVybiBQYWNrZWRDb2xvcjo6
UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsK
K30KKwordGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcj4KK0FM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+JiBiKQoreworICAgIGlmIChtb3JwaG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQSE9MT0dZ
X09QRVJBVE9SX0VST0RFKQorICAgICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIpOwor
CisgICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKK30KKwordGVtcGxhdGU8TW9ycGhv
bG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCkK
K3sKKyAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVl
KFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihz
cmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkg
fSk7CisKKyAgICBmb3IgKGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkgeworICAg
ICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tl
ZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhl
bEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOworICAgICAg
ICBleHRyZW11bSA9IG1pbk9yTWF4PG1vcnBob2xvZ3lPcGVyYXRvcj4oZXh0cmVtdW0sIHBpeGVs
KTsKKyAgICB9CisgICAgcmV0dXJuIGV4dHJlbXVtOworfQorCitBTFdBWVNfSU5MSU5FIENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lk
dGgsIE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IpCit7CisgICAgaWYgKG1v
cnBob2xvZ3lPcGVyYXRvciA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCisgICAgICAg
IHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1Bp
eGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOworCisgICAgcmV0dXJuIGNvbHVtbkV4
dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlT
dGFydCwgeUVuZCwgd2lkdGgpOworfQorCit0ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3IgbW9y
cGhvbG9neU9wZXJhdG9yPgorQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsKQoreworICAgIGF1
dG8gZXh0cmVtdW0gPSBrZXJuZWxbMF07CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBrZXJu
ZWwuc2l6ZSgpOyArK2kpCisgICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8bW9ycGhvbG9neU9w
ZXJhdG9yPihleHRyZW11bSwga2VybmVsW2ldKTsKKworICAgIHJldHVybiBleHRyZW11bTsKK30K
KworQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVt
dW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhv
bG9neU9wZXJhdG9yKQoreworICAgIGlmIChtb3JwaG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFKQorICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOworCisgICAgcmV0dXJuIGtlcm5lbEV4dHJl
bXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Cit9CisKK3N0YXRpYyB2
b2lkIGZpbGxSZWdpb24oY29uc3QgTW9ycGhvbG9neVBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3sKKyAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CisK
KyAgICBjb25zdCBhdXRvJiBzcmNQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5OworICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJy
YXk7CisKKyAgICBjb25zdCBpbnQgcmFkaXVzWCA9IHBhaW50aW5nRGF0YS5yYWRpdXNYOworICAg
IGNvbnN0IGludCByYWRpdXNZID0gcGFpbnRpbmdEYXRhLnJhZGl1c1k7CisgICAgY29uc3QgaW50
IHdpZHRoID0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBwYWlu
dGluZ0RhdGEuaGVpZ2h0OworCisgICAgQVNTRVJUKHJhZGl1c1ggPD0gd2lkdGggfHwgcmFkaXVz
WSA8PSBoZWlnaHQpOworICAgIEFTU0VSVChzdGFydFkgPj0gMCAmJiBlbmRZIDw9IGhlaWdodCAm
JiBzdGFydFkgPCBlbmRZKTsKKworICAgIENvbHVtbkV4dHJlbWEgZXh0cmVtYTsKKyAgICBleHRy
ZW1hLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMiAqIHJhZGl1c1ggKyAxKTsKKworICAgIGZvciAo
aW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgaW50IHlSYWRpdXNTdGFy
dCA9IHN0ZDo6bWF4KDAsIHkgLSByYWRpdXNZKTsKKyAgICAgICAgaW50IHlSYWRpdXNFbmQgPSBz
dGQ6Om1pbihoZWlnaHQsIHkgKyByYWRpdXNZICsgMSk7CisKKyAgICAgICAgZXh0cmVtYS5zaHJp
bmsoMCk7CisKKyAgICAgICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwgc28gY29tcHV0
ZSBleHRyZW1lIGZvciB0aGUgcmFkaXVzWCBjb2x1bW5zLgorICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHJhZGl1c1g7ICsreCkKKyAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4
dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgs
IHBhaW50aW5nRGF0YS5tb3JwaG9sb2d5T3BlcmF0b3IpKTsKKworICAgICAgICAvLyBLZXJuZWwg
aXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgorICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRp
dXNYKQorICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1Bp
eGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yKSk7CisKKyAgICAgICAgICAgIGlmICh4ID4g
cmFkaXVzWCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKKworICAgICAgICAg
ICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQ
aXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOworICAgICAg
ICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJu
ZWxFeHRyZW11bShleHRyZW1hLCBwYWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yKSkudmFs
dWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlXb3Jr
ZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQoreworICAgIHBhcmFtLT5maWxsUmVn
aW9uKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7Cit9
CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTW9ycGhvbG9neVBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhKQoreworICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJv
eGltYXRlbHkgbGluZWFyIG92ZXIgcmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3Bl
IG9mIGFib3V0IDAuNjUuCisgICAgZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0Rh
dGEucmFkaXVzWCAqIHBhaW50aW5nRGF0YS5yYWRpdXNZKSAqIDAuNjU7CisKKyAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxp
bWl0IGZvciBwYXJhbGxlbCBqb2JzCisgICAgCisgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9
IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1i
ZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0
YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwor
ICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICBXVEY6OlBhcmFsbGVs
Sm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5
V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgYXV0byBudW1PZlRocmVhZHMg
PSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChudW1PZlRocmVhZHMg
PiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUiLXNpemVk
IGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdl
ciBzaW5jZQorICAgICAgICAgICAgLy8gam9iU2l6ZSAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVz
ZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCisg
ICAgICAgICAgICBpbnQgam9iU2l6ZSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyBudW1PZlRocmVh
ZHM7CisgICAgICAgICAgICBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5oZWlnaHQg
JSBudW1PZlRocmVhZHM7CisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOworICAgICAgICAg
ICAgZm9yIChpbnQgam9iID0gbnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9iKSB7Cisg
ICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAgICAgIHBhcmFtLmZpbGxSZWdpb24gPSBm
aWxsUmVnaW9uOworICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJlbnRZOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBqb2JTaXplICsg
MSA6IGpvYlNpemU7CisgICAgICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJlbnRZOworICAg
ICAgICAgICAgICAgIHBhcmFtLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQg
bW9kZWwKKyAgICB9CisKKyAgICBmaWxsUmVnaW9uKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdE
YXRhLmhlaWdodCk7Cit9CisKK3N0YXRpYyBib29sIHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKEZp
bHRlckltYWdlJiBpbiwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IElu
dFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCit7CisgICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJh
ZGl1c1kgPCAwIHx8ICghcmFkaXVzWCAmJiAhcmFkaXVzWSkpIHsKKyAgICAgICAgaW4uY29weVBp
eGVsQnVmZmVyKGRzdFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGltYWdlUmVjdCwgY29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjphcHBseVNvZnR3
YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5w
dXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKwor
ICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9
IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9
IEludFJlY3QoZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQu
aW1hZ2VSZWN0KCkpKTsKKworICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxv
YXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7CisgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKGlucHV0LCBvdXRwdXRQaXhlbEFycmF5LCBvdXRwdXRJbWFnZVJlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgYXV0byBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBvdXRwdXRJbWFn
ZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGdl
b21ldHJ5Lm1hcFJlc29sdmVkSW1hZ2VTaXplKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwor
ICAgIGludCByYWRpdXNYID0gc3RkOjptaW4ob3V0cHV0SW1hZ2VSZWN0LndpZHRoKCkgLSAxLCBy
YWRpdXMud2lkdGgoKSk7CisgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihvdXRwdXRJbWFnZVJl
Y3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOworCisgICAgaWYgKHBsYXRmb3JtQXBw
bHlEZWdlbmVyYXRlKGlucHV0LCBvdXRwdXRQaXhlbEFycmF5LCBvdXRwdXRJbWFnZVJlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSwgcmFkaXVzWCwgcmFkaXVzWSkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIE1vcnBob2xvZ3lQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAg
IHBhaW50aW5nRGF0YS5tb3JwaG9sb2d5T3BlcmF0b3IgPSBtX21vcnBob2xvZ3lPcGVyYXRvcjsK
KyAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5n
RGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSk7CisKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheSA9IGlucHV0UGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4
ZWxBcnJheSA9ICZvdXRwdXRQaXhlbEFycmF5OworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNl
aWxmKG91dHB1dEltYWdlUmVjdC53aWR0aCgpKTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0g
Y2VpbGYob3V0cHV0SW1hZ2VSZWN0LmhlaWdodCgpKTsKKworICAgIHBsYXRmb3JtQXBwbHkocGFp
bnRpbmdEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjNmYjBiOGFhYWQwYTVhNTUyODhkMTdlZWM0MDgwMTJlNmU3ZWZiMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVP
ZmZzZXRTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCisKKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5j
bHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25z
dAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0g
aW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZm
ZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1
dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0
ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW5wdXRJbWFnZVJlY3QubW92ZShnZW9tZXRyeS5y
ZXNvbHZlSW1hZ2VTaXplKHsgbV9keCwgbV9keSB9KSk7CisgICAgaW5wdXRJbWFnZVJlY3QgPSBn
ZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXRJbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJlY3QoKSk7
CisKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFn
ZSwgaW5wdXRJbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZjYTA1MzVjYzI3YzQzNDIyYzY4YjFlYzlmNjgwYjMwYjMxMDE5YjgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFVGlsZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFVGlsZS5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgRkVUaWxlOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1
dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFv
dXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbnB1dEltYWdl
UmVjdCA9IGlucHV0LmltYWdlUmVjdCgpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnku
bWFwSW1hZ2VSZWN0KGlucHV0SW1hZ2VSZWN0KTsKKworICAgIGF1dG8gdGlsZVJlY3QgPSBnZW9t
ZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24oaW5wdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAg
IHRpbGVSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KHRpbGVSZWN0KTsKKworICAgIGF1dG8g
b3V0cHV0SW1hZ2VSZWN0ID0gb3V0cHV0LmltYWdlUmVjdCgpOworICAgIG91dHB1dEltYWdlUmVj
dCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXRJbWFnZVJlY3QpOworCisgICAgYXV0byBt
YXhPdXRwdXRSZWN0ID0gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKG91dHB1dC5wcmltaXRp
dmVTdWJyZWdpb24oKSk7CisgICAgbWF4T3V0cHV0UmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChtYXhPdXRwdXRSZWN0KTsKKworICAgIGF1dG8gdGlsZUltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZSh0aWxlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwor
ICAgIGlmICghdGlsZUltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBH
cmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2VCdWZmZXItPmNvbnRl
eHQoKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtdGlsZVJlY3QubG9jYXRpb24o
KSk7CisgICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlu
cHV0SW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworCisgICAgYXV0byB0aWxlSW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZUJ1ZmZlcikpOworICAg
IGlmICghdGlsZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZSh0
aWxlUmVjdC5sb2NhdGlvbigpIC0gbWF4T3V0cHV0UmVjdC5sb2NhdGlvbigpKTsKKworICAgIGF1
dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UucmVsZWFzZU5vbk51bGwoKSwg
eyB0cnVlLCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRDb250
ZXh0LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOworICAgIAorICAgIG91dHB1dENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0SW1hZ2VSZWN0LnNp
emUoKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk5N2I0MDE1MWU0NzYwZGU1Y2VmYmY5MWIwOTAyZWIzZmY1ZDJkMjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDQ0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3pl
Z2VkLmh1PgorICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgorCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgi
CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8
d3RmL1BhcmFsbGVsSm9icy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZSB0dXJi
dWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBw
ZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgorLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQorCisvKgorICAgIFByb2R1Y2VzIHJl
c3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6CisgICAgciA9
IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKKyAgICBt
ID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KKyAgICBT
ZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4
OAorICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdCAx
MDQzNjE4MDY1CisgICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhlIG9y
aWdpbmFsIHNlZWQgaXMgMS4KKyovCitzdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9pc2UgPSA0
MDk2Oworc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8vIDIq
KjMxIC0gMQorc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoq
NTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQorc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3Nzcz
OyAvLyBtIC8gYQorc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKKwor
c3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKK3N0YXRpYyBjb25zdCBpbnQgc19i
bG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7CisKK3N0YXRpYyBjb25zdCBpbnQgc19taW5pbWFs
UmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icy4KKworc3RydWN0IFR1cmJ1bGVuY2VQYWludGluZ0RhdGEgeworICAgIFR1
cmJ1bGVuY2VQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUsIGZsb2F0
IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGxv
bmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcywgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKQor
ICAgICAgICA6IHR1cmJ1bGVuY2VUeXBlKHR1cmJ1bGVuY2VUeXBlKQorICAgICAgICAsIGJhc2VG
cmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQorICAgICAgICAsIG51bU9jdGF2ZXMobnVtT2N0YXZlcykKKyAgICAgICAgLCBz
ZWVkKHNlZWQpCisgICAgICAgICwgc3RpdGNoVGlsZXMoc3RpdGNoVGlsZXMpCisgICAgICAgICwg
cGFpbnRpbmdTaXplKHBhaW50aW5nU2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gQ29tcHV0
ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KKyAgICBpbmxpbmUgbG9uZyByYW5kb20oKQorICAgIHsK
KyAgICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEp
IC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7CisgICAgICAgIGlmIChyZXN1bHQgPD0gMCkK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOworICAgICAgICBzZWVkID0gcmVz
dWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFR1cmJ1bGVuY2VUeXBl
IHR1cmJ1bGVuY2VUeXBlOworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOworICAgIGZsb2F0IGJh
c2VGcmVxdWVuY3lZOworICAgIGludCBudW1PY3RhdmVzOworICAgIGxvbmcgc2VlZDsKKyAgICBi
b29sIHN0aXRjaFRpbGVzOworICAgIEludFNpemUgcGFpbnRpbmdTaXplOworCisgICAgaW50IGxh
dHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKKyAgICBmbG9hdCBncmFkaWVudFs0
XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKK307CisKK3N0cnVjdCBTdGl0Y2hEYXRhIHsKKyAg
ICBTdGl0Y2hEYXRhKCkgPSBkZWZhdWx0OworCisgICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cg
bXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hpbmcuCisgICAgaW50IHdyYXBYIHsg
MCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCisgICAgaW50IGhlaWdodCB7IDAgfTsKKyAg
ICBpbnQgd3JhcFkgeyAwIH07Cit9OworCitzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewor
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhJiwgU3RpdGNo
RGF0YSwgaW50LCBpbnQpPiBmaWxsUmVnaW9uOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhl
bEFycmF5OworICAgIEludFJlY3QgZmlsdGVyUmVnaW9uOworICAgIEZsb2F0U2l6ZSBmaWx0ZXJT
Y2FsZTsKKyAgICBUdXJidWxlbmNlUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAgU3Rp
dGNoRGF0YSBzdGl0Y2hEYXRhOworICAgIGludCBzdGFydFk7CisgICAgaW50IGVuZFk7Cit9Owor
CitpbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKK3sKKyAgICByZXR1cm4gdCAqIHQg
KiAoMyAtIDIgKiB0KTsKK30KKworaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxv
YXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOwor
fQorCitzdGF0aWMgdm9pZCBpbml0UGFpbnQoVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQoreworICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7CisKKyAgICAvLyBUaGUg
c2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KKyAg
ICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQg
PSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOworICAgIGlm
IChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQorICAgICAgICBwYWludGlu
Z0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOworCisgICAgZmxvYXQqIGdyYWRpZW50Owor
ICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgeworICAgICAgICAgICAg
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7CisgICAgICAgICAgICBncmFkaWVu
dCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKKyAgICAgICAgICAgIGRvIHsK
KyAgICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRp
bmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19i
bG9ja1NpemU7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tT
aXplKSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYm
ICFncmFkaWVudFsxXSk7CisgICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpo
eXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOworICAgICAgICAgICAgZ3JhZGllbnRbMF0g
Lz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1h
bGl6YXRpb25GYWN0b3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gc19i
bG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9t
KCkgJSBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgQVNTRVJUKGogPj0gMCk7CisgICAgICAgIEFTU0VS
VChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOworICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKKyAgICB9CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7CisgICAgICAgIHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV07CisgICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsg
KytjaGFubmVsKSB7CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
c19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsw
XTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6
ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOworICAgICAg
ICB9CisgICAgfQorfQorCitzdGF0aWMgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNp
emUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZ
LCBib29sIHN0aXRjaFRpbGVzKQoreworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOworICAg
IGZsb2F0IHRpbGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBBU1NFUlQodGlsZVdp
ZHRoID4gMCAmJiB0aWxlSGVpZ2h0ID4gMCk7CisKKyAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxl
ZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAorICAgIC8vIHNv
IHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCisgICAgaWYgKGJhc2VG
cmVxdWVuY3lYKSB7CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lk
dGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAgIGZsb2F0IGhpZ2hGcmVx
dWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Cisg
ICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcg
dG8gdGhlIHN0YW5kYXJkLgorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVu
Y3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCisgICAgICAgICAgICBiYXNlRnJl
cXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZy
ZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OworICAgIH0KKyAgICBpZiAoYmFzZUZyZXF1ZW5jeVkp
IHsKKyAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNl
RnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0g
Y2VpbGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7CisgICAgICAg
IGlmIChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNl
RnJlcXVlbmN5WSkKKyAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7
CisgICAgfQorCisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgIHN0aXRjaERhdGEud2lk
dGggPSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgIHN0aXRjaERhdGEu
d3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKKyAgICBzdGl0Y2hEYXRh
LmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOworICAgIHN0aXRj
aERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7CisKKyAgICBy
ZXR1cm4gc3RpdGNoRGF0YTsKK30KKworLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3Bl
YzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVs
ZW1lbnQuCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFR1
cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3Rp
dGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCit7CisgICAgc3RydWN0IE5v
aXNlUG9zaXRpb24geworICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVj
IHRleHQuCisgICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRl
eHQuCisgICAgICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0
LgorCisgICAgICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47CisgICAgICAgICAgICAvLyAgYngw
ID0gKGludCl0OworICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOworICAgICAgICAgICAgLy8g
IHJ4MCA9IHQgLSAoaW50KXQ7CisgICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVu
dCArIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4o
cG9zaXRpb24pOworICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOworICAgICAgICAg
ICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkIHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAgICAv
LyAgIGJ4MCAtPSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYgKGluZGV4ID49
IHdyYXBTaXplKQorICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7CisKKyAgICAgICAgICAg
IC8vIGlmIChieDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKKyAgICAgICAgICAgIC8vICAgYngx
IC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7CisgICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdy
YXBTaXplKQorICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7CisgICAg
Tm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKKworICAgIC8vIElmIHN0aXRj
aGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAgIGlmIChwYWludGlu
Z0RhdGEuc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndp
ZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKKyAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRh
LmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7CisgICAgfQorCisgICAgLy8gYngwICY9IEJNOwor
ICAgIC8vIGJ4MSAmPSBCTTsKKyAgICAvLyBieTAgJj0gQk07CisgICAgLy8gYnkxICY9IEJNOwor
ICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVgubmV4dEluZGV4ICY9
IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lz
ZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOworCisgICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0
b3JbYngwXTsKKyAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOworICAgIGludCBsYXR0
aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07Cisg
ICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25v
aXNlWC5uZXh0SW5kZXhdOworCisgICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsKKyAg
ICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOworICAgIGZsb2F0IHN4ID0gc21vb3RoQ3Vy
dmUobm9pc2VYLmZyYWN0aW9uKTsKKyAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5m
cmFjdGlvbik7CisKKyAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5lbCkg
eworICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCisgICAgICAgIGlu
dCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNl
WS5pbmRleF07CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAwXTsg
dSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOworICAgICAgICBjb25zdCBmbG9hdCogcSA9IHBh
aW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOworICAgICAgICBmbG9hdCB1ID0gbm9p
c2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07CisKKyAgICAgICAg
Ly8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKKyAgICAgICAgaW50IGIxMCA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRl
eF07CisgICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7CisgICAgICAgIC8vIHEgPSBmR3JhZGll
bnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOworICAg
ICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07CisgICAgICAgIGZs
b2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICog
cVsxXTsKKyAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOworICAgICAgICBmbG9hdCBhID0g
bGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisKKyAgICAgICAgLy8gYjAxID0gdUxhdHRp
Y2VTZWxlY3RvcltpICsgYnkxXTsKKyAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07CisgICAgICAgIC8v
IHJ5MSA9IHJ5MCAtIDEuMGY7CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5l
bF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOworICAgICAgICBxID0gcGFpbnRp
bmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07CisgICAgICAgIHUgPSBub2lzZVguZnJhY3Rp
b24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKKworICAgICAgICAvLyBi
MTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOworICAgICAgICBpbnQgYjExID0gcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRl
eF07CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9IHJ4
MSAqIHFbMF0gKyByeTEgKiBxWzFdOworICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50
W2NoYW5uZWxdW2IxMV07CisgICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBd
ICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKKyAgICAgICAgLy8gYiA9IGxlcnAoc3gs
IHUsIHYpOworICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7
CisKKyAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOworICAgICAgICByZXR1cm4gbGlu
ZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7CisgICAgfTsKKworICAgIHJldHVybiB7CisgICAg
ICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKKyAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAorICAg
ICAgICBub2lzZUZvckNoYW5uZWwoMiksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQorICAg
IH07Cit9CisKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlVHVy
YnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21wb25l
bnRzLgorLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDg+
PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KK3N0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQoreworICAgIHJl
dHVybiB7CisgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9h
dENvbXBvbmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4
X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzFdICogMjU1KSwgMCwgMjU1KSwK
KyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9u
ZW50c1syXSAqIDI1NSksIDAsIDI1NSksCisgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3Rh
dGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbM10gKiAyNTUpLCAwLCAyNTUpLAorICAgIH07
Cit9CisKK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorewor
ICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0Owor
ICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VG
cmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOworICAg
IGZsb2F0IHJhdGlvID0gMTsKKyAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBwYWlu
dGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3RhdmUpIHsKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0
YS50dXJidWxlbmNlVHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgICAg
ICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKKworICAgICAgICBub2lzZVZlY3Rv
ci5zZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOworICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5v
aXNlVmVjdG9yLnkoKSAqIDIpOworICAgICAgICByYXRpbyAqPSAyOworCisgICAgICAgIGlmIChw
YWludGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2gg
dmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRp
b24gYW5kCisgICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8g
c3VidHJhY3RpbmcgaXQgb25jZS4KKyAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsK
KyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNf
cGVybGluTm9pc2U7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOworICAgICAg
ICAgICAgc3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5O
b2lzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1
NSkgKyAyNTUpIC8gMiBieSBmcmFjdGFsTm9pc2UKKyAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4KKyAgICBpZiAocGFpbnRpbmdEYXRhLnR1
cmJ1bGVuY2VUeXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCisgICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYg
KyAwLjVmOworCisgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBG
bG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7
CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgRmxvYXRQb2ludCBwb2ludCgwLCBm
aWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKKyAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9
IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKKworICAgIGZvciAoaW50IHkg
PSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkg
KyAxKTsKKyAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAg
ICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOworICAgICAgICAgICAgRmxvYXRQb2ludCBsb2Nh
bFBvaW50ID0gcG9pbnQuc2NhbGVkKDEgLyBmaWx0ZXJTY2FsZS53aWR0aCgpLCAxIC8gZmlsdGVy
U2NhbGUuaGVpZ2h0KCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQp
OworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRh
KCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOworICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hh
bm5lbCArPSA0OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmaWxsUmVnaW9u
V29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAgIHBhcmFtZXRl
cnMtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmZpbHRl
clJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUsICpwYXJhbWV0ZXJzLT5wYWludGluZ0Rh
dGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVy
cy0+ZW5kWSk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRw
dXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsK
KyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKwor
ICAgIEludFNpemUgb3V0cHV0U2l6ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CisgICAgSW50U2l6
ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG91dHB1dC5wcmltaXRpdmVTdWJyZWdpb24oKS5z
aXplKCkpOworCisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBtX2Jhc2VGcmVxdWVuY3lYOwor
ICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZID0gbV9iYXNlRnJlcXVlbmN5WTsKKyAgICBTdGl0Y2hE
YXRhIHN0aXRjaERhdGEgPSBjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5
WCwgYmFzZUZyZXF1ZW5jeVksIG1fc3RpdGNoVGlsZXMpOworCisgICAgVHVyYnVsZW5jZVBhaW50
aW5nRGF0YSBwYWludGluZ0RhdGEobV90dXJidWxlbmNlVHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJh
c2VGcmVxdWVuY3lZLCBtX251bU9jdGF2ZXMsIG1fc2VlZCwgbV9zdGl0Y2hUaWxlcywgdGlsZVNp
emUpOworICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOworCisgICAgYXV0byBhcmVhID0gb3V0
cHV0U2l6ZS5hcmVhKCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgaGVpZ2h0ID0gb3V0cHV0U2l6ZS5oZWlnaHQoKTsKKwor
ICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBoZWlnaHQgLyA4OworICAgIHVuc2lnbmVkIG9w
dGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIHNfbWluaW1hbFJl
Y3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0
KCkpKTsKKworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICBXVEY6
OlBhcmFsbGVsSm9iczxGaWxsUmVnaW9uUGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZmaWxsUmVn
aW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKworICAgICAgICAvLyBGaWxsIHRoZSBw
YXJhbWV0ZXIgYXJyYXkKKyAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJl
ck9mSm9icygpOworICAgICAgICBpZiAobnVtSm9icyA+IDEpIHsKKyAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0
cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhFeHRyYSIgam9icy4KKyAgICAgICAgICAg
IHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9iczsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2JzOworICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnRZID0gMDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpv
YnM7ICsraSkgeworICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWxs
UmVnaW9uID0gc3RhdGljX2Nhc3Q8dm9pZCgqKShVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhJiwg
U3RpdGNoRGF0YSwgaW50LCBpbnQpPigmZmlsbFJlZ2lvbik7CisgICAgICAgICAgICAgICAgcGFy
YW1zLnBpeGVsQXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJh
bXMuZmlsdGVyUmVnaW9uID0gb3V0cHV0SW1hZ2VSZWN0OworICAgICAgICAgICAgICAgIHBhcmFt
cy5maWx0ZXJTY2FsZSA9IGdlb21ldHJ5LmZpbHRlclNjYWxlKCk7CisgICAgICAgICAgICAgICAg
cGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CisgICAgICAgICAgICAgICAgcGFy
YW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFy
dFkgPSBzdGFydFk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBqb2JIZWlnaHQgPSAoaSA8
IGpvYnNXaXRoRXh0cmEpID8gc3RlcFkgKyAxIDogc3RlcFk7CisgICAgICAgICAgICAgICAgcGFy
YW1zLmVuZFkgPSBwYXJhbXMuc3RhcnRZICsgam9iSGVpZ2h0OworICAgICAgICAgICAgICAgIHN0
YXJ0WSArPSBqb2JIZWlnaHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlz
IG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwu
CisgICAgZmlsbFJlZ2lvbihvdXRwdXRQaXhlbEFycmF5LCBvdXRwdXRJbWFnZVJlY3QsIGdlb21l
dHJ5LmZpbHRlclNjYWxlKCksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0
ZXJJbWFnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI1ZmZj
MmU4ZTNhNTM3MTcwZmEyOThjOWY0ZDJjODdjNmE3NmI0MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1h
Z2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VTb2Z0d2FyZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlckltYWdlU29mdHdhcmU6OkZpbHRlckltYWdlU29m
dHdhcmUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgaW1hZ2VSZWN0LCBSZWY8SW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXIpCisgICAgOiBGaWx0
ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgZmFsc2UsIGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpLCBpbWFnZUJ1ZmZl
ci0+cmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVyLT5jb2xvclNwYWNlKCkpCisgICAgLCBt
X2ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKQoreworfQorCitJbWFnZUJ1ZmZlciog
RmlsdGVySW1hZ2VTb2Z0d2FyZTo6aW1hZ2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IEludFBvaW50Ojp6ZXJvKCksIEludFNpemUobV9s
b2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdl
QnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlcklt
YWdlU29mdHdhcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxNjI3ZThlZGRlZDdl
MmU5NTdiMTdlOTNkZTIwZDQyZWIxMGI5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdh
cmUuaApAQCAtMCwwICsxLDQ4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFy
ZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGaWx0ZXJJbWFnZVNvZnR3YXJlIDogcHVibGljIEZpbHRlckltYWdlIHsKK3B1YmxpYzoK
KyAgICB1c2luZyBGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2U7CisgICAgRmlsdGVySW1hZ2VTb2Z0
d2FyZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBpbWFnZVJlY3QsIFJlZjxJbWFnZUJ1ZmZlcj4mJik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRy
PEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
aW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsK
KworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpG
aWx0ZXJJbWFnZVNvZnR3YXJlKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJJbWFnZSYgcmVzdWx0KSB7IHJldHVybiByZXN1bHQucmVuZGVyaW5nTW9kZSgpID09
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvTGlnaHRpbmdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0xpZ2h0aW5nRGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBjMDljMTYyM2E5ZDc2MDIyYmE5MjczN2ZjY2E4OWY4OWUyM2YzNjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0xp
Z2h0aW5nRGF0YS5oCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Oworc3RhdGljIGNvbnN0ZXhw
ciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7CitzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qg
Y09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7CisKK3N0cnVjdCBBbHBo
YVdpbmRvdyB7CisgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07CisgICAgCisgICAgLy8gVGhl
IGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBl
YXNpZXIuCisgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4g
YWxwaGFbMF1bMF07IH0KKyAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7
IHJldHVybiBhbHBoYVsxXVswXTsgfQorICAgIHVpbnQ4X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9CisKKyAgICB1aW50OF90IHRvcCgpIGNvbnN0
ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQorICAgIHVpbnQ4X3QgY2Vu
dGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9CisgICAgdWlu
dDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0K
KworICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0g
PSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxw
aGFbMV1bMV0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAg
ICAgIHsgYWxwaGFbMl1bMV0gPSB2YWx1ZTsgfQorCisgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50
OF90IHZhbHVlKSAgICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRSaWdo
dCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9CisgICAgdm9p
ZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9
CisKKyAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQorICAgIHsKKyAg
ICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKKyAgICAgICAgYWxwaGFbMV0gPSBhbHBoYVsyXTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzaGlmdCgpCisgICAgeworICAgICAgICBzaGlmdFJvdyhh
bHBoYVswXSk7CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzFdKTsKKyAgICAgICAgc2hpZnRSb3co
YWxwaGFbMl0pOworICAgIH0KK307CisKK3N0cnVjdCBMaWdodGluZ0RhdGEgeworICAgIC8vIFRo
aXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQorICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAg
IGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgd2lkdGhEZWNyZWFzZWRC
eU9uZTsKKyAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7CisKKyAgICBpbmxpbmUgSW50U2l6
ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgY2Vu
dGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAg
ICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBib3R0
b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CisgICAgICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAtMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJv
dHRvbSArIGJvdHRvbVJpZ2h0LAorICAgICAgICAgICAgLTIgKiBjZW50ZXIgLSByaWdodCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAorICAgICAgICB9OworICAgIH0KKworICAgIGlubGluZSBJ
bnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaW50
IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
ICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBvZmZzZXQgKz0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGJvdHRv
bVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IC0yICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKKyAgICAg
ICAgICAgIC1sZWZ0IC0gMiAqIGNlbnRlciAtIHJpZ2h0ICsgYm90dG9tTGVmdCArIDIgKiBib3R0
b20gKyBib3R0b21SaWdodAorICAgICAgICB9OworICAgIH0KKworICAgIGlubGluZSBJbnRTaXpl
IHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgbGVm
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IGJvdHRv
bUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRv
bUxlZnQgKyBib3R0b20sCisgICAgICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBib3R0b21M
ZWZ0ICsgMiAqIGJvdHRvbQorICAgICAgICB9OworICAgIH0KKworICAgIGlubGluZSBJbnRTaXpl
IGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGludCBj
ZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAg
ICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHRv
cCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICAgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAg
ICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50
IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBj
ZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdodCwKKyAgICAgICAgICAgIC0y
ICogdG9wIC0gdG9wUmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICAgICAgfTsK
KyAgICB9CisKKyAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBB
bHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0CisgICAgeworICAgICAgICBpbnQgcmlnaHRB
bHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0Owor
ICAgICAgICAKKyAgICAgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ocmlnaHRBbHBoYU9mZnNldCkpOworICAgICAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUpKTsKKyAgICAgICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
KSk7CisKKyAgICAgICAgaW50IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7CisgICAgICAgIGlu
dCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOworICAgICAgICBpbnQgdG9wID0gYWxw
aGFXaW5kb3cudG9wKCk7CisKKyAgICAgICAgaW50IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5i
b3R0b21MZWZ0KCk7CisgICAgICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5ib3R0b20oKTsK
KworICAgICAgICAvLyBUaGUgYWxwaGFXaW5kb3cgaGFzIGJlZW4gc2hpZnRlZCwgYW5kIGhlcmUg
d2UgZmlsbCBpbiB0aGUgcmlnaHQgY29sdW1uLgorICAgICAgICBhbHBoYVdpbmRvdy5hbHBoYVsw
XVsyXSA9IHRvcFJpZ2h0OworICAgICAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0
OworICAgICAgICBhbHBoYVdpbmRvdy5hbHBoYVsyXVsyXSA9IGJvdHRvbVJpZ2h0OworICAgICAg
ICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRo
IHNvbWUgc3BvdC1jaGVja3MuCisgICAgICAgIEFTU0VSVChhbHBoYVdpbmRvdy50b3BMZWZ0KCkg
PT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgLSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wTGVmdAorICAgICAgICBBU1NF
UlQoYWxwaGFXaW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKKworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgLXRvcExlZnQgKyB0b3BSaWdodCAtIDIgKiBsZWZ0ICsg
MiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAorICAgICAgICAgICAgLXRvcExl
ZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRv
bVJpZ2h0CisgICAgICAgIH07CisgICAgfQorCisgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1
bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGludCBsZWZ0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0
IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgdG9wTGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCAr
PSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBib3R0b21MZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2Vu
dGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCisgICAgICAgIH07CisgICAgfQorCisgICAgaW5s
aW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICAgICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAg
ICAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAq
IGNlbnRlciArIDIgKiByaWdodCwKKyAgICAgICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAy
ICogY2VudGVyICsgcmlnaHQKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50U2l6
ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGludCBs
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAg
ICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0IC09IHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGludCB0b3BSaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAtdG9wTGVmdCAr
IHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCisgICAgICAgICAgICAtdG9wTGVmdCAt
IDIgKiB0b3AgLSB0b3BSaWdodCArIGxlZnQgKyAyICogY2VudGVyICsgcmlnaHQKKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICAgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIC10
b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyLAorICAgICAgICAgICAgLXRvcExl
ZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKKyAgICAgICAgfTsKKyAgICB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VB
bHBoYVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTc0MjhlNzY0ZGNjZmMxNTdkOTgwYTBjOTc5
ZGJlZTc1ZDYxZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcApAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgor
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgp
ID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBp
bnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0
LmltYWdlUmVjdCgpKTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxv
YXRSZWN0IHsgeyB9LCBpbnB1dEltYWdlUmVjdC5zaXplKCkgfSwgQ29sb3I6OmJsYWNrKTsKKyAg
ICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgSW50
UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1Nv
ZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWQwMTUyYjEyNDUy
MWY5ODMyNzU4NTI2M2YzNzMzYmZjN2JmNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmUuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNvdXJjZUdyYXBoaWMuaCIKKworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAi
RmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNl
R3JhcGhpYzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0u
Z2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAg
IGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRw
dXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCppbnB1dEltYWdlLCBGbG9hdFBvaW50KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXIuY3BwCmluZGV4IGY0NGFlMTI5ZDA3MzhkMzBjNzZlNzEwODViMmFlYzA1YTdiNmYxZGEuLjNm
NzI1NzkxNjIxZWZkZWMxZDYzNzMyNzMzZDdlZWNiMjcyOTVmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDEyICsyOCwzMzUgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50
LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJF
bGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVkZSAi
RkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgogI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCi0jaW5jbHVkZSAiRkVNZXJnZS5oIgotI2luY2x1ZGUgIkZp
bHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0
ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJSZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUg
IlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNWR0Zp
bHRlci5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlIDxkMmQxLmg+CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxDU1NGaWx0ZXI+IENT
U0ZpbHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIEZpbHRlckdl
b21ldHJ5OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgYXV0byBmaWx0ZXIg
PSBhZG9wdFJlZihuZXcgQ1NTRmlsdGVyKG9wZXJhdGlvbnMpKTsKKworICAgIGlmICghZmlsdGVy
LT5idWlsZEZ1bmN0aW9ucyhyZW5kZXJlciwgb3BlcmF0aW9ucywgY2xpcE9wZXJhdGlvbikpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlm
IChyZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkICYmICFmaWx0ZXIt
PnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCisgICAgICAgIAorICAgIGZpbHRl
ci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gZmlsdGVyOwor
fQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNy
ZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiBmdW5jdGlvbnMsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0ZpbHRlcihX
VEZNb3ZlKGZ1bmN0aW9ucyksIHJlbmRlcmluZ01vZGUpKTsKK30KIAotUmVmPENTU0ZpbHRlcj4g
Q1NTRmlsdGVyOjpjcmVhdGUoKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgb3BlcmF0aW9ucykKKyAgICA6IEZpbHRlcihUeXBlOjpDU1NGaWx0ZXIpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBtX2hhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAg
bV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJh
dGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsK
IH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEs
IDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMp
KQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVu
Y3Rpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIoVHlwZTo6
Q1NTRmlsdGVyKQorICAgICwgbV9mdW5jdGlvbnMoV1RGTW92ZShmdW5jdGlvbnMpKQorICAgICwg
bV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCiB7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0Zp
bHRlcigpID0gZGVmYXVsdDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVy
RWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckdl
b21ldHJ5OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkRGV2
aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigp
LCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0
ZERldmlhdGlvbiwgY2xpcE9wZXJhdGlvbiA9PSBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlv
bjo6VW5pdGUgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKK30KIAotR3Jh
cGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCitzdGF0aWMgUmVmUHRyPEZp
bHRlckVmZmVjdD4gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAg
ICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxs
cHRyOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFS
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0
ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3Qs
IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewot
ICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVz
b3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmls
dGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1
aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGlu
ZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAg
ICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBp
dCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTMxMDg1PgotICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcu
Ci0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAg
ICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGlu
Z1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRy
YW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0
ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
bnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uKTsKK30KIAotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVp
bGRlcj4oJnByZXZpb3VzRWZmZWN0KTsKLSAgICBtX3NvdXJjZUFscGhhID0gYnVpbGRlci0+Z2V0
RWZmZWN0QnlJZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpKTsKK3N0YXRpYyBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkID0gZHJvcFNo
YWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93Ojpj
cmVhdGUoc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0
aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKK30KIAotICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IHJl
ZmVyZW5jZUVmZmVjdHM7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlR3JheVNj
YWxlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0
cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAt
IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUg
aHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0
bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0
ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICog
b25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91
bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAg
ICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAg
ICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBmb3IgKGF1dG8mIGVmZmVjdEVs
ZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM+KCpmaWx0ZXJFbGVtZW50KSkgewotICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1
aWxkKGJ1aWxkZXIuZ2V0KCksICp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAg
ICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8
IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGJ1aWxkIGVmZmVjdCBm
cm9tICIgPDwgZWZmZWN0RWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgfQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVj
dChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJh
dGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJu
IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZN
b3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3Rh
bmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50
LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFS
X1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0
RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9u
RmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25D
b2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1
aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZl
cmVuY2VFZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3Rz
LmFwcGVuZFZlY3RvcihXVEZNb3ZlKHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZm
ZWN0Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQg
PSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
KyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CiB9CiAK
LWJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCitzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0eUVmZmVjdChjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bikKIHsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJj
ZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwor
ICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVsbEZ1bmN0aW9uLCBudWxs
RnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CiAKLSAgICBtX2Vm
ZmVjdHMuY2xlYXIoKTsKLSAgICBtX291dHNldHMgPSB7IH07CitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBp
bnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAg
ZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24u
YW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hn
L0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAg
ICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4g
aW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyAr
IDAuNjA3ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAg
ICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkg
KiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYg
KyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1p
bnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0
ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMx
ICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAg
ICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwK
KyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVm
UHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVyKGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3sKKyAgICBh
dXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNW
R1Jlc291cmNlcygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZlcmVuY2VkU1ZHUmVz
b3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRl
ck9wZXJhdGlvbik7CisKKyAgICBpZiAoIWZpbHRlckVsZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVu
dCk7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyR2VvbWV0
cnk6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKK3sKKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBlZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5h
cHBlbmQoeyAqZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNF
ZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24g
OiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0g
ICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VP
cGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJl
ciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICBSZWZQdHI8
U1ZHRmlsdGVyPiBmaWx0ZXI7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZWZmZWN0KTsKKyAg
ICAgICAgc3dpdGNoIChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBw
bGUtY29sb3ItZmlsdGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29s
b3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50
ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsK
LQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmls
ZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAg
IC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8
ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3
MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAw
LjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAg
ICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVD
b2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZN
b3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
TFVSOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVy
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJhdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6
IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2
Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVx
dWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgot
Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2
OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC41
MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBX
VEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQnJpZ2h0bmVzc0VmZmVj
dChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3Bl
cmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVy
T3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgICAgIGVmZmVjdCA9
IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAg
ICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8Zmxv
YXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4
OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5w
dXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hB
RE9XOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChkb3duY2Fz
dDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7Ci0gICAgICAgICAgICB0
cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKLQotICAgICAgICAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNy
ZWF0ZUdyYXlTY2FsZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9u
bHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgorCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRl
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2Zl
ckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
LCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZl
Y3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJh
dGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
dHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmlu
dGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVs
bEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3Jl
YXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1
bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3BhY2l0eUVmZmVjdChkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJh
bnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09N
UE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgp
KTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAg
ICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1
bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRl
KCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRV
UkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OiB7Ci0gICAgICAgICAgICBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlh
dGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwg
MCk7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBz
dGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZp
bHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CisKKyAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICAgICAgZWZmZWN0ID0g
Y3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBhdXRvJiBk
cm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9wU2hhZG93
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVy
YXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5j
b2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgor
ICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGVmZmVj
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChlZmZl
Y3QpIHsKLSAgICAgICAgICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1h
Z2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKLSAgICAgICAgICAgIC8vIHByb3Bl
cnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJl
Z2lvbnMuCi0gICAgICAgICAgICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0g
RmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0
T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRl
ck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgV1RGTW92ZShwcmV2aW91c0VmZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBt
X2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJl
dmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOworICAgICAgICAgICAgbV9m
dW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55
IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2Vm
ZmVjdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZWZm
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlua1Rv
Rml0KCk7CisgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CisgICAgfQog
Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMobV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsKLSNpZiBVU0Uo
Q09SRV9JTUFHRSkKLSAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVy
UmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRp
bmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0
cy5sYXN0KCkuZ2V0KCkpOwotI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NT
RmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVj
dCkKKyNpZiBVU0UoQ09SRV9JTUFHRSkKK2Jvb2wgQ1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZygpIGNvbnN0CiB7Ci0gICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChmaWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVy
UmVjdCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAg
IGlmICghZnVuY3Rpb24tPnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQotCi12b2lkIENTU0Zp
bHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
IHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWlu
IGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0gICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4g
V2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUgZ3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBo
YXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURy
YXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUlt
YWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9naWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUs
IHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBt
b2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVu
ZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFw
aGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1f
ZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0
b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcg
c2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAg
c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQotfQotCi12b2lkIENTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCkKLXsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFy
UmVzdWx0KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEt
PmNsZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAg
ICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKLX0KIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkK
K0ludE91dHNldHMgQ1NTRmlsdGVyOjpjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICBh
dXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmIChtX2ZpbHRlclJl
bmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3Qp
OwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAg
ICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBl
ZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci19Ci0KLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVz
dWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0
aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRp
cnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAo
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91
dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0g
ICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwotfQorICAgIGlmICghbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMpCisgICAgICAgIHJldHVybiB7IH07CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6
Om91dHB1dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJS
ZW5kZXJlci0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5v
dXRwdXQoKTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHM7CisgICAgZm9yIChhdXRvJiBmdW5jdGlv
biA6IG1fZnVuY3Rpb25zKQorICAgICAgICBvdXRzZXRzICs9IGZ1bmN0aW9uLT5jYWxjdWxhdGVP
dXRzZXRzKCk7CiAgICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgcmV0dXJuIG91dHNldHM7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRT
b3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCitib29sIENT
U0ZpbHRlcjo6YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIG1fc291
cmNlRHJhd2luZ1JlZ2lvbiA9IHNvdXJjZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0
cyhzb3VyY2VJbWFnZVJlY3QpOwotICAgIHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3Qp
OwotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwotfQotCi12b2lkIENTU0Zp
bHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQotewot
ICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNldE1h
eEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Ci19Ci0KLUludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRS
ZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5n
ZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJS
ZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0gICAgICAgIHJldHVy
biBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsg
bV9maWx0ZXJSZWdpb24gfSk7Ci0gICAgCi0gICAgcmV0dXJuIHsgfTsKKyAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKCFmdW5jdGlvbi0+YXBwbHko
cmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMo
KSBjb25zdAorVGV4dFN0cmVhbSYgQ1NTRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKLSAgICBpZiAoIW1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291
dHNldHM7CisgICAgYXV0byBlbmQgPSBtX2Z1bmN0aW9ucy5yZW5kKCk7CisgICAgdW5zaWduZWQg
bGV2ZWwgPSAwOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9mdW5jdGlvbnMucmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRvIGZ1bmN0aW9uID0gKml0OworICAgICAgICBp
ZiAoZnVuY3Rpb24tPnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7
CisgICAgICAgICAgICBBU1NFUlQoaXQgIT0gZW5kKTsKKyAgICAgICAgICAgICsraXQ7CisgICAg
ICAgIH0KKyAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIGxl
dmVsKyspOworICAgICAgICBmdW5jdGlvbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVw
cmVzZW50YXRpb24pOworICAgIH0KIAotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3Rz
KQotICAgICAgICBtX291dHNldHMgKz0gZWZmZWN0LT5vdXRzZXRzKCk7Ci0gICAgcmV0dXJuIG1f
b3V0c2V0czsKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3
NThlMzc1YzI1MmYyOWRiMGM1Li5lNzM2N2FmNDdhZDMxMWVjYmMwYWM5ZDc5MTdhZDliMjkyMTg1
YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsODIgKzI2LDUw
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkludFJl
Y3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5cGVD
YXN0cy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNz
IEZpbHRlckVmZmVjdFJlbmRlcmVyOwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLWNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJl
bmRlckVsZW1lbnQ7Ci1jbGFzcyBTb3VyY2VBbHBoYTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0K
LWVudW0gY2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rp
b24gfTsKIAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVy
czsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2
b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZp
bHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lv
biA9IGZpbHRlclJlZ2lvbjsgfQotCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0Owog
Ci0gICAgYm9vbCBidWlsZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYs
IEZpbHRlckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwot
ICAgIHZvaWQgYXBwbHkoKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4g
Y3JlYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5n
TW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIEZpbHRlckdlb21ldHJ5OjpDbGlw
T3BlcmF0aW9uID0gRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShWZWN0b3I8
UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKICAgICBib29sIGhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzOyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW47IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7Ci0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAgdmlydHVhbCB+Q1NTRmlsdGVyKCk7Ci0KLSAgICBi
b29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlRHJh
d2luZ1JlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbklu
VXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLQotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQm
LCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24m
KTsKKyAgICBjb25zdCBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mIGZ1bmN0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9CiAKLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3Rz
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQor
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cmVuZGVyaW5nTW9kZTsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsK
KyAgICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25zdCBmaW5hbDsKIAotICAgIGJv
b2wgdXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwot
ICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKLQotICAgIEludFJlY3Qgb3V0cHV0UmVjdCgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBD
U1NGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIENTU0ZpbHRlcihWZWN0b3I8
UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKLSAgICBMYXlvdXRSZWN0
IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmls
dGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKKyAgICBib29sIGJ1aWxk
RnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVy
R2VvbWV0cnk6OkNsaXBPcGVyYXRpb24pOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2lu
Z1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisjaWYgVVNFKENPUkVfSU1B
R0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IGZpbmFsOwor
I2VuZGlmCiAKLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsKLSAgICBS
ZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IG1fc291cmNlQWxwaGE7CisgICAgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQmLCBGaWx0ZXJJ
bWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmluYWw7CiAK
LSAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOworICAgIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBmaW5hbDsKIAotICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsK
ICAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29s
IG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxz
ZSB9OwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9m
aWx0ZXJSZW5kZXJlcjsKKworICAgIFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1bmN0
aW9uczsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGY3MjhjMGY2YzZlMDc0N2EzMmMy
ODYxZjVmYWM2OTM5ZDU2YjYxNmQuLmVhZDAyNzAwMjMwZTIxMzk3ZmQzNDc5Nzg4NjBhZTA3OGIx
MWVhZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNTU4
Miw3ICs1NTgyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJh
dGVneSgpCiBJbnRPdXRzZXRzIFJlbmRlckxheWVyOjpmaWx0ZXJPdXRzZXRzKCkgY29uc3QKIHsK
ICAgICBpZiAobV9maWx0ZXJzKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJzLT5maWx0ZXIoKSA/
IG1fZmlsdGVycy0+ZmlsdGVyKCktPm91dHNldHMoKSA6IEludE91dHNldHMoKTsKKyAgICAgICAg
cmV0dXJuIG1fZmlsdGVycy0+ZmlsdGVyKCkgPyBtX2ZpbHRlcnMtPmZpbHRlcigpLT5jYWxjdWxh
dGVPdXRzZXRzKCkgOiBJbnRPdXRzZXRzKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyKCkuc3R5bGUo
KS5maWx0ZXJPdXRzZXRzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKaW5kZXggNThiN2ExNmE3YTlmNzg1MTZkYjYzOGQ5ZGE3MDdkYzliZjEzMmRhNS4uODMwMTU3
YjA3MDljYTQyNTQ5MGViNWRiYjYwZjUyOTU2ZTlhY2JlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKQEAgLTYyLDcgKzYyLDYgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NGaWx0ZXI7CiBjbGFzcyBDbGlwUmVjdHM7
CiBjbGFzcyBDbGlwUmVjdHNDYWNoZTsKIGNsYXNzIEV2ZW50UmVnaW9uQ29udGV4dDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXggMjUw
YTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uZGU1ZDE2ZjJkYTBjY2QxMjBi
ZjcyNzE5NzY5NzRiMmMzZTViNGI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTM0LDggKzM0LDEwIEBACiAjaW5jbHVkZSAiQ1NT
RmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJDYWNo
ZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgi
CisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTgsMzcgKzEyMCw1NSBAQCB2b2lkIFJlbmRl
ckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAKIHZvaWQgUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgZmxv
YXQgc2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICBpZiAo
IW1fZmlsdGVyKSB7Ci0gICAgICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAg
ICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9m
aWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7Ci0gICAgfSBlbHNlIGlmICht
X2ZpbHRlci0+ZmlsdGVyU2NhbGUoKSAhPSBzY2FsZUZhY3RvcikgewotICAgICAgICBtX2ZpbHRl
ci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+Y2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgfQorICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpj
cmVhdGUocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUs
IEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSk7CisgICAgbV9zY2FsZUZhY3Rv
ciA9IHNjYWxlRmFjdG9yOworfQorCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6aW5wdXRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9zb3VyY2VJbWFnZSA/ICZtX3NvdXJj
ZUltYWdlLT5jb250ZXh0KCkgOiBudWxscHRyOworfQogCi0gICAgLy8gSWYgdGhlIGZpbHRlciBm
YWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0
dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21w
b3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICAvLyBGSVhNRTogdGhpcyBy
ZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmlsdGVyIHN0eWxl
IGRpZG4ndCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRl
cmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCi0g
ICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKK3ZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSW50U2l6ZSBzaXplIHsgbV9zb3Vy
Y2VJbWFnZVJlY3Quc2l6ZSgpICogbV9zY2FsZUZhY3RvciB9OworICAgIGF1dG8gaG9zdFdpbmRv
dyA9IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucm9vdCgpID8gbV9sYXll
ci5yZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yb290KCktPmhvc3RXaW5kb3coKSA6IG51
bGxwdHI7CisKKyAgICBtX3NvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBt
X2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRl
cmluZ1B1cnBvc2U6OkRPTSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVs
Rm9ybWF0OjpCR1JBOCwgaG9zdFdpbmRvdyk7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGltYWdl
Q29udGV4dCA9IG1fc291cmNlSW1hZ2UtPmNvbnRleHQoKTsKKyAgICBpbWFnZUNvbnRleHQuc2Nh
bGUobV9zY2FsZUZhY3Rvcik7CisgICAgCisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0g
dHJ1ZTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmls
dGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxh
eWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9maWx0ZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwot
ICAgIGF1dG8gZmlsdGVyU291cmNlUmVjdCA9IGZpbHRlci5jb21wdXRlU291cmNlSW1hZ2VSZWN0
Rm9yRGlydHlSZWN0KGZpbHRlckJveFJlY3QsIGRpcnR5UmVjdCk7CisgICAgCisgICAgYXV0byBm
aWx0ZXJTb3VyY2VSZWN0ID0gZGlydHlSZWN0OworICAgIGlmIChmaWx0ZXIuaGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzKCkpCisgICAgICAgIGZpbHRlclNvdXJjZVJlY3QgKz0gZmlsdGVyLmNhbGN1
bGF0ZU91dHNldHMoKTsKKyAgICBmaWx0ZXJTb3VyY2VSZWN0LmludGVyc2VjdChmaWx0ZXJCb3hS
ZWN0KTsKKwogICAgIGlmIChmaWx0ZXJTb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIu
dXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICAKKyAgICBpZiAo
ZmlsdGVyU291cmNlUmVjdCAhPSBtX3NvdXJjZUltYWdlUmVjdCkgeworICAgICAgICBtX3NvdXJj
ZUltYWdlUmVjdCA9IGZpbHRlclNvdXJjZVJlY3Q7CisgICAgICAgIG1fZ3JhcGhpY3NCdWZmZXJB
dHRhY2hlZCA9IGZhbHNlOworICAgIH0KKyAgICAKICAgICBpZiAoIWZpbHRlci5oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMoKSkKICAgICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKICAg
ICBlbHNlIHsKLSAgICAgICAgaWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUpCisgICAgICAgIGlm
ICghbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQogICAgICAgICAgICAgbV9yZXBhaW50UmVjdCA9
IGZpbHRlclNvdXJjZVJlY3Q7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9yZXBhaW50
UmVjdCA9IGRpcnR5UmVjdDsKQEAgLTE1OSwxMSArMTc5LDkgQEAgR3JhcGhpY3NDb250ZXh0KiBS
ZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigpOwog
ICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwotICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29u
dGV4dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29u
dGV4dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKKyAgICBhbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKCk7CisgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250
ZXh0ID0gaW5wdXRDb250ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb250ZXh0IHNv
IHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpcyBjYXB0dXJlZCBpbiB0aGUgb2Zmc2Ny
ZWVuIG1lbW9yeSBidWZmZXIuCkBAIC0xNzcsMjMgKzE5NSwxOSBAQCBHcmFwaGljc0NvbnRleHQq
IFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0aW5hdAogCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKG1fZmlsdGVy
LT5pbnB1dENvbnRleHQoKSk7CisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgpKTsKIAogICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5ZXJGaWx0ZXJzICIg
PDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0Iik7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAq
bV9maWx0ZXI7Ci0gICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7Ci0KLSAgICBm
aWx0ZXIuYXBwbHkoKTsKKyAgICBpbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwogCi0gICAgLy8g
R2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCi0gICAgTGF5b3V0
UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7Ci0gICAgZGVzdFJlY3QubW92ZSht
X3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9mZnNldC55KCkpOworICAgIGRlc3RpbmF0aW9uQ29u
dGV4dC5zY2FsZSgxIC8gbV9zY2FsZUZhY3Rvcik7CiAKLSAgICBpZiAoYXV0byogb3V0cHV0QnVm
ZmVyID0gZmlsdGVyLm91dHB1dCgpKQotICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCpvdXRwdXRCdWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3Qs
IG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAg
ICBGaWx0ZXJHZW9tZXRyeSBnZW9tZXRyeShtX3NvdXJjZUltYWdlUmVjdCwgbV9zY2FsZUZhY3Rv
ciwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OlVuaXRlKTsKKyAgICBkZXN0aW5hdGlv
bkNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKG1fc291cmNlSW1hZ2UuZ2V0KCksIG1fc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKIAotICAgIGZpbHRlci5jbGVhckludGVy
bWVkaWF0ZVJlc3VsdHMoKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUobV9zY2FsZUZh
Y3Rvcik7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJM
YXllckZpbHRlcnMgIiA8PCB0aGlzIDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QgZG9uZVxuIik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKaW5kZXgg
M2RhMTQwYTVjODhmMTU1MzE5MGI3MDAzZDdlNzg0NGM5MTk0NWJmNy4uOTJlZjJmZjlkODc2MjY2
NDgxY2RjNzA4ZDM5MTE0MGZjMzBiYmE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaApAQCAtMzcsOCArMzcsMTAgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnQ7CitjbGFzcyBDU1NGaWx0ZXI7CiBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKK2NsYXNzIEltYWdlQnVmZmVyOwog
CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnMgZmluYWwgOiBwcml2YXRlIENhY2hlZFNWR0RvY3Vt
ZW50Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY5LDE0ICs3MSwy
MCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKSBmaW5hbDsKICAgICB2b2lkIHJlc2V0
RGlydHlTb3VyY2VSZWN0KCkgeyBtX2RpcnR5U291cmNlUmVjdCA9IExheW91dFJlY3QoKTsgfQor
ICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgdm9pZCBhbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKIAogICAg
IFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+IG1faW50ZXJuYWxTVkdSZWZlcmVuY2VzOwogICAgIFZl
Y3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTVkdEb2N1bWVudD4+IG1fZXh0ZXJuYWxT
VkdSZWZlcmVuY2VzOwogCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwor
ICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKICAgICBSZWZQdHI8Q1NTRmlsdGVyPiBt
X2ZpbHRlcjsKKyAgICBmbG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9OwogICAgIExheW91dFJlY3Qg
bV9kaXJ0eVNvdXJjZVJlY3Q7CisgICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBm
YWxzZSB9OwogICAgIAogICAgIC8vIERhdGEgdXNlZCBwZXIgcGFpbnQKICAgICBMYXlvdXRQb2lu
dCBtX3BhaW50T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDUwNzhmOWNhZWZiNTA2Zjky
MjM3ZjJjZTdhYjZmNmU1OTIwODY3YjEuLmMyOWYyMTQwZGE1ZDAyYzc4NDlmZmM3YTdkMWY2YWRk
ZTlmZDA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE1NCw3ICsxNTQsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsCiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENv
b3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwogICAgIGlmICghY2xpcHBlckRhdGEuaXNWYWxpZEZv
ckdlb21ldHJ5KG9iamVjdEJvdW5kaW5nQm94LCBjbGlwcGVkQ29udGVudEJvdW5kcywgYWJzb2x1
dGVUcmFuc2Zvcm0pKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1
ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcg
aXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAg
ICAgICBhdXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNsaXBwZWRDb250ZW50Qm91bmRzLCBhYnNvbHV0ZVRyYW5zZm9ybSwgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0
KTsKKyAgICAgICAgYXV0byBtYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjbGlwcGVkQ29udGVudEJvdW5kcywgYWJzb2x1dGVUcmFuc2Zvcm0sIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKaW5kZXggMTk1MDlkOTcxOGFmZjExMGY4NDFlYzQ5NzZmOTdmYjFhOTM0ZDhh
NS4uNzVkMTM0NTcxYjIyZjcyNmE4OTM3MTA2YmIwNzA1Njg0NzAyOGY5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKQEAgLTM3LDYgKzM5LDggQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdFbGVt
ZW50VHlwZUhlbHBlcnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKKyNpbmNsdWRlICJTVkdG
aWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdD
b250ZXh0LmgiCkBAIC04Miw0NyArODYsMTEgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAg
IG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8g
Qm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1z
dGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJF
bGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmls
dGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVp
bGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291
cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVu
aXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRU
YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRv
JiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVu
dC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewot
ICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVj
dFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAg
ICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAg
ZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0
YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmls
dGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAg
ICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09M
T1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0Nv
bG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRl
cnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0g
ICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwot
ICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVy
U3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVz
b3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFT
U0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsKIAotICAgIExPRyhGaWx0
ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgYXBwbHlSZXNvdXJjZSByZW5kZXJlciAl
cCIsIHRoaXMsICZyZW5kZXJlcik7Ci0KICAgICBpZiAobV9yZW5kZXJlckZpbHRlckRhdGFNYXAu
Y29udGFpbnMoJnJlbmRlcmVyKSkgewogICAgICAgICBGaWx0ZXJEYXRhKiBmaWx0ZXJEYXRhID0g
bV9yZW5kZXJlckZpbHRlckRhdGFNYXAuZ2V0KCZyZW5kZXJlcik7CiAgICAgICAgIGlmIChmaWx0
ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpQYWludGluZ1NvdXJjZSB8fCBmaWx0ZXJEYXRh
LT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpBcHBseWluZykKQEAgLTEzMCwxMDEgKzk4LDU1IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQWxyZWFkeSBi
dWlsdCwgb3Igd2UncmUgaW4gYSBjeWNsZSwgb3Igd2UncmUgbWFya2VkIGZvciByZW1vdmFsLiBS
ZWdhcmRsZXNzLCBqdXN0IGRvIG5vdGhpbmcgbW9yZSBub3cuCiAgICAgfQogCisgICAgLy8gQnVp
bGQgdGhlIFNWR0ZpbHRlcgogICAgIGF1dG8gZmlsdGVyRGF0YSA9IG1ha2VVbmlxdWU8RmlsdGVy
RGF0YT4oKTsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSByZW5kZXJlci5vYmpl
Y3RCb3VuZGluZ0JveCgpOwotCi0gICAgZmlsdGVyRGF0YS0+Ym91bmRhcmllcyA9IFNWR0xlbmd0
aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1l
bnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KTsK
LSAgICBpZiAoZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5KCkpCisgICAgZmlsdGVyRGF0
YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxlbWVudCgpKTsKKyAgICBpZiAo
IWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1
dG8gdGFyZ2V0Qm91bmRpbmdCb3ggPSByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpOworICAg
IGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFu
Z2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJFbGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5m
aWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCk7CiAKLSAgICAvLyBEZXRlcm1pbmUgYWJz
b2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuIAotICAgIEFmZmluZVRyYW5z
Zm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRy
YW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKLSAgICBp
ZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBFbGltaW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBm
b3IgZmVUaWxlLgotICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0g
QWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0
ZVRyYW5zZm9ybS55U2NhbGUoKSwgMCwgMCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUg
Ym91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24uCisgICAgLy8g
Q2FsY3VsYXRlIHRoZSBzb3VyY2VJbWFnZVJlY3QKICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKICAgICBmaWx0ZXJEYXRhLT5kcmF3
aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uKTsKLQotICAgIC8vIENy
ZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94
TW9kZSA9IGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXIg
PSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9y
bSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyRGF0YS0+
Ym91bmRhcmllcywgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKTsKLQotICAgIC8vIENyZWF0ZSBh
bGwgcmVsZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMuCi0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9
IGJ1aWxkUHJpbWl0aXZlcygqZmlsdGVyRGF0YS0+ZmlsdGVyKTsKLSAgICBpZiAoIWZpbHRlckRh
dGEtPmJ1aWxkZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERldGVybWluZSBz
Y2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50ZXJtZWRpYXRlIEltYWdlQnVm
ZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRlclNpemUuCi0gICAgRmxvYXRS
ZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6
ZSBzY2FsZSgxLCAxKTsKLSAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcodGVtcFNv
dXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0gICAgdGVtcFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUu
d2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogCi0gICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBp
biBTVkdGaWx0ZXIuCi0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9u
KHNjYWxlKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhUb3RhbE9mRWZmZWN0SW5w
dXRzID0gMTAwOwotICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1
aWxkZXItPmxhc3RFZmZlY3QoKTsKLSAgICBpZiAoIWxhc3RFZmZlY3QgfHwgbGFzdEVmZmVjdC0+
dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElucHV0cykKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlVHJhbnNmb3JtCisgICAgYXV0byBhYnNvbHV0ZVRy
YW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKKyAgICBpZiAoIWFic29sdXRlVHJh
bnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsK
LQotICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwot
ICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7Ci0g
ICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUs
Ci0gICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0
b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNp
emUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVz
b2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlz
IGVtcHR5LCB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCi0gICAgLy8g
RXZlbiBpZiB0aGUgdGFyZ2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxs
IGhhdmUgdG8gZHJhdyB0aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJl
c291cmNlLgotICAgIGlmIChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmlzRW1wdHkoKSkgewot
ICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJl
cikpOwotICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwotICAgICAg
ICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRh
dGEpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAvLyBFbGltaW5hdGUgc2hl
YXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBw
cm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgorICAgIGF1dG8gYWJzb2x1
dGVTY2FsZSA9IEZsb2F0U2l6ZShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgYWJzb2x1dGVU
cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGZpbHRlckRhdGEtPnNjYWxlID0gRmlsdGVyR2VvbWV0
cnk6OmNhbGN1bGF0ZUZpbHRlclNjYWxlKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGFic29s
dXRlU2NhbGUpOwogCi0gICAgLy8gQ2hhbmdlIHRoZSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9u
IGFwcGxpZWQgdG8gdGhlIGZpbHRlcmVkIGVsZW1lbnQgdG8gcmVmbGVjdCB0aGUgcmVzb2x1dGlv
biBvZiB0aGUgZmlsdGVyLgotICAgIEFmZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm07
Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdo
dCgpKTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJG
cmVlQWJzb2x1dGVUcmFuc2Zvcm0pOworICAgIGF1dG8gc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zv
cm0gPSBBZmZpbmVUcmFuc2Zvcm0oZmlsdGVyRGF0YS0+c2NhbGUud2lkdGgoKSwgMCwgMCwgZmls
dGVyRGF0YS0+c2NhbGUuaGVpZ2h0KCksIDAsIDApOwogCi0gICAgYXV0byByZW5kZXJpbmdNb2Rl
ID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAj
aWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAgIGF1dG8g
Y29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpOwogI2Vsc2UK
ICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKICNl
bmRpZgotICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9y
bSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGhvc3RX
aW5kb3cgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkucm9vdCgpID8gcmVuZGVyZXIudmll
dygpLmZyYW1lVmlldygpLnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKworICAgIGF1
dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBj
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBob3N0V2luZG93KTsKICAg
ICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVy
RGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRD
b250ZXh0ID0gY29udGV4dDsKICAgICAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZy
ZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgCi0gICAgLy8gU2V0IHRoZSByZW5kZXJpbmcgbW9kZSBmcm9tIHRoZSBwYWdlJ3Mg
c2V0dGluZ3MuCi0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRl
cmluZ01vZGUpOwogCisgICAgLy8gU2V0IHRoZSB3b3JraW5nIEdyYXBoaWNDb250ZXh0IHRvIHRo
ZSBmaWx0ZXIgc291cmNlR3JhcGhpYwogICAgIEdyYXBoaWNzQ29udGV4dCYgc291cmNlR3JhcGhp
Y0NvbnRleHQgPSBzb3VyY2VHcmFwaGljLT5jb250ZXh0KCk7Ci0gIAorCiAgICAgZmlsdGVyRGF0
YS0+c291cmNlR3JhcGhpY0J1ZmZlciA9IFdURk1vdmUoc291cmNlR3JhcGhpYyk7CiAgICAgZmls
dGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKIAogICAgIGNvbnRleHQgPSAmc291cmNl
R3JhcGhpY0NvbnRleHQ7CiAKLSAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNv
bnRhaW5zKCZyZW5kZXJlcikpOwogICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVu
ZGVyZXIsIFdURk1vdmUoZmlsdGVyRGF0YSkpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTI2OSwzOCArMTkxLDIyIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBs
eVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEuYnVp
bGRlci0+bGFzdEVmZmVjdCgpOwotCi0gICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZpbHRlckRhdGEu
Ym91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWFsIGZpbHRlcmlu
ZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUKLSAgICAg
ICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJvY2Vzcy4gV2UganVzdCB0YWtlIHRoZSBzdG9yZWQg
ZmlsdGVyIHJlc3VsdCBvbiBhCi0gICAgICAgIC8vIHNlY29uZCBkcmF3aW5nLgotICAgICAgICBp
ZiAoZmlsdGVyRGF0YS5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKLSAgICAgICAgICAgIGZp
bHRlckRhdGEuZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKGZpbHRlckRhdGEuc291cmNl
R3JhcGhpY0J1ZmZlcikpOwotCi0gICAgICAgIC8vIEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEg
aXMganVzdCBidWlsdCAoZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgot
ICAgICAgICBpZiAoIWxhc3RFZmZlY3QtPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBmaWx0
ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QXBwbHlpbmc7Ci0gICAgICAgICAgICBsYXN0RWZm
ZWN0LT5hcHBseSgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3Vs
dElmTmVlZGVkKCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgfQorICAgIGlm
ICghZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSkgewogICAgICAgICBmaWx0ZXJEYXRh
LnN0YXRlID0gRmlsdGVyRGF0YTo6QnVpbHQ7CiAKLSAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gbGFzdEVmZmVjdC0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICAgICAgaWYgKHJl
c3VsdEltYWdlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5z
aGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNm
b3JtKCkpKTsKKyAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRh
LnNjYWxlLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLnNjYWxlLmhlaWdodCgpKSk7CiAKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZp
bHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKCpyZXN1bHRJbWFnZSwgbGFzdEVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IHRhcmdldEJvdW5kaW5nU2l6
ZTsKKyAgICAgICAgaWYgKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpID09IFNWR1Vu
aXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKKyAgICAgICAgICAgIHRh
cmdldEJvdW5kaW5nU2l6ZSA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCkuc2l6ZSgpOwog
Ci0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZmlsdGVyRGF0YS5zb3VyY2VH
cmFwaGljQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBmaWx0ZXJFZmZlY3RCb3VuZGFy
eVNldHMgPSBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhm
aWx0ZXJFbGVtZW50KCksIHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCkpOworICAgICAgICBG
aWx0ZXJHZW9tZXRyeSBnZW9tZXRyeShmaWx0ZXJEYXRhLmJvdW5kYXJpZXMsIGZpbHRlckRhdGEu
c2NhbGUsIHRhcmdldEJvdW5kaW5nU2l6ZSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RCb3VuZGFyeVNl
dHMpKTsKKworICAgICAgICBjb250ZXh0LT5kcmF3RmlsdGVySW1hZ2VCdWZmZXIoZmlsdGVyRGF0
YS5zb3VyY2VHcmFwaGljQnVmZmVyLmdldCgpLCBmaWx0ZXJEYXRhLmRyYXdpbmdSZWdpb24sICpm
aWx0ZXJEYXRhLmZpbHRlciwgZ2VvbWV0cnkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9z
dEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRh
dGEuc2NhbGUpOworICAgIH0KIH0KIAogRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
OjpyZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQpAQCAtMzA4
LDI3ICsyMTQsMTMgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZXNvdXJj
ZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWMKICAgICByZXR1cm4gU1ZHTGVu
Z3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxl
bWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgb2JqZWN0Lm9iamVjdEJvdW5k
aW5nQm94KCkpOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVB
dHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKQogewotICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogcHJpbWl0dmUgPSBzdGF0aWNf
Y2FzdDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqPihvYmplY3QtPm5vZGUo
KSk7Ci0KLSAgICBMT0coRmlsdGVycywgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICVwIHByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQgcmVuZGVyZXIgJXAiLCB0aGlzLCBvYmplY3QpOwotCiAgICAg
Zm9yIChjb25zdCBhdXRvJiBvYmplY3RGaWx0ZXJEYXRhUGFpciA6IG1fcmVuZGVyZXJGaWx0ZXJE
YXRhTWFwKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGZpbHRlckRhdGEgPSBvYmplY3RGaWx0ZXJE
YXRhUGFpci52YWx1ZTsKICAgICAgICAgaWYgKGZpbHRlckRhdGEtPnN0YXRlICE9IEZpbHRlckRh
dGE6OkJ1aWx0KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgU1ZHRmlsdGVyQnVp
bGRlciogYnVpbGRlciA9IGZpbHRlckRhdGEtPmJ1aWxkZXIuZ2V0KCk7Ci0gICAgICAgIEZpbHRl
ckVmZmVjdCogZWZmZWN0ID0gYnVpbGRlci0+ZWZmZWN0QnlSZW5kZXJlcihvYmplY3QpOwotICAg
ICAgICBpZiAoIWVmZmVjdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBTaW5j
ZSBhbGwgZWZmZWN0cyBzaGFyZXMgdGhlIHNhbWUgYXR0cmlidXRlIHZhbHVlLCBhbGwKLSAgICAg
ICAgLy8gb3Igbm9uZSBvZiB0aGVtIHdpbGwgYmUgY2hhbmdlZC4KLSAgICAgICAgaWYgKCFwcmlt
aXR2ZS0+c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKGVmZmVjdCwgYXR0cmlidXRlKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKGVm
ZmVjdCk7Ci0KICAgICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24gdGhlIHNjcmVlbi4KICAg
ICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbigqb2JqZWN0RmlsdGVyRGF0YVBhaXIua2V5
LCBSZXBhaW50SW52YWxpZGF0aW9uKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggOGNlMGM3YWJj
MTQzYmRiNjUzODUwYzkzZTMyOTJhYzlkYTQ5YmJjNy4uOGMwZjBmYzEzNjJmOWYwZTA0NDYyODVi
ZTk5NzZkMjMxMWI0M2E3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaApAQCAtMjMsMTAgKzIzLDkgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAiU1ZH
RmlsdGVyLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR1Vu
aXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC00MywxMSArNDIsOSBAQCBwdWJsaWM6CiAKICAgICBGaWx0ZXJEYXRhKCkgPSBk
ZWZhdWx0OwogCi0gICAgUmVmUHRyPFNWR0ZpbHRlcj4gZmlsdGVyOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyOworICAgIFJlZlB0cjxGaWx0ZXI+IGZpbHRl
cjsKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQgeyBudWxscHRyIH07Ci0gICAgQWZmaW5lVHJhbnNm
b3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBib3VuZGFyaWVz
OwogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uOwogICAgIEZsb2F0U2l6ZSBzY2FsZTsKQEAg
LTcyLDggKzY5LDYgQEAgcHVibGljOgogCiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdC
b3goY29uc3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYpIGNvbnN0OwotCiAg
ICAgaW5saW5lIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgZmlsdGVyVW5pdHMoKSBjb25zdDsK
ICAgICBpbmxpbmUgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cygpIGNv
bnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCmluZGV4IGFkZDcxYTY2Mzdh
YjI0NWE5Y2M0NDJhZTBiZjNjOTg3MGU0YzkxYmMuLmU0Mjc3NDJmNTFmOTIzYmQwYzdjZGQ5OTNj
NzRhNmE1OWM1Y2Q4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCkBAIC01
NSwyMiArNTUsMTggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnMKIHsKICAgICBSZW5kZXJTVkdI
aWRkZW5Db250YWluZXI6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAotICAgIGF1
dG8qIGZpbHRlciA9IHBhcmVudCgpOwotICAgIGlmICghZmlsdGVyKQotICAgICAgICByZXR1cm47
Ci0KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2U6OkVxdWFsIHx8ICFvbGRTdHlsZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0g
c3R5bGUoKS5zdmdTdHlsZSgpOwogICAgIGlmIChpczxTVkdGRUZsb29kRWxlbWVudD4oZmlsdGVy
UHJpbWl0aXZlRWxlbWVudCgpKSkgewogICAgICAgICBpZiAobmV3U3R5bGUuZmxvb2RDb2xvcigp
ICE9IG9sZFN0eWxlLT5zdmdTdHlsZSgpLmZsb29kQ29sb3IoKSkKLSAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPigqZmlsdGVyKS5wcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKHRoaXMsIFNWR05hbWVzOjpmbG9vZF9jb2xvckF0dHIpOworICAgICAgICAgICAgZmls
dGVyUHJpbWl0aXZlRWxlbWVudCgpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoU1ZHTmFtZXM6
OmZsb29kX2NvbG9yQXR0cik7CiAgICAgICAgIGlmIChuZXdTdHlsZS5mbG9vZE9wYWNpdHkoKSAh
PSBvbGRTdHlsZS0+c3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSkKLSAgICAgICAgICAgIGRvd25j
YXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPigqZmlsdGVyKS5wcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKHRoaXMsIFNWR05hbWVzOjpmbG9vZF9vcGFjaXR5QXR0cik7CisgICAgICAgICAgICBm
aWx0ZXJQcmltaXRpdmVFbGVtZW50KCkucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChTVkdOYW1l
czo6Zmxvb2Rfb3BhY2l0eUF0dHIpOwogICAgIH0gZWxzZSBpZiAoaXM8U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50PihmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkpIHx8IGlzPFNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQ+KGZpbHRlclByaW1pdGl2ZUVsZW1lbnQoKSkpIHsKICAgICAgICAg
aWYgKG5ld1N0eWxlLmxpZ2h0aW5nQ29sb3IoKSAhPSBvbGRTdHlsZS0+c3ZnU3R5bGUoKS5saWdo
dGluZ0NvbG9yKCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCh0aGlzLCBTVkdOYW1lczo6bGln
aHRpbmdfY29sb3JBdHRyKTsKKyAgICAgICAgICAgIGZpbHRlclByaW1pdGl2ZUVsZW1lbnQoKS5w
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCBiMjM4Nzg2MmRkZjIyMjE3MWU0YTVkOWMy
ZGY1NWY2Yzk4MzliYjYyLi42YTUzYWZhMWViZDE0ZjcwMzEzOTY3NTgwNGZmN2IyODVjN2U1MmJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZQogI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVm
ZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBp
dCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAg
ICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0
YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVw
YWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBkZTQ5MzI4MjYzZDA2MmEy
MzViY2QyZjQ2NjdlZWYwOWMxMmViM2IzLi42Zjc2ZjIwYzljOWRjZGE1MjEyMDUzMjc0MDZhOGVj
NDFhOTMwZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJTVkdSZW5k
ZXJUcmVlQXNUZXh0LmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKQEAgLTUyLDYg
KzUzLDcgQEAKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxl
bWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94SW5saW5lcy5oIgog
I2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIK
QEAgLTQzMSwxMyArNDMzLDkgQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYKICAgICAgICAgd3Jp
dGVOYW1lVmFsdWVQYWlyKHRzLCAicHJpbWl0aXZlVW5pdHMiLCBmaWx0ZXIucHJpbWl0aXZlVW5p
dHMoKSk7CiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vo
b2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVpbGRlci4KLSAgICAgICAgRmxv
YXRSZWN0IGR1bW15UmVjdDsKLSAgICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6
Y3JlYXRlKEFmZmluZVRyYW5zZm9ybSgpLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0
LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8gYnVpbGRlciA9IGZpbHRlci5idWlsZFByaW1pdGl2
ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CisgICAgICAgIGlmIChSZWZQdHI8RmlsdGVyPiBkdW1t
eUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0ZXJFbGVtZW50KCkpKSB7CiAg
ICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0KLSAg
ICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZm
ZWN0KCkpCi0gICAgICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cyk7CisgICAgICAgICAgICBkdW1teUZpbHRlci0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cyk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNlLnJlc291cmNlVHlwZSgpID09
IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKICAgICAgICAgY29uc3QgYXV0byYgY2xpcHBlciA9IHN0
YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlciY+KHJlc291cmNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
Y3BwCmluZGV4IGZhYmVlMzA1YzczMThkNzI3MzI5M2Q1NjJiNGRmZTU3YzYwZjc4YmQuLjM5YTQ4
ZGRlOGM5OGQ3YzBlZTc0OGQ0Mzk3MTI4ZGZjNzFiN2UzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMjI4LDcg
KzIyOCw3IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVU
cmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0CiAgICAgcmV0dXJuIGFic29sdXRlVHJh
bnNmb3JtOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKIHsKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGNhbGN1bGF0
ZUltYWdlQnVmZmVyUmVjdCh0YXJnZXRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgLy8g
RG9uJ3QgY3JlYXRlIGVtcHR5IEltYWdlQnVmZmVycy4KQEAgLTIzOCwxMiArMjM4LDcgQEAgUmVm
UHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIHRhcmcKICAgICBGbG9hdFNpemUgc2NhbGU7CiAgICAgRmxvYXRTaXpl
IGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHBhaW50UmVjdC5zaXplKCks
IHNjYWxlKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCwgMSwg
Y29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGNvbnRleHQpOwotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotI2VuZGlmCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIFNob3VsZFVzZURpc3BsYXlMaXN0OjpObywgUmVu
ZGVyaW5nUHVycG9zZTo6RE9NLCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgsIGhv
c3RXaW5kb3cpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5oCmluZGV4IDU5NjU5N2JlMTI0N2E5NmE2MDRhY2NmNDU3ZTA5MjlmZDBmNTBhMGUuLmMz
OWZiMTAyZWJkMWY2OWM4MWI0MjdlNzgxM2YzYThkODRiMzlhZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCkBAIC02MCw3ICs2
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVy
RWxlbWVudCYsIFBhaW50SW5mbyYsIE5lZWRzR3JhcGhpY3NDb250ZXh0U2F2ZSA9IERvbnRTYXZl
R3JhcGhpY3NDb250ZXh0KTsKICAgICBib29sIGlzUmVuZGVyaW5nUHJlcGFyZWQoKSBjb25zdCB7
IHJldHVybiBtX3JlbmRlcmluZ0ZsYWdzICYgUmVuZGVyaW5nUHJlcGFyZWQ7IH0KIAotICAgIHN0
YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKICAgICBzdGF0
aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZFJlY3QsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBu
dWxscHRyKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbmRlclN1YnRyZWVUb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JiwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3OTlm
MTE3NGNmZTA0YjgyMmQ2ZDA2NDMxZjY4Ni4uMmVmMDdlNGQ4ZGExZmJkNzg4MTNkYmYxMWU1Nzkx
MzA5NzIzZGJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCkBA
IC03MywxNiArNzMsNiBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaQogICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwog
fQogCi1ib29sIFNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAg
IEZFQmxlbmQqIGJsZW5kID0gc3RhdGljX2Nhc3Q8RkVCbGVuZCo+KGVmZmVjdCk7Ci0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjptb2RlQXR0cikKLSAgICAgICAgcmV0dXJuIGJsZW5kLT5z
ZXRCbGVuZE1vZGUobW9kZSgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Om1vZGVBdHRyKSB7CkBAIC0xMDAsMjAgKzkwLDI3IEBAIHZvaWQgU1ZHRkVC
bGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVC
bGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4yKCkpOworICAgIEZFQmxlbmQmIGJsZW5kID0gZG93bmNhc3Q8RkVCbGVuZD4oZWZmZWN0
KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1vZGVBdHRyKQorICAgICAgICBibGVu
ZC5zZXRCbGVuZE1vZGUobW9kZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4x
KCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjIoKSk7CiAKICAg
ICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9kZSgpKTsKLSAgICBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0g
ICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBw
ZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICBy
ZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJF
ZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFQmxlbmQ6OmNyZWF0ZShtb2RlKCkp
KTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVs
bCgpLCBpbnB1dDIucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQmxlbmRFbGVtZW50LmgKaW5kZXggOTAzN2NiMTIxZjkzNjdiNzg4ZDkyMTZlMGI5NDFm
YzhiMDZkZWM2Ni4uNjUwODgxZmUyMjZlNWRhZmI1ODM3ZTkxYzQyMGM1NzE0MjU1YzIxNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKQEAgLTY5LDggKzY5LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBv
dmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhp
cykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3Bw
CmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMuLmY2MzA5OWVj
OWFmNDVmMTc2ZTEwNTYwZDlmODY1NGM4NzFjNjFlYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtNzEsMTggKzcxLDYgQEAgdm9pZCBT
VkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXQKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRUNvbG9yTWF0cml4KiBj
b2xvck1hdHJpeCA9IHN0YXRpY19jYXN0PEZFQ29sb3JNYXRyaXgqPihlZmZlY3QpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCi0gICAgICAgIHJldHVybiBjb2xvck1h
dHJpeC0+c2V0VHlwZSh0eXBlKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmFs
dWVzQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbG9yTWF0cml4LT5zZXRWYWx1ZXModmFsdWVzKCkp
OwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2
b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
dHlwZUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHsKQEAgLTEwMCwx
MyArODgsMjYgQEAgdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lk
IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZp
bHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAg
IGF1dG8mIGNvbG9yTWF0cml4ID0gZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZmZWN0KTsKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQorICAgICAgICBjb2xvck1hdHJp
eC5zZXRDb2xvck1hdHJpeFR5cGUodHlwZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICAgICAgY29sb3JNYXRyaXguc2V0VmFsdWVzKHZhbHVl
cygpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCitzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBT
VkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikK
K3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlm
ICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAorICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZm
ZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OworICAgIAogICAgIFZlY3Rvcjxm
bG9hdD4gZmlsdGVyVmFsdWVzOwogICAgIENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlID0gdHlw
ZSgpOwogCkBAIC0xMzUsMTUgKzEzNiwxNSBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbAogICAg
ICAgICBpZiAoKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiBzaXpl
ICE9IDIwKQogICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURSAmJiBzaXplICE9IDEpCiAgICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUgJiYgc2l6ZSAhPSAxKSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAg
IGZpbHRlclZhbHVlcyA9IHZhbHVlcygpOwogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9G
aXQoKTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShm
aWx0ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBzZXRG
aWx0ZXJFZmZlY3QoRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdURk1vdmUoZmls
dGVyVmFsdWVzKSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJl
bGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCmluZGV4IDdhYjRhYTQxODFl
N2FiMTk4YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLjhmM2E4ODE1NDg1ZTJiMzQwY2VjZTdhODM4
Y2UwZTkwNzMxMDY2MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5oCkBAIC04NSw4ICs4NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAppbmRleCA5MGE1NWI3ZWZmZjdhM2ZlNjA2YTllMDU3
OWE3NmVkZTlmOTY4MDExLi45ZDQ4NDcxMTAwZGMyOTU1NTMxZDVlZmM3MzUxMmQzZjU1NTNjMDgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5jcHAKQEAgLTYzLDEyICs2MywxNCBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjbwog
ICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUo
bmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmls
dGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIAorICAgIGF1dG8gaW5wdXQxID0g
YnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGhhc0ZpbHRlckVm
ZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFz
ZU5vbk51bGwoKSB9IH07CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdyZWVuOwpAQCAtODUsMTAgKzg3LDEwIEBAIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0CiAgICAgICAgIGVsc2UgaWYgKGlzPFNWR0ZFRnVuY0FFbGVt
ZW50PihjaGlsZCkpCiAgICAgICAgICAgICBhbHBoYSA9IGRvd25jYXN0PFNWR0ZFRnVuY0FFbGVt
ZW50PihjaGlsZCkudHJhbnNmZXJGdW5jdGlvbigpOwogICAgIH0KLSAgICAKLSAgICBhdXRvIGVm
ZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShmaWx0ZXIsIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAg
ICByZXR1cm4gZWZmZWN0OworCisgICAgc2V0RmlsdGVyRWZmZWN0KEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNyZWF0ZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOworCisgICAgcmV0dXJuIHsgZmls
dGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCmlu
ZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZlOGI5OTNhNGRkNTQ4NjMuLjY1ZjY5NjExMGMz
MWEyN2JiNmRjZWEzMTEzMDQwZmM5MTA2NjQzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCkBAIC00Myw3ICs0Myw3IEBAIHBy
aXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJpYnV0ZUNoYW5nZWQgbWlzc2luZy4KICAgICB2
b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5n
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZm
ZTIwNWFjOTgyMzUuLmJkMDQwMDk2MDQ0NWVkNzI4ZGExYjRkYzZlOTE5YTMyZDllMTY3MmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC00MCw3
ICs0MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lCiAgICAgc3RkOjpjYWxsX29uY2Uob25j
ZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxT
VkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2luMT4oKTsKICAgICAg
ICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW4yQXR0ciwg
JlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjI+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0
cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9zdmdPcGVyYXRvcj4oKTsKKyAg
ICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0
b3JBdHRyLCBGRUNvbXBvc2l0ZU9wZXJhdG9yLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2Nv
bXBvc2l0ZU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclBy
b3BlcnR5PFNWR05hbWVzOjprMUF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazE+KCk7
CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Omsy
QXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMj4oKTsKICAgICAgICAgUHJvcGVydHlS
ZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azNBdHRyLCAmU1ZHRkVDb21wb3Np
dGVFbGVtZW50OjptX2szPigpOwpAQCAtNTYsOSArNTYsOSBAQCBSZWY8U1ZHRkVDb21wb3NpdGVF
bGVtZW50PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChu
YW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBGRUNvbXBvc2l0ZU9wZXJhdG9y
IHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6
ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKLSAgICAg
ICAgICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlT3BlcmF0b3It
PnNldEJhc2VWYWxJbnRlcm5hbDxGRUNvbXBvc2l0ZU9wZXJhdG9yPihwcm9wZXJ0eVZhbHVlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTUsMjUgKzk1LDYgQEAgdm9pZCBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b20KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBh
cnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVDb21wb3NpdGUqIGNvbXBvc2l0ZSA9
IHN0YXRpY19jYXN0PEZFQ29tcG9zaXRlKj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0T3Bl
cmF0aW9uKHN2Z09wZXJhdG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFB
dHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLMShrMSgpKTsKLSAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0
SzIoazIoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprM0F0dHIpCi0gICAgICAg
IHJldHVybiBjb21wb3NpdGUtPnNldEszKGszKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6azRBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLNChrNCgpKTsKLQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotCiB2b2lk
IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJh
dG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjprMkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0ciB8fCBhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azRBdHRyKSB7CkBAIC0xMzEsMjAgKzExMiwzNSBAQCB2b2lkIFNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxk
ZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmZp
bHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAgICAKKyAgICBhdXRvJiBjb21wb3NpdGUgPSBkb3du
Y2FzdDxGRUNvbXBvc2l0ZT4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
Om9wZXJhdG9yQXR0cikKKyAgICAgICAgY29tcG9zaXRlLnNldENvbXBvc2l0ZU9wZXJhdG9yKGNv
bXBvc2l0ZU9wZXJhdG9yKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpr
MUF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRLMShrMSgpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6azJBdHRyKQorICAgICAgICBjb21wb3NpdGUuc2V0SzIoazIoKSk7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmszQXR0cikKKyAgICAgICAgY29t
cG9zaXRlLnNldEszKGszKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpr
NEF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRLNChrNCgpKTsKKyAgICBlbHNlCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWls
ZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRF
ZmZlY3QoaW4yKCkpOworCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmls
dGVyLCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKTsKLSAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAg
aW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5k
KGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1
cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZl
Y3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFQ29tcG9zaXRlOjpjcmVhdGUoY29tcG9z
aXRlT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSkpOworICAgIAorICAgIHJldHVy
biB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpLCBpbnB1dDIucmVs
ZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3OTcy
MmY2Li5lZmJjZjVkMTM2MDI5Yzc1N2NhMWJhODFkZTk4ODA0MDRmNGE3M2IzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCkBAIC0yNywxNSArMjcsMTUgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8PgotaW5saW5lIHVuc2lnbmVkIFNWR0lE
TEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZh
bHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQoraW5saW5l
IHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RF
eHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJ
QzsgfQogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3Bl
cmF0aW9uVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0
b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI7IH0KIAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJp
bmcoQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJp
bmcoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcikKICAgICB7Ci0gICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBvc2l0ZU9wZXJhdG9yKSB7CiAg
ICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVI6CkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVP
cGVyYXRpb25UeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBDb21wb3NpdGVPcGVyYXRpb25UeXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICBzdGF0aWMgRkVDb21wb3NpdGVPcGVyYXRvciBmcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0gIm92ZXIiKQogICAg
ICAgICAgICAgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI7CkBAIC04NSw3ICs4NSw3
IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbjEoKSBjb25zdCB7IHJldHVybiBtX2luMS0+Y3Vy
cmVudFZhbHVlKCk7IH0KICAgICBTdHJpbmcgaW4yKCkgY29uc3QgeyByZXR1cm4gbV9pbjItPmN1
cnJlbnRWYWx1ZSgpOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBzdmdPcGVyYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxDb21wb3NpdGVPcGVy
YXRpb25UeXBlPigpOyB9CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxGRUNv
bXBvc2l0ZU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgazEoKSBjb25zdCB7IHJldHVybiBtX2sx
LT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IGsyKCkgY29uc3QgeyByZXR1cm4gbV9rMi0+
Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBrMygpIGNvbnN0IHsgcmV0dXJuIG1fazMtPmN1
cnJlbnRWYWx1ZSgpOyB9CkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIFNWR0FuaW1h
dGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9CiAgICAgU1ZHQW5pbWF0
ZWRTdHJpbmcmIGluMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjI7IH0KLSAgICBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRv
cjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIGNvbXBvc2l0ZU9wZXJhdG9yQW5pbWF0
ZWQoKSB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXImIGsxQW5pbWF0ZWQoKSB7IHJldHVybiBtX2sxOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXIm
IGsyQW5pbWF0ZWQoKSB7IHJldHVybiBtX2syOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIGsz
QW5pbWF0ZWQoKSB7IHJldHVybiBtX2szOyB9CkBAIC0xMDgsMTMgKzEwOCwxMyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVw
bGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmlt
YXRlZFN0cmluZz4gbV9pbjIgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0g
ICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsK
KyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9jb21wb3NpdGVPcGVyYXRvciB7IFNW
R0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9P
VkVSKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMSB7IFNWR0FuaW1hdGVkTnVt
YmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazIgeyBT
VkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX2szIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAppbmRleCA3OGU0MDIwN2Y1YjAy
ZjY3MGYwNDBiMjkzNzVlYWQ3YzJiNDUyZGUwLi5mYzY3MGM5ZWM1NmM0MWMxMDkyODU0ODQyN2M1
ZjZhOGUxODViMWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmlkbApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0Fu
aW1hdGVkU3RyaW5nICAgICAgaW4xOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRl
ZFN0cmluZyAgICAgIGluMjsKLSAgICBbSW1wbGVtZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9u
bHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxl
bWVudGVkQXM9Y29tcG9zaXRlT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRl
ZE51bWJlciAgICAgIGsxOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJl
ciAgICAgIGsyOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAg
IGszOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHAKaW5kZXggZjc1MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uNjQ4
MjMyMTA1YjlmZTRjMzc1M2JiODQ5MTc5NTZiZTQyMGY2OTcxMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xMzgsMjggKzEz
OCw2IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wg
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAg
RkVDb252b2x2ZU1hdHJpeCogY29udm9sdmVNYXRyaXggPSBzdGF0aWNfY2FzdDxGRUNvbnZvbHZl
TWF0cml4Kj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2Rl
QXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRFZGdlTW9kZShlZGdlTW9k
ZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKQotICAgICAg
ICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldERpdmlzb3IoZGl2aXNvcigpKTsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJpYXNBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVN
YXRyaXgtPnNldEJpYXMoYmlhcygpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRh
cmdldFhBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldFRhcmdldE9mZnNl
dChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFkoKSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6dGFyZ2V0WUF0dHIpCi0gICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0
VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdldFgoKSwgdGFyZ2V0WSgpKSk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKLSAgICAgICAgcmV0dXJu
IGNvbnZvbHZlTWF0cml4LT5zZXRLZXJuZWxVbml0TGVuZ3RoKEZsb2F0UG9pbnQoa2VybmVsVW5p
dExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCi0gICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJp
eC0+c2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFscGhhKCkpOwotCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpzZXRPcmRlcihmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIG1fb3JkZXJYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7CkBAIC0xOTEsMTMgKzE2OSwzNiBAQCB2b2lkIFNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3Qs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmls
dGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byYgY29udm9sdmVNYXRy
aXggPSBkb3duY2FzdDxGRUNvbnZvbHZlTWF0cml4PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRF
ZGdlTW9kZShlZGdlTW9kZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
ZGl2aXNvckF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNldERpdmlzb3IoZGl2aXNvcigp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Ymlhc0F0dHIpCisgICAgICAg
IGNvbnZvbHZlTWF0cml4LnNldEJpYXMoYmlhcygpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6dGFyZ2V0WEF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNldFRhcmdl
dE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFkoKSkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cikKKyAgICAgICAgY29udm9sdmVNYXRyaXgu
c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdldFgoKSwgdGFyZ2V0WSgpKSk7CisgICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKQorICAgICAg
ICBjb252b2x2ZU1hdHJpeC5zZXRLZXJuZWxVbml0TGVuZ3RoKEZsb2F0UG9pbnQoa2VybmVsVW5p
dExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhhQXR0cikKKyAgICAgICAgY29udm9sdmVNYXRyaXgu
c2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFscGhhKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVp
bGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCisgICAgaWYgKGhhc0ZpbHRlckVmZmVj
dCgpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5v
bk51bGwoKSB9IH07CisgICAgCiAgICAgaW50IG9yZGVyWFZhbHVlID0gb3JkZXJYKCk7CiAgICAg
aW50IG9yZGVyWVZhbHVlID0gb3JkZXJZKCk7CiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6Om9yZGVyQXR0cikpIHsKQEAgLTIwNiwyMiArMjA3LDIyIEBAIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCCiAgICAgfQogICAgIC8vIFNwZWMgc2F5cyBvcmRlciBtdXN0IGJlID4gMC4gQmFpbCBp
ZiBpdCBpcyBub3QuCiAgICAgaWYgKG9yZGVyWFZhbHVlIDwgMSB8fCBvcmRlcllWYWx1ZSA8IDEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIGF1dG8m
IGtlcm5lbE1hdHJpeCA9IHRoaXMtPmtlcm5lbE1hdHJpeCgpOwogICAgIGludCBrZXJuZWxNYXRy
aXhTaXplID0ga2VybmVsTWF0cml4Lml0ZW1zKCkuc2l6ZSgpOwogICAgIC8vIFRoZSBzcGVjIHNh
eXMgdGhpcyBpcyBhIHJlcXVpcmVtZW50LCBhbmQgc2hvdWxkIGJhaWwgb3V0IGlmIGZhaWxzCiAg
ICAgaWYgKG9yZGVyWFZhbHVlICogb3JkZXJZVmFsdWUgIT0ga2VybmVsTWF0cml4U2l6ZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpbnQgdGFy
Z2V0WFZhbHVlID0gdGFyZ2V0WCgpOwogICAgIGludCB0YXJnZXRZVmFsdWUgPSB0YXJnZXRZKCk7
CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpICYmICh0YXJnZXRY
VmFsdWUgPCAwIHx8IHRhcmdldFhWYWx1ZSA+PSBvcmRlclhWYWx1ZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhl
IGRlZmF1bHQgdmFsdWUgaXM6IHRhcmdldFggPSBmbG9vciAoIG9yZGVyWCAvIDIgKSkKICAgICBp
ZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WEF0dHIpKQogICAgICAgICB0YXJnZXRY
VmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlclhWYWx1ZSAvIDIpKTsKICAgICBp
ZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0cikgJiYgKHRhcmdldFlWYWx1ZSA8
IDAgfHwgdGFyZ2V0WVZhbHVlID49IG9yZGVyWVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVs
dCB2YWx1ZSBpczogdGFyZ2V0WSA9IGZsb29yICggb3JkZXJZIC8gMiApKQogICAgIGlmICghaGFz
QXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0cikpCiAgICAgICAgIHRhcmdldFlWYWx1ZSA9
IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVyWVZhbHVlIC8gMikpOwpAQCAtMjM0LDExICsy
MzUsMTEgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAga2VybmVsVW5pdExlbmd0
aFlWYWx1ZSA9IDE7CiAgICAgfQogICAgIGlmIChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlIDw9IDAg
fHwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA8PSAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZsb2F0IGRpdmlzb3JWYWx1ZSA9IGRpdmlzb3Io
KTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29yQXR0cikgJiYgIWRpdmlz
b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKSkgewogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGtlcm5lbE1hdHJpeFNpemU7ICsraSkKICAgICAgICAgICAgIGRp
dmlzb3JWYWx1ZSArPSBrZXJuZWxNYXRyaXguaXRlbXMoKVtpXS0+dmFsdWUoKTsKQEAgLTI0Niw5
ICsyNDcsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAgICAgIGRpdmlzb3JW
YWx1ZSA9IDE7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4Ojpj
cmVhdGUoZmlsdGVyLCBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JW
YWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VN
b2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0
aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIGF1dG8g
a2VybmVsU2l6ZSA9IEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKTsKKyAgICBhdXRv
IHRhcmdldE9mZnNldCA9IEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKTsKKyAg
ICBhdXRvIGtlcm5lbFVuaXRMZW5ndGggPSBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFs
dWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpOworICAgIHNldEZpbHRlckVmZmVjdChGRUNvbnZv
bHZlTWF0cml4OjpjcmVhdGUoa2VybmVsU2l6ZSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIHRhcmdl
dE9mZnNldCwgZWRnZU1vZGUoKSwga2VybmVsVW5pdExlbmd0aCwgcHJlc2VydmVBbHBoYSgpLCBr
ZXJuZWxNYXRyaXgpKTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5y
ZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMw
MDI2OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkwNDliMzM5Li4wZTA4ZTI5YWMzMWMxNThiMGRk
MGM3YmI2ZDViZTJiN2MxNDRjMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAyLDggKzEwMiw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmlu
ZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZl
Y3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5
UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBT
VkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDE1MmM5ODVmZDhlOTVh
ZTk5NTdlNmUyMWQ2YmYyYTEwYzQ1NGJkZDUuLjVlNTg4ZmU5NzA2MjJhODFhZWZkMzFiZTAzM2Fl
ZDk2N2NhNDUyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuY3BwCkBAIC04MSw1MCArODEsNiBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29ucwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRURpZmZ1c2VMaWdodGluZyogZGlmZnVz
ZUxpZ2h0aW5nID0gc3RhdGljX2Nhc3Q8RkVEaWZmdXNlTGlnaHRpbmcqPihlZmZlY3QpOwotCi0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsKLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7Ci0gICAgICAgIEFT
U0VSVChyZW5kZXJlcik7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCku
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5s
aWdodGluZ0NvbG9yKCkpOwotICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRMaWdo
dGluZ0NvbG9yKGNvbG9yKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpz
dXJmYWNlU2NhbGVBdHRyKQotICAgICAgICByZXR1cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJm
YWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
ZGlmZnVzZUNvbnN0YW50QXR0cikKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0
RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCgpKTsKLQotICAgIGF1dG8mIGxpZ2h0U291
cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRTb3Vy
Y2UoKSk7Ci0gICAgY29uc3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZF
TGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwotICAgIEFTU0VSVChsaWdodEVs
ZW1lbnQpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cikKLSAg
ICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEF6aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRo
KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKLSAgICAg
ICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEVsZXZhdGlvbihsaWdodEVsZW1lbnQtPmVsZXZhdGlv
bigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICByZXR1
cm4gbGlnaHRTb3VyY2Uuc2V0WChsaWdodEVsZW1lbnQtPngoKSk7Ci0gICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFkobGln
aHRFbGVtZW50LT55KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCi0g
ICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRaKGxpZ2h0RWxlbWVudC0+eigpKTsKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCi0gICAgICAgIHJldHVybiBs
aWdodFNvdXJjZS5zZXRQb2ludHNBdFgobGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQotICAgICAgICByZXR1cm4g
bGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRZKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRZKCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKLSAgICAgICAgcmV0dXJu
IGxpZ2h0U291cmNlLnNldFBvaW50c0F0WihsaWdodEVsZW1lbnQtPnBvaW50c0F0WigpKTsKLSAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQotICAgICAg
ICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0U3BlY3VsYXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNw
ZWN1bGFyRXhwb25lbnQoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1pdGlu
Z0NvbmVBbmdsZUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRMaW1pdGluZ0Nv
bmVBbmdsZShsaWdodEVsZW1lbnQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpOwotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2Fs
ZUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsKQEAgLTE1MSwyOCArMTA3LDgwIEBAIHZvaWQg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFNWR0ZFTGlnaHRFCiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0Cit2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKKyAgICBhdXRvJiBkaWZmdXNlTGlnaHRpbmcgPSBkb3duY2FzdDxGRURpZmZ1
c2VMaWdodGluZz4oZWZmZWN0KTsKKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGln
aHRpbmdfY29sb3JBdHRyKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQocmVuZGVyZXIpOworICAgICAgICBDb2xvciBj
b2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKKyAgICAgICAgZGlmZnVz
ZUxpZ2h0aW5nLnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikgeworICAgICAgICBk
aWZmdXNlTGlnaHRpbmcuc2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1
c2VDb25zdGFudEF0dHIpIHsKKyAgICAgICAgZGlmZnVzZUxpZ2h0aW5nLnNldERpZmZ1c2VDb25z
dGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBh
dXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRp
bmcuc291cmNlKCkpOworICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQg
PSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKKyAgICBBU1NFUlQo
bGlnaHRFbGVtZW50KTsKKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0
dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldEF6aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRo
KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQor
ICAgICAgICBsaWdodFNvdXJjZS5zZXRFbGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24o
KSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICBs
aWdodFNvdXJjZS5zZXRYKGxpZ2h0RWxlbWVudC0+eCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVt
ZW50LT55KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAg
ICAgICAgbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVsZW1lbnQtPnooKSk7CisgICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNl
LnNldFBvaW50c0F0WChsaWdodEVsZW1lbnQtPnBvaW50c0F0WCgpKTsKKyAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uu
c2V0UG9pbnRzQXRZKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRZKCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5z
ZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2ludHNBdFooKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQorICAgICAgICBsaWdodFNv
dXJjZS5zZXRTcGVjdWxhckV4cG9uZW50KGxpZ2h0RWxlbWVudC0+c3BlY3VsYXJFeHBvbmVudCgp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVB
dHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRMaW1pdGluZ0NvbmVBbmdsZShsaWdodEVsZW1l
bnQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFt
ZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAg
ICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkg
fSB9OwogCiAgICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5k
TGlnaHRFbGVtZW50KHRoaXMpOwogICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKLSAgICBhdXRvIGxpZ2h0U291
cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7CisgICAgYXV0
byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoYnVpbGRlcik7CiAKICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0g
ICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3Is
IHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwg
a2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgc2V0
RmlsdGVyRWZmZWN0KEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2Fs
ZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExl
bmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKKworICAgIHJldHVybiB7IGZpbHRlckVm
ZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5
NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLjVmYWQ3NTk1NDUwNjNmMzJlNTQx
ZjlmZDQ2MGE3OTBmZGEwMDk3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU3LDggKzU3LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5n
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVj
dCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNW
R0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5kZXggMGM1ZTgyNWJjODI1NjBm
MzZhMjY5ZWE2ZDcyMmRmZDA1MTczZDhjMi4uYTgzYmFhNGNmYjA0YjMyYzMwZGNhZWY3YmZjZTQw
YjNmODAyZDQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5jcHAKQEAgLTg0LDIwICs4NCw2IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJp
YnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFRGlzcGxhY2VtZW50TWFwKiBkaXNwbGFj
ZW1lbnRNYXAgPSBzdGF0aWNfY2FzdDxGRURpc3BsYWNlbWVudE1hcCo+KGVmZmVjdCk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikKLSAgICAgICAg
cmV0dXJuIGRpc3BsYWNlbWVudE1hcC0+c2V0WENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVj
dG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0
dHIpCi0gICAgICAgIHJldHVybiBkaXNwbGFjZW1lbnRNYXAtPnNldFlDaGFubmVsU2VsZWN0b3Io
eUNoYW5uZWxTZWxlY3RvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxl
QXR0cikKLSAgICAgICAgcmV0dXJuIGRpc3BsYWNlbWVudE1hcC0+c2V0U2NhbGUoc2NhbGUoKSk7
Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZv
aWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eENoYW5uZWxTZWxlY3RvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVs
U2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzY2FsZUF0dHIpIHsKQEAgLTEx
NSwyMCArMTAxLDMxIEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOCiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29u
c3QKK3ZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKK3sKKyAgICBhdXRvJiBkaXNwbGFjZW1lbnRNYXAgPSBkb3duY2FzdDxGRURpc3BsYWNl
bWVudE1hcD4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVs
U2VsZWN0b3JBdHRyKQorICAgICAgICBkaXNwbGFjZW1lbnRNYXAuc2V0WENoYW5uZWxTZWxlY3Rv
cih4Q2hhbm5lbFNlbGVjdG9yKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp5Q2hhbm5lbFNlbGVjdG9yQXR0cikKKyAgICAgICAgZGlzcGxhY2VtZW50TWFwLnNldFlDaGFu
bmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAgICBkaXNwbGFjZW1lbnRNYXAuc2V0U2NhbGUo
c2NhbGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBi
dWlsZGVyKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlk
KGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwor
ICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjIoKSk7CiAgICAgCiAgICAg
aWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoZmlsdGVyLCB4Q2hhbm5lbFNl
bGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7Ci0gICAgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0
RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1
dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkp
CisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFu
bmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKSk7CisKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJl
bGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFj
NGQwYWU1ZWNkNTg2NjVkMy4uZDE1Zjg4ZThlMDlhYzNlZjk2ODYwZDkzZjZlZTJlMmJkNjdlZDI0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuaApAQCAtOTAsOCArOTAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAppbmRleCBhNjg2YmI4ZmEzOGQ5ZGRmYTI4ZTAy
YWVkOTVlNDFiMDhhMzZmMmY3Li45MTZmMDNjMGY5MTU3ZWM4MjhjOTJlOTliNjNiZDYyMmU5NTI2
YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50
LmNwcApAQCAtMzYsNyArMzYsNyBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50PiBTVkdG
RURpc3RhbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYQogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGln
aHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CitSZWY8TGlnaHRTb3VyY2U+IFNWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIERpc3RhbnRMaWdodFNvdXJjZTo6Y3JlYXRlKGF6aW11dGgo
KSwgZWxldmF0aW9uKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudC5oCmluZGV4IGZiZGY3MWMwZWNiZDlmOTk3ZDY5ZWE2NTRiOWY1YmEwMzE3ZDcx
Y2MuLmJiYmZlOTQ3MzliNDQzOWMwNjA2YmMxMzg4ZWQ4MGY3MjI3MjU4NGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0
U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRT
b3VyY2U+IGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQpID09
IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggMjJiY2UxZDMzMzE3Yzk1NzFmZTVkNzlmNGIz
MjZhODliZmM1YjY4MS4uZmUyMzI4YjVjYTY2M2I0ZDRjOWI3N2U5MzI3NGNlYzBhOGUxZGY0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcApAQCAt
ODgsNyArODgsMTMgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG8KIAogdm9pZCBTVkdGRURyb3BT
aGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpkeUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlh
dGlvbkF0dHIpIHsKKyAgICAgICAgSW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZCBndWFyZCgqdGhp
cyk7CisgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjppbkF0dHIp
IHsKICAgICAgICAgSW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZCBndWFyZCgqdGhpcyk7CiAgICAg
ICAgIGludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTcsMjcgKzEwMyw0NCBAQCB2
b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZl
Y3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogeworICAgIGF1dG8mIGZlRHJvcFNo
YWRvdyA9IGRvd25jYXN0PEZFRHJvcFNoYWRvdz4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldER4KGR4KCkpOwor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAgICAgIGZlRHJv
cFNoYWRvdy5zZXREeShkeSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3RkRGV2aWF0aW9uQXR0cikgeworICAgICAgICBmZURyb3BTaGFkb3cuc2V0U3RkRGV2aWF0aW9u
WChzdGREZXZpYXRpb25YKCkpOworICAgICAgICBmZURyb3BTaGFkb3cuc2V0U3RkRGV2aWF0aW9u
WShzdGREZXZpYXRpb25ZKCkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3Qo
aW4xKCkpOworICAgIGlmICghaW5wdXQxKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYg
KGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBp
bnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChzdGREZXZpYXRpb25YKCkg
PCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAKICAgICBDb2xvciBjb2xvciA9IHJl
bmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29k
Q29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwog
Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
LSAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc2V0RmlsdGVy
RWZmZWN0KEZFRHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBG
RURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBmaWx0
ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRiNDU0
YmI3ZDI3NThlNzEyYjYyMWI4Y2JlNDJmNzQ1MWQuLjc2YmY5MjUzMTU5ODMxOWIyNTFlNTlmYjE3
ZjdmZTM0MzVkMzAyNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaApAQCAtNTMsNyArNTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAg
ICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hh
bmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAppbmRleCBjMjI4ZTIyZDU2NWQwZTE2M2Zm
ODdkMGI0YmNhYmQyMjQ0NzU4ZmMyLi4yN2MxNWIwZmUxYzhjN2Y2NDQzZWJmNjNhYzEyNWFmMWU4
NjNmNWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKQEAgLTQy
LDM0ICs0MiwzOCBAQCBSZWY8U1ZHRkVGbG9vZEVsZW1lbnQ+IFNWR0ZFRmxvb2RFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRAogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNWR0ZFRmxvb2RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wg
U1ZHRkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
IGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit2b2lkIFNWR0ZFRmxvb2RF
bGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgIEZFRmxvb2Qq
IGZsb29kID0gc3RhdGljX2Nhc3Q8RkVGbG9vZCo+KGVmZmVjdCk7Ci0KKyAgICAKKyAgICBhdXRv
JiBmbG9vZCA9IGRvd25jYXN0PEZFRmxvb2Q+KGVmZmVjdCk7CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpmbG9vZF9jb2xvckF0dHIpCi0gICAgICAgIHJldHVybiBmbG9vZC0+c2V0Rmxv
b2RDb2xvcihzdHlsZS5zdmdTdHlsZSgpLmZsb29kQ29sb3IoKSk7Ci0gICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpmbG9vZF9vcGFjaXR5QXR0cikKLSAgICAgICAgcmV0dXJuIGZsb29kLT5z
ZXRGbG9vZE9wYWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSk7Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZsb29kLnNl
dEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOworICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpmbG9vZF9vcGFjaXR5QXR0cikKKyAgICAgICAgZmxvb2Qu
c2V0Rmxvb2RPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOworICAgIGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBm
aWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpCiB7CisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0
ZXJFZmZlY3QoKSwgeyB9IH07CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBz
dmdTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAKICAgICBDb2xvciBjb2xv
ciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxl
LmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0
eSgpOwogCi0gICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBvcGFjaXR5
KTsKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFjaXR5KSk7
CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4
YTFiNmY1Y2Y1MWZlZTkxMS4uYTlkNTIzZWJjZDA4NzFmMDM0ZmQ0Y2ViMDRkYzZhMDczNTk3NWQ4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM1LDggKzM1LDgg
QEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25l
clJlZ2lzdHJ5PFNWR0ZFRmxvb2RFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0
cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIGJv
b2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBm
aWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
Jikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcAppbmRleCA3YTk5ODIyNGM5MjE5NTU1MjQ0YTg2OWNhNzhhODMwZDU2M2M1OTlk
Li4xZDU3MTU2YTc4MmVhOTVjNjE2N2UwNjk3ZTI3MjQ4ODhlOTBhNTRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtODYsNyArODYs
MTMgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEEKIAogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgaWYgKFByb3BlcnR5UmVnaXN0cnk6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyIHx8IGF0
dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0dHIpIHsKKyAgICAgICAgSW5zdGFuY2VJbnZh
bGlkYXRpb25HdWFyZCBndWFyZCgqdGhpcyk7CisgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgSW5zdGFuY2VJbnZhbGlkYXRpb25H
dWFyZCBndWFyZCgqdGhpcyk7CiAgICAgICAgIGludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtOTUsMTggKzEwMSwzMSBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIp
IGNvbnN0Cit2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmli
dXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlk
KGluMSgpKTsKKyAgICBhdXRvJiBmZUdhdXNzaWFuQmx1ciA9IGRvd25jYXN0PEZFR2F1c3NpYW5C
bHVyPihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9u
QXR0cikgeworICAgICAgICBmZUdhdXNzaWFuQmx1ci5zZXRTdGREZXZpYXRpb25YKHN0ZERldmlh
dGlvblgoKSk7CisgICAgICAgIGZlR2F1c3NpYW5CbHVyLnNldFN0ZERldmlhdGlvblkoc3RkRGV2
aWF0aW9uWSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9k
ZUF0dHIpCisgICAgICAgIGZlR2F1c3NpYW5CbHVyLnNldEVkZ2VNb2RlKGVkZ2VNb2RlKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8
UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAg
ICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5w
dXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0
ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpKTsKIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlv
blgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IGZp
bHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IGQ4OWUx
YTc0OGZiMmM1MDllMjE0ZmU5NGFlNDEwMDFjZTQ4ZWUwYjIuLjM4NTUxOGZlZjJjOGRkNjE5YmM5
NTMwOTQ5NjUxYjdhYjQ0MGE1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0
dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKaW5kZXggZTE0Njg4YTVl
YjE3NmYwMmExNmMwNTUwZjA4MTE5NWQzYzI3ZWM0Zi4uYmRhYWI4ODY0NjZhMzM2ZWI2MTE4MjBi
OTEzNzAwNGNiNmI5OGYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgorI2lu
Y2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzQsMTYgKzE3NSw1MyBAQCB2b2lk
IFNWR0ZFSW1hZ2VFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYsIGNvbnN0
IE5ldHdvcmtMb2FkTWV0cmljcwogICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnBhcmVudFJlbmRlcmVyKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHRkVJbWFn
ZUVsZW1lbnQ6OmltYWdlQnVmZmVyRm9yRWZmZWN0KCkgY29uc3QKIHsKLSAgICBpZiAobV9jYWNo
ZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIs
IG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNw
ZWN0UmF0aW8oKSk7Ci0KICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0
RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CisgICAgaWYgKCFpczxT
VkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAg
ICAgaWYgKGlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50Lmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSk7CisgICAgYXV0byBjb250ZXh0Tm9kZSA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpOworICAgIGF1dG8gcmVuZGVyZXIgPSBjb250
ZXh0Tm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGVUcmFuc2Zvcm0KKyAgICBh
dXRvIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnJlbmRlcmVyKTsKKyAgICBp
ZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFu
c2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3Jt
LnlTY2FsZSgpLCAwLCAwKTsKKworICAgIGF1dG8gc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworCisgICAgYXV0byBpbWFnZVJlY3QgPSBzaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHNyY1JlY3QpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGltYWdlUmVjdCwg
c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIGNvbnRleHQgPSBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpOworICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0Nv
bnRleHQoY29udGV4dCwgKnJlbmRlcmVyLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisKKyAgICByZXR1
cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikKK3sKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVy
biB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKKworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAg
ICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4geyAqbV9jYWNo
ZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKCkpKTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJGb3JFZmZl
Y3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFSW1hZ2U6OmNyZWF0ZShpbWFnZUJ1ZmZl
ci5yZWxlYXNlTm9uTnVsbCgpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpKTsKKworICAgIHJldHVy
biB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6
YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmluZGV4IGQ5M2UwZDBkYjhiODg2
NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjQ3MDdmZTY4MDZiYTg5NjUxMDQ5YTZmODk0Yzhh
NzFhZTI1ODU0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCkBAIC01
NSw3ICs1NSwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2Rl
KCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlckZvckVmZmVjdCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgZmlsdGVyRWZm
ZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGUgeyB9CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVxdWVzdElt
YWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKaW5kZXgg
Y2QwYmZiOWVkY2ZkN2I0ZTFhZjM5YjU1ZWRiYmJkNzg0YWFlYTg5ZC4uMWNiMjdkZjMxNTA0MDE3
YzY5OWUwMTBjZWQ0YjBkNWQ2MDBiYzYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRF
bGVtZW50LmgKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNz
IFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoU1ZHRkVMaWdodEVsZW1lbnQpOwogcHVibGljOgotICAgIHZpcnR1YWwgUmVm
PExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3QgPSAwOwogICAgIHN0YXRpYyBTVkdGRUxpZ2h0RWxlbWVudCogZmluZExp
Z2h0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7CiAKICAgICBmbG9hdCBhemltdXRoKCkgY29u
c3QgeyByZXR1cm4gbV9hemltdXRoLT5jdXJyZW50VmFsdWUoKTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5kZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYx
ODJmMWQ5NDYyM2RkNi4uNDY0N2U0NjkyZGFlOGM5MjBkMmJkOWFjZTQ0MjhmYWJlMGE2OTRjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCkBAIC0yNiw3ICsyNiw2
IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVI
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDUsMjQgKzQ0LDI1IEBAIFJlZjxTVkdGRU1lcmdl
RWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmls
dGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIpCiB7Ci0gICAgYXV0byBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsK
LSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlucHV0czsKIAogICAgIGZvciAoYXV0byYgbWVy
Z2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsK
LSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
bWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGJ1aWxkZXIubmFt
ZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RG
TW92ZShtZXJnZUVmZmVjdCkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbWVy
Z2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAog
ICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0KCk7Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRU1l
cmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMuc2l6ZSgpKSk7CiAKLSAgICByZXR1cm4gZWZmZWN0Owor
ICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCBXVEZNb3ZlKG1lcmdlSW5wdXRzKSB9OwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCmluZGV4IDc0NTA4NjgxNmY2
OTc2YzY2OTdkYzUxMDc1ODAyZDI4M2NmNGUzYzIuLmU4ODBlNmU5N2IzY2UyZTJjYmZmMzMyZTFk
OTNhMTFkMjQ2YzlmM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdl
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCkBA
IC0zNSw3ICszNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNW
R1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGRU1lcmdlRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBw
cm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5
OyB9CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50
LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi4wYWI1
NWIyYWMxZjgxOGVjMmVmNDU2MTU0ZjU0MmU5NGJjOGNhM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIGlubGlu
ZSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwog
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0
cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6Om1faW4xPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3Bl
cnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsICZTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xv
Z3lPcGVyYXRvciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9ycGhvbG9neU9wZXJhdG9y
PigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVz
OjpyYWRpdXNBdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNYLCAmU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwogfQpAQCAtNTksOSArNTks
OSBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1cyhmbG9hdCB4LCBmbG9h
dCB5KQogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAo
bmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVy
YXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9y
IHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpm
cm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAg
ICAgICAgbV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRv
clR5cGU+KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9tb3JwaG9sb2d5T3BlcmF0b3It
PnNldEJhc2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MSwyMiArODEsNiBAQCB2b2lkIFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0bwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFy
c2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5
ID0gc3RhdGljX2Nhc3Q8RkVNb3JwaG9sb2d5Kj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNl
dE1vcnBob2xvZ3lPcGVyYXRvcihzdmdPcGVyYXRvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKLSAgICAgICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rp
b25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJhdGVseS4KLSAgICAgICAgYm9vbCBpc1JhZGl1
c1hDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWChyYWRpdXNYKCkpOwotICAgICAgICBi
b29sIGlzUmFkaXVzWUNoYW5nZWQgPSBtb3JwaG9sb2d5LT5zZXRSYWRpdXNZKHJhZGl1c1koKSk7
Ci0gICAgICAgIHJldHVybiBpc1JhZGl1c1hDaGFuZ2VkIHx8IGlzUmFkaXVzWUNoYW5nZWQ7Ci0g
ICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpvcGVyYXRvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKQEAg
LTExNCwyMSArOTgsMzQgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAor
dm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2Vk
KEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
ICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1
c1koKTsKKyAgICBhdXRvJiBtb3JwaG9sb2d5ID0gZG93bmNhc3Q8RkVNb3JwaG9sb2d5PihlZmZl
Y3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQorICAgICAg
ICBtb3JwaG9sb2d5LnNldE1vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IoKSk7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKKyAgICAg
ICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJh
dGVseS4KKyAgICAgICAgbW9ycGhvbG9neS5zZXRSYWRpdXNYKHJhZGl1c1goKSk7CisgICAgICAg
IG1vcnBob2xvZ3kuc2V0UmFkaXVzWShyYWRpdXNZKCkpOworICAgIH0gZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxk
ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGZsb2F0IHhSYWRpdXMgPSByYWRp
dXNYKCk7CisgICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKICAgICBpZiAoeFJhZGl1cyA8
IDAgfHwgeVJhZGl1cyA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVy
RWZmZWN0KEZFTW9ycGhvbG9neTo6Y3JlYXRlKG1vcnBob2xvZ3lPcGVyYXRvcigpLCB4UmFkaXVz
LCB5UmFkaXVzKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZp
bHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4g
eyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2Njku
Ljg0MGI1YmFhZjI4MzYwYzZmNjU5ZjNlOTk3NTQ3MDcxODkzNGM3YTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApAQCAtMjYsMTIgKzI2LDEyIEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KLXN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9y
cGhvbG9neU9wZXJhdG9yPiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUo
KSB7IHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOyB9CiAKLSAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKKyAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3IpCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChtb3JwaG9sb2d5
T3BlcmF0b3IpIHsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoK
ICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICBjYXNlIEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERToKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGljIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgZnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3Ig
ZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVl
ID09ICJlcm9kZSIpCiAgICAgICAgICAgICByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFOwpAQCAtNjIsMTIgKzYyLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJhZGl1cyhmbG9h
dCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIFN0cmluZyBpbjEoKSBjb25zdCB7IHJl
dHVybiBtX2luMS0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHN2Z09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdPcGVyYXRvci0+Y3VycmVudFZhbHVl
PE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+KCk7IH0KKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9y
cGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3ItPmN1
cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0b3I+KCk7IH0KICAgICBmbG9hdCByYWRpdXNYKCkg
Y29uc3QgeyByZXR1cm4gbV9yYWRpdXNYLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IHJh
ZGl1c1koKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1ktPmN1cnJlbnRWYWx1ZSgpOyB9CiAKICAg
ICBTVkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMTsgfQotICAg
IFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBt
X3N2Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgbW9ycGhvbG9neU9w
ZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRvcjsgfQogICAgIFNW
R0FuaW1hdGVkTnVtYmVyJiByYWRpdXNYQW5pbWF0ZWQoKSB7IHJldHVybiBtX3JhZGl1c1g7IH0K
ICAgICBTVkdBbmltYXRlZE51bWJlciYgcmFkaXVzWUFuaW1hdGVkKCkgeyByZXR1cm4gbV9yYWRp
dXNZOyB9CiAKQEAgLTgwLDEyICs4MCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0Kiwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2
Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4g
bV9tb3JwaG9sb2d5T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhp
cywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51
bWJlcj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAg
IFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNZIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNy
ZWF0ZSh0aGlzKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmlkbAppbmRleCBhMmMxODFmMmU2MzdjZDM5MDk4ZWJlNjllNjA5OGFiZTNjMzg1Y2Qx
Li4yZDIxZjJhMWQ4ODhkMDJlYzE3OWRmMTBlMmRlNDNmYzY1Mjk3ZDU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCkBAIC0zMyw3ICszMyw3IEBA
CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1ZHX01PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRF
ICAgPSAyOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAg
aW4xOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUg
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRBcz1tb3Jw
aG9sb2d5T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9u
IG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAg
IHJhZGl1c1g7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAg
cmFkaXVzWTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAppbmRl
eCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li41OTQ1MDZhM2ViNmJl
MGI2ZTc1YTJmNzA0YmJhYjY4NWI2ZDUwNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVP
ZmZzZXRFbGVtZW50LmNwcApAQCAtNzIsNyArNzIsMTMgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21T
dHIKIAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgaWYgKFByb3BlcnR5UmVnaXN0cnk6Omlz
S25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikgeworICAgICAgICBJbnN0
YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKKyAgICAgICAgcHJpbWl0aXZlQXR0
cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBJbnN0YW5jZUludmFs
aWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAg
ICByZXR1cm47CkBAIC04MSwxNiArODcsMjcgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29u
c3QKK3ZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2Vk
KEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwor
ICAgIGF1dG8mIGZlT2Zmc2V0ID0gZG93bmNhc3Q8RkVPZmZzZXQ+KGVmZmVjdCk7CisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIpCisgICAgICAgIGZlT2Zmc2V0LnNldER4KGR4
KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAgICAg
IGZlT2Zmc2V0LnNldER5KGR5KCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4x
KCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZp
bHRlckVmZmVjdChGRU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5KCkpKTsKIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShmaWx0ZXIsIGR4KCksIGR5KCkpOwotICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0
dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3
MmRiNjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJlZS4uOWQzZGFmMDlkZDUzMWM0YzIzYjRlMWJh
YzY0ZmI1NTQ2YTRhNDRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zm
c2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
aApAQCAtNDcsNyArNDcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChG
aWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBt
X3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4g
bV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKaW5kZXggOWZmODQ3MzM4YTFiNmE1
NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uNjQwNjRmNWY2ODA4NDk0Y2Y3YWIxMGRkMDE5YzBh
YWQ2OTg5Y2RhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVt
ZW50LmNwcApAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVp
bGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KIApAQCAtMzksMTkgKzM4LDE5IEBAIFJlZjxTVkdGRVBvaW50TGlnaHRFbGVtZW50PiBTVkdG
RVBvaW50TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVBvaW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRT
b3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK1JlZjxMaWdodFNvdXJjZT4g
U1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVy
LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRh
cmdldEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVy
ZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0
aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7
Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQ
b2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMu
aHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigp
ICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVy
ZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisvLyAgICBp
ZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9
IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94Lmhl
aWdodCgpKTsKKy8vCisvLyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0
ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RS
L1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCisvLyAgICAgICAgcG9z
aXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllD
b3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQp
OworLy8gICAgfSBlbHNlCisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5
KCksIHooKSk7CiAgICAgCiAgICAgcmV0dXJuIFBvaW50TGlnaHRTb3VyY2U6OmNyZWF0ZShwb3Np
dGlvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaApp
bmRleCAzM2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0NWU0OGRhNzllLi5jNDdhNjA1NmU4
ODdkYTA4MWEwNGYzYjk1MmJkZTQ1YmNkYTlkOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVBvaW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShj
b25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2Vy
dChzaXplb2YoU1ZHRkVQb2ludExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVt
ZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50LmNwcAppbmRleCA5YjdjZTQwYWI5NzE2YWU0ZjMzNWY1NGIyNGNkYTQ1OWE4NDI5
YTU5Li5iYzgyNWZhNGE0NTExMDMxYjkyYWU5YmFkMWViMzdiZTI5YWQwY2QwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCkBA
IC04OCw1MiArODgsNiBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbgogICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwog
fQogCi1ib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCi17Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5nKiBzcGVjdWxhckxpZ2h0aW5nID0gc3RhdGlj
X2Nhc3Q8RkVTcGVjdWxhckxpZ2h0aW5nKj4oZWZmZWN0KTsKLQotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwot
ICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsK
LSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3Ip
OwotICAgIH0KLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIp
Ci0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFj
ZVNjYWxlKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFu
dEF0dHIpCi0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTcGVjdWxhckNvbnN0
YW50KHNwZWN1bGFyQ29uc3RhbnQoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpz
cGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNl
dFNwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCgpKTsKLQotICAgIGF1dG8mIGxpZ2h0
U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRpbmctPmxpZ2h0
U291cmNlKCkpOwotICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBT
VkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBBU1NFUlQobGln
aHRFbGVtZW50KTsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIp
Ci0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXpp
bXV0aCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCi0g
ICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRFbGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2
YXRpb24oKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAg
cmV0dXJuIGxpZ2h0U291cmNlLnNldFgobGlnaHRFbGVtZW50LT54KCkpOwotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRZ
KGxpZ2h0RWxlbWVudC0+eSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnpBdHRy
KQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVsZW1lbnQtPnooKSk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQotICAgICAgICByZXR1
cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRYKCkpOwot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKLSAgICAgICAgcmV0
dXJuIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCi0gICAgICAgIHJl
dHVybiBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2ludHNBdFooKSk7
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAg
ICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFNwZWN1bGFyRXhwb25lbnQobGlnaHRFbGVtZW50
LT5zcGVjdWxhckV4cG9uZW50KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlt
aXRpbmdDb25lQW5nbGVBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0TGltaXRp
bmdDb25lQW5nbGUobGlnaHRFbGVtZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFj
ZVNjYWxlQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIg
fHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewpAQCAtMTYwLDI4ICsxMTQsODUg
QEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmZpbHRl
ckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byYgc3BlY3VsYXJMaWdodGluZyA9IGRvd25j
YXN0PEZFU3BlY3VsYXJMaWdodGluZz4oZWZmZWN0KTsKIAotICAgIGlmICghaW5wdXQxKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0
aW5nX2NvbG9yQXR0cikgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICAgICAgQ29sb3IgY29s
b3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJl
ci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CisgICAgICAgIHNwZWN1bGFy
TGlnaHRpbmcuc2V0Q29sb3IoY29sb3IpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
UmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50
KHRoaXMpOwotICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKKyAgICAg
ICAgc3BlY3VsYXJMaWdodGluZy5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3BlY3VsYXJDb25zdGFudEF0dHIpIHsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZy5zZXRTcGVj
dWxhckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2Uo
KmZpbHRlckJ1aWxkZXIpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJF
eHBvbmVudEF0dHIpIHsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZy5zZXRTcGVjdWxhckV4cG9u
ZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0
aW5nLnNvdXJjZSgpKTsKKyAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50
ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CisgICAgQVNTRVJU
KGxpZ2h0RWxlbWVudCk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhB
dHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0
aCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikK
KyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0RWxldmF0aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0aW9u
KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAg
bGlnaHRTb3VyY2Uuc2V0WChsaWdodEVsZW1lbnQtPngoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0RWxl
bWVudC0+eSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCisg
ICAgICAgIGxpZ2h0U291cmNlLnNldFoobGlnaHRFbGVtZW50LT56KCkpOworICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICBsaWdodFNvdXJj
ZS5zZXRQb2ludHNBdFgobGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7CisgICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNl
LnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKKyAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uu
c2V0UG9pbnRzQXRaKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRaKCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgbGlnaHRT
b3VyY2Uuc2V0U3BlY3VsYXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQo
KSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xl
QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25lQW5nbGUobGlnaHRFbGVt
ZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQogCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5u
YW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFpbnB1dDEpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVm
ZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKKyAgICAKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVu
dCh0aGlzKTsKKyAgICBpZiAoIWxpZ2h0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGJ1aWxkZXIp
OworCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdD
b2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7
CisgICAgCisgICAgc2V0RmlsdGVyRWZmZWN0KEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNv
bG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50
KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGln
aHRTb3VyY2UpKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3Jl
YXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNw
ZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0
KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRl
MTU2ZDFjNzlhMWQzZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li5mYTY4NzhmYjVjYjQ3NjQ2YzQyZWUz
YjkwNzdhZjhlMTcyMDE5MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU3LDggKzU3LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5n
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVj
dCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNW
R0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0ZWE0
YWE5Y2YyZGZiZmZlZS4uNzQxMzFmOTM0ZmNjMjEyYzBjZTgyNWE2MDY2MDI2OTMxY2MzM2FjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAgLTIx
LDcgKzIxLDYgQEAKICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTM5LDI3ICszOCwyNyBAQCBSZWY8U1ZHRkVTcG90
TGlnaHRFbGVtZW50PiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExp
Z2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QK
K1JlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25z
dCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247
CiAgICAgRmxvYXRQb2ludDNEIHBvaW50c0F0OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZl
VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
IHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRp
bmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94Lngo
KSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShy
ZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0
dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192
aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFu
RGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhY
TWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLQotICAgICAgICBwb2ludHNBdC5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyBwb2ludHNBdFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsK
LSAgICAgICAgcG9pbnRzQXQuc2V0WShyZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiBy
ZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIv
U1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53
My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAg
ICAgcG9pbnRzQXQuc2V0Wihwb2ludHNBdFooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5j
ZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBz
cXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBv
aW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAgICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBv
aW50c0F0WCgpLCBwb2ludHNBdFkoKSwgcG9pbnRzQXRaKCkpOwotICAgIH0KKy8vCisvLyAgICBp
ZiAoZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7CisvLyAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9
IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOworLy8KKy8vICAgICAgICBwb3NpdGlvbi5zZXRY
KHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7CisvLyAgICAg
ICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94Lmhl
aWdodCgpKTsKKy8vICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb3NpdGlv
bi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5l
cigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Cisv
LworLy8gICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgp
ICogcmVmZXJlbmNlQm94LndpZHRoKCkpOworLy8gICAgICAgIHBvaW50c0F0LnNldFkocmVmZXJl
bmNlQm94LnkoKSArIHBvaW50c0F0WSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKKy8vICAg
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGln
aHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1Vu
aXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKKy8vICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0
WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJl
ZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKKy8vICAgIH0g
ZWxzZSB7CisvLyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7
CisvLyAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0
WSgpLCBwb2ludHNBdFooKSk7CisvLyAgICB9CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291cmNl
OjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0aW5n
Q29uZUFuZ2xlKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bv
dExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVu
dC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFmNTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLjA3NDM2
Y2MwMTY2M2I1MjE1NjI0YTZlMTJkNzE2MDY4MWU5NjUyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihTVkdGRVNwb3RMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxl
bWVudCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXggMzli
ZGNjNzczNTk2NjUwMzZlMWFlNzQ3NjEyZWFkNmY5YWMzNzM3MC4uNjM3YTMyZjljZGUyOGQ0YzYz
MmUxMzFiNzI5NDg4YWM4Y2NiYTBhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVt
ZW50LmNwcApAQCAtNzAsMTYgKzcwLDE2IEBAIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5h
bWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQor
ICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFp
bnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisg
ICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFVGls
ZTo6Y3JlYXRlKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZShmaWx0ZXIp
OwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBl
ZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25O
dWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRl
eCA0NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEyMmRjNDJhMzNhOTFmLi5iZTM3OTY5OTA5MzAx
ZDI5NmNmZjVlMDE5NzQyZDQwNWExYjEwZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50LmNwcAppbmRleCAxMTU2MTExOWQ4M2UzZmM3ODhhNDJiMTQ4NjdjNjU2NDEyMzM0
YTRkLi4xMjk0YmY0YTUxYTA1MjRmYzM5MmYxODQ0NmRjZWUxMzM1ZDQwYTFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCkBAIC04OCwyNCArODgs
NiBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0bwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZl
Y3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVUdXJi
dWxlbmNlKiB0dXJidWxlbmNlID0gc3RhdGljX2Nhc3Q8RkVUdXJidWxlbmNlKj4oZWZmZWN0KTsK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQotICAgICAgICByZXR1cm4g
dHVyYnVsZW5jZS0+c2V0VHlwZSh0eXBlKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3RpdGNoVGlsZXNBdHRyKQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0U3RpdGNo
VGlsZXMoc3RpdGNoVGlsZXMoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNl
RnJlcXVlbmN5QXR0cikKLSAgICAgICAgcmV0dXJuICh0dXJidWxlbmNlLT5zZXRCYXNlRnJlcXVl
bmN5WChiYXNlRnJlcXVlbmN5WCgpKSB8fCB0dXJidWxlbmNlLT5zZXRCYXNlRnJlcXVlbmN5WShi
YXNlRnJlcXVlbmN5WSgpKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzZWVkQXR0
cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFNlZWQoc2VlZCgpKTsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRyKQotICAgICAgICByZXR1cm4gdHVy
YnVsZW5jZS0+c2V0TnVtT2N0YXZlcyhudW1PY3RhdmVzKCkpOwotCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7CiAgICAgaWYgKFByb3BlcnR5UmVnaXN0cnk6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUp
KSB7CkBAIC0xMTcsMTEgKzk5LDMzIEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVy
RWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGF1
dG8mIHR1cmJ1bGVuY2UgPSBkb3duY2FzdDxGRVR1cmJ1bGVuY2U+KGVmZmVjdCk7CisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRU
dXJidWxlbmNlVHlwZSh0eXBlKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpzdGl0Y2hUaWxlc0F0dHIpCisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0U3RpdGNoVGlsZXMoc3Rp
dGNoVGlsZXMoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVx
dWVuY3lBdHRyKSB7CisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0QmFzZUZyZXF1ZW5jeVgoYmFzZUZy
ZXF1ZW5jeVgoKSk7CisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0QmFzZUZyZXF1ZW5jeVkoYmFzZUZy
ZXF1ZW5jeVkoKSk7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0
dHIpCisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0U2VlZChzZWVkKCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikKKyAgICAgICAgdHVyYnVsZW5jZS5z
ZXROdW1PY3RhdmVzKG51bU9jdGF2ZXMoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYpCiB7CiAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VGcmVx
dWVuY3lZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVUdXJi
dWxlbmNlOjpjcmVhdGUoZmlsdGVyLCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVx
dWVuY3lZKCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElU
Q0hUWVBFX1NUSVRDSCk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRl
ckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVUdXJidWxlbmNlOjpjcmVhdGUo
dHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCks
IHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpKTsKKworICAg
IHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1
ZTBhNDBlMzQyNjc3NjllMTk4YS4uMzk5ZWI4YTUyZjY0N2ZmNmU1YTMxYjU3ODhhMDJmOWMyZmNk
NGFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBA
IC0xMTgsOCArMTE4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lY
IHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlckVsZW1lbnQuY3BwCmluZGV4IDU1NzhiNTE5YTM2MjJiZDcwNmFkMjdiZmU0YzYwMDM5
MTQ4NThjYTAuLjljNDMxMTM0YTg3NzA0ZjA2NDlkOTIyYmE5NzE2MzZkZDI1ZTFjOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAog
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dElubGluZXMuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAK
aW5kZXggZmY1MjIzMDk0NjZiMDQwYmVmMDg5ZDE1N2IzODZkZmZiYjA1YzYxOS4uMzg2NmQ4OWNk
N2UzZjA4NDVkNGE1N2IzNmZiOWY5OTg3YTMyZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAK
QEAgLTI1LDkgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjYsMTEg
KzY0LDE1IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuCiAgICAgU1ZHRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKQordm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
cmlidXRlKQogewotICAgIC8vIFdoZW4gYWxsIGZpbHRlcnMgc3VwcG9ydCB0aGlzIG1ldGhvZCwg
aXQgd2lsbCBiZSBjaGFuZ2VkIHRvIGEgcHVyZSB2aXJ0dWFsIG1ldGhvZC4KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2VmZmVjdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCgqbV9lZmZl
Y3QsIGF0dHJpYnV0ZSk7CisKKyAgICBpZiAoYXV0byogcHJpbWl0aXZlUmVuZGVyZXIgPSByZW5k
ZXJlcigpKQorICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSo+KHByaW1pdGl2ZVJlbmRlcmVyKS0+cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRy
aWJ1dGUpOwogfQogCiB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTkz
LDIyICs5NSw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpj
aGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwog
fQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFT
U0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZp
bHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAo
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3Qt
PnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQog
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oCmluZGV4IGM5OGIxM2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcu
LmQ3ZmZkZGFkMjRiMmMzNmE3OTdkZjIyMGI4OWUxMjIwMWZlZDJhOGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKQEAgLTM2LDEyICszNiw2IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxlbWVudCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMpOwogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRl
ckVmZmVjdCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8vIFJldHVybnMg
dHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KLSAg
ICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKLQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQ
cm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LCBTVkdFbGVtZW50PjsKIAogICAgIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkgY29uc3QgeyBy
ZXR1cm4gbV94LT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtNTYsNiArNTAsOSBAQCBwdWJsaWM6CiAg
ICAgU1ZHQW5pbWF0ZWRMZW5ndGgmIGhlaWdodEFuaW1hdGVkKCkgeyByZXR1cm4gbV9oZWlnaHQ7
IH0KICAgICBTVkdBbmltYXRlZFN0cmluZyYgcmVzdWx0QW5pbWF0ZWQoKSB7IHJldHVybiBtX3Jl
c3VsdDsgfQogCisgICAgdm9pZCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpOworICAgIHZpcnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpID0gMDsKKwogcHJvdGVjdGVkOgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyhjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIApAQCAtNjQs
NyArNjEsMTEgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENo
aWxkQ2hhbmdlJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKLSAgICB2b2lk
IHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIHsgfQorCisgICAgYm9vbCBoYXNGaWx0
ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdDsgfQorICAgIHZvaWQgc2V0RmlsdGVy
RWZmZWN0KFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkgeyBtX2VmZmVjdCA9IFdURk1vdmUoZWZm
ZWN0KTsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZWZmZWN0OyB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0ZpbHRlckVmZmVjdCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KQEAgLTczLDYgKzc0LDggQEAgcHJpdmF0
ZToKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVycmlk
ZTsKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBt
X2VmZmVjdDsKKyAgICAKICAgICAvLyBTcGVjOiBJZiB0aGUgeC95IGF0dHJpYnV0ZSBpcyBub3Qg
c3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNwZWNp
ZmllZC4KICAgICAvLyBTcGVjOiBJZiB0aGUgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZSBpcyBub3Qg
c3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEwMCUiIHdlcmUgc3Bl
Y2lmaWVkLgogICAgIFJlZjxTVkdBbmltYXRlZExlbmd0aD4gbV94IHsgU1ZHQW5pbWF0ZWRMZW5n
dGg6OmNyZWF0ZSh0aGlzLCBTVkdMZW5ndGhNb2RlOjpXaWR0aCwgIjAlIikgfTsKQEAgLTkwLDEy
ICs5Myw2IEBAIGlubGluZSB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6aW52YWxpZGF0ZSgpCiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0
QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnByaW1pdGl2ZVJlbmRlcmVyKTsKIH0KIAot
aW5saW5lIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwcmltaXRp
dmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKLXsKLSAg
ICBpZiAoYXV0byogcHJpbWl0aXZlUmVuZGVyZXIgPSByZW5kZXJlcigpKQotICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSo+KHByaW1pdGl2ZVJlbmRl
cmVyKS0+cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGUpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAppbmRleCAxMGM4ODQyOWM3
MjQwM2RjZWQzYTNmN2VhNDA2MDBiNTc0NzAzY2U4Li40MTg0MDJiYjAxYWQ4YjMwZjEwMTc5Y2Qx
ZjBjYTNkZmY5OGQ0MzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlLmNwcApAQCAtMzEsMTUgKzMxLDE1IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUoKQotICAgIDogbV9hbGlnbihTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlE
WU1JRCkKLSAgICAsIG1fbWVldE9yU2xpY2UoU1ZHX01FRVRPUlNMSUNFX01FRVQpCitTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTdHJpbmdW
aWV3IHZhbHVlKQogeworICAgIHBhcnNlKHZhbHVlKTsKIH0KIAotU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU3RyaW5nVmlldyB2YWx1ZSkK
K1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
KFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIGFsaWduLCBTVkdNZWV0T3JTbGljZVR5cGUgbWVl
dE9yU2xpY2UpCisgICAgOiBtX2FsaWduKGFsaWduKQorICAgICwgbV9tZWV0T3JTbGljZShtZWV0
T3JTbGljZSkKIHsKLSAgICBwYXJzZSh2YWx1ZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6c2V0QWxpZ24odW5zaWduZWQgc2hvcnQgYWxpZ24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgK
aW5kZXggNTE0MGY2OWRmODI3NmI1ZTc0MzZiMjhmZDU0YzgzMTdjMjk5YWIzMC4uMDlkYzQ0Nzg0
ZDc3MjU5OWNhY2FiMDE3YWMwY2YzMGMyNTliYTIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaApAQCAtNTEsOCArNTEsOSBAQCBwdWJs
aWM6CiAgICAgICAgIFNWR19NRUVUT1JTTElDRV9TTElDRSA9IDIKICAgICB9OwogCi0gICAgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKCk7CisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlKCkgPSBkZWZhdWx0OwogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTdHJpbmdW
aWV3KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1R5cGUsIFNWR01lZXRPclNsaWNlVHlwZSk7CiAKICAgICBFeGNl
cHRpb25Pcjx2b2lkPiBzZXRBbGlnbih1bnNpZ25lZCBzaG9ydCk7CiAgICAgdW5zaWduZWQgc2hv
cnQgYWxpZ24oKSBjb25zdCB7IHJldHVybiBtX2FsaWduOyB9CkBAIC03MCwxMyArNzEsMzkgQEAg
cHVibGljOgogCiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAotcHJpdmF0ZToK
LSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBtX2FsaWduOwotICAgIFNWR01lZXRPclNs
aWNlVHlwZSBtX21lZXRPclNsaWNlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IGRlY29kZShEZWNv
ZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
Ym9vbCBwYXJzZUludGVybmFsKFN0cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBi
b29sIHZhbGlkYXRlKTsKKworICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ24g
eyBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRCB9OworICAgIFNWR01lZXRPclNsaWNl
VHlwZSBtX21lZXRPclNsaWNlIHsgU1ZHX01FRVRPUlNMSUNFX01FRVQgfTsKIH07CiAKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2FsaWduOwor
ICAgIGVuY29kZXIgPDwgbV9tZWV0T3JTbGljZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6
b3B0aW9uYWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGU+IGFsaWduOworICAgIGRlY29kZXIg
Pj4gYWxpZ247CisgICAgaWYgKCFhbGlnbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8U1ZHTWVldE9yU2xpY2VUeXBlPiBtZWV0T3JTbGljZTsKKyAg
ICBkZWNvZGVyID4+IG1lZXRPclNsaWNlOworICAgIGlmICghbWVldE9yU2xpY2UpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlKCphbGlnbiwgKm1lZXRPclNsaWNlKTsKK30KKwogdGVtcGxhdGU8PiBzdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiB7CiAgICAgc3RhdGlj
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKTsgfQogICAgIHN0YXRpYyBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykgeyByZXR1cm4gU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKHN0cmluZyk7IH0KQEAgLTg1LDMgKzExMiwzNSBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWU+IHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZT4geworICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19VTktO
T1dOLAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX05PTkUsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU4sCisgICAgICAg
IFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fWE1JRFlNSU4sCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU4sCisgICAgICAgIFdlYkNvcmU6
OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1J
TllNSUQsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQsCisg
ICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fWE1JTllNQVgsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNQVgsCisgICAgICAgIFdl
YkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFU
SU9fWE1BWFlNQVgKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR01lZXRPclNsaWNlVHlwZT4g
eworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHTWVldE9yU2xpY2VUeXBlLAorCisgICAgICAgIFdl
YkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX01FRVRPUlNMSUNFX1VOS05P
V04sCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX01F
RVRPUlNMSUNFX01FRVQsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZTo6U1ZHX01FRVRPUlNMSUNFX1NMSUNFCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcAppbmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li4z
OWFjZGM0ZDg3MzE4ZmZhYzU5ZTViMTQ1NjBhMjM3NWZiMDRiNWY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMyw2ICsz
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTMwICsyNCw5MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAi
RmlsdGVyUmVzdWx0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
UmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVy
LCBSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
IHByZXNlcnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJ
bWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8o
cHJlc2VydmVBc3BlY3RSYXRpbykKK1JlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoU291cmNl
SW1hZ2UmJiBzb3VyY2VJbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2Uo
V1RGTW92ZShzb3VyY2VJbWFnZSksIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKIH0KIAotRkVJbWFn
ZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0
cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFz
cGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCi0gICAg
LCBtX3RyZWVTY29wZSgmdHJlZVNjb3BlKQotICAgICwgbV9ocmVmKGhyZWYpCitGRUltYWdlOjpG
RUltYWdlKFNvdXJjZUltYWdlJiYgc291cmNlSW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBl
OjpGRUltYWdlKQorICAgICwgbV9zb3VyY2VJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSkKICAg
ICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1S
ZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQ
dHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNl
cnZlQXNwZWN0UmF0aW8pCitGbG9hdFJlY3QgRkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgaW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8p
KTsKLX0KKyAgICBhdXRvIGltYWdlUmVjdE9mU291cmNlSW1hZ2UgPSBXVEY6Om1ha2VWaXNpdG9y
KAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAgICAgICAgICAgIGF1
dG8gZHJhd2luZ1JlY3QgPSBwcmltaXRpdmVTdWJyZWdpb247CisgICAgICAgICAgICBhdXRvIHNy
Y1JlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfTsKKyAgICAgICAgICAgIG1f
cHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRyYXdpbmdSZWN0LCBzcmNSZWN0KTsK
KyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24o
ZHJhd2luZ1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgICAgIH0sCisgICAgICAgIFsm
XShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JikgeworICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5
LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOworICAgICAgICB9LAorICAg
ICAgICBbJl0oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAg
ICAgfQorICAgICk7CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJl
bmNlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBo
cmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0
aW8pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29w
ZSwgaHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KGlt
YWdlUmVjdE9mU291cmNlSW1hZ2UsIG1fc291cmNlSW1hZ2UpOwogfQogCi12b2lkIEZFSW1hZ2U6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK2Jvb2wgRkVJbWFnZTo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0
ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpKTsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAgICBpZiAobV9pbWFnZSkgewot
ICAgICAgICBzcmNSZWN0LnNldFNpemUobV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKLSAgICB9
IGVsc2UgaWYgKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkp
Ci0gICAgICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qo
cmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotCi0gICAgaWYgKGNs
aXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0
KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7
Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsK
LX0KKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbWFnZVJl
Y3QgPSBvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAgYXV0byYgb3V0cHV0Q29udGV4
dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgCisgICAgYXV0byBkcmF3U291cmNlSW1h
Z2UgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1h
Z2UpIHsKKyAgICAgICAgICAgIGF1dG8gc3JjUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2Ut
PnNpemUoKSB9OworICAgICAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJl
Y3QoaW1hZ2VSZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgICAgIGltYWdlUmVjdCA9IGdlb21ldHJ5
Lm1hcEltYWdlUmVjdChpbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJlY3QoKSk7CisgICAgICAgICAg
ICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LCBzcmNSZWN0KTsKKyAg
ICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVy
KSB7CisgICAgICAgICAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW1hZ2VS
ZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICAgICAgb3V0cHV0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAg
fSwKKyAgICAgICAgWyZdKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICApOwogCi1SZW5kZXJFbGVt
ZW50KiBGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdAotewotICAgIGlmICghbV90
cmVlU2NvcGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gdGFyZ2V0ID0gU1ZH
VVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhtX2hyZWYsICptX3RyZWVT
Y29wZSk7Ci0gICAgaWYgKCFpczxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiB0YXJnZXQuZWxlbWVudC0+cmVuZGVyZXIoKTsK
KyAgICBzdGQ6OnZpc2l0KGRyYXdTb3VyY2VJbWFnZSwgbV9zb3VyY2VJbWFnZSk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK1Rl
eHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdlICYmICFyZW5kZXJl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMg
aW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCku
YWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsK
LQotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgc3Jj
UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNyY1Jl
Y3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBt
X3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7Ci0g
ICAgfQotCi0gICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCku
bG9jYXRpb24oKTsKLSAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50
TG9jYXRpb24ueSgpKTsKLQotICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAg
ICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICAgICAgUmVm
UHRyIGNvbnRleHROb2RlID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVsZW1lbnQo
KSk7Ci0gICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAg
ICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0Tm9kZS5nZXQo
KSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwotCi0gICAgICAgICAgICAv
LyBJZiB3ZSdyZSByZWZlcmVuY2luZyBhbiBlbGVtZW50IHdpdGggcGVyY2VudGFnZSB1bml0cywg
ZWcuIDxyZWN0IHdpdGg9IjMwJSI+IHRob3NlIHZhbHVlcyB3ZXJlIHJlc29sdmVkIGFnYWluc3Qg
dGhlIHZpZXdwb3J0LgotICAgICAgICAgICAgLy8gQnVpbGQgdXAgYSB0cmFuc2Zvcm1hdGlvbiB0
aGF0IG1hcHMgZnJvbSB0aGUgdmlld3BvcnQgc3BhY2UgdG8gdGhlIGZpbHRlciBwcmltaXRpdmUg
c3VicmVnaW9uLgotICAgICAgICAgICAgaWYgKGxlbmd0aENvbnRleHQuZGV0ZXJtaW5lVmlld3Bv
cnQodmlld3BvcnRTaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbmNhdENUTShtYWtl
TWFwQmV0d2VlblJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHZpZXdwb3J0U2l6ZSksIGRl
c3RSZWN0KSk7CisgICAgYXV0byBzb3VyY2VJbWFnZVNpemUgPSBXVEY6Om1ha2VWaXNpdG9yKAor
ICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAgICAgICAgICAgIHJldHVy
biBpbWFnZS0+c2l6ZSgpOworICAgICAgICB9LAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdl
QnVmZmVyPiYgaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFNpemUoaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpOworICAgICAgICB9LAorICAgICAgICBbJl0oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKICAgICAgICAgfQorICAgICk7CiAK
LSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICAgICAg
U1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVu
ZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgYXV0byBpbWFnZVNpemUgPSBzdGQ6OnZpc2l0KHNvdXJjZUltYWdlU2l6ZSwgbV9zb3VyY2VJ
bWFnZSk7CiAKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QpOwotfQotCi1UZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0Ci17
Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZTsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgaW1h
Z2VTaXplID0gbV9pbWFnZS0+c2l6ZSgpOwotICAgIGVsc2UgaWYgKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgaW1hZ2VTaXplID0gZW5jbG9z
aW5nSW50UmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkuc2l6
ZSgpOwogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlSW1hZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIg
aW1hZ2Utc2l6ZT1cIiIgPDwgaW1hZ2VTaXplLndpZHRoKCkgPDwgIngiIDw8IGltYWdlU2l6ZS5o
ZWlnaHQoKSA8PCAiXCJdXG4iOwogICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBkdW1wIGFsc28g
b2JqZWN0IHJldHVybmVkIGJ5IFNWR0ZFSW1hZ2U6OmltYWdlKCkgPwogICAgIHJldHVybiB0czsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApp
bmRleCBhYzE2MGVkY2U3YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li42ZjljZTk5ODA0
ZThmYTIzYTQxY2U1MmE0NGNlNGUyNDYxMjM5ZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMyw0MSArMjQsODAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEltYWdlOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFRyZWVTY29wZTsK
IAogY2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYsIFJlZlB0cjxJ
bWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIHN0YXRpYyBS
ZWY8RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICB1
c2luZyBTb3VyY2VJbWFnZSA9IHN0ZDo6dmFyaWFudDwKKyAgICAgICAgUmVmPEltYWdlPiwKKyAg
ICAgICAgUmVmPEltYWdlQnVmZmVyPiwKKyAgICAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyCisgICAgPjsKIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5GRUltYWdlKCkgPSBkZWZhdWx0
OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBUcmVlU2NvcGUmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZShTb3VyY2VJbWFnZSYmLCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKworICAgIGNvbnN0IFNvdXJjZUltYWdl
JiBzb3VyY2VJbWFnZSgpIGNvbnN0OwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJGRUltYWdlIjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7
CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KK3ByaXZhdGU6CisgICAgRkVJbWFnZShT
b3VyY2VJbWFnZSYmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAotICAg
IFJlbmRlckVsZW1lbnQqIHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OworICAgIC8vIEZFSW1h
Z2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCisg
ICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpIG92ZXJyaWRlIHsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBmaW5h
bDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7Ci0gICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIC8vIG1fdHJlZVNjb3Bl
IHdpbGwgbmV2ZXIgYmUgYSBkYW5nbGluZyByZWZlcmVuY2UuIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyNDMKLSAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3Bl
IHsgbnVsbHB0ciB9OwotICAgIFN0cmluZyBtX2hyZWY7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdCBmaW5hbDsKKworICAgIFNvdXJjZUltYWdlIG1fc291cmNlSW1hZ2U7CiAgICAg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKIH07CiAK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGF1dG8gc291cmNlSW1hZ2VFbmNvZGUgPSBXVEY6Om1ha2VW
aXNpdG9yKAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCkpCisgICAgICAg
ICAgICAgICAgZW5jb2RlciA8PCBuYXRpdmVJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBp
bWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBpbWFnZUJ1ZmZlci0+cmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSB7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAg
fQorICAgICk7CisKKyAgICBzdGQ6OnZpc2l0KHNvdXJjZUltYWdlRW5jb2RlLCBtX3NvdXJjZUlt
YWdlKTsKKyAgICBlbmNvZGVyIDw8IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFSW1hZ2U+PiBGRUltYWdlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyOworICAgIGRlY29kZXIgPj4gaW1hZ2VJ
ZGVudGlmaWVyOworICAgIGlmICghaW1hZ2VJZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWU+IHByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgZGVjb2RlciA+PiBwcmVzZXJ2ZUFzcGVjdFJh
dGlvOworICAgIGlmICghcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGUoKmltYWdlSWRlbnRpZmllciwg
KnByZXNlcnZlQXNwZWN0UmF0aW8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUltYWdlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggOWE5NGE0
NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNlNy4uNzZmM2I0ZmFkMzQ5YWEyM2IxYjYz
Y2U1NzIxZDI5NmNiMGU2M2NjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjkgKzIzLDExOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCisjaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5j
bHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRl
cjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9v
bCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAs
IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lv
bikKLSAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCi0gICAgLCBt
X2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCi0gICAgLCBtX2VmZmVjdEJCb3hNb2RlKGVmZmVj
dEJCb3hNb2RlKQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVy
RWxlbWVudCYgZmlsdGVyRWxlbWVudCkKK3sKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRp
bkVmZmVjdHMgPSB7CisgICAgICAgIFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpLAorICAgICAgICBT
b3VyY2VBbHBoYTo6Y3JlYXRlKCkKKyAgICB9OworCisgICAgU1ZHRmlsdGVyQnVpbGRlciBidWls
ZGVyOworICAgIGF1dG8gW2ZpbHRlckVmZmVjdHMsIGV4cHJlc3Npb25dID0gYnVpbGRlci5idWls
ZEVmZmVjdHMoZmlsdGVyRWxlbWVudCwgYnVpbHRpbkVmZmVjdHMpOworICAgIGlmIChmaWx0ZXJF
ZmZlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
Y3JlYXRlKFdURk1vdmUoYnVpbHRpbkVmZmVjdHMpLCBXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBX
VEZNb3ZlKGV4cHJlc3Npb24pKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpj
cmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVz
c2lvbiYmIGV4cHJlc3Npb24pCit7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGJ1aWx0aW5FZmZl
Y3RzID0geyBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpIH07
CisgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0
ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSk7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+
IFNWR0ZpbHRlcjo6Y3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZlY3RzLCBG
aWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYg
ZXhwcmVzc2lvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcihXVEZNb3Zl
KGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNz
aW9uKSkpOworfQorCitTVkdGaWx0ZXI6OlNWR0ZpbHRlcihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBi
dWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmls
dGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pCisgICAgOiBGaWx0ZXIoVHlwZTo6U1ZHRmlsdGVy
KQorICAgICwgbV9idWlsdGluRWZmZWN0cyhXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSkKKyAgICAs
IG1fZmlsdGVyRWZmZWN0cyhXVEZNb3ZlKGZpbHRlckVmZmVjdHMpKQorICAgICwgbV9leHByZXNz
aW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCit7CisgICAgQVNTRVJUKG1fYnVpbHRpbkVmZmVjdHMu
c2l6ZSgpID09IDIpOworICAgIEFTU0VSVCghbV9maWx0ZXJFZmZlY3RzLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKK30KKworUmVmPEZpbHRlckVmZmVj
dD4gU1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlLCB1bnNp
Z25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1
dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOworICAgIGlmICh0eXBlID09IEZpbHRl
ckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVm
ZmVjdHNbMF07CisKKyAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFs
cGhhKQorICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0c1sxXTsKKworICAgIEFTU0VSVChp
bmRleCA8IG1fZmlsdGVyRWZmZWN0cy5zaXplKCkpOworICAgIHJldHVybiBtX2ZpbHRlckVmZmVj
dHNbaW5kZXhdOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXI6Omxhc3RFZmZl
Y3QoKSBjb25zdAoreworICAgIGlmIChtX2V4cHJlc3Npb24uaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdID0gbV9leHByZXNz
aW9uLmxhc3QoKTsKKyAgICByZXR1cm4gaW5kZXhlZEVmZmVjdCh0eXBlLCBpbmRleCk7CiB9CiAK
LUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUg
c2l6ZSkgY29uc3QKK2Jvb2wgU1ZHRmlsdGVyOjphcHBseShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwg
RmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fZWZmZWN0QkJveE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXpl
ICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCk7CisgICAgaWYgKCFsYXN0RWZmZWN0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gc291cmNlSW1h
Z2U7CisgICAgaWYgKCFzdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHNvdXJjZUltYWdlID0gc3Rh
Y2sudGFrZUxhc3QoKTsKKworICAgIEFTU0VSVChzdGFjay5pc0VtcHR5KCkpOworCisgICAgaWYg
KGF1dG8gaW1hZ2UgPSByZXN1bHQuaW1hZ2VzKCkuZ2V0KHsgKnRoaXMgfSkpIHsKKyAgICAgICAg
c3RhY2suYXBwZW5kKHsgKmltYWdlIH0pOworICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQog
Ci0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9h
YnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAg
Zm9yIChhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdIDogbV9leHByZXNzaW9uKSB7CisgICAgICAg
IGF1dG8gZWZmZWN0ID0gaW5kZXhlZEVmZmVjdCh0eXBlLCBpbmRleCk7CisgICAgICAgIGF1dG8g
Ym91bmRhcnlTZXQgPSBnZW9tZXRyeS5ib3VuZGFyeVNldCh0eXBlLCBpbmRleCk7CisKKyAgICAg
ICAgaWYgKGVmZmVjdC0+dHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhp
YykgeworICAgICAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZCh7ICpzb3VyY2VJbWFnZSB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghZWZmZWN0LT5hcHBseShyZXN1bHQsIHN0YWNrLCBn
ZW9tZXRyeSwgYm91bmRhcnlTZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOwogfQogCi1SZWY8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0
ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJl
Y3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJv
eE1vZGUpCitUZXh0U3RyZWFtJiBTVkdGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihhYnNvbHV0ZVRyYW5zZm9ybSwg
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyUmVn
aW9uLCBlZmZlY3RCQm94TW9kZSkpOworICAgIGF1dG8gZW5kID0gbV9leHByZXNzaW9uLnJlbmQo
KTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fZXhwcmVzc2lvbi5yYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gPSAqaXQ7CisgICAg
ICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEpCisgICAgICAg
ICAgICArK2l0OworCisgICAgICAgIGF1dG8gZWZmZWN0ID0gaW5kZXhlZEVmZmVjdCh0eXBlLCBp
bmRleCk7CisgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzLCBs
ZXZlbCk7CisgICAgICAgIGVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOworICAgIH0KKworICAgIHJldHVybiB0czsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaAppbmRleCA4MDkzMTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVhMGZiMTcwMGNmLi4zMzQ1
YjhlMDA2ZGYxZmMxM2JhYzBiYWM1ZTdlMjNiMTI4YzI3OGE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0MSArMjEsNDQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgIkZpbHRlckVmZmVj
dFZlY3Rvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIg
ZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKwog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0
ZXJFbGVtZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+
IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHBy
ZXNzaW9uJiYpOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIGNvbnN0
OwogCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYgZmlsdGVyRWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZmls
dGVyRWZmZWN0czsgfQorICAgIGNvbnN0IFNWR0ZpbHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24o
KSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb247IH0KIAotICAgIEZsb2F0U2l6ZSBzY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplKSBjb25zdCBmaW5hbDsKK3ByaXZhdGU6CisgICAg
c3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWls
dGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVy
RXhwcmVzc2lvbiYmKTsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQotICAgIEZsb2F0
UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdC
b3g7IH0KKyAgICBTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMs
IEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24m
Jik7CiAKLSAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIFJlZjxGaWx0ZXJFZmZlY3Q+IGluZGV4ZWRFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBl
LCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJz
b2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7
CisgICAgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQmLCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ss
IGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgZmluYWw7CisKKyAgICBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QgZmluYWw7CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdp
b247Ci0gICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1f
YWJzb2x1dGVGaWx0ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOwotICAg
IGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9idWlsdGlu
RWZmZWN0czsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9maWx0ZXJFZmZlY3RzOworICAgIFNW
R0ZpbHRlckV4cHJlc3Npb24gbV9leHByZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikK
ICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsg
cmV0dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24u
aXNTVkdGaWx0ZXIoKTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4xN2Q0
Mzg5OTUzMmU5YmRjMTEyODdjMWM1OGE5YmU1OWY1ODE4ODIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw4NyArMjEsMTg0
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCiAjaW5j
bHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlTnVtYmVycy5oPgorCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVB
Ul9TUkdCKQorI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRl
ckVmZmVjdD4gc291cmNlR3JhcGhpYykKK1ZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4gU1ZHRmls
dGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoU1ZHRmlsdGVyRWxlbWVu
dCYgZmlsdGVyRWxlbWVudCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKK3sK
KyAgICBhdXRvIHByaW1pdGl2ZVVuaXRzID0gZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygp
OworICAgIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4gZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRz
OworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAgICAg
ICBhdXRvIGJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIHByaW1p
dGl2ZVVuaXRzLCB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgICAgIAorICAgICAgICBPcHRpb25T
ZXQ8RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzPiBmbGFnczsKKyAgICAgICAgaWYgKGVmZmVjdEVs
ZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCisgICAgICAgICAgICBmbGFncy5h
ZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNYKTsKKworICAgICAgICBpZiAoZWZmZWN0
RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKKyAgICAgICAgICAgIGZsYWdz
LmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1kpOworCisgICAgICAgIGlmIChlZmZl
Y3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKKyAgICAgICAgICAg
IGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1dpZHRoKTsKKworICAgICAg
ICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQor
ICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzSGVpZ2h0
KTsKKworICAgICAgICBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMuYXBwZW5kKHsgYm91bmRhcmll
cywgZmxhZ3MgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0
czsKK30KKworc3RkOjp0dXBsZTxGaWx0ZXJFZmZlY3RWZWN0b3IsIFNWR0ZpbHRlckV4cHJlc3Np
b24+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0
ZXJFbGVtZW50LCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKQorewor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CisgICAg
aWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBzZXR1cEJ1aWx0aW5FZmZlY3RzKGJ1aWx0aW5F
ZmZlY3RzKTsKKworICAgIEZpbHRlckVmZmVjdHNJbnB1dHMgZWZmZWN0c0lucHV0czsKKyAgICBp
ZiAoIWJ1aWxkRWZmZWN0cyhmaWx0ZXJFbGVtZW50LCBlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGlmICghYnVpbGRFeHByZXNzaW9uKGVmZmVjdHNJbnB1dHMpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgV1RGTW92ZShtX2ZpbHRlckVmZmVj
dHMpLCBXVEZNb3ZlKG1fZXhwcmVzc2lvbikgfTsKK30KKwordm9pZCBTVkdGaWx0ZXJCdWlsZGVy
OjpzZXR1cEJ1aWx0aW5FZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVm
ZmVjdHMpCit7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VH
cmFwaGljTmFtZSgpLCBidWlsdGluRWZmZWN0c1swXSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5h
ZGQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKSwgYnVpbHRpbkVmZmVjdHNbMV0pOwor
fQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VHcmFwaGlj
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoRmlsdGVyRWZmZWN0
Ojpzb3VyY2VHcmFwaGljTmFtZSgpKTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmls
dGVyQnVpbGRlcjo6c291cmNlQWxwaGEoKSBjb25zdAogewotICAgIG1fYnVpbHRpbkVmZmVjdHMu
YWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYyk7Ci0gICAgbV9i
dWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6
OmNyZWF0ZSgqc291cmNlR3JhcGhpYykpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CisgICAg
cmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KEZpbHRlckVmZmVjdDo6c291cmNlQWxwaGFOYW1l
KCkpOwogfQogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBp
ZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KQordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjph
ZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0PiBl
ZmZlY3QpCiB7Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBtX2xhc3RFZmZlY3Qg
PSBlZmZlY3Q7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbGFzdEVmZmVj
dCA9IGVmZmVjdC5wdHIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2J1
aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKKyAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250
YWlucyhuYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0
OwotICAgIG1fbmFtZWRFZmZlY3RzLnNldChpZCwgbV9sYXN0RWZmZWN0KTsKKyAgICBtX2xhc3RF
ZmZlY3QgPSBlZmZlY3QucHRyKCk7CisgICAgbV9uYW1lZEVmZmVjdHMuc2V0KG5hbWUsIFdURk1v
dmUoZWZmZWN0KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6
OmdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbVN0cmluZyYgaWQpIGNvbnN0CitSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBu
YW1lKSBjb25zdAogewotICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobmFtZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgaWYgKG1fbGFzdEVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBt
X2xhc3RFZmZlY3Q7CiAKLSAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KFNvdXJj
ZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSk7CisgICAgICAgIHJldHVybiBzb3VyY2VHcmFwaGljKCk7
CiAgICAgfQogCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQotICAgICAg
ICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoaWQpOworICAgIGlmIChtX2J1aWx0aW5FZmZl
Y3RzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQo
bmFtZSk7CiAKLSAgICByZXR1cm4gbV9uYW1lZEVmZmVjdHMuZ2V0KGlkKTsKKyAgICByZXR1cm4g
bV9uYW1lZEVmZmVjdHMuZ2V0KG5hbWUpOwogfQogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFw
cGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGVmZmVj
dCwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xhdGlvbiBjb2xvckludGVycG9s
YXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgLy8gVGhlIGVmZmVj
dCBtdXN0IGJlIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXIgZWZmZWN0LgotICAgIEFTU0VSVCghbV9l
ZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOwotICAgIEFTU0VSVCghb2JqZWN0IHx8
ICFtX2VmZmVjdFJlbmRlcmVyLmNvbnRhaW5zKG9iamVjdCkpOwotICAgIG1fZWZmZWN0UmVmZXJl
bmNlcy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7Ci0KLSAgICB1bnNpZ25lZCBudW1i
ZXJPZklucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuc2l6ZSgpOwotCi0gICAg
Ly8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFkZCB0aGUgc2FtZSB2YWx1ZSB0byBhIHNldCB0d2lj
ZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsr
aSkKLSAgICAgICAgZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QtPmlucHV0RWZmZWN0KGkpKS5hZGQo
ZWZmZWN0LmdldCgpKTsKLQotICAgIC8vIElmIG9iamVjdCBpcyBudWxsLCB0aGF0IG1lYW5zIHRo
ZSBlbGVtZW50IGlzbid0IGF0dGFjaGVkIGZvciBzb21lCi0gICAgLy8gcmVhc29uLCB3aGljaCBp
biB0dXJuIG1lYW4gdGhhdCBjZXJ0YWluIHR5cGVzIG9mIGludmFsaWRhdGlvbiB3aWxsIG5vdAot
ICAgIC8vIHdvcmsgKHRoZSBMYXlvdXRPYmplY3QgLT4gRmlsdGVyRWZmZWN0IG1hcHBpbmcgd2ls
bCBub3QgYmUgZGVmaW5lZCkuCi0gICAgaWYgKG9iamVjdCkKLSAgICAgICAgbV9lZmZlY3RSZW5k
ZXJlci5hZGQob2JqZWN0LCBlZmZlY3QuZ2V0KCkpOworICAgIGlmIChhdXRvIHJlbmRlcmVyID0g
ZWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuc3Zn
U3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCk7CisKKyAgICAvLyBUcnkgdG8gZGV0
ZXJtaW5lIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHRoZSBjb21wdXRlZCBzdHlsZS4KKyAgICBp
ZiAoYXV0byB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IoJmVsZW1lbnQpLnByb3BlcnR5
VmFsdWUoQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzKSkgeworICAgICAgICBp
ZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gQ29s
b3JJbnRlcnBvbGF0aW9uOjpBdXRvOwogfQorI2VuZGlmCiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJFZmZlY3RzKCkKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKFNW
R0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVj
dHNJbnB1dHMpCiB7Ci0gICAgbV9sYXN0RWZmZWN0ID0gbnVsbHB0cjsKLSAgICBtX25hbWVkRWZm
ZWN0cy5jbGVhcigpOwotICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5jbGVhcigpOwotICAgIG1fZWZm
ZWN0UmVuZGVyZXIuY2xlYXIoKTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOworICAgIGVmZmVj
dHNJbnB1dHMuc2V0KCpzb3VyY2VBbHBoYSgpLCBGaWx0ZXJFZmZlY3RWZWN0b3IgeyAqc291cmNl
R3JhcGhpYygpIH0pOworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5P
ZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50
KSkgeworICAgICAgICBhdXRvIFtlZmZlY3QsIGlucHV0c10gPSBlZmZlY3RFbGVtZW50LmJ1aWxk
KCp0aGlzKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisgICAg
ICAgIGlmIChjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KGVmZmVjdEVsZW1lbnQpID09IENv
bG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCKQorICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVy
YXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpKTsKKyNl
bmRpZgorICAgIAorICAgICAgICBlZmZlY3RzSW5wdXRzLnNldCh7ICplZmZlY3QgfSwgV1RGTW92
ZShpbnB1dHMpKTsKKyAgICAgICAgYWRkTmFtZWRFZmZlY3QoZWZmZWN0RWxlbWVudC5yZXN1bHQo
KSwgeyAqZWZmZWN0IH0pOworCisgICAgICAgIG1fZmlsdGVyRWZmZWN0cy5hcHBlbmQoZWZmZWN0
LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCkKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0IFJlZjxG
aWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJ
bnB1dHMsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsKQogewotICAg
IGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIEEgY3lj
bGUgaXMgZGV0ZWN0ZWQuCisgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGVmZmVjdCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChlZmZlY3QucHRyKCkgPT0gc291cmNlR3JhcGhpYygp
KQorICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VHcmFwaGljLCAwLCBsZXZlbCB9KTsKKyAgICBlbHNlIGlmIChlZmZlY3QucHRyKCkgPT0g
c291cmNlQWxwaGEoKSkKKyAgICAgICAgbV9leHByZXNzaW9uLmluc2VydCgwLCB7IEZpbHRlckVm
ZmVjdDo6VHlwZTo6U291cmNlQWxwaGEsIDEsIGxldmVsIH0pOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQobV9maWx0ZXJFZmZlY3RzLmNvbnRhaW5zKGVmZmVjdCkpOworICAgICAgICBtX2V4
cHJlc3Npb24uaW5zZXJ0KDAsIHsgZWZmZWN0LT50eXBlKCksIG1fZmlsdGVyRWZmZWN0cy5maW5k
KGVmZmVjdCksIGxldmVsIH0pOworICAgIH0KKworICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOwor
CisgICAgZm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdHNJbnB1dHMuZ2V0KGVmZmVjdCkp
IHsKKyAgICAgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oaW5wdXRFZmZlY3QsIGVmZmVjdHNJbnB1
dHMsIHN0YWNrLCBsZXZlbCArIDEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IAotICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKHN0YWNrLmxhc3QoKS5wdHIoKSA9PSBlZmZlY3QucHRyKCkpOworCisg
ICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR0Zp
bHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBl
ZmZlY3RzSW5wdXRzKQoreworICAgIGlmICghbV9sYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVmZmVjdFJlZmVyZW5jZXMoZWZm
ZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKHJlZmVyZW5jZSk7CisgICAgRmls
dGVyRWZmZWN0VmVjdG9yIHN0YWNrOworICAgIHJldHVybiBidWlsZEV4cHJlc3Npb24oeyAqbV9s
YXN0RWZmZWN0IH0sIGVmZmVjdHNJbnB1dHMsIHN0YWNrLCAwKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3
NjQ2MGNlOTdmYTcuLmVlZThkZDVhOGQ3MGI3NTY5MGMxOGM2ZTNhNjYwMzYwZmU5OTg0ZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
ZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMCw2OCArMjEsNDUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKyNpbmNsdWRlICJGaWx0
ZXJFZmZlY3RWZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFeHByZXNzaW9uLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CiAKIGNsYXNzIFNWR0Zp
bHRlckJ1aWxkZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CisgICAgU1ZH
RmlsdGVyQnVpbGRlcigpID0gZGVmYXVsdDsKIAotICAgIFNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRy
PEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgc3RhdGljIFZlY3RvcjxGaWx0ZXJC
b3VuZGFyeVNldD4gYnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoU1ZHRmlsdGVyRWxlbWVu
dCYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpOwogCi0gICAgdm9pZCBzZXRU
YXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV90YXJnZXRCb3VuZGluZ0Jv
eCA9IHI7IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldEJvdW5kaW5nQm94OyB9Ci0gICAgCi0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0
VHlwZSBwcmltaXRpdmVVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlVW5pdHM7IH0K
LSAgICB2b2lkIHNldFByaW1pdGl2ZVVuaXRzKFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgdW5p
dHMpIHsgbV9wcmltaXRpdmVVbml0cyA9IHVuaXRzOyB9CisgICAgc3RkOjp0dXBsZTxGaWx0ZXJF
ZmZlY3RWZWN0b3IsIFNWR0ZpbHRlckV4cHJlc3Npb24+IGJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cyk7CiAKLSAg
ICB2b2lkIGFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4pOwor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5h
bWUpIGNvbnN0OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZ2V0RWZmZWN0QnlJZChjb25z
dCBBdG9tU3RyaW5nJikgY29uc3Q7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9Ci0KLSAgICB2b2lkIGFwcGVuZEVmZmVj
dFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiYmLCBSZW5kZXJPYmplY3Qq
KTsKK3ByaXZhdGU6CisgICAgdXNpbmcgRmlsdGVyRWZmZWN0c0lucHV0cyA9IEhhc2hNYXA8UmVm
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+OwogCi0gICAgaW5saW5l
IEZpbHRlckVmZmVjdFNldCYgZWZmZWN0UmVmZXJlbmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVjdCkK
LSAgICB7Ci0gICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRo
aXMgYnVpbGRlci4KLSAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhl
ZmZlY3QpKTsKLSAgICAgICAgcmV0dXJuIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCkt
PnZhbHVlOwotICAgIH0KKyAgICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cyk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
c291cmNlR3JhcGhpYygpIGNvbnN0OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUFs
cGhhKCkgY29uc3Q7CiAKLSAgICAvLyBSZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMg
b2YgYSBmaWx0ZXIgZHVyaW5nIGFuIHN2Z0F0dHJpYnV0ZUNoYW5nZWQuCi0gICAgaW5saW5lIEZp
bHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1
cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0KTsgfQorICAgIHZvaWQgYWRkTmFtZWRFZmZl
Y3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgUmVmPEZpbHRlckVmZmVjdD4pOworICAgIGJvb2wg
YnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CiAK
LSAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZl
KEZpbHRlckVmZmVjdCopOworICAgIGJvb2wgYnVpbGRFeHByZXNzaW9uKGNvbnN0IFJlZjxGaWx0
ZXJFZmZlY3Q+JiwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYsIEZpbHRlckVmZmVjdFZlY3Rv
ciYgc3RhY2ssIHVuc2lnbmVkIGxldmVsKTsKKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihjb25z
dCBGaWx0ZXJFZmZlY3RzSW5wdXRzJik7CiAKLXByaXZhdGU6Ci0gICAgaW5saW5lIHZvaWQgYWRk
QnVpbHRpbkVmZmVjdHMoKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2J1
aWx0aW5FZmZlY3RzLnZhbHVlcygpKQotICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFk
ZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOwotICAgIEhhc2hN
YXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOwotICAg
IC8vIFRoZSB2YWx1ZSBpcyBhIGxpc3QsIHdoaWNoIGNvbnRhaW5zIHRob3NlIGZpbHRlciBlZmZl
Y3RzLAotICAgIC8vIHdoaWNoIGRlcGVuZHMgb24gdGhlIGtleSBmaWx0ZXIgZWZmZWN0LgotICAg
IEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZpbHRlckVmZmVjdFNldD4gbV9lZmZlY3RS
ZWZlcmVuY2VzOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRWZmZWN0Kj4gbV9l
ZmZlY3RSZW5kZXJlcjsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9maWx0ZXJFZmZlY3RzOwor
ICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gbV9leHByZXNzaW9uOwogCisgICAgSGFzaE1hcDxBdG9t
U3RyaW5nLCBSZWY8RmlsdGVyRWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKKyAgICBIYXNoTWFw
PEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7Ci0gICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91
bmRpbmdCb3g7Ci0gICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3ByaW1pdGl2ZVVuaXRz
IHsgU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFIH07CiB9OwotICAg
IAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmI1MDJhZGE5NjI3MGU1MDE5MzJjNmMwN2I1ZjQ3OTU2MjQwM2I0NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Np
b24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIFNW
R0ZpbHRlckV4cHJlc3Npb24gPSBWZWN0b3I8c3RkOjp0dXBsZTxGaWx0ZXJFZmZlY3Q6OlR5cGUs
IHVuc2lnbmVkLCB1bnNpZ25lZD4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggN2Y2M2Y5NmMxNWQzZTQyY2Y5NDhiOGRmYmE5MWY1
YjFmNDFkMWMxOC4uMDk0ODJiY2NjNWQwZTFmNTM2YmU5NWJjZWNlMzA5MjRjNTIzN2U5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzAzLDYgKzMwMywyMCBAQCB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmRyYXdQYXR0ZXJuV2l0aFF1YWxpZmllZElkZW50aWZp
ZXIoUXVhbGlmaWVkUmVuZAogICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShp
bWFnZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmRy
YXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcj4gaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpCit7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICBp
ZiAoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSB7CisgICAgICAgIGltYWdlQnVmZmVyID0gcmVzb3Vy
Y2VDYWNoZSgpLmNhY2hlZEltYWdlQnVmZmVyKHsgKmltYWdlQnVmZmVySWRlbnRpZmllciwgbV93
ZWJQcm9jZXNzSWRlbnRpZmllciB9KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgeworICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlci50
YWtlRmlsdGVyKCksIGdlb21ldHJ5KSwgaW1hZ2VCdWZmZXIuZ2V0KCkpOworfQorCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKIHsKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG9wYWNpdHkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDYyYTQ5NzA2ZTI4
YjAxZTBhNmI4NjliZDMzZTYyNGVjN2Q4YjM2OTEuLjIyYjYzOWM5NDkzMmY3MTkxYmE2MmNmZDc5
MjZiMDc2NDdkZDkxYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMzcsNiArMzcs
MTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRmlsdGVyUmVmZXJlbmNlOworfQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKQEAgLTgwLDYg
Kzg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJik7CiAgICAgdm9p
ZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKICAgICB2b2lk
IGRyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgZHJhd0ZpbHRlckltYWdlQnVmZmVy
KHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBJ
UEM6OkZpbHRlclJlZmVyZW5jZSwgY29uc3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmKTsKICAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CiAgICAgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggNWMxNDA5M2EzYjlhYmEwYTFiZTcyMDY4N2Vm
YjQ2NjhiNTk1YTM2MS4uYTZlNmExY2JmNDczMmI1ZjAwMzg4NTlhNjM4YzFlODMxNWIyNzBmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KQEAgLTQ2LDYg
KzQ2LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3Vu
dGVkIFN0cmVhbSB7CiAgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4
X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQmVnaW5DbGlwVG9EcmF3aW5nQ29t
bWFuZHMoV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uLCBXZWJDb3JlOjpEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICBFbmRDbGlwVG9EcmF3aW5nQ29tbWFuZHMoV2Vi
Q29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uKQorICAgIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRl
clJlZmVyZW5jZSBmaWx0ZXIsIFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5IGdlb21ldHJ5KQogICAg
IERyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKICAgICBE
cmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
QnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwgV2Vi
Q29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0
aW9ucyBvcHRpb25zKQogICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VT
aXplLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNS
ZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcAppbmRleCBmNThjMzY5NmY1M2VmZDE1MGIxZGI5MGUzMWIzOWViNTY2
YjVkY2ZjLi42YzUxMzdiZWU4ZGIxNzIyM2JhZmY2NjY1Nzk5ZjJiYzVjMzQ1YjE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaCIKQEAgLTMwMyw2ICszMDQsMzQgQEAgdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcldpdGhR
dWFsaWZpZWRJZGVudGkKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOwog
fQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFn
ZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaWRlbnRpZmllciwgSVBDOjpGaWx0
ZXJSZWZlcmVuY2UmJiBmaWx0ZXJSZWZlcmVuY2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSwKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byBmaWx0ZXIgPSBmaWx0ZXJSZWZlcmVuY2UudGFrZUZpbHRlcigpOwor
ICAgIAorICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBbJl0oKSB7Cisg
ICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1h
Z2VCdWZmZXIoeyBpZGVudGlmaWVyLCBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPndlYlBy
b2Nlc3NJZGVudGlmaWVyKCkgfSk7CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+ZmlsdGVyZWRJ
bWFnZShmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZS0+c2l6ZSgpOworICAgICAg
ICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKEludFNpemUo
aW1hZ2VTaXplKSwgeyBpbWFnZUJ1ZmZlci0+Y29sb3JTcGFjZSgpIH0pOworICAgICAgICBpZiAo
IWJpdG1hcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoKmltYWdlLCBGbG9h
dFBvaW50KCkpOworICAgICAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIH0o
KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZSkpOworfQorCiB2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG5hdGl2ZUlt
YWdlUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIC8vIEltbWVkaWF0ZWx5IHR1cm4gdGhlIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciAod2hpY2ggaXMgZXJyb3ItcHJvbmUpIHRvIGEgUXVh
bGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5k
ZXggMzFhZDkyOTg5OWJkY2ZiODAwZWFlYmRjYTliMzFmOGFhOTMwYWM0OS4uMTNmOTdiY2NkMWU1
YTBjN2U3YzQ2OGFjOTY5YTFjMTc0YjgyNWE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC01
OSw2ICs1OSwxMCBAQCBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiBib29sOwogCiB9CiAKK25h
bWVzcGFjZSBJUEMgeworY2xhc3MgRmlsdGVyUmVmZXJlbmNlOworfQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKQEAgLTEwOSw2ICsxMTMs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZv
ckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKICAgICB2b2lkIGdldFNoYXJl
YWJsZUJpdG1hcEZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKKyAgICB2b2lkIGdldEZpbHRlcmVkSW1h
Z2VGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIElQ
Qzo6RmlsdGVyUmVmZXJlbmNlJiYsIGNvbnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5JiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CiAgICAg
dm9pZCBjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChS
ZWY8V2ViQ29yZTo6Rm9udD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCA5NDk4ODYzMDhhMzU0NjVkY2U1
ZmZhY2JjYzdiYzFjNmM0NTdiNDBhLi43MTM1NGVkZDA3NjYyYzk3ZjYxMzJkYjQ3MTczMTFlNTdl
Yjg1YTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpAQCAtMzEs
NiArMzEsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNvdW50
ZWQgU3RyZWFtIHsKICAgICBHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBl
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJpbmcg
dXJsU3RyaW5nKSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJpbmcg
bWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0U2hhcmVhYmxlQml0bWFwRm9y
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVm
ZmVyLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikgLT4gKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5j
aHJvbm91cyBOb3RTdHJlYW1FbmNvZGFibGVSZXBseQorICAgIEdldEZpbHRlcmVkSW1hZ2VGb3JJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlciwgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkg
Z2VvbWV0cnkpIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3lu
Y2hyb25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKICAgICBDYWNoZU5hdGl2ZUltYWdlKFdl
YktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSBOb3RTdHJlYW1F
bmNvZGFibGUKICAgICBDYWNoZUZvbnQoSVBDOjpGb250UmVmZXJlbmNlIGZvbnQpIE5vdFN0cmVh
bUVuY29kYWJsZQogICAgIERlbGV0ZUFsbEZvbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRmlsdGVyUmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODI5YWRlZjQ0YjlmYzMwYTc3ZWJk
MWRlMzgwMTE3NzA4ODMxNWFhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0ZpbHRlclJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ZpbHRlci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRkVCbGVuZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVDb2xvck1hdHJpeC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRkVDb21wb25lbnRUcmFuc2Zlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRkVDb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFQ29udm9sdmVNYXRyaXgu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFRGlzcGxhY2VtZW50TWFwLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9GRURyb3BTaGFkb3cuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFRmxvb2QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ZFR2F1c3NpYW5CbHVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU1lcmdl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU1vcnBob2xvZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZFT2Zmc2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRVRpbGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZFVHVyYnVsZW5jZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GaWx0ZXJFZmZlY3RWZWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZF
SW1hZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZpbHRlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cmNlR3JhcGhp
Yy5oPgorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgRmlsdGVyUmVmZXJlbmNlIHsKK3B1Ymxp
YzoKKyAgICBGaWx0ZXJSZWZlcmVuY2UoUmVmPFdlYkNvcmU6OkZpbHRlcj4mJiBmaWx0ZXIpCisg
ICAgICAgIDogbV9maWx0ZXIoV1RGTW92ZShmaWx0ZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZWY8V2ViQ29yZTo6RmlsdGVyPiB0YWtlRmlsdGVyKCkgeyByZXR1cm4gV1RGTW92ZShtX2ZpbHRl
cik7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxGaWx0ZXJSZWZlcmVuY2U+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlRmlsdGVyRWZmZWN0KGNvbnN0
IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYsIEVuY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OkZpbHRlckVmZmVjdD4gZGVjb2RlRmlsdGVy
RWZmZWN0KERlY29kZXImLCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZSk7CisKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGVTVkdGaWx0ZXIoY29uc3Qg
V2ViQ29yZTo6U1ZHRmlsdGVyJiwgRW5jb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6U1ZHRmlsdGVyPiBkZWNvZGVTVkdGaWx0ZXIoRGVj
b2RlciYpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2Rl
Q1NTRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkNTU0ZpbHRlciYsIEVuY29kZXImKTsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OkNTU0ZpbHRlcj4gZGVj
b2RlQ1NTRmlsdGVyKERlY29kZXImKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiBzdGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXIoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiwgRW5jb2Rl
ciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6
RmlsdGVyPiBkZWNvZGVGaWx0ZXIoRGVjb2RlciYpOworCisgICAgUmVmPFdlYkNvcmU6OkZpbHRl
cj4gbV9maWx0ZXI7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJS
ZWZlcmVuY2U6OmVuY29kZUZpbHRlckVmZmVjdChjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBBU1NFUlQoZWZmZWN0LnR5cGUoKSA+
PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWluaW11bSAmJiBlZmZlY3QudHlwZSgp
IDw9IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVNYXhpbXVtKTsKKworICAgIGVuY29k
ZXIgPDwgZWZmZWN0LnR5cGUoKTsKKyAgICBlbmNvZGVyIDw8IGVmZmVjdC5vcGVyYXRpbmdDb2xv
clNwYWNlKCk7CisKKyAgICBzd2l0Y2ggKGVmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVCbGVuZDoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29y
ZTo6RkVCbGVuZD4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXg6CisgICAg
ICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg+KGVmZmVjdCkuZW5jb2RlKGVuY29k
ZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUNv
bXBvbmVudFRyYW5zZmVyPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb3NpdGU6Cisg
ICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFQ29tcG9zaXRlPihlZmZlY3QpLmVuY29kZShlbmNv
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6RkVDb252b2x2ZU1hdHJpeDoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeD4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpG
RURpc3BsYWNlbWVudE1hcDoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgICAgIGRv
d25jYXN0PFdlYkNvcmU6OkZFRHJvcFNoYWRvdz4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
Rmxvb2Q6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFRmxvb2Q+KGVmZmVjdCkuZW5jb2Rl
KGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlOgorICAgICAgICBk
b3duY2FzdDxXZWJDb3JlOjpGRUltYWdlPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVNZXJn
ZToKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVNZXJnZT4oZWZmZWN0KS5lbmNvZGUoZW5j
b2Rlcik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTW9ycGhvbG9neToKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29y
ZTo6RkVNb3JwaG9sb2d5PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVPZmZzZXQ6CisgICAg
ICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFT2Zmc2V0PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAgICAgZG93bmNh
c3Q8V2ViQ29yZTo6RkVUdXJidWxlbmNlPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
R3JhcGhpYzoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlQWxwaGE6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorUmVmUHRyPFdl
YkNvcmU6OkZpbHRlckVmZmVjdD4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVGaWx0ZXJFZmZlY3Qo
RGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKK3sK
KyAgICBpZiAoISh0eXBlID49IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1pbmlt
dW0gJiYgdHlwZSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gb3BlcmF0aW5nQ29sb3JTcGFjZTsKKyAgICBkZWNvZGVyID4+
IG9wZXJhdGluZ0NvbG9yU3BhY2U7CisgICAgaWYgKCFvcGVyYXRpbmdDb2xvclNwYWNlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6b3B0aW9uYWw8UmVmPFdlYkNvcmU6OkZp
bHRlckVmZmVjdD4+IGVmZmVjdDsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVCbGVuZDoKKyAgICAgICAgZWZmZWN0ID0g
V2ViQ29yZTo6RkVCbGVuZDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbG9yTWF0
cml4OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpkZWNvZGUoZGVj
b2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb3NpdGU6CisgICAgICAg
IGVmZmVjdCA9IFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29udm9s
dmVNYXRyaXg6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmRl
Y29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmc6CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlzcGxhY2Vt
ZW50TWFwOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6ZGVj
b2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUZsb29kOgorICAgICAgICBlZmZlY3QgPSBX
ZWJDb3JlOjpGRUZsb29kOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyOgorICAgICAg
ICBlZmZlY3QgPSBXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGVjb2RlKGRlY29kZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUlt
YWdlOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUltYWdlOjpkZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFTWVyZ2U6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZShkZWNv
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6RkVNb3JwaG9sb2d5OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6
OkZFT2Zmc2V0OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZzoKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlOgor
ICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRVRpbGU6OmNyZWF0ZSgpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVR1cmJ1bGVuY2U6
CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZGVjb2RlKGRlY29kZXIp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VHcmFwaGljOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKGVmZmVjdCkgeworICAgICAgICAoKmVmZmVj
dCktPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoKm9wZXJhdGluZ0NvbG9yU3BhY2UpOworICAgICAg
ICByZXR1cm4geyAoKmVmZmVjdCkucHRyKCkgfTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjpl
bmNvZGVTVkdGaWx0ZXIoY29uc3QgV2ViQ29yZTo6U1ZHRmlsdGVyJiBmaWx0ZXIsIEVuY29kZXIm
IGVuY29kZXIpCit7CisgICAgZW5jb2RlciA8PCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6U1ZHRmlsdGVyOworCisgICAgYXV0byYgZmlsdGVyRWZmZWN0cyA9IGZpbHRlci5maWx0ZXJF
ZmZlY3RzKCk7CisgICAgZW5jb2RlciA8PCBmaWx0ZXJFZmZlY3RzLnNpemUoKTsKKworICAgIGZv
ciAoYXV0byYgZWZmZWN0IDogZmlsdGVyRWZmZWN0cykKKyAgICAgICAgZW5jb2RlRmlsdGVyRWZm
ZWN0KGVmZmVjdCwgZW5jb2Rlcik7CisgICAgCisgICAgYXV0byYgZXhwcmVzc2lvbiA9IGZpbHRl
ci5leHByZXNzaW9uKCk7CisgICAgZW5jb2RlciA8PCBleHByZXNzaW9uLnNpemUoKTsKKworICAg
IGZvciAoYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA6IGV4cHJlc3Npb24pIHsKKyAgICAgICAg
ZW5jb2RlciA8PCB0eXBlOworICAgICAgICBlbmNvZGVyIDw8IGluZGV4OworICAgICAgICBlbmNv
ZGVyIDw8IGxldmVsOworICAgIH0KK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0
cjxXZWJDb3JlOjpTVkdGaWx0ZXI+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlU1ZHRmlsdGVyKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHNpemU7CisgICAg
ZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgV2ViQ29yZTo6RmlsdGVyRWZmZWN0VmVjdG9yIGZpbHRlckVmZmVj
dHM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CisgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7Cisg
ICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgICAgIGF1dG8gZWZmZWN0ID0gZGVjb2RlRmlsdGVy
RWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAgICAgZmlsdGVyRWZmZWN0cy5hcHBlbmQoZWZm
ZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAg
ICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFdl
YkNvcmU6OlNWR0ZpbHRlckV4cHJlc3Npb24gZXhwcmVzc2lvbjsKKyAgICAKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsK
KyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IAorICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBpbmRleDsKKyAgICAgICAgZGVjb2Rl
ciA+PiBpbmRleDsKKyAgICAgICAgaWYgKCFpbmRleCkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGxldmVsOworICAgICAgICBk
ZWNvZGVyID4+IGxldmVsOworICAgICAgICBpZiAoIWxldmVsKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAgICAgZXhwcmVzc2lvbi5hcHBlbmQoeyAqdHlwZSwgKmluZGV4LCAq
bGV2ZWwgfSk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRl
KFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbikpOworfQorCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZUNTU0ZpbHRl
cihjb25zdCBXZWJDb3JlOjpDU1NGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sK
KyAgICBlbmNvZGVyIDw8IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXI7
CisgICAgZW5jb2RlciA8PCBmaWx0ZXIuZnVuY3Rpb25zKCkuc2l6ZSgpOworICAgIAorICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBmaWx0ZXIuZnVuY3Rpb25zKCkpIHsKKyAgICAgICAgaWYgKGlz
PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZnVuY3Rpb24pKQorICAgICAgICAgICAgZW5jb2RlU1ZHRmls
dGVyKGRvd25jYXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jb2RlRmlsdGVyRWZmZWN0KGRvd25jYXN0
PFdlYkNvcmU6OkZpbHRlckVmZmVjdD4oZnVuY3Rpb24uZ2V0KCkpLCBlbmNvZGVyKTsKKyAgICB9
CisgICAgCisgICAgZW5jb2RlciA8PCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpOworfQorCit0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgorUmVmUHRyPFdlYkNvcmU6OkNTU0ZpbHRlcj4gRmlsdGVyUmVm
ZXJlbmNlOjpkZWNvZGVDU1NGaWx0ZXIoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXpl
IHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBWZWN0b3I8UmVmPFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uPj4gZnVuY3Rpb25zOworICAgIAorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7CisgICAgICAgIGRlY29kZXIgPj4gdHlwZTsKKyAg
ICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
aWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvIGZpbHRlciA9IGRlY29kZVNWR0ZpbHRlcihkZWNvZGVyKSkg
eworICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxs
KCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVmZmVjdCA9IGRl
Y29kZUZpbHRlckVmZmVjdChkZWNvZGVyLCAqdHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0KQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbnMu
YXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisgICAgCisgICAgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlOworICAgIGRlY29k
ZXIgPj4gcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAoIXJlbmRlcmluZ01vZGUpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKFdU
Rk1vdmUoZnVuY3Rpb25zKSwgKnJlbmRlcmluZ01vZGUpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZUZpbHRlcihjb25zdCBXZWJDb3Jl
OjpGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBpZiAoaXM8V2ViQ29y
ZTo6Q1NTRmlsdGVyPihmaWx0ZXIpKQorICAgICAgICBlbmNvZGVDU1NGaWx0ZXIoZG93bmNhc3Q8
V2ViQ29yZTo6Q1NTRmlsdGVyPihmaWx0ZXIpLCBlbmNvZGVyKTsKKyAgICBlbHNlCisgICAgICAg
IGVuY29kZVNWR0ZpbHRlcihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZpbHRlciksIGVu
Y29kZXIpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorUmVmUHRyPFdlYkNvcmU6OkZp
bHRlcj4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVGaWx0ZXIoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOwor
ICAgIGRlY29kZXIgPj4gdHlwZTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpD
U1NGaWx0ZXIpCisgICAgICAgIHJldHVybiBkZWNvZGVDU1NGaWx0ZXIoZGVjb2Rlcik7CisKKyAg
ICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcikK
KyAgICAgICAgcmV0dXJuIGRlY29kZVNWR0ZpbHRlcihkZWNvZGVyKTsKKyAgICAKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsdGVyUmVm
ZXJlbmNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVGaWx0
ZXIobV9maWx0ZXIsIGVuY29kZXIpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3Rk
OjpvcHRpb25hbDxGaWx0ZXJSZWZlcmVuY2U+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2RlRmlsdGVyKGRlY29k
ZXIpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSB9OworICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNjU4NGQxYWQ3ZTE1NGViMDkyMDIzMTBk
ZGZhNmI1ZTEyMWFkMmMzOS4uZWI2YzJiNzAxOTgyOTJmMWFkZWZjMzU4NDAzMDg5MDgyNTVkZjZk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNjYsNiAr
MjY2LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ0NWUGl4ZWxCdWZmZXJSZWYnLAogICAgICAg
ICAnSVBDOjpEYXRhUmVmZXJlbmNlJywKKyAgICAgICAgJ0lQQzo6RmlsdGVyUmVmZXJlbmNlJywK
ICAgICAgICAgJ0lQQzo6Rm9udFJlZmVyZW5jZScsCiAgICAgICAgICdJUEM6OlNlbWFwaG9yZScs
CiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JywKQEAgLTI5MCw3ICsyOTEsNiBAQCBkZWYgdHlwZXNf
dGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6TWVk
aWFLZXlTeXN0ZW1SZXF1ZXN0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRpYVBs
YXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6TWVkaWFTZXNzaW9uSWRlbnRpZmll
cicsCi0gICAgICAgICdXZWJDb3JlOjpOYXRpdmVJbWFnZVJlZmVyZW5jZScsCiAgICAgICAgICdX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpQbGF5YmFja1Rhcmdl
dENsaWVudENvbnRleHRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBsdWdpbkxvYWRD
bGllbnRQb2xpY3knLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNjQ2ZWU2NDYxNzZkY2RlMTc0ZmQ0N2Y5NTY4MDk2NDc4ZjQ5NGIyMy4u
OTljY2U1NGFjYTkyZmRkNGI4MDRjMTEzN2I3Y2EwMjAxNDljMmQzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzQ4LDYgKzEzNDgs
NyBAQAogCQk3MUJBQTczMzI1RkZEMDk4MDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxQkFBNzMxMjVGRkNDQkEw
MEQ3Q0Q1RCAvKiBXS01vZGVsVmlldy5oICovOyB9OwogCQk3MUZCODEwQjIyNjA2MjdFMDAzMjM2
NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRkI4MTBBMjI2MDYyN0Ew
MDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICov
OyB9OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5
NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovOyB9OworCQk3MkVFNzlCRDI3
MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVFNzlCQTI3MEU1QUI5MDA0Q0U0MEUgLyogRmls
dGVyUmVmZXJlbmNlLmggKi87IH07CiAJCTc1QThEMkM4MTg3Q0NGQUIwMEMzOUM5RSAvKiBXS1dl
YnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTc1QThEMkQ2
MTg3RDFDMEUwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyRDQxODdEMUMwMTAw
QzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi87IH07CiAJCTc2MkI3NDhE
MTIwQkM3NUMwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzYyQjc0ODQxMjBCQkEyRDAwODE5
MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ3NjgsNiArNDc2OSw3IEBACiAJCTcyOEU4NkYw
MTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkI1MzE1NzI1M0MxRTREMDA0OTI5NUEgLyogUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjUzMTU4MjUzQzFF
NEQwMDQ5Mjk1QSAvKiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyRUU3OUJBMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRh
U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRh
U3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQxOCw2ICs3
NDIwLDcgQEAKIAkJCQlCQzAzMkQ5RTEwRjQzN0QxMDA1OEMxNUEgLyogRGVjb2Rlci5oICovLAog
CQkJCUJDMDMyRDlGMTBGNDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmNwcCAqLywKIAkJCQlCQzAz
MkRBMDEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5oICovLAorCQkJCTcyRUU3OUJBMjcwRTVB
QjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLywKIAkJCQk5QkQ4QUI0OTI1ODIwRTUy
MDA1Mzg2RjggLyogRm9udFJlZmVyZW5jZS5oICovLAogCQkJCTQxNTFFNUMzMUZCQjkwQTkwMEU0
N0UyRCAvKiBGb3JtRGF0YVJlZmVyZW5jZS5oICovLAogCQkJCUMwQ0U3MkFDMTI0N0U3OEQwMEJD
MEVDNCAvKiBIYW5kbGVNZXNzYWdlLmggKi8sCkBAIC0xMjQzNiw2ICsxMjQzOSw3IEBACiAJCQkJ
OTMxMkJBRDYyNkYzM0MyOTAwRkRERjVGIC8qIEZpbGVTeXN0ZW1TdG9yYWdlSGFuZGxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzVCNTc5QTI2RjUxOTMzMDA4QjQ4QUMgLyogRmlsZVN5c3RlbVN0
b3JhZ2VIYW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMxMkJBRDUyNkYzM0My
NjAwRkRERjVGIC8qIEZpbGVTeXN0ZW1TdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzJFRTc5QkQyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDBCOTY2MUExOEUyNUFFMTAwQ0UxRjg4IC8qIEZpbmRDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBOTBDMUY0MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5QzRBNTkxOEI4MTE3NDAwN0JEQ0I2IC8qIEZvY3Vz
ZWRFbGVtZW50SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCmluZGV4IDk0MjFkZDIzOGNiNmVjNjNmZTFjMDdk
NDczNjFjYjBiNjVmZjQwY2IuLjI1ZTRlZjA1N2FjOGE4YWQ1YjRiZWY0MTU2MjVhMGE2NzRjOTll
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkZp
bHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3QuaD4KQEAgLTIxNCw2ICsyMTUsMTEgQEAgdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3UGF0dGVybihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7CiB9CiAKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllciwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRlckltYWdlQnVmZmVyKGltYWdlSWRlbnRpZmllciwg
c291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRl
ciB9KSwgZ2VvbWV0cnkpKTsKK30KKwogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyKG9wYWNpdHkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5oCmluZGV4IDcxZmRiNjNkZjRhYzg0OTc0NzIzMjY5YjdmMDNkOTk3YjgxMzk4OWQuLmY3OTBm
MzcwNTU2MDIxMmRlOGM2OTJmMDk5ZTAxYWZmZDhiZTMwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaApAQCAtOTQsNiArOTQsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdOYXRp
dmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcj4sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBXZWJDb3Jl
OjpGaWx0ZXImLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRHJhd1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaAppbmRleCA2OTM0YmI0NjE2Y2UwMGJlYWIxNDBiYWE5NDEwOWI2YmE5NWYz
YzI0Li4yZjU2YWNlNDBkZjBiOTAyMGIyZDM1Njk0MjkwZGU5YzFiMmZmMzk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMTk3LDYgKzE5NywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHJldHVybiBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7CiAgICAgfQogCisgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlPiBmaWx0ZXJlZEltYWdlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVy
LCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
KyAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5nZXRGaWx0ZXJl
ZEltYWdlRm9ySW1hZ2VCdWZmZXIobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGZpbHRl
ciwgZ2VvbWV0cnkpOworICAgIH0KKwogICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyRm9ybWF0JiBk
ZXN0aW5hdGlvbkZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3Qg
ZmluYWwKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4
IDQxMzUxNzJmYWJmYzE2MTFkZDU2M2RiMDkyNjkyZmRlYTIwNzY4MjAuLjg1NzdhNzM3MTlmZTBm
ZDA5ZWYyZmIyMDIxMTgwMzZiNWU5ZTUyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAorI2luY2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCkBAIC0yMjUsNiArMjI2LDIyIEBAIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0U2hhcmVhYmxl
Qml0bWFwKFJlbmRlcmluCiAgICAgcmV0dXJuIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRs
ZSk7CiB9CiAKK1JlZlB0cjxJbWFnZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRG
aWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlQnVmZmVyLCBjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KQoreworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBhdXRv
IHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
R2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBJUEM6OkZpbHRlclJl
ZmVyZW5jZSB7IFJlZjxGaWx0ZXI+IHsgY29uc3RfY2FzdDxGaWx0ZXImPihmaWx0ZXIpIH0gfSwg
Z2VvbWV0cnkpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpLCAxX3MpOworICAgIEFTU0VSVF9VTlVTRUQoc2VuZFJlc3VsdCwgc2VuZFJlc3VsdCk7
CisKKyAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAor
ICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBp
ZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gYml0bWFw
LT5jcmVhdGVJbWFnZSgpOworfQorCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQog
ewogICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q2Fj
aGVOYXRpdmVJbWFnZShoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggNjRiYjkyNjdmZTZiMzM0OTZi
MzNmZTU3MGQ5YTcxZWFjYTU1NGNjZi4uZTBkZjYzNmNlMGQ4M2UwMzI0NzJmNWI0NDNmMTZlZjdj
YWEwNDEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJGaWx0ZXJS
ZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUg
IkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSVBDU2VtYXBo
b3JlLmgiCkBAIC05Myw2ICs5NCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0RGF0YVVSTEZv
ckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGdldERhdGFGb3JJbWFn
ZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBnZXRTaGFyZWFibGVCaXRtYXAoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIFJlZlB0
cjxXZWJDb3JlOjpJbWFnZT4gZ2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyJiwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2Uo
Y29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsK
ICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442350</attachid>
            <date>2021-10-25 02:36:07 -0700</date>
            <delta_ts>2021-10-25 02:44:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211025023605.patch</filename>
            <type>text/plain</type>
            <size>1006545</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExNmI1YjhiZDRmMjE4
OGYzYjIwODAyZDgxMjg1YWNhNGU5YTgxYy4uODYzOTgzNWZhYWE2ZjMxMjZmZjYyMDg5YzdiZTE0
NGMwZDc4NTcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjEtMTAtMjIgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5Q29yZUltYWdlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRU
cmFuc2ZlckNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUltYWdlOjpp
bWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzaGFyZWRDSUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VD
b3JlSW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUlt
YWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OkRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRl
ckltYWdlQnVmZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmltYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjpzb3VyY2VJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnNldEJsZW5kTW9kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQmxlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YmxlbmRNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9y
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0
YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzZXRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6c2V0Q29sb3JNYXRyaXhUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6dmFsdWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cmVkRnVuY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6Z3JlZW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpibHVlRnVuY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YWxwaGFGdW5jdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
RkVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlOjpzZXRLMik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZTo6c2V0SzMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNl
dEs0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmsxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjprMiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6azMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6Oms0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0UHJl
c2VydmVBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpmYXN0U2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6a2VybmVs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjprZXJuZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZGl2aXNvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpiaWFzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxwaGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRp
bmc6OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFu
bmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFlDaGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRY
Q2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5u
ZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNo
YW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnlDaGFubmVsU2VsZWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZF
RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojp0YWtlSW5w
dXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRHJvcFNoYWRvdzo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNldER5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0U2hhZG93Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpz
dGREZXZpYXRpb25YIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6c3RkRGV2aWF0aW9uWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmR4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6ZHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNoYWRvd09wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnNldEZsb29kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRv
S2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChnYXVzc2lhbktlcm5l
bEZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9u
WCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnN0YW5kYXJkQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91
dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRT
dGREZXZpYXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdl
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmVkZ2VNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnRha2VJbnB1dHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExl
bmd0aFgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVs
VW5pdExlbmd0aFkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldEtlcm5lbFVuaXRMZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNl
dEtlcm5lbFVuaXRMZW5ndGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNvdXJj
ZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6c3VyZmFjZVNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRTb3VyY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93
OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6
OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZSk6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGl4ZWxB
cnJheUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUGl4ZWxW
YWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWlu
T3JNYXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0cmVtdW0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZ
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cmFkaXVzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnJhZGl1c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpzZXREeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6c2V0RHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkeCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6OkZFU3BlY3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJD
b25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VGlsZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRC
YXNlRnJlcXVlbmN5WSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldEJhc2VGcmVxdWVuY3lYKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6c2V0U2VlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNt
b290aEN1cnZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0UGFpbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNo
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9p
c2UyRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OnNldFNlZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2VlZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5n
RGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
Qm91bmRhcnlTZXQ6OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5
U2V0Ojp5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmRlY29kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1
dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xl
YXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5w
dXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFz
UmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZ
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hl
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJz
b2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1h
bGl6ZWRGbG9hdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjp0
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0NTU0ZpbHRl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNTVkdGaWx0ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlckVmZmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlQWxwaGFOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VHcmFwaGljTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNhbGN1bGF0ZU91dHNl
dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpGaWx0
ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRl
RmlsdGVyU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJ
bWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1hcElt
YWdlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6bWFwUmVz
b2x2ZWRJbWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6
Om1hcEltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNs
aXBUb0ZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZmlsdGVyUmVnaW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpmaWx0ZXJTY2FsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRl
ckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6Y3JlYXRlRmlsdGVySW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
aW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OmVmZmVjdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291
cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5U29mdHdhcmUgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om1hdHJp
eCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBS
R0JBVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW50ZXJpb3JQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRPdXRlclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFk
b3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oLgorICAg
ICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpwaXhlbEFycmF5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjptaW5Pck1heCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRy
ZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlR1
cmJ1bGVuY2VQYWludGluZ0RhdGE6OlR1cmJ1bGVuY2VQYWludGluZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VHVyYnVsZW5jZVBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OnNtb290aEN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6aW5pdFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdh
cmU6OkZpbHRlckltYWdlU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VT
b2Z0d2FyZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgor
ICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0xpZ2h0aW5nRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2lu
ZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpsZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWxwaGFXaW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdp
bmRvdzo6c2V0UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0
aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmguCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjph
cHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRG
dW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0
ZU91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0
aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1p
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9w
ZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJRExFbnVtTGltaXRz
PENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6dG9TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
SW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
ZXJnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50
OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmhpZ2hlc3RFbnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
aGFzRmlsdGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6ZmlsdGVyRWZmZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpkZWNvZGUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVm
ZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpj
bGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmlt
aXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorCiAyMDIxLTEwLTIyICBLaW1tbyBLaW5udW5lbiAgPGtraW5u
dW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViR0wgbG93LXBvd2VyIGFuZCBoaWdoLXBlcmZv
cm1hbmNlIGNvbnRleHRzIHNob3VsZCB1c2UgZGlmZmVyZW50IEFOR0xFIE1ldGFsIEVHTERpc3Bs
YXlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGI1ZjVlMjQ4YmJkZDU2ZTM2ODNhYWExNzkzNjgxYTdmMzcxN2Y2MGIu
LmNiYTZhZDU4ZjlhNmE0Y2NmMTUxN2RkZTE3ZTA1OWE2YWQyNTY0OWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMjEtMTAtMjIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5j
b20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2Vz
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpkcmF3RmlsdGVySW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBQbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAoSVBDOjpG
aWx0ZXJSZWZlcmVuY2U6OkZpbHRlclJlZmVyZW5jZSk6CisgICAgICAgIChJUEM6OkZpbHRlclJl
ZmVyZW5jZTo6dGFrZUZpbHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5j
b2RlRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVG
aWx0ZXJFZmZlY3QpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZVNWR0Zp
bHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlU1ZHRmlsdGVyKToK
KyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGVDU1NGaWx0ZXIpOgorICAgICAg
ICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUNTU0ZpbHRlcik6CisgICAgICAgIChJUEM6
OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlRmlsdGVyKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVm
ZXJlbmNlOjpkZWNvZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKHR5cGVzX3RoYXRf
Y2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgor
CiAyMDIxLTEwLTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQWRkIHdlYnB1c2hkIHBsaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA2OTE1
OTZjMTkwZGJiYTRmZmQzNWIxMTQ1NTExYmE1OTdjOWZlZWI1Li44ZTYwODhjYzIzN2QwZWM1OTll
OGJhNjUxYmIyODc1ZGI3ZmE5NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MTksOCArMTQx
OSwzMCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJJbWFnZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZVZl
Y3Rvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXByZXNlbnRhdGlvbi5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2lzby9JU09Cb3guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09PcmlnaW5hbEZv
cm1hdEJveC5oCkBAIC0xNTkwLDYgKzE2MTIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGx1Z2lucy9ucHR5cGVzLmgKIAogICAgIHJlbmRlcmluZy9CcmVh
a0xpbmVzLmgKKyAgICByZW5kZXJpbmcvQ1NTRmlsdGVyLmgKICAgICByZW5kZXJpbmcvQ2xpcFBh
dGhPcGVyYXRpb24uaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCiAgICAgcmVuZGVyaW5nL0V2
ZW50UmVnaW9uLmgKQEAgLTE3MzAsMTIgKzE3NTMsMTcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHN2Zy9TVkdMZW5ndGhWYWx1ZS5oCiAgICAgc3ZnL1NWR1Bh
cnNlclV0aWxpdGllcy5oCiAgICAgc3ZnL1NWR1BhcnNpbmdFcnJvci5oCisgICAgc3ZnL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCiAgICAgc3ZnL1NWR1N0cmluZ0xpc3QuaAogICAgIHN2
Zy9TVkdUZXN0cy5oCiAgICAgc3ZnL1NWR1VuaXRUeXBlcy5oCiAKICAgICBzdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2VDYWNoZS5oCiAKKyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgK
KyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorICAgIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaAorCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHTGlz
dC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJpbWl0aXZlTGlzdC5oCiAgICAgc3ZnL3Byb3Bl
cnRpZXMvU1ZHUHJvcGVydHkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0YmVhMTRmNDRmYmY1MjExOTBm
NjMzYWI2NzMwNjkxMjMzYTU1YmY0Li43NTQ5MDI1ZDU5MWNkNGQ3YTYyM2JiOGEwODY1YmY4MGE1
YTlhYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA0NSw3ICsyMDQ1LDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9Jbk1lbW9yeURpc3BsYXlMaXN0LmNwcAotcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBA
IC0yMDYzLDE0ICsyMDYzLDM3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckdlb21ldHJ5LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAotcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJSZXN1bHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291
cmNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlRGF0YS5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExp
Z2h0U291cmNlRGF0YS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVC
bGVuZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bG9yTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdh
cmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2Fy
ZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29m
dHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29m
dHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3
YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VT
b2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1h
Z2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNl
QWxwaGFTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291
cmNlR3JhcGhpY1NvZnR3YXJlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09PcmlnaW5hbEZvcm1hdEJveC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2lzby9JU09Qcm90ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDkwNmMyOTk4NDVkYjAzZjc3MzhlNTgxODUwZDRkMGM0YWU5YTMwYzYu
LjU2YjBkNWYxOTNhMDY0Yzg1ZDE3NDdmYTA1ZWNlYzBhYWVlZTNmNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dApAQCAtNDAwLDcgKzQwMCwxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0
aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5t
bQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKLXBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0KK3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tCitwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KK3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lv
cy9EaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29u
SU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZTg0MGFhMjgyNDI2NGY2OTFlZTMzOWMwMzcxMTUxMTc3YTQ0MTE1NC4uZDgy
MGI4Y2NlNGI3ZmZiMDRlZDkxN2I5YzdiYTBiYTc4MTc0MDc2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM4LDcgKzIzOCw2
IEBACiAJCTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAvKiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODE2NjhEMjEy
NTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVpbGRlci5oICovOyB9OwogCQkwODE2NjhE
QTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxNjY4RDgxMjU2MDNENTAwNkYyNURF
IC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsKIAkJMDgxQUE4REExMTExMjM3RTAwMkFC
MDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRS
YXJlRGF0YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVy
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJ
MDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBG
MDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJ
MDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUw
RjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9Owog
CQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9udE1ldHJpY3MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5
RiAvKiBGb250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC03ODEsOCArNzgwLDYgQEAKIAkJMkFFRjZGREQyNkU3RUNDRjAwMzI2RDAy
IC8qIENTU051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZEMDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAq
LzsgfTsKIAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlwc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUy
NTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CiAJCTJCRThFMkM3MTJB
NTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAv
KiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsKLQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3
NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQwNjIxNDQxREE2MzlCNjAwQTdGQjI2IC8q
IFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRN
ZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJCTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMxREE2Mzk4ODAwQTdGQjI2IC8qIFdlYktp
dE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIy
NiAvKiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5
cy5jcHAgKi87IH07CkBAIC0xMjQ0LDcgKzEyNDEsNyBAQAogCQk0MzEwN0JFMjE4Q0MxOURFMDBD
QzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzEwN0JFMTE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0
b3JQc2V1ZG9UeXBlTWFwLmggKi87IH07CiAJCTQzMkQzRkU4MThBODY1ODQwMEQ3REMwMyAvKiBT
ZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MzJEM0ZFNzE4QTg2NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JD
aGVja2VyVGVzdEZ1bmN0aW9ucy5oICovOyB9OwogCQk0MzU4RTg3RDEzNjBBMkVFMDBFNDc0OEMg
LyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg3QjEzNjBBMkVFMDBFNDc0OEMgLyogSlNTVkdGRURy
b3BTaGFkb3dFbGVtZW50LmggKi87IH07Ci0JCTQzNThFODgxMTM2MEEzMTcwMEU0NzQ4QyAvKiBG
RURyb3BTaGFkb3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzNThFODdGMTM2MEEzMTcwMEU0NzQ4QyAvKiBGRURyb3BTaGFkb3cuaCAqLzsgfTsKKwkJ
NDM1OEU4ODExMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM1OEU4N0YxMzYwQTMxNzAwRTQ3NDhD
IC8qIEZFRHJvcFNoYWRvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MzU4RTg4MzEzNjBBMzNCMDBFNDc0OEMgLyogU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oICovOyB9
OwogCQk0MzY3MDhDMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODgyMTJEOUNBNEEw
MDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oICovOyB9OwogCQk0MzY3MDhDMzEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4NDEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZH
Q29udGFpbmVyLmggKi87IH07CkBAIC0yMzA2LDExICsyMzAzLDI1IEBACiAJCTcyNkQ1NkUyMjUz
QUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZv
cm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJD
NEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzI3QTdGM0EyNDA3OEI4NDAwNEQyOTMxIC8qIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyOTU5MTZGMjcyMEVCODcwMDM2OTk5MyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOEYyMjQ2
MUREM0QxQzUwMEU5MkRBMyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZB
NTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8q
IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5n
TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5
OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjlEMDUzMDI1MzE0MjQzMDA0MjIw
OTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJBNzNCRUYyNDVBM0Y5MDAwMUM5RDAzIC8qIEFuaW1hdGlv
bkZyYW1lUmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkMzMjcx
NDM0NDcwMDNFODhDNCAvKiBGaWx0ZXJHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNEODMyNzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRl
ckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZDNDI3MTQz
NTA1MDAzRTg4QzQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDNjI3MTQzNUZEMDAzRTg4QzQgLyog
RmlsdGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkM3Mjcx
NDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8q
IEZpbHRlclJlcHJlc2VudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzgyNzE0MzczMzAwM0U4OEM0IC8qIEZpbHRlckltYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkM5MEEz
QTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDOTI3MTQzN0QxMDAzRTg4QzQgLyog
RmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0EyNzE0MzkwMTAwM0U4OEM0IC8q
IENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUE0NkNCMjcxNDM5OTcwMDNF
ODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMwQjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZl
Y3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Np
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0
NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2RDQyNzE0RjE4RTAw
M0U4OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCNDI3MTQyQ0VCMDAzRTg4QzQgLyogRmlsdGVySW1h
Z2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3
MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJDNTc0ODYyNzIzRUM1RTAwMUVDOTVDIC8q
IExpZ2h0U291cmNlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJDNTc0ODUyNzIzQzU1NjAwMUVDOTVDIC8qIExpZ2h0U291cmNlRGF0YS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyRUJDN0RE
MjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJG
NjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERpYWdub3N0aWNMb2dnaW5nRG9tYWluLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0
MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dpbmdEb21haW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUg
LyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1
NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTI3MTMs
MzYgKzI3MjQsMzQgQEAKIAkJODQyMjQxOTQxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0MjI0MTkxMTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Lmgg
Ki87IH07CiAJCTg0MzAwQkQ2MTIwQzlBQUMwMDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDMwMEJE
NTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oICovOyB9OwogCQk4NDMw
MEJEODEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8q
IFNWR1BhdGhTb3VyY2UuaCAqLzsgfTsKLQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZp
bHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1
RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovOyB9OwotCQk4NDVFNzJGQzBGRDI2
MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGQTBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmgg
Ki87IH07CiAJCTg0NjUwRTdFMjM4N0FEN0QwMDYyNjZFMiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDY1MEU3
QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5oICovOyB9OwotCQk4NDcz
MEQ3NzEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QTEyNDhGMEIzMDBEM0E5
QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi87IH07Ci0JCTg0NzMwRDc5MTI0OEYwQjMwMEQz
QTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1h
dHJpeC5oICovOyB9OwotCQk4NDczMEQ3QjEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaWZmdXNlTGln
aHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDVFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdodGluZy5oICovOyB9OwotCQk4
NDczMEQ3RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDYwMTI0OEYwQjMwMEQz
QTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5oICovOyB9OwotCQk4NDczMEQ3RjEyNDhGMEIzMDBE
M0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRmxvb2QuaCAqLzsgfTsKLQkJ
ODQ3MzBEODExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDY0MTI0OEYwQjMwMEQzQTlDOSAv
KiBGRUxpZ2h0aW5nLmggKi87IH07Ci0JCTg0NzMwRDgzMTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1l
cmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDcz
MEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oICovOyB9OwotCQk4NDczMEQ4NTEyNDhG
MEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2ODEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9s
b2d5LmggKi87IH07Ci0JCTg0NzMwRDg3MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkExMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggKi87IH07Ci0JCTg0NzMwRDg5MTI0OEYwQjMwMEQz
QTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFy
TGlnaHRpbmcuaCAqLzsgfTsKLQkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkUx
MjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9OwotCQk4NDczMEQ4RDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmgg
Ki87IH07Ci0JCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzQxMjQ4RjBC
MzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi87IH07Ci0JCTg0NzMwRDkyMTI0OEYwQjMwMEQz
QTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNv
dXJjZS5oICovOyB9OwotCQk4NDczMEQ5MzEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0U291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDcz
MEQ3NjEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmggKi87IH07CisJCTg0NzMw
RDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QTEyNDhGMEIzMDBE
M0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMwRDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBG
RUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMwRDdC
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdodGluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENUUxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFRGlmZnVzZUxpZ2h0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJODQ3MzBEN0QxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlzcGxhY2VtZW50
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDcz
MEQ2MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFjZW1lbnRNYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ3RjEyNDhGMEIzMDBE
M0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRmxvb2QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4MTEyNDhGMEIz
MDBEM0E5QzkgLyogRkVMaWdodGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENjQxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGlnaHRpbmcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4
MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDcz
MEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2ODEyNDhGMEIzMDBEM0E5QzkgLyog
RkVNb3JwaG9sb2d5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJODQ3MzBEODcxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVPZmZzZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk4NDczMEQ4OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDcz
MEQ2QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEOEIxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMwRDhEMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0NzMwRDcwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDcz
MEQ5MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBM
aWdodFNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENzUx
MjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2VEYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNB
OUM5IC8qIFNwb3RMaWdodFNvdXJjZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRT
b3VyY2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJODQ3NkM5RTYxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3NkM5RTQx
MURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oICovOyB9OwogCQk4NDc2
QzlFQjExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzZDOUU4MTFERjZBMjkwMDU1NUIwMiAv
KiBTVkdQYXRoQnVpbGRlci5oICovOyB9OwogCQk4NDc2QzlFQzExREY2QTI5MDA1NTVCMDIgLyog
U1ZHUGF0aENvbnN1bWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDc2QzlFOTExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aENvbnN1bWVyLmggKi87
IH07CiAJCTg0NzZDOUYwMTFERjZBNTgwMDU1NUIwMiAvKiBTVkdQYXRoUGFyc2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDc2QzlFRTExREY2QTU4
MDA1NTVCMDIgLyogU1ZHUGF0aFBhcnNlci5oICovOyB9OwotCQk4NDgwMTk1NTEwOEJBRkIzMDBD
QjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUzMTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1
ci5oICovOyB9OworCQk4NDgwMTk1NTEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVzc2lhbkJsdXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUz
MTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1ci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0ODJCNzQ2MTE5OEMzNTQwMEJGQjAwNSAv
KiBIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAq
LzsgfTsKIAkJODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1IC8qIEpTSGFzaENoYW5nZUV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDgyQjc1MDEx
OThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJODQ4NTIyN0Mx
MTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1MjI3ODExOTAxNjJDMDA2RURDN0YgLyog
SlNTVkdIS2VybkVsZW1lbnQuaCAqLzsgfTsKIAkJODQ4NTIyN0UxMTkwMTYyQzAwNkVEQzdGIC8q
IEpTU1ZHVktlcm5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NDg1MjI3QTExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdWS2VybkVsZW1lbnQu
aCAqLzsgfTsKIAkJODQ4NTIyOEIxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ4NTIyODgx
MTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5oICovOyB9OwogCQk4NEE4MUYzRTBG
QzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VB
bHBoYS5oICovOyB9OwotCQk4NEE4MUY0MjBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhp
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRBODFG
NDAwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCAqLzsgfTsKKwkJODRBODFGNDIw
RkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQwMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3Vy
Y2VHcmFwaGljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJODRCMzQ5QTIyMkY4NkU3NTAwRDQ3QkNGIC8qIEV2ZW50VGFyZ2V0Q29uY3JldGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjM0OUEwMjJG
ODZFNzQwMEQ0N0JDRiAvKiBFdmVudFRhcmdldENvbmNyZXRlLmggKi87IH07CiAJCTg0QjZCOTc4
MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFG
IC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi87IH07CiAJCTg0QzVCMkZCMTIxNkRDODEwMDg4
QjUzQSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEM1QjJGOTEyMTZEQzgxMDA4OEI1M0EgLyog
U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oICovOyB9OwpAQCAtMzUwMywxMCArMzUxMiwx
MCBAQAogCQlBNzQwQjVBNTE0QzkzNUFCMDBBNzdGQTQgLyogSlNJbnRlcm5hbFNldHRpbmdzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0RUE3OTE0
QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRpbmdzLmggKi87IH07CiAJCUE3NDBCNUE3
MTRDOTM1QUYwMEE3N0ZBNCAvKiBKU0ludGVybmFsU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNEVBNzgxNEM5MzQ4NDAwQzhGNUJG
IC8qIEpTSW50ZXJuYWxTZXR0aW5ncy5jcHAgKi87IH07CiAJCUE3NUU0OTc2MTA3NTJBQ0IwMEM5
Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlBNzVFOEI4OTBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODEwRTFERTJENjAw
N0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgfTsKLQkJQTc1RThCOEIwRTFERTJENjAwN0YyNDgxIC8q
IEZFQ29sb3JNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3NUU4QjgzMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbG9yTWF0cml4LmggKi87IH07
Ci0JCUE3NUU4QjhEMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4NTBFMURF
MkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5oICovOyB9OwotCQlBNzVFOEI4RjBF
MURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg3MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBv
c2l0ZS5oICovOyB9OworCQlBNzVFOEI4OTBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODEwRTFE
RTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4QjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb2xvck1h
dHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1
RThCODMwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0
ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODUwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50
VHJhbnNmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg3MEUxREUyRDYwMDdG
MjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3NkU1RjdGMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzZFNUY3RTEzNUUwRENGMDBBNjk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3Nzk3OTFB
MEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTE0MEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
Nzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTI1MEQ2QjlFNjQwMDM4NTFCOSAv
KiBKU0ltYWdlRGF0YS5oICovOyB9OwpAQCAtMzg2MCw3ICszODY5LDcgQEAKIAkJQjIyMkY2OUQw
QUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OUIwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZH
RWxlbWVudC5oICovOyB9OwogCQlCMjIzNjIyOTBDM0FGMDRBMDAwOENBOUIgLyogSlNTVkdUZXh0
UGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyMjM2MjI3MEMzQUYwNEEwMDA4Q0E5QiAvKiBKU1NWR1RleHRQYXRoRWxlbWVudC5oICov
OyB9OwogCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjM1NDBGMTBEMDA3
ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjI1NTk5ODUwRDAwRDhCQTAwQkI4MjVDIC8qIFNW
R0ZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggKi87IH07CisJCUIyNTU5
OTg1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZH
RkVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUIyNTU5OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVD
IC8qIFNWR0ltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQjI1NTk5QTUwRDAwRDhCQTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEQwRDAwRDhC
OTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTY1MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1
bWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MTIxLDggKzYxMzAs
NiBAQAogCQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91dEVuZ2luZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5n
aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgxNjY4RDgxMjU2MDNENTAw
NkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyogU1ZHRWxlbWVudFJhcmVEYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRSYXJlRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZH
RmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJG
MzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQy
NzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3MSw4ICs2Mjc4LDYgQEAKIAkJMEY0OTY2QTgx
REI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFkT25seS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2lu
dFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRS
ZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRDREVBQTIzRDkxQThB
MDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBD
NDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgz
MjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNG
QjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0
MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJG
aWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzgyLDEwICs3Mzg3LDYg
QEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1l
dGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJD
ODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2
NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVy
RWZmZWN0UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQ0FBNEEz
NzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRBMzkyNEJFMThCNzAwOURFRTcwIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYy
MTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQzMURBNjM5ODgw
MEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYzQTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVk
aWFLZXlOZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwNTgxLDkgKzEwNTgyLDUzIEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAv
KiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNS
R0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAw
NDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRz
UkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0
NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5NzhENDMyNkZFOURFNzAwRkQyQzU2IC8q
IEZpbHRlclJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMg
LyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOUMwOUVEMjcyMjhBMjEwMEJFODgzOCAvKiBGaWx0
ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJHZW9tZXRyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDY2
MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNE
OEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q2QTI3MDNEQTlB
MDAzQzVBQUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgz
RDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QTgzRDZDMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENTU0ZpbHRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyog
RkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzMyNzA1N0NCRTAwM0M1
QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9y
cGhvbG9neVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNE
NzQyNzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGRU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIwMDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNv
ZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyog
RkVGbG9vZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdBMjcwNUFERkEwMDNDNUFB
RSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb252b2x2ZU1h
dHJpeFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0Qy
NzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIwMDNDNUFBRSAvKiBGRURyb3BTaGFkb3dT
b2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAv
KiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFB
RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDgx
MjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZpbHRlckltYWdlVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFBNDZCNzI3MTQyRjM4MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VT
b2Z0d2FyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVNvZnR3YXJlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI4MjcxNDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJJ
bWFnZUNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEZpbHRlckltYWdlQ29yZUltYWdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkFBNDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNDb3JlSW1h
Z2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJBMjcxNDJGN0EwMDNF
ODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkFBNDZCQjI3MTQzMEIwMDAzRTg4QzQgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFZlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCQzI3MTQzMEIxMDAzRTg4QzQgLyogRmls
dGVyUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRl
clJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJEMjcxNDMw
QjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBT
VkdGaWx0ZXJFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0ZpbHRlckV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2
QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkM0MjcxNDM1MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFy
eVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZENzI3MTU4QTU3MDAz
RTg4QzQgLyogRkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUE0NkQ5MjcxNThBNTcwMDNFODhDNCAvKiBGRUNvbXBvbmVudFRyYW5zZmVyQ29yZUltYWdl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlckNvcmVJbWFnZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMUI3NTEyNzE3RUEyRTAwMUIyRTA4
IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMUI3NTQyNzE5MTE0MzAwMUIy
RTA4IC8qIExpZ2h0aW5nRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaWdodGluZ0RhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU5NSw2ICsxMDY0
MCwxMCBAQAogCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFF
NTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQzU3NDgzMjcyM0MzQTQwMDFFQzk1QyAvKiBMaWdodFNvdXJj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQzU3NDg1MjcyM0M1NTYwMDFFQzk1QyAvKiBMaWdodFNvdXJjZURh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGlnaHRTb3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNTI4LDEzICsxMTU3NywxMCBAQAogCQk4NDMwMEJE
NTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU3RyaW5nU291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTb3VyY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBCRDkxMjBDOUFFRDAwMjE5NTRBIC8qIFNW
R1BhdGhTdHJpbmdTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0
NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ2NTBFN0MyMzg3QUQ3QzAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUxpc3RFdmVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDY1MEU3RjIzODdBRDhBMDA2MjY2
RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODQ2NTBFODAyMzg3QUQ4QjAwNjI2NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0RXZlbnQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlz
dGFudExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3Rh
bnRMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDczMEQ1QTEy
NDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg0NzMwRDVCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZl
TWF0cml4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9s
dmVNYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDczMEQ1QzEyNDhG
MEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0NzMwRDVEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdodGluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURpZmZ1c2VMaWdodGluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTU1OCw4ICsxMTYwNCw4IEBACiAJCTg0
NzMwRDZGMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRVR1cmJ1bGVuY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzQxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0
U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpZ2h0U291cmNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NzMwRDc1MTI0OEYwQjMwMEQzQTlDOSAv
KiBQb2ludExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBv
aW50TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ3MzBENzYx
MjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTcG90TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2VEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2VEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAv
KiBTcG90TGlnaHRTb3VyY2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNwb3RMaWdodFNvdXJjZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3
NDVCOEQyNEEzRjA5RjAwMjlBOEI1IC8qIEN1c3RvbVhQYXRoTlNSZXNvbHZlci5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NDVCOEUyNEEzRjBBMDAwMjlBOEI1IC8qIEN1c3RvbVhQYXRo
TlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NkM5RTMxMURG
NkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4ODcsOSArMTI5MzMsOSBAQAogCQlBMUUwODY2RTI0
OEFBQzg1MDBFNDk2RDkgLyogZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQuc2g7IG5h
bWUgPSAiZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoIjsgcGF0aCA9ICJTY3JpcHRzL2dlbmVy
YXRlLXVuaWZpZWQtc291cmNlcy5zaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEx
RTA4NjZGMjQ4QUFDODUwMEU0OTZEOSAvKiBjaGVjay14Y2ZpbGVsaXN0cy5zaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnNoOyBu
YW1lID0gImNoZWNrLXhjZmlsZWxpc3RzLnNoIjsgcGF0aCA9ICJTY3JpcHRzL2NoZWNrLXhjZmls
ZWxpc3RzLnNoIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFFMDg2NzAyNDhBQUM4
NTAwRTQ5NkQ5IC8qIGdlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnNoOyBuYW1lID0g
ImdlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaCI7IHBhdGggPSAiU2NyaXB0cy9nZW5lcmF0ZS1k
ZXJpdmVkLXNvdXJjZXMuc2giOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMUUxMTU0
MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExRTExNTQ1MTMwMTVDNEUwMDU0QUM4QyAvKiBQb2ludExp
Z2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvaW50
TGlnaHRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMUUxMTU0NzEz
MDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNwb3RMaWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUExRTExNTQzMTMwMTVDM0QwMDU0QUM4QyAvKiBEaXN0YW50TGlnaHRTb3Vy
Y2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3RhbnRM
aWdodFNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUUxMTU0
NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNvdXJjZURhdGEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRMaWdodFNvdXJjZURhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUUxMTU0NzEzMDE1QzVEMDA1NEFDOEMgLyogU3Bv
dExpZ2h0U291cmNlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTcG90TGlnaHRTb3VyY2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTFFRDc3OEExQkUzMjkzRjAwREMxNzkxIC8qIERldmljZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBMUVENzc4QjFCRTMyOTQwMDBEQzE3OTEgLyogRGV2aWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBMUY1NURCRjFGNTREMkQ2MDBFREI3NUYgLyogVGV4dEVuY29kaW5nUmVnaXN0cnlJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0RW5jb2RpbmdSZWdpc3RyeUlPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTczLDggKzE5NjE5LDExIEBACiAJCTJDRTExODk4
MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRCRTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJCTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3
MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZENzI3
MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJpeENvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFB
NDZEOTI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb21wb25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbSAq
LywKKwkJCQk3MkFBNDZCQTI3MTQyRjdBMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2Uu
aCAqLywKKwkJCQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1h
Z2UubW0gKi8sCisJCQkJNzJBQTQ2QjkyNzE0MkY3OTAwM0U4OEM0IC8qIFNvdXJjZUdyYXBoaWND
b3JlSW1hZ2UubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNvcmVpbWFnZTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzIwNCw2ICsyMzI1MywzMyBAQAogCQkJcGF0aCA9ICJtb2Rl
bC1lbGVtZW50IjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyQTgzRDZG
MjcwNTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRT
b2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzUyNzA1ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JN
YXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNEN0EyNzA1QURGQTAwM0M1QUFFIC8qIEZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzYyNzA1ODkwMjAw
M0M1QUFFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdDMjcwNUJE
ODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgz
RDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCAqLywK
KwkJCQk3MkE4M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyogRkVEcm9wU2hhZG93U29mdHdhcmUuY3Bw
ICovLAorCQkJCTcyQTgzRDc4MjcwNThDMDMwMDNDNUFBRSAvKiBGRUZsb29kU29mdHdhcmUuY3Bw
ICovLAorCQkJCTcyQTgzRDdCMjcwNUIyQzkwMDNDNUFBRSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3
YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MTI3MDY0NkUyMDAzQzVBQUUgLyogRkVMaWdodGluZ1Nv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NDI3MDU4MzdEMDAzQzVBQUUgLyogRkVNZXJnZVNv
ZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MzI3MDU3Q0JFMDAzQzVBQUUgLyogRkVNb3JwaG9s
b2d5U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDcyMjcwNTc5QzcwMDNDNUFBRSAvKiBGRU9m
ZnNldFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVU
aWxlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBQTQ2QjYyNzE0MkYzNzAwM0U4OEM0IC8q
IEZpbHRlckltYWdlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQUE0NkI3MjcxNDJGMzgwMDNFODhD
NCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmggKi8sCisJCQkJNzJCMUI3NTQyNzE5MTE0MzAwMUIy
RTA4IC8qIExpZ2h0aW5nRGF0YS5oICovLAorCQkJCTcyQTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAv
KiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVB
QUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gc29m
dHdhcmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QzAxMUYzQzI0RkFE
MzYwMDA1QkVGMTAgLyogU2V0dGluZ3NUZW1wbGF0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjUyNjAsOCArMjUzMzYsOSBAQAogCQlBNzVFOEI3RjBF
MURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRMaWdo
dFNvdXJjZS5jcHAgKi8sCi0JCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRM
aWdodFNvdXJjZS5oICovLAorCQkJCTcyQTgzRDZGMjcwNTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2Fy
ZSAqLywKKwkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0U291cmNl
RGF0YS5jcHAgKi8sCisJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdo
dFNvdXJjZURhdGEuaCAqLywKIAkJCQlBNzVFOEI4MDBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVu
ZC5jcHAgKi8sCiAJCQkJQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLywK
IAkJCQlBNzVFOEI4MjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJpeC5jcHAgKi8sCkBA
IC0yNTI5NiwyNCArMjUzNzMsMzcgQEAKIAkJCQk4NDczMEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyog
RkVUaWxlLmggKi8sCiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5j
ZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5o
ICovLAotCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3
MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUgLyogRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3
MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4
OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgw
REVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVD
IC8qIEZpbHRlckVmZmVjdC5oICovLAotCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCi0JCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3Njcz
IC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4
OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLAorCQkJCTcyQjFCNzUxMjcxN0VBMkUwMDFC
MkUwOCAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNzJBODNENjYyNzAzRDY2RDAwM0M1
QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzI5QzA5RUQyNzIyOEEyMTAwQkU4ODM4
IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLywKKwkJCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUg
LyogRmlsdGVyR2VvbWV0cnkuaCAqLywKKwkJCQk3MkM5MEEzOTI2MzY0QTFGMDA3N0YwRTggLyog
RmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0
ZXJJbWFnZS5oICovLAorCQkJCTcyQUE0NkI0MjcxNDJDRUIwMDNFODhDNCAvKiBGaWx0ZXJJbWFn
ZVZlY3Rvci5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJh
dGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCRDI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVwcmVz
ZW50YXRpb24uaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVz
dWx0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3MDBGRDJDNTYgLyogRmlsdGVyUmVzdWx0
LmggKi8sCisJCQkJNzJDNTc0ODMyNzIzQzNBNDAwMUVDOTVDIC8qIExpZ2h0U291cmNlLmNwcCAq
LywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKLQkJ
CQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCi0J
CQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKKwkJ
CQk3MkM1NzQ4NTI3MjNDNTU2MDAxRUM5NUMgLyogTGlnaHRTb3VyY2VEYXRhLmggKi8sCisJCQkJ
QTFFMTE1NDUxMzAxNUM0RTAwNTRBQzhDIC8qIFBvaW50TGlnaHRTb3VyY2VEYXRhLmNwcCAqLywK
KwkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZURhdGEuaCAq
LywKIAkJCQk4NEE4MUYzQjBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwICovLAog
CQkJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICovLAogCQkJCTg0
QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCAqLywKIAkJCQk4NEE4
MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oICovLAotCQkJCUExRTExNTQ3
MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGlnaHRTb3VyY2UuY3BwICovLAotCQkJCTg0NzMwRDc2
MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2UuaCAqLywKKwkJCQlBMUUxMTU0NzEz
MDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlRGF0YS5jcHAgKi8sCisJCQkJODQ3MzBE
NzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZURhdGEuaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNzA2Nywx
MCArMjcxNTcsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUIyNTU5OEVBMEQwMEQ4QjkwMEJC
ODI1QyAvKiBTVkdGRUltYWdlLmNwcCAqLywKIAkJCQlCMjU1OThFQjBEMDBEOEI5MDBCQjgyNUMg
LyogU1ZHRkVJbWFnZS5oICovLAotCQkJCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdG
aWx0ZXIuY3BwICovLAotCQkJCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIu
aCAqLywKLQkJCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5j
cHAgKi8sCi0JCQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIu
aCAqLywKKwkJCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmNwcCAqLywK
KwkJCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi8sCisJCQkJNzJB
QTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwICovLAorCQkJCTcy
QUE0NkJFMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJB
QTQ2QkYyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDIw
NCw4ICszMDI5NSw4IEBACiAJCQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4OUY2IC8qIENvbnRlbnRm
dWxQYWludENoZWNrZXIuaCAqLywKIAkJCQk5MzkyRjE0RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291
bnRlck5vZGUuY3BwICovLAogCQkJCTkzOTJGMTRCMEFEMTg2MUIwMDY5MUJENCAvKiBDb3VudGVy
Tm9kZS5oICovLAotCQkJCTBGNTNGQjgxMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3Bw
ICovLAotCQkJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJ
CQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4
M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVyLmggKi8sCiAJCQkJRTNCQkMyNDUyMzgz
NTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8sCiAJCQkJRTRBOEQyMTUyMjU3OERBMDAw
QTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJCQlFNEE4RDIxNDIyNTc4REEwMDBBODQ2
M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMxNjI5LDYgKzMxNzIwLDcgQEAKIAkJCWlzYSA9
IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
IAkJCWZpbGVzID0gKAorCQkJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkgaW4g
SGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0UgLyogQWJv
cnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAv
KiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjI4Nyw2ICszMjM3OSw3
IEBACiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzc5RTE0MUJCMjE1QkIwMENBQThCRiAvKiBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDQ3NkJEQjFERkNBQzAzMDA2
OTBFMjMgLyogQ1NTRGVmZXJyZWRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNB
MjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZCQjBD
NUI4MTdCQkQ2MjkwMDNEMzY3NyAvKiBDU1NGaWx0ZXJJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzY0QjRENjBDQjQyOThBMDA1RjJCNjIgLyogQ1NTRm9udEZhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MEU2Q0ZEMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NGb250RmFjZVJ1bGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMzI1NTMsNyArMzI2NDYsNyBAQAogCQkJCTBGNzkwRjQzMjUx
N0NFNkUwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYw
OTExMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzA0
MDI4MzI0OUE3QTYyMDBBOTBEOEQgLyogRGlzdGFuY2VNb2RlbFR5cGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGln
aHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkYzNEZFNjBFODJGODE0MDBGNjI3
Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ2RjEyRDI2RTM4MDBFNzMyMTUg
LyogRE5TUmVzb2x2ZVF1ZXVlQ0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg1RjQwMDk3
NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjc5NCwxMiAr
MzI4ODcsMTcgQEAKIAkJCQk5MzBFNDQ4NjI3MEMzNzIyMDBERTdBQjcgLyogRmlsZVN5c3RlbVN5
bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjY5RjBF
ODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4
MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NUU3
MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0
NkM5MjcxNDM3RDEwMDNFODhDNCAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0
NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRl
cmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAgLyogRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNC
MjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQUE0NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4OEM0IC8qIEZpbHRlckdlb21ldHJ5Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDODI3MTQzNzMzMDAzRTg4QzQgLyogRmlsdGVySW1h
Z2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkQ0MjcxNEYxOEUwMDNFODhDNCAvKiBGaWx0
ZXJJbWFnZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0RE
M0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
QUE0NkM3MjcxNDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxh
eW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0QyREQyNTBGRDgyODAwMDIwN0FBIC8qIEZs
ZXhGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDMzMCw2ICszNDQyOCw3
IEBACiAJCQkJNDEwRTQ0NjEyMzQzNzNFOTAwMDE3M0Q0IC8qIExpYldlYlJUQ1NvY2tldElkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQzE0QkM3MjZERTg1ODQwMDY4NUJGNSAvKiBM
aWJXZWJSVENVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3MzBEOTExMjQ4RjBCMzAwRDNB
OUM5IC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkM1NzQ4NjI3MjNFQzVF
MDAxRUM5NUMgLyogTGlnaHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk2
NTBEMDBCRjIyMDA3MUI3ODIgLyogTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBQjMxQzkxRTEwQUUxQjhFMDAwQzdCOTIgLyogTGluZUNsYW1wVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUZGRUZBQjJBMTgzODBEQTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0
U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ4NzQsNyArMzQ5NzMsNyBAQAogCQkJCUY0MjBG
MDBBMjVFNDc3OTEwMDkyNTFFRiAvKiBQb2ludGVyRXZlbnRUeXBlTmFtZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTNGRjgxM0E3MURCQTg2NDAwMDlCRjAwMSAvKiBQb2ludGVyTG9ja0NvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQ
b2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NDczMEQ5MjEyNDhGMEIzMDBE
M0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MDU5
OTdBMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NjZDMkRBRDI2QzczQUZDMDA2NTE5MzEgLyogUG9saWN5Q29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFFQzggLyogUG9seWdvblNoYXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTM1NTE5LDcgKzM1NjE4LDcgQEAKIAkJCQk5MzMwOUUxMjA5OUU2NDky
MDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODQ3MzBEOTMxMjQ4RjBC
MzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJODQ3MzBE
OTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZURhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDODNERTg2MUQwNENDNUQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3QkM2QTNCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxDYWxsYmFja1dyYXBw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTNDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxF
cnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTcwNiw5ICszNTgwNSw5IEBACiAJCQkJQjIyMjdB
MDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBMDYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFVGlsZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NDVFNzJGQzBGRDI2MjM5MDBBODdE
NzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODFFQkYzQjBGRDM0RjQxMDBE
QTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0My
NzE0MzlEOTAwM0U4OEM0IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdB
MEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQUE0NkNEMjcxNDM5RTUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyN0EwRjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0ExMjBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzU3NzYsNiArMzU4NzUsNyBAQAogCQkJCUIyMjI3QTkxMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdQb2x5Z29uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOTQwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR1BvbHlsaW5lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBOTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyOTU5MTZGMjcyMEVCODcwMDM2OTk5MyAvKiBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1RENDNTI4MjI0MDdCMjAwMEMyNkUz
MiAvKiBTVkdQcmltaXRpdmVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjE0NDMzMzIyM0VD
OEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyMTQ0MzM0
MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCA4Y2Y5MDlhZTll
NTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li41ZWRmYmY1M2UzYWFmYmE5NzAyNjBkZDgz
MzQ1OGMwMGI2YjNhODhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC0x
MTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpu
dWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7
CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmls
dGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNl
dFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVn
aW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2Zp
bHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0
byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuICZJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCi0gICAgYXV0byogb3V0
cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBpZiAoIW91dHB1dCkKLSAgICAgICAgcmV0
dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgRmlsdGVyR2VvbWV0cnkgZ2VvbWV0cnkoaW1h
Z2VSZWN0KTsKKyAgICBpZiAoYXV0byBmaWx0ZXJlZEltYWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJ
bWFnZSgqZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSkpCisgICAgICAgIHJldHVybiBmaWx0ZXJl
ZEltYWdlOwogCi0gICAgcmV0dXJuIG91dHB1dC0+Y29weUltYWdlKCk7CisgICAgcmV0dXJuICZJ
bWFnZTo6bnVsbEltYWdlKCk7CiB9CiAKIHZvaWQgQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVy
SW1hZ2VDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IGE1ZGQyOGI3Mzdi
YzgzNWU4NmVhM2VmMjAyYTc0ZTQ2YWIyMjIxODEuLjdjN2ViNDJlNTNjNjRkZmRjZWM4MjNiYjRi
M2U4YTljOTg2YTQ0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgog
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKQEAgLTEzOCw2ICsxMzksMTkgQEAgcHJvdGVjdGVk
OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZp
bHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBn
ZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kQ3JlYXRlZCgpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1
ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisKKyAgICAgICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgc3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0
ZDo6aWdub3JlKSA9IGZpbHRlci5hcHBseSh0aGlzLCB7IHsgfSwgbG9naWNhbFNpemUoKSB9LCBn
ZW9tZXRyeSk7CisgICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5
SW1hZ2UoKSA6IG51bGxwdHI7CisgICAgfQorCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVk
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDRjMWM1ZjkwODdhOTNhN2QxMjViODkzNjQ0OGYwNGVmZWQwZjcw
YzAuLjYxOTAzOTM5NWMxODE0MDliZDc2NGVlOTA5NTIxMDRiYWZkODg3NzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCiAjaW5jbHVkZSAi
Qml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9t
ZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVu
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC02MjksNiArNjMxLDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZSwgY29uc3QKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3Zl
KGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCit7CisgICAgYXV0byBbZmlsdGVyZElt
YWdlLCBpbWFnZVJlY3RdID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJl
Y3QsIGdlb21ldHJ5KTsKKyAgICBpZiAoZmlsdGVyZEltYWdlKQorICAgICAgICBkcmF3SW1hZ2VC
dWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogewogICAg
IFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggMDZiNzEzMzhlZjhkOTFhZGU0NmM5MjA5YTU5Yzc3MDk1MmRj
YTk5MC4uNDRkZWJiNWU2ZDQ2ODIyMjk2OThlMDgzMTAxMWFlMTQ3ZGY3Y2MxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAg
LTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGaWx0ZXI7CitjbGFzcyBG
aWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKQEAgLTQ1MCw2ICs0NTIsOCBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaAppbmRleCBhMDU5MmI5OWI4OGRiZTAxOGZhOTVjNWEzMDVkMjk4MmMwMjRmNmQ4
Li4zNmU0NTRjYTAyZmI5M2Y0YTI5MGI4Njc1NmRhMGQ3OTMzYmIxZGZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTQyLDYgKzQyLDkg
QEAgY2xhc3MgRHJhd2luZ0NvbnRleHQ7CiBzdHJ1Y3QgSXRlbUJ1ZmZlckhhbmRsZTsKIH0KIAor
Y2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0cnk7CisKIGNsYXNzIEltYWdlQnVmZmVy
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdlQnVmZmVyLCBXVEY6OkRlc3RydWN0
aW9uVGhyZWFkOjpNYWluPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEltYWdlQnVmZmVyPiB7CiBw
dWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBm
YWlsdXJlLgpAQCAtMTA2LDYgKzEwOSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUmVmUHRy
PE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8
SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSA9IDA7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0
aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBv
bmUuCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuaAppbmRleCAxNDNiYTAzYWNmZjljNmE2ZmM1NzkxMTU3OGNjM2I4MTljMjNi
ZGRkLi4wYWQyOTcwODhiNWY2N2RjMzJkZWJmOGJhNmE0NGJhMjQ3ZWY1ZTgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQu
aApAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmpl
Y3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
dmlydHVhbCBib29sIGlzSW5Vc2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkgeyB9CiAgICAgdmly
dHVhbCBWb2xhdGlsaXR5U3RhdGUgc2V0Vm9sYXRpbGUoYm9vbCkgeyByZXR1cm4gVm9sYXRpbGl0
eVN0YXRlOjpWYWxpZDsgfQogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlQnVmZmVyVG9Qb29sKCkg
eyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCmluZGV4IDJkMDIwMTZi
YjhlZTYzZWI3ZTNmM2E3M2YzY2E2NjliYjA5ZTBlNTIuLmFmYTQ5M2M4MzI1MWUxZWRlOGUxYWI0
ODYwZmUzYTJiZDg0MzEzODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5t
bQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBT
aG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NTRmlsdGVyOjpidWlsZCgpIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwMDgpLgorLy8gRklYTUU6IFNob3Vs
ZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCkuCiBzdGF0aWMgY29uc3QgZG91YmxlIHNl
cGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwK
ICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29sb3JNYXRyaXhD
b3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NmYTlmMTc5NjdiOTNmYjg3ZWM4NDNiNzlhNjU0ZGYy
OTU0ODcwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tCkBAIC0wLDAgKzEsMTA2IEBA
CisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRkVD
b2xvck1hdHJpeC5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlcklt
YWdlQ29yZUltYWdlLmgiCisjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0
IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KKyNpbXBvcnQgPENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29sb3JNYXRyaXg6OnN1cHBvcnRzQ29y
ZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb2xvck1hdHJpeFR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFCisgICAgICAgIHx8IG1fY29sb3JNYXRyaXhU
eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUKKyAgICAgICAgfHwgbV9jb2xvck1h
dHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDsKK30KKworYm9vbCBGRUNvbG9y
TWF0cml4OjphcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0u
Z2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBkb3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJ
bWFnZT4oaW5wdXQpLmltYWdlKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIHZhbHVlcyA9IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRG
bG9hdHMobV92YWx1ZXMpOworICAgIGZsb2F0IGNvbXBvbmVudHNbOV07CisgICAgCisgICAgc3dp
dGNoIChtX2NvbG9yTWF0cml4VHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOgorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgCisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgorICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAg
ICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogLy8gRklY
TUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVtZW50YXRpb24KKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGF1dG8gKmNvbG9yTWF0cml4RmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOworICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgpIGZvcktleTprQ0lJbnB1dEltYWdlS2V5
XTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29sb3JNYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFOiB7CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6Y29tcG9uZW50c1swXSBZOmNvbXBvbmVudHNbMV0gWjpjb21wb25lbnRzWzJd
IFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRl
ciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1szXSBZOmNvbXBvbmVu
dHNbNF0gWjpjb21wb25lbnRzWzVdIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CisgICAg
ICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29t
cG9uZW50c1s2XSBZOmNvbXBvbmVudHNbN10gWjpjb21wb25lbnRzWzhdIFc6MF0gZm9yS2V5OkAi
aW5wdXRCVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAg
ICAgICAgIFc6MV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAgICBZOjAg
ICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9y
Il07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVg6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2
ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6dmFsdWVzWzFdICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNb
M11dICBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBa
OnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1dICBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAg
ICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1
ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZhbHVlc1sxMl0gVzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJp
bnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTVdIFk6dmFsdWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2
YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4
RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVz
WzldICBaOnZhbHVlc1sxNF0gVzp2YWx1ZXNbMTldXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3Ii
XTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xV
TUlOQU5DRVRPQUxQSEE6CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZG93bmNhc3Q8RmlsdGVySW1hZ2VD
b3JlSW1hZ2U+KG91dHB1dCkuc2V0SW1hZ2UoY29sb3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2Up
OworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNm
ZXJDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjYwNjMyNTgyM2Q0ZTVkODU1ZGI0NmZiYjk4Mzk2
YmU4OTYyNzUzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCisKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnN1cHBvcnRzQ29y
ZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBhdXRvIGlzTnVsbE9yTGluZWFyID0gW10g
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCisg
ICAgICAgICAgICB8fCBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7CisgICAgfTsKKworICAgIHJldHVybiBpc051bGxPckxpbmVhcihtX3JlZEZ1bmN0aW9u
KQorICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2dyZWVuRnVuY3Rpb24pCisgICAgICAgICYm
IGlzTnVsbE9yTGluZWFyKG1fYmx1ZUZ1bmN0aW9uKQorICAgICAgICAmJiBpc051bGxPckxpbmVh
cihtX2FscGhhRnVuY3Rpb24pOworfQorCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5
Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJhbnNmZXIgZnVuY3Rpb25zCisgICAgQVNT
RVJUKHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkpOworCisgICAgQVNTRVJUKGlucHV0cy5z
aXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2UgPSBkb3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJbWFnZT4oaW5wdXQpLmlt
YWdlKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9s
eW5vbWlhbCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6
a0NJSW5wdXRJbWFnZUtleV07CisgICAgCisgICAgYXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0g
KE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9u
KSB7CisgICAgICAgIGlmIChmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVIpCisgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5jdGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6
a2V5XTsKKyAgICB9OworICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRz
IiwgbV9yZWRGdW5jdGlvbik7CisgICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRHcmVlbkNvZWZm
aWNpZW50cyIsIG1fZ3JlZW5GdW5jdGlvbik7CisgICAgc2V0Q29lZmZpY2llbnRzKEAiaW5wdXRC
bHVlQ29lZmZpY2llbnRzIiwgbV9ibHVlRnVuY3Rpb24pOworICAgIHNldENvZWZmaWNpZW50cyhA
ImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBtX2FscGhhRnVuY3Rpb24pOworICAgIAorICAgIGRv
d25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXRwdXQpLnNldEltYWdlKGZpbHRlci5vdXRw
dXRJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZj
OGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0NGFmNy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJl
IG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCIKLSNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgPHd0Zi9WZWN0b3Iu
aD4KLQotT0JKQ19DTEFTUyBDSUltYWdlOwotT0JKQ19DTEFTUyBDSUZpbHRlcjsKLU9CSkNfQ0xB
U1MgQ0lDb250ZXh0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZFQ29sb3JNYXRy
aXg7Ci1jbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOwotY2xhc3MgU291cmNlR3JhcGhpYzsKLQot
Y2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIAotcHVibGljOgot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLSAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFy
ZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5h
bDsKLSAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1h
Z2U7IH0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmluYWw7Ci0gICAgRmxvYXRS
ZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQg
Y2xlYXJSZXN1bHQoKSBmaW5hbDsKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgp
OwotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVy
cyhGaWx0ZXJFZmZlY3QmKTsKLSAgICB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZm
ZWN0JikgZmluYWw7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmco
RmlsdGVyRWZmZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wgY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMo
RmlsdGVyRWZmZWN0Jik7Ci0gICAgCi0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291
cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7Ci0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdl
Rm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiwgY29uc3QgVmVjdG9yPFJldGFp
blB0cjxDSUltYWdlPj4mKTsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbXBv
bmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImLCBWZWN0b3I8UmV0YWluUHRy
PENJSW1hZ2U+PiYpOwotICAgIAotICAgIFJlZlB0cjxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4gbV9v
dXRwdXRJbWFnZUJ1ZmZlcjsKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gbV9vdXRwdXRJbWFnZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1h
Z2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDk3ZTExMzdiMjlkNzFjMmI1NDQxNTczMDY3MjQwMGI4MjQyOGIzNjEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0qLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlLmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9ydCAiRkVDb2xvck1h
dHJpeC5oIgotI2ltcG9ydCAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgotI2ltcG9ydCAiRmlsdGVy
LmgiCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbXBvcnQgIkZpbHRlck9wZXJhdGlvbi5o
IgotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRD
Ry5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBv
cnQgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbXBvcnQgPENvcmVJbWFnZS9DSUNvbnRleHQuaD4KLSNp
bXBvcnQgPENvcmVJbWFnZS9DSUZpbHRlci5oPgotI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFn
ZS5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0IDx3dGYvY29jb2Ev
VHlwZUNhc3RzQ29jb2EuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotICAgIGlmIChj
YW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0KSkKLSAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+KCk7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRh
aW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0V2l0aE9wdGlv
bnM6QHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNlOiBicmlkZ2VfaWRfY2FzdChhZG9wdENG
KENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSkpLmdldCgpIH1d
OwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0YXRpYyBib29sIGlzTnVsbE9yTGluZWFy
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiBlZmZl
Y3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9IFtdIChjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24udHlwZSA9
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAgICAgICAgICAgfHwgZnVuY3Rp
b24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgIH07Ci0gICAg
cmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRGdW5jdGlvbigpKSAmJiBpc051bGxPckxp
bmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAgICAgICAmJiBpc051bGxPckxpbmVhcihl
ZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5hbHBoYUZ1bmN0
aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICAvLyBGSVhN
RTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQK
LSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgewotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDog
ewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCkudHlwZSgp
KSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAg
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5z
ZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwotCi0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpD
b21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4Ogot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Okxp
Z2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5n
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3Vy
Y2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgbV9vdXRwdXRJbWFnZSA9IGNvbm5lY3RD
SUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFtX291dHB1dEltYWdlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKLX0KLQotUmV0YWlu
UHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0
ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFn
ZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5pbnB1dEVm
ZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCpp
bik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7Ci0gICAgfQotICAgIGVm
ZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGVmZmVjdC5zZXRSZXN1bHRD
b2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIAotICAgIGlmIChl
ZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6
Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291cmNlR3Jh
cGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4
OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGRvd25jYXN0PEZFQ29sb3JN
YXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29tcG9uZW50
VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KSwgaW5wdXRJbWFn
ZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmls
dGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUltYWdlCi0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxv
b2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0
aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWMm
IGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVy
KCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJ
bWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBpbWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNh
c3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkuc3VyZmFjZSgpLnN1cmZhY2Uo
KV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGltYWdlV2l0aENHSW1hZ2U6c291cmNlSW1h
Z2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOwotfQotCi1SZXRh
aW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVD
b2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBlZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRh
aW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBp
bnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFsdWVzID0gRkVDb2xvck1hdHJpeDo6bm9y
bWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07
Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgpKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgICAgICBicmVhazsKLSAg
ICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBBbHBoYSBJbXBsZW1lbnRhdGlvbgotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byAqY29sb3JNYXRyaXhG
aWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07Ci0gICAg
W2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlu
cHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgewotICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0gWTpjb21wb25lbnRzWzFdIFo6Y29tcG9u
ZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRy
aXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbM10gWTpj
b21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBdIGZvcktleTpAImlucHV0R1ZlY3RvciJd
OwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rvcldp
dGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzddIFo6Y29tcG9uZW50c1s4XSBXOjBdIGZv
cktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFs
dWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6
MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwotICAgICAgICBbY29s
b3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAgICAg
ICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjBdIGZvcktleTpAImlucHV0Qmlh
c1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lW
ZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZhbHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6
dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJp
eEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzVdICBZOnZhbHVl
c1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAgZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07
Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9y
S2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1
ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNb
MTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9yIl07Ci0gICAgICAgIFtjb2xv
ck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZ
OnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVzWzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFz
VmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gY29sb3JNYXRy
aXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZF
Q29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mIGlu
cHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIHJlc3Qgb2YgRkVDb21w
b25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NFUlQoaXNOdWxsT3JMaW5lYXJDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0gICAgYXV0byBpbnB1dEltYWdlID0gaW5w
dXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5h
bWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAotICAgIFtmaWx0ZXIgc2V0VmFsdWU6aW5w
dXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07Ci0gICAgCi0gICAgYXV0byBz
ZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvbi50eXBlID09IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0gICAgICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5jdGlvbi5z
bG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9OwotICAgIHNldENvZWZmaWNpZW50cyhA
ImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJlZEZ1bmN0aW9uKCkpOwotICAgIHNldENv
ZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVudHMiLCBlZmZlY3QuZ3JlZW5GdW5jdGlv
bigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1dEJsdWVDb2VmZmljaWVudHMiLCBlZmZl
Y3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxwaGFDb2Vm
ZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKLSAgICAKLSAgICByZXR1cm4gZmls
dGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBp
ZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVmZmVjdCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsK
LSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygqaW4pIHx8ICFjYW5SZW5k
ZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMgPDwgIiB1c2luZyBDb3JlSW1hZ2VcbiIp
OwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVyLmdldCgpOwotfQotICAgIAotdm9pZCBG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJF
ZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkp
OwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCksIGxhc3RFZmZl
Y3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9v
dXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVhclJlc3VsdCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjogbV9vdXRw
dXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgp
LnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZm
ZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07Ci19Ci0gICAgCi1G
bG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZp
bHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGRlc3RTaXplID0g
bGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6ZS5zY2Fs
ZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKLSAgICByZXR1cm4gZGVz
dFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVz
dWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBtX291dHB1
dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAgICA6IEZpbHRlckVmZmVjdFJlbmRlcmVy
KCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1h
Z2VDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3NGM1OGFiNjZhMjgxMDUwMzA2
Y2Y5Njc4YmI3NThkYTlhMjBkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaApAQCAtMCww
ICsxLDU4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlckltYWdlLmgiCisKK09CSkNfQ0xBU1MgQ0lJ
bWFnZTsKK09CSkNfQ0xBU1MgQ0lDb250ZXh0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZpbHRlckltYWdlQ29yZUltYWdlIDogcHVibGljIEZpbHRlckltYWdlIHsKK3B1YmxpYzoK
KyAgICB1c2luZyBGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJ
bWFnZT4gaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgdm9pZCBzZXRJbWFn
ZShSZXRhaW5QdHI8Q0lJbWFnZT4mJik7CisgICAgCitwcml2YXRlOgorICAgIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBvdmVycmlkZTsKKyAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAgIFJldGFpblB0cjxDSUltYWdlPiBtX2lt
YWdlOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpGaWx0ZXJJbWFnZUNvcmVJbWFnZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUo
KSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsgfQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VD
b3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2Uv
RmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE5ZmUwNTg4ZmYwNTU0ZTliMjEy
MmM4YzYxZTU2MzM2NjRjNzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbQpAQCAtMCww
ICsxLDczIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCIKKworI2lmIFVTRShDT1JFX0lNQUdFKQorCisj
aW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250
ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRD
SUNvbnRleHQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250
ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6QHsga0NJQ29u
dGV4dFdvcmtpbmdDb2xvclNwYWNlOiBicmlkZ2VfaWRfY2FzdChhZG9wdENGKENHQ29sb3JTcGFj
ZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSkpLmdldCgpIH1dOworICAgIHJldHVy
biBjaUNvbnRleHQ7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2VDb3JlSW1hZ2U6OnNldEltYWdlKFJl
dGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQoreworICAgIEFTU0VSVChpbWFnZSk7CisgICAgbV9p
bWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQorCitSZWZQdHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJJ
bWFnZUNvcmVJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cygpCit7CisgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXI7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZTo6aW1hZ2VC
dWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2NvbG9yU3BhY2Us
IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZGVzdFJlY3QgPSBGbG9hdFJlY3QgeyBGbG9hdFBv
aW50KCksIG1fbG9naWNhbFNpemUgfTsKKyAgICBbc2hhcmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVu
ZGVyOiBtX2ltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1
ZmZlcj4oKm1faW1hZ2VCdWZmZXIpLnN1cmZhY2UoKS5zdXJmYWNlKCkgYm91bmRzOmRlc3RSZWN0
IGNvbG9yU3BhY2U6bV9jb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpXTsKKyAgICAKKyAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGlj
Q29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwOWQ2ZWFkMWJmMjU0ODg1YmI1M2U3MjY4ZTgwYWIz
M2I2YmQxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDYxIEBA
CisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU291
cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlcklt
YWdlLmgiCisjaW1wb3J0ICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2ltcG9ydCAiUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhp
Yzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7
CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICgh
aW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENJSW1h
Z2U+IGltYWdlOworICAgIGlmIChpczxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2Up
KQorICAgICAgICBpbWFnZSA9IFtDSUltYWdlIGltYWdlV2l0aElPU3VyZmFjZTpkb3duY2FzdDxJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2UpLnN1cmZhY2UoKS5zdXJmYWNlKCldOwor
ICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFnZSBpbWFnZVdpdGhDR0ltYWdlOmlucHV0
SW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCldOworCisgICAg
aWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGRvd25jYXN0PEZp
bHRlckltYWdlQ29yZUltYWdlPihvdXB1dCkuc2V0SW1hZ2UoV1RGTW92ZShpbWFnZSkpOworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZi
MGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4uMTE4MTllNTc5Y2VjOTJhN2NlNzFmNTA2
NWFiNjk4MzA4NDBhMGYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTI1LDgg
KzI1LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGRUJsZW5kTkVPTl9oCi0j
ZGVmaW5lIEZFQmxlbmRORU9OX2gKKyNwcmFnbWEgb25jZQogCiAjaWYgSEFWRShBUk1fTkVPTl9J
TlRSSU5TSUNTKQogCkBAIC0xMDcsMTUgKzEwNiwxOCBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAot
dm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVyUmVzdWx0KiBGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoRmlsdGVyUmVzdWx0cyYgcmVzdWx0cywgRmlsdGVy
UmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIqLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgYXV0byBpbiA9IHN0YWNrLnRha2VMYXN0
KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFzdCgpOworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IHJlc3VsdHMuZ2V0KHsgKnRoaXMgfSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIoKS5jcmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1
dGVQYWludFJlY3QoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSByZXN1bHQtPnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOwogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
QEAgLTEyOSw3ICsxMzEsNyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAKICAgICBpZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CiAgICAgICAgIHBsYXRm
b3JtQXBwbHlORU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlC
LT5kYXRhKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlM
ZW5ndGgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiByZXN1bHQubGVha1JlZigp
OwogICAgIH0KICAgICAvLyBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQg
dG8gdHdvLgogICAgIEFTU0VSVChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAs
NiArMTQyLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIHNv
dXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVs
QXJyYXlCLT5kYXRhKCkpWzBdOwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHNvdXJjZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VC
QW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7
CiAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5k
YXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gcmVzdWx0LmxlYWtS
ZWYoKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFy
KiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVk
IGNoYXIqIGRzdFBpeGVsQXJyYXksCkBAIC0yMDUsNSArMjA5LDMgQEAgdm9pZCBGRUJsZW5kOjpw
bGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQg
Y2hhciogc3IKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEZFQmxlbmRORU9OX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0NWVXRpbGl0aWVzLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KaW5kZXggNDA3Mjcw
NDNmZDEyZDYyYTRjYmQ3ZGJiNTllNDExNjBhMjhkZGYyMi4uYWNmOTZmZDBkNTQwYWI4NmU3NzBk
NDYxM2MxOTBhMjI4M2I3MDVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIKIAorI2ltcG9ydCAiQ29sb3JTcGFjZUNH
LmgiCiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0
TGluay5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBkZmY0MTQ0MjYxOTY3YmZl
OGRlMmRlYzkyYzZmOTM5ODMyZGUxN2U4Li4zODVlZWU5ZjZmYjQ4MDFmN2JmOTMxNmEwM2MwYjVl
MjcxZjVjMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTI1MSw2ICsyNTEsOCBA
QCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1
cm4gYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaXRlbS5nZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxE
cmF3UGF0dGVybj4oaXRlbS5nZXQ8RHJhd1BhdHRlcm4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3RmlsdGVy
SW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKSk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1JlY3Q+KGl0
ZW0uZ2V0PERyYXdSZWN0PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggYzEzOWU1MDk0ODUx
ODBiOWViZDkwMTcyNzJiZTk2YWE1MjI2NzVmZS4uYWEyZDU3YWYwZGRjNTE0YWFiZjAyM2M1YTQ3
ZjA5ZjFjNTMwOGYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5jcHAKQEAgLTEyNiw2ICsxMjYsOSBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKICAgICAg
ICAgZ2V0PERyYXdQYXR0ZXJuPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOgorICAgICAgICBnZXQ8RHJh
d0ZpbHRlckltYWdlQnVmZmVyPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIGdldDxEcmF3UmVjdD4oKS5hcHBs
eShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjU5LDYgKzI2Miw5IEBAIHZvaWQgSXRl
bUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CiAgICAgICAg
IGdldDxDbGlwUGF0aD4oKS5+Q2xpcFBhdGgoKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoKKyAgICAgICAgZ2V0PERyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcj4oKS5+RHJhd0ZpbHRlckltYWdlQnVmZmVyKCk7CisgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKICAgICAgICAgZ2V0PERyYXdG
b2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9jdXNSaW5nUGF0aCgpOwogICAgICAgICByZXR1cm47CkBA
IC01MDAsNiArNTA2LDggQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVt
VHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPENsaXBPdXRUb1BhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwUGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBQYXRoPihpdGVtT2Zmc2V0
LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOgorICAg
ICAgICByZXR1cm4gY29weUludG88RHJhd0ZpbHRlckltYWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CiAgICAgICAgIHJl
dHVybiBjb3B5SW50bzxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCAyNDRlMGUzNWMxMjc1NjIwOTY5YzVhYmE1ODY0MjA1
MThhZTRlZDQwLi4wYWU5MDc1OGRjYTIyMGJiMGRiNmRhYjhhMjJmZjY5YjgzNTU0ZjQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC04OCw2ICs4OCw4IEBA
IHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAg
cmV0dXJuIHNpemVvZihEcmF3TmF0aXZlSW1hZ2UpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXR0ZXJuOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdQYXR0ZXJuKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJh
d0ZpbHRlckltYWdlQnVmZmVyKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICAg
ICAgcmV0dXJuIHNpemVvZihEcmF3UmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6
CkBAIC0yMjIsNiArMjI0LDcgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0
czoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgpAQCAtMjk2LDYgKzI5OSw3IEBAIGJv
b2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5D
bGlwVG9EcmF3aW5nQ29tbWFuZHM6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rmls
dGVySW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdHbHlwaHM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAppbmRleCA5
OTE5NDU4ZDIzNjU5Y2VlY2I3NTg1Mzg3ZjEyOGVmYWYwZDQ3YTI1Li4yYjMyMDQ0M2NiZGM0ZTU2
MDY2YjY5NDdlMTBiOGViZWExYjQ3NjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1UeXBlLmgKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3Qg
ewogICAgIENsaXBQYXRoLAogICAgIEJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzLAogICAgIEVu
ZENsaXBUb0RyYXdpbmdDb21tYW5kcywKKyAgICBEcmF3RmlsdGVySW1hZ2VCdWZmZXIsCiAgICAg
RHJhd0dseXBocywKICAgICBEcmF3SW1hZ2VCdWZmZXIsCiAgICAgRHJhd05hdGl2ZUltYWdlLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IGU3MjZkOTRmMzAwNTAwMjMx
MmJjNjQyYjMwMTVlY2JhZTMxNDg0OGMuLmMzYWE2NTIzZDY2Y2U0YzZiNTU5MzMyNDA3M2JjMTMx
MGNhY2I5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTQyNSw2
ICs0MjUsMzEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAorRHJhd0ZpbHRl
ckltYWdlQnVmZmVyOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpCisgICAgOiBtX2ltYWdlSWRlbnRpZmllcihpbWFnZUlkZW50aWZpZXIpCisgICAgLCBt
X3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpCisgICAgLCBtX2ZpbHRlcihmaWx0ZXIp
CisgICAgLCBtX2dlb21ldHJ5KGdlb21ldHJ5KQoreworfQorCitOT19SRVRVUk5fRFVFX1RPX0FT
U0VSVCB2b2lkIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBEcmF3RmlsdGVy
SW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgV2ViQ29yZTo6SW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlKQoreworICAgIGNvbnRleHQuZHJhd0ZpbHRlckltYWdlQnVm
ZmVyKHNvdXJjZUltYWdlLCBtX3NvdXJjZUltYWdlUmVjdCwgbV9maWx0ZXIsIG1fZ2VvbWV0cnkp
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0ZpbHRlckltYWdlQnVmZmVyJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
aW1hZ2UtaWRlbnRpZmllciIsIGl0ZW0uaW1hZ2VJZGVudGlmaWVyKCkpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic291cmNlLWltYWdlLXJlY3QiLCBpdGVtLnNvdXJjZUltYWdlUmVjdCgpKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKIHZvaWQgRHJhd1JlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdSZWN0KG1fcmVjdCwgbV9ib3JkZXJU
aGlja25lc3MpOwpAQCAtMTA3NSw2ICsxMTAwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlQnVmZmVyOiB0cyA8PCAiZHJhdy1pbWFnZS1idWZmZXIiOyBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOiB0cyA8PCAiZHJhdy1wYXR0
ZXJuIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOiB0
cyA8PCAiZHJhdy1maWx0ZXItaW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1JlY3Q6IHRzIDw8ICJkcmF3LXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3TGluZTogdHMgPDwgImRyYXctbGluZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lc0ZvclRleHQ6IHRzIDw8ICJkcmF3LWxpbmVzLWZvci10ZXh0IjsgYnJlYWs7CkBA
IC0xMjA0LDYgKzEyMzAsOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CiAgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigpOwogICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdSZWN0PigpOwog
ICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGNlYmYz
NjliZmEyZWYwZjY3ZjEzMWZiODUyMzZlOWFhODk3ZDQ0ODAuLmI3MmE3YTRhYmI4YjBkNWU0ZTZi
MDFiYzI4ODQ4NmZkYmI5ODU4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApA
QCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNp
bmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiRGlz
cGxheUxpc3RJdGVtVHlwZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpAQCAtMTEwMCw2ICsxMTAyLDMwIEBAIHBy
aXZhdGU6CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9vcHRpb25zOwogfTsKIAorY2xhc3Mg
RHJhd0ZpbHRlckltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgV0VCQ09SRV9FWFBPUlQg
RHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPiBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpOworCisgICAgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2VJZGVudGlmaWVyOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisKKyAgICBOT19SRVRVUk5fRFVF
X1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6SW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFs
PFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9pbWFnZUlkZW50aWZpZXI7CisgICAgRmxv
YXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworICAgIFJlZjxGaWx0ZXI+IG1fZmlsdGVyOworICAg
IEZpbHRlckdlb21ldHJ5IG1fZ2VvbWV0cnk7Cit9OworCiBjbGFzcyBCZWdpblRyYW5zcGFyZW5j
eUxheWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI7CkBAIC0yNDQzLDYgKzI0NjksNyBA
QCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICAsIENvbmNhdGVuYXRl
Q1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyCiAgICAgLCBEcmF3RWxsaXBzZQor
ICAgICwgRHJhd0ZpbHRlckltYWdlQnVmZmVyCiAgICAgLCBEcmF3Rm9jdXNSaW5nUGF0aAogICAg
ICwgRHJhd0ZvY3VzUmluZ1JlY3RzCiAgICAgLCBEcmF3R2x5cGhzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggNDc3OTQyMWY0M2Q2Y2E5MDkzZmJjNWY1ZjMz
MmZmNDA5OWE1M2E2MS4uOGE1OTZjZWYwOTIzZjg2NmMxMzVlOTJjMmI2Yjg5YjZkZTMwZTQ4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
CkBAIC0xODIsNiArMTgzLDUxIEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0CiAgICAgcmVjb3Jk
RHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6
ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KQoreworICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisKKyAgICBpZiAoIXNvdXJjZUltYWdl
KSB7CisgICAgICAgIHJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcih7IH0sIHNvdXJjZUltYWdl
UmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFjYW5EcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlKSkgeworICAgICAgICBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1h
Z2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUltYWdlKSkgeworICAgICAgICBib29sIGlzUmVtb3RlSW1hZ2UgPSBXVEY6OnN3aXRj
aE9uKGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSkuc291cmNlSW1hZ2UoKSwKKyAgICAg
ICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKCpuYXRpdmVJbWFnZSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChjb25zdCBSZWY8
SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgICAgIGlmIChjYW5EcmF3
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZFJl
c291cmNlVXNlKGltYWdlQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikg
eworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFpc1JlbW90ZUltYWdlKSB7CisgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNl
SW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJlY29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSk7CisgICAg
cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKK30KKwog
dm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVjb3JkU2F2ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggMDYwNWQ2ZjI0YmY0NTMyNDdhNGE4ZTg4ZmUz
YmRjMjYwNzc2MDc0NC4uZjk2YmI4ZjMzM2JhYzA0MDlkMzM5NTE5ZjExYWVkYjc0NjQ0MzE4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC05Miw2ICs5Miw3IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFn
ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lM
YXllcigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQpID0gMDsKQEAgLTIyOSw2ICsyMzAsOCBAQCBwcml2YXRlOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlckltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgZmluYWw7CisKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
SW1wbC5jcHAKaW5kZXggZjQ3NDMyNGZkNzMxYjJjNzk1ZmZjMTY4M2VhZmUxOGMxNjhmYjdhNS4u
NzhjMGM0NzNjNDM2YTk4MGRhZmUxYjlkNThlYzNhMGEwZTA0OTYzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBAIC0yMjgsNiArMjI4LDExIEBA
IHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyCiAgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlk
ZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdG
aWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkKK3sKKyAgICBhcHBl
bmQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPihpbWFnZUlkZW50aWZpZXIsIHNvdXJjZUltYWdlUmVj
dCwgZmlsdGVyLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgYXBwZW5kPEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuaAppbmRleCBiZWQ3MWY2NDg1MWQ3YmUxMzAxOThkYTIwZDQ4YWEzZGI2YjM5
NDE5Li4xMTYzMGExYWRlYjFhOTIzMWMxZWUwZmMzZTVjMDczNGFhY2UzMDI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtOTAsNiArOTAsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRl
cm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVmYjFmZjY2
NWQzZWIwN2Y0OGVlMWQwMmJiZmZjYzZiMDQ0MWY4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVy
Y3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5p
QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXN0
YW50TGlnaHRTb3VyY2UuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkK
LXsKLSAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZChtX2F6aW11dGgpOwotICAgIGZsb2F0IGVs
ZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFs
TGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yID0gewotICAgICAgICBzdGQ6OmNvcyhhemltdXRoKSAq
IHN0ZDo6Y29zKGVsZXZhdGlvbiksCi0gICAgICAgIHN0ZDo6c2luKGF6aW11dGgpICogc3RkOjpj
b3MoZWxldmF0aW9uKSwKLSAgICAgICAgc3RkOjpzaW4oZWxldmF0aW9uKQotICAgIH07Ci0gICAg
cGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGggPSAxOwot
fQotCi1MaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgRGlzdGFudExpZ2h0U291cmNl
Ojpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCwgaW50LCBmbG9hdCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFpbnRpbmdEYXRhLmlu
aXRpYWxMaWdodGluZ0RhdGE7Ci19Ci0KLWJvb2wgRGlzdGFudExpZ2h0U291cmNlOjpzZXRBemlt
dXRoKGZsb2F0IGF6aW11dGgpCi17Ci0gICAgaWYgKG1fYXppbXV0aCA9PSBhemltdXRoKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9hemltdXRoID0gYXppbXV0aDsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBEaXN0YW50TGlnaHRTb3VyY2U6OnNldEVsZXZhdGlvbihmbG9hdCBl
bGV2YXRpb24pCi17Ci0gICAgaWYgKG1fZWxldmF0aW9uID09IGVsZXZhdGlvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fZWxldmF0aW9uID0gZWxldmF0aW9uOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1UZXh0U3RyZWFtJiBEaXN0YW50TGlnaHRTb3VyY2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIlt0eXBlPURJU1RB
TlQtTElHSFRdICI7Ci0gICAgdHMgPDwgIlthemltdXRoPVwiIiA8PCBhemltdXRoKCkgPDwgIlwi
XSI7Ci0gICAgdHMgPDwgIltlbGV2YXRpb249XCIiIDw8IGVsZXZhdGlvbigpIDw8ICJcIl0iOwot
ICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZTMwZWRlNzU5ODM3
MjhhNjMyYmNjZmZiMDk5NzNhM2E0ZTcyZmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9EaXN0YW50TGlnaHRTb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9i
QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGln
aHRTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRGlzdGFudExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPERpc3RhbnRMaWdodFNvdXJjZT4gY3JlYXRlKGZsb2F0IGF6aW11
dGgsIGZsb2F0IGVsZXZhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERpc3RhbnRMaWdodFNvdXJjZShhemltdXRoLCBlbGV2YXRpb24pKTsKLSAgICB9Ci0KLSAgICAv
LyBUaGVzZSBhcmUgaW4gZGVncmVlcy4KLSAgICBmbG9hdCBhemltdXRoKCkgY29uc3QgeyByZXR1
cm4gbV9hemltdXRoOyB9Ci0gICAgZmxvYXQgZWxldmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9l
bGV2YXRpb247IH0KLQotICAgIGJvb2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbml0UGFpbnRp
bmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOwotICAg
IENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwotCi0gICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIERpc3RhbnRMaWdodFNvdXJjZShmbG9hdCBh
emltdXRoLCBmbG9hdCBlbGV2YXRpb24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfRElTVEFO
VCkKLSAgICAgICAgLCBtX2F6aW11dGgoYXppbXV0aCkKLSAgICAgICAgLCBtX2VsZXZhdGlvbihl
bGV2YXRpb24pCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IG1fYXppbXV0aDsKLSAgICBmbG9h
dCBtX2VsZXZhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19MSUdIVFNPVVJDRShEaXN0YW50TGlnaHRTb3VyY2UsIExTX0RJU1RBTlQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rp
c3RhbnRMaWdodFNvdXJjZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2VEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZGNiM2Fi
ZmU3NTI5YzEzZTBjNGUzN2FiODViMmY2NDM2ODU2OGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2VE
YXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEx
IFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRGlzdGFudExpZ2h0
U291cmNlRGF0YTo6RGlzdGFudExpZ2h0U291cmNlRGF0YShmbG9hdCBhemltdXRoLCBmbG9hdCBl
bGV2YXRpb24pCisgICAgOiBtX2F6aW11dGgoYXppbXV0aCkKKyAgICAsIG1fZWxldmF0aW9uKGVs
ZXZhdGlvbikKK3sKK30KKworTGlnaHRTb3VyY2VQYWludERhdGEgRGlzdGFudExpZ2h0U291cmNl
RGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgY29s
b3JWZWN0b3IpIGNvbnN0Cit7CisgICAgZmxvYXQgYXppbXV0aCA9IGRlZzJyYWQobV9hemltdXRo
KTsKKyAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1fZWxldmF0aW9uKTsKKworICAgIEZs
b2F0UG9pbnQzRCBsaWdodFZlY3RvciA9IHsKKyAgICAgICAgc3RkOjpjb3MoYXppbXV0aCkgKiBz
dGQ6OmNvcyhlbGV2YXRpb24pLAorICAgICAgICBzdGQ6OnNpbihhemltdXRoKSAqIHN0ZDo6Y29z
KGVsZXZhdGlvbiksCisgICAgICAgIHN0ZDo6c2luKGVsZXZhdGlvbikKKyAgICB9OworCisgICAg
TGlnaHRTb3VyY2VQYWludERhdGEgcGFpbnREYXRhID0geyB9OworICAgIHBhaW50RGF0YS5pbml0
aWFsTGlnaHRpbmdEYXRhID0geyBjb2xvclZlY3RvciwgbGlnaHRWZWN0b3IsIDEgfTsKKyAgICBy
ZXR1cm4gcGFpbnREYXRhOworfQorCitMaWdodFNvdXJjZVBpeGVsRGF0YSBEaXN0YW50TGlnaHRT
b3VyY2VEYXRhOjpjb21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEoY29uc3QgTGlnaHRTb3VyY2VQ
YWludERhdGEmIHBhaW50RGF0YSwgaW50LCBpbnQsIGZsb2F0KSBjb25zdAoreworICAgIHJldHVy
biBwYWludERhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YTsKK30KKworVGV4dFN0cmVhbSYgRGlzdGFu
dExpZ2h0U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykg
Y29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9RElTVEFOVC1MSUdIVF0gIjsKKyAgICB0cyA8PCAi
W2F6aW11dGg9XCIiIDw8IG1fYXppbXV0aCA8PCAiXCJdIjsKKyAgICB0cyA8PCAiW2VsZXZhdGlv
bj1cIiIgPDwgbV9lbGV2YXRpb24gPDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlRGF0YS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZiYWI5MzI3MWIyNjZkOWM1ZDhiZDM1ZGYyZjg5M2E0NjEzODIxMzUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3Rh
bnRMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMaWdodFNvdXJjZURhdGEuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXN0YW50TGlnaHRTb3VyY2VEYXRhIHsKK3B1
YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXN0YW50TGlnaHRTb3VyY2VEYXRhKGZsb2F0IGF6
aW11dGgsIGZsb2F0IGVsZXZhdGlvbik7CisKKyAgICB2b2lkIHNldEF6aW11dGgoZmxvYXQgYXpp
bXV0aCkgeyBtX2F6aW11dGggPSBhemltdXRoOyB9CisgICAgdm9pZCBzZXRFbGV2YXRpb24oZmxv
YXQgZWxldmF0aW9uKSB7IG1fZWxldmF0aW9uID0gZWxldmF0aW9uOyB9CisKKyAgICBMaWdodFNv
dXJjZVBhaW50RGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoY29uc3QgRmxvYXRQb2lu
dDNEJiBjb2xvclZlY3RvcikgY29uc3Q7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEgY29tcHV0
ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiwgaW50IHgs
IGludCB5LCBmbG9hdCB6KSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEaXN0YW50TGlnaHRTb3VyY2VEYXRh
PiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIC8vIFRoZXNlIGFyZSBpbiBkZWdy
ZWVzLgorICAgIGZsb2F0IG1fYXppbXV0aDsKKyAgICBmbG9hdCBtX2VsZXZhdGlvbjsKK307CisK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERpc3RhbnRMaWdodFNvdXJjZURhdGE6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9hemltdXRo
OworICAgIGVuY29kZXIgPDwgbV9lbGV2YXRpb247Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPERpc3RhbnRMaWdodFNvdXJjZURhdGE+IERpc3RhbnRMaWdodFNv
dXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8
ZmxvYXQ+IGF6aW11dGg7CisgICAgZGVjb2RlciA+PiBhemltdXRoOworICAgIGlmICghYXppbXV0
aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IGVsZXZhdGlvbjsKKyAgICBkZWNvZGVyID4+IGVsZXZhdGlvbjsKKyAgICBpZiAoIWVsZXZh
dGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBEaXN0YW50
TGlnaHRTb3VyY2VEYXRhKCphemltdXRoLCAqZWxldmF0aW9uKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2NzA0Y2Q2N2ZiMGE3YWZlOWFmMThmYmI2
MmMyY2VkOS4uOGI4MDIzY2YzNjJjZDYwYTY3NDczODMyY2JhODhkZjgyOGNiZTc0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
Y3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI1LDY0ICsyNiwzMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRORU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUJs
ZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQotICAgICwgbV9tb2RlKG1vZGUpCitSZWY8RkVC
bGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBtb2RlKQogeworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCi1SZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3Jl
YXRlKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxl
bmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVCbGVuZCkKKyAgICAsIG1f
bW9kZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBt
b2RlKSk7CiB9CiAKLWJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQor
RmlsdGVySW1hZ2VWZWN0b3IgRkVCbGVuZDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0CiB7Ci0gICAgaWYgKG1fbW9kZSA9PSBtb2RlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQo
c3RhY2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCksIHN0YWNr
LnRha2VMYXN0KCkgfTsKIH0KIAotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lk
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3Qo
MSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJl
c3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFw
aGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotCi0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92
ZXIsIG1fbW9kZSB9KTsKLX0KLSNlbmRpZgotCi1UZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIG1vZGU9XCIiIDw8
IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAibm9ybWFsIiA6IGNvbXBvc2l0ZU9wZXJh
dG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlKSkgPDwgIlwiXVxu
IjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBp
bnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNl
bnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IDcwZTg0MDdiZjVjMjAwZDQ1
MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjJkYjY1YjJkMmE4YzljMDM4NWQ1YTA5OTJjZTU2MTNk
MmI0MTRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMywzMyArMjQsNDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYs
IEJsZW5kTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVh
dGUoQmxlbmRNb2RlKTsKKworICAgIHZvaWQgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKSB7
IG1fbW9kZSA9IG1vZGU7IH0KIAotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KLSAgICBib29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGUpOworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVCbGVuZD4+
IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5kIjsgfQorICAgIEZFQmxlbmQoQmxlbmRN
b2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwg
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJy
YXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3Ro
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4
ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0
b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVuZE1vZGUpOworICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBCbGVuZE1vZGUg
bV9tb2RlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVCbGVuZDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX21vZGU7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUJsZW5kPj4g
RkVCbGVuZDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxC
bGVuZE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRUJsZW5kOjpjcmVhdGUo
Km1vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChGRUJsZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMzgw
NjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2OGE1NC4uNTZmMDJlOWM0MzI2YjJhYzBm
YjVkNDY2ZDAxODA5MDQzYjM3ZjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMywzMDMgKzI0LDY1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5j
bHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xv
ck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQotICAgICwgbV90eXBlKHR5cGUpCi0gICAg
LCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCi17Ci19Ci0KLVJlZjxGRUNvbG9yTWF0cml4PiBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBl
LCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
Q29sb3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotYm9vbCBG
RUNvbG9yTWF0cml4OjpzZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQotewotICAgIGlmICht
X3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VmFsdWVzKGNv
bnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKK1JlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0
cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMp
CiB7Ci0gICAgaWYgKG1fdmFsdWVzID09IHZhbHVlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdmFsdWVzID0gdmFsdWVzOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKLWlu
bGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBm
bG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLXsKLSAgICBmbG9hdCBy
ID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBmbG9hdCBiID0gYmx1ZTsKLSAgICBm
bG9hdCBhID0gYWxwaGE7Ci0KLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNb
IDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICog
MjU1OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFs
dWVzIFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1
ZSAgICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiAr
IHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVz
WzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAq
IGEgKyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBjb25zdCBmbG9hdCog
Y29tcG9uZW50cykKK0ZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBl
IGNvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKKyAgICA6IEZpbHRlckVm
ZmVjdChUeXBlOjpGRUNvbG9yTWF0cml4KQorICAgICwgbV9jb2xvck1hdHJpeFR5cGUoY29sb3JN
YXRyaXhUeXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQogewotICAgIGZsb2F0
IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotCi0g
ICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICog
Y29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29t
cG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9u
ZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CiB9CiAKLS8v
IEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENv
bG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQordm9pZCBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVl
KQogewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3JlZW4gKyAwLjA3MjEg
KiBibHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4gPSAwOwotICAgIGJsdWUgPSAwOworICAg
IGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRz
WzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1syXSA9ICgwLjA3
MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAq
IHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7Cisg
ICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVu
dHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzddID0gKDAu
NzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4
ICogdmFsdWUpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJp
eFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBj
b21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNh
bGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVl
KQogewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgp
ICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBh
IDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29s
b3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRv
IG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5
XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2
OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAgICBzcmMu
aGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSBidWZmZXJT
aXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0gZGF0YTsKLSAgICAKLSAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAgICBk
ZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1
ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gZGF0YTsKLQotICAgIHN3aXRj
aCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDogewot
ICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNvcikpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMF0gKiBkaXZp
c29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE1
XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNl0gKiBkaXZpc29yKSksCi0KLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDJdICogZGl2aXNvcikp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgN10gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICogZGl2aXNvcikpLAotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxM10gKiBkaXZpc29yKSksCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE4XSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNy
YywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxh
Z3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6IHsKLSAg
ICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1szXSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzZd
ICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzddICogZGl2
aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzhdICogZGl2aXNvcikp
LAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwKLSAgICAgICAgfTsKLSAgICAgICAgdklt
YWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwg
bnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTogewotICAgICAg
ICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICB9OwotICAgICAgICB2SW1h
Z2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBu
dWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgZmxvYXQgY29zSHVlID0gY29zKHZh
bHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlG
bG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcg
LSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAw
LjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1
ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0g
Y29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRdID0gMC43
MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVudHNbNV0g
PSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29tcG9uZW50
c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAgICBjb21w
b25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OworICAg
IGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7
CiB9Ci0jZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci12b2lk
IGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQorYm9vbCBGRUNvbG9yTWF0cml4Ojpp
c0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdAogewotICAgIGZsb2F0
IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZ
UEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29t
cG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgIGVsc2UgaWYgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotCi0g
ICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoZWZmZWN0QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJU
eXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUpKQotICAgICAg
ICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShidWZmZXJTaXplKTsKLSNlbmRpZgot
Ci0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVs
Qnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0g
ICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsK
LSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhLCB2YWx1ZXMpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRl
T2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0
ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQg
KyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxC
eXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAg
ICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwot
ICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0
ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0o
cGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShy
ZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVl
biA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAg
ICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsK
LSAgICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1fY29sb3JNYXRyaXhUeXBlID09IEZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOwogfQogCi12b2lkIEZFQ29sb3JNYXRyaXg6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbG9yTWF0cml4
Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmIChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVs
Rm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBpbWFnZVJl
Y3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4
ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3Qp
OwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHBp
eGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8gcGl4ZWxBcnJheURpbWVu
c2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwotCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMg
PSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkg
ewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZWZmZWN0VHlwZTxG
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlE
aW1lbnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
U0FUVVJBVEU6IAotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZWZm
ZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMs
IHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFy
cmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1
ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQorc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4
VHlwZSYgY29sb3JNYXRyaXhUeXBlKQogewotICAgIHN3aXRjaCAodHlwZSkgeworICAgIHN3aXRj
aCAoY29sb3JNYXRyaXhUeXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTMzOSwxMSAr
MTAyLDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3Ry
ZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBG
RUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUNvbG9y
TWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJl
cHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHlwZSA8PCAiXCIiOwor
ICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgbV9jb2xvck1hdHJpeFR5cGUgPDwgIlwiIjsKICAgICBp
ZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAgICB0cyA8PCAiIHZhbHVlcz1cIiI7CiAg
ICAgICAgIFZlY3RvcjxmbG9hdD46OmNvbnN0X2l0ZXJhdG9yIHB0ciA9IG1fdmFsdWVzLmJlZ2lu
KCk7CkBAIC0zNTcsOSArMTE5LDYgQEAgVGV4dFN0cmVhbSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb24KICAgICAgICAg
dHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1cbiI7Ci0gICAgCi0gICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1Mzk3MDNhYzRkYjU1MjRl
ZmE0YzEyM2YuLjlhNDQ2NDZhM2JiNDQ1YzMxOWU0NjM1MDY4ZDk5Y2U3ZDRlZDc2ZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2MiArMzcsNzcgQEAgZW51bSBDb2xvck1h
dHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwg
Q29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKIAotICAgIENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CisgICAgdm9pZCBzZXRD
b2xvck1hdHJpeFR5cGUoQ29sb3JNYXRyaXhUeXBlIGNvbG9yTWF0cml4VHlwZSkgeyBtX2NvbG9y
TWF0cml4VHlwZSA9IGNvbG9yTWF0cml4VHlwZTsgfQorICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykgeyBtX3ZhbHVlcyA9IHZhbHVlczsgfQogCi0gICAgY29u
c3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KLSAg
ICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIHZvaWQg
Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1
ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1h
bGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsKIAotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMs
IGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlSHVlUm90YXRl
Q29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVDb2xvck1hdHJpeD4+
IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgRkVDb2xvck1hdHJpeChGaWx0ZXIm
LCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAgRkVDb2xvck1hdHJpeChD
b2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisKKyAgICBib29sIGlzQWxwaGFJbWFn
ZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKKworICAg
IEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiRkVDb2xvck1hdHJpeCI7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmls
dGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBw
b3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlD
b3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCi0g
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIENvbG9yTWF0cml4VHlwZSBtX3R5cGU7
CisgICAgQ29sb3JNYXRyaXhUeXBlIG1fY29sb3JNYXRyaXhUeXBlOwogICAgIFZlY3RvcjxmbG9h
dD4gbV92YWx1ZXM7CiB9OwogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQordGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVDb2xvck1hdHJpeDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiB7Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1sz
XSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0gPSAoMC43MTUg
KyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2
YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAg
IGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yTWF0
cml4VHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fdmFsdWVzOwogfQogCi1pbmxpbmUgdm9pZCBGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRz
LCBmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxGRUNvbG9yTWF0cml4Pj4gRkVDb2xvck1hdHJpeDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiB7Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAg
ZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9uZW50
c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBjb21w
b25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OwotICAg
IGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7
Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAw
LjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1
ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0g
c2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4y
MTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUg
KiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNv
c0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19CisgICAgc3RkOjpvcHRpb25hbDxDb2xv
ck1hdHJpeFR5cGU+IGNvbG9yTWF0cml4VHlwZTsKKyAgICBkZWNvZGVyID4+IGNvbG9yTWF0cml4
VHlwZTsKKyAgICBpZiAoIWNvbG9yTWF0cml4VHlwZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPGZsb2F0Pj4gdmFsdWVzOworICAgIGRl
Y29kZXIgPj4gdmFsdWVzOworICAgIGlmICghdmFsdWVzKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqY29sb3JNYXRyaXhU
eXBlLCBXVEZNb3ZlKCp2YWx1ZXMpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXgpCi0gICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7
IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6Q29sb3JNYXRyaXhUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICAgICAgV2ViQ29yZTo6Q29sb3JNYXRyaXhUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZFQ09M
T1JNQVRSSVhfVFlQRV9VTktOT1dOLAorICAgICAgICBXZWJDb3JlOjpGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYLAorICAgICAgICBXZWJDb3JlOjpGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUs
CisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsCisgICAgICAg
IFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBCisgICAgPjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9F
RkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4
IDg0N2VhNThmNWY5YjAzODY2ZDllYWM1N2YxMGNjZjU3NDAyZjllNjMuLjU4NGVkOTBmZjg5OTg4
YmY5NTlkMTZlZTFlNWIzYmVkODllNmE4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4
ICsyNSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJh
bnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VW
ZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24s
Ci0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5G
dW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7Cit9CisKK0ZFQ29tcG9uZW50
VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVu
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQogICAgICwgbV9yZWRGdW5jdGlv
bihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQogICAg
ICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpAQCAtNDMsMTE5ICs0NCwxMCBAQCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlcgogewogfQogCi1SZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAgICBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Y3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFuc2Zlcihm
aWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVu
Y3Rpb24pKTsKLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlU
YWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQorRmls
dGVySW1hZ2VWZWN0b3IgRkVDb21wb25lbnRUcmFuc2Zlcjo6dGFrZUlucHV0cyhGaWx0ZXJJbWFn
ZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1
bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAg
cmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAt
IDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107Ci0gICAgICAgIGRvdWJs
ZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKLSAgICAgICAg
ZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkp
OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAg
ICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFi
bGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5j
dGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVy
RnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUo
KTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6bWlu
KGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwot
ICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAg
ICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24p
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0
cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBz
dGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFu
c2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91
YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAgICAg
ICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3co
KGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAgICAg
ICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZh
bHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZF
Q29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBM
b29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwotICAgIExv
b2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAgIGNv
bXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFU
YWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVs
dGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0
aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBkYXRhID0g
ZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zm
c2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVs
T2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRh
W3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFi
bGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJd
ID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0gICAgICAgIGRhdGFbcGl4ZWxP
ZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKLSAgICB9Ci19
Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBU
YWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1
ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0gZ3Jl
ZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhhVGFibGVbaV0gPSBpOwotCi0gICAgdXNp
bmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAg
ICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8v
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVU
YWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29t
cHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgot
ICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RI
KGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChj
YWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNh
bGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9yZWRGdW5jdGlvbi50eXBlXShyZWRUYWJs
ZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2dyZWVuRnVuY3Rpb24udHlwZV0o
Z3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYmx1ZUZ1bmN0
aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9h
bHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1fYWxwaGFGdW5jdGlvbik7CisgICAgQVNT
RVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsK
IH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBv
bmVudFRyYW5zZmVyVHlwZSB0eXBlKQpAQCAtMjA5LDEwICsxMDEsOSBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgZgogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVw
cmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb21wb25lbnRU
cmFuc2ZlciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIlxuIjsKICAgICB7CiAgICAgICAgIFRleHRTdHJl
YW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzLCAyKTsKQEAgLTIyMSw5ICsxMTIsNiBAQCBU
ZXh0U3RyZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbgogICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIntibHVlOiAi
IDw8IG1fYmx1ZUZ1bmN0aW9uIDw8ICJ9XG4iOwogICAgICAgICB0cyA8PCBpbmRlbnQgPDwgInth
bHBoYTogIiA8PCBtX2FscGhhRnVuY3Rpb24gPDwgIn1dXG4iOwogICAgIH0KLQotICAgIFRleHRT
dHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0
czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRleCAyYjU4NmRlZjdmYjQyYTM3
YjJlMTIzZWRhODcxMTljNGViMzQ4YTUxLi40NjM2ZTkzYjBhMDQ3ZWRmY2FkZDAxYmFhMTRiNDIx
MjYwYzQ3NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCArMjMsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDksMzcgKzQ4LDMxIEBAIHN0cnVjdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKICAgICBm
bG9hdCBvZmZzZXQgeyAwIH07CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHRhYmxlVmFsdWVzOworICAg
IAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogY2xhc3MgRkVD
b21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1
bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsK
IAotICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gcmVkRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX3JlZEZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVl
bkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmVlbkZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBibHVlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2JsdWVG
dW5jdGlvbjsgfQotICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gYWxwaGFGdW5jdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5jdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4+IGRl
Y29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0
ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9Ci0K
LSAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKyAgICBG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pOwogCi0gICAgc3RhdGljIHZvaWQg
Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBU
YWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9p
ZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZv
aWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFn
ZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjb21wdXRlTG9va3Vw
VGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExv
b2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKKyAgICBib29s
IGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisjaWYgVVNFKENPUkVfSU1B
R0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmls
dGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVy
cmlkZTsKKyNlbmRpZgogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbV9yZWRGdW5jdGlvbjsKICAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG1fZ3JlZW5GdW5jdGlvbjsKQEAgLTg3LDggKzgwLDExMSBAQCBwcml2YXRlOgog
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9hbHBoYUZ1bmN0aW9uOwogfTsKIAordGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0eXBlOworICAg
IGVuY29kZXIgPDwgc2xvcGU7CisgICAgZW5jb2RlciA8PCBpbnRlcmNlcHQ7CisgICAgZW5jb2Rl
ciA8PCBhbXBsaXR1ZGU7CisgICAgZW5jb2RlciA8PCBleHBvbmVudDsKKyAgICBlbmNvZGVyIDw8
IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IHRhYmxlVmFsdWVzOworfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyVHlwZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+
IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2xvcGU7CisgICAgZGVjb2RlciA+PiBzbG9wZTsKKyAg
ICBpZiAoIXNsb3BlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gaW50ZXJjZXB0OworICAgIGRlY29kZXIgPj4gaW50ZXJjZXB0OworICAg
IGlmICghaW50ZXJjZXB0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3Rk
OjpvcHRpb25hbDxmbG9hdD4gYW1wbGl0dWRlOworICAgIGRlY29kZXIgPj4gYW1wbGl0dWRlOwor
ICAgIGlmICghYW1wbGl0dWRlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gZXhwb25lbnQ7CisgICAgZGVjb2RlciA+PiBleHBvbmVudDsK
KyAgICBpZiAoIWV4cG9uZW50KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAg
IGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxWZWN0b3I8ZmxvYXQ+PiB0YWJsZVZhbHVlczsKKyAgICBkZWNvZGVyID4+IHRhYmxl
VmFsdWVzOworICAgIGlmICghdGFibGVWYWx1ZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgCisgICAgcmV0dXJuIHsgeyAqdHlwZSwgKnNsb3BlLCAqaW50ZXJjZXB0LCAqYW1w
bGl0dWRlLCAqZXhwb25lbnQsICpvZmZzZXQsIFdURk1vdmUoKnRhYmxlVmFsdWVzKSB9IH07Cit9
CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9yZWRGdW5j
dGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fZ3JlZW5GdW5jdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1f
Ymx1ZUZ1bmN0aW9uOworICAgIGVuY29kZXIgPDwgbV9hbHBoYUZ1bmN0aW9uOworfQorCit0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVDb21wb25lbnRUcmFuc2Zl
cj4+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gcmVkRnVuY3Rpb247Cisg
ICAgZGVjb2RlciA+PiByZWRGdW5jdGlvbjsKKyAgICBpZiAoIXJlZEZ1bmN0aW9uKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uPiBncmVlbkZ1bmN0aW9uOworICAgIGRlY29kZXIgPj4gZ3JlZW5GdW5jdGlv
bjsKKyAgICBpZiAoIWdyZWVuRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24+IGJsdWVGdW5j
dGlvbjsKKyAgICBkZWNvZGVyID4+IGJsdWVGdW5jdGlvbjsKKyAgICBpZiAoIWJsdWVGdW5jdGlv
bikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gYWxwaGFGdW5jdGlvbjsKKyAgICBkZWNvZGVyID4+IGFs
cGhhRnVuY3Rpb247CisgICAgaWYgKCFhbHBoYUZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqcmVk
RnVuY3Rpb24sICpncmVlbkZ1bmN0aW9uLCAqYmx1ZUZ1bmN0aW9uLCAqYWxwaGFGdW5jdGlvbik7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQotICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZp
bHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29t
cG9uZW50VHJhbnNmZXI7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNvbXBvbmVu
dFRyYW5zZmVyVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAg
IFdlYkNvcmU6OkNvbXBvbmVudFRyYW5zZmVyVHlwZSwKKworICAgICAgICBXZWJDb3JlOjpGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTiwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZLAorICAgICAgICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfVEFCTEUsCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJf
VFlQRV9ESVNDUkVURSwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUiwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1B
CisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFuc2ZlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5k
ZXggOGI1OWU2NmRlOWZlOGQ2MzkxNmNiZTVjZTZkZDQwMzhmYTRjYjJhOC4uMjg1ZDRiMmM3MmU1
NWFmZjQ0MGFlMjFhN2IxNzg1MzJiNWI0MTc3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTQsNiAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxNyArMjUsMjEgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBvc2l0ZS5oIgogCi0jaW5jbHVkZSAi
RkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXIm
IGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZs
b2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlwZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVD
b21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVPcGVyYXRvciwgazEsIGsyLCBrMywgazQp
KTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQor
ICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9zaXRlKQorICAgICwgbV9jb21wb3NpdGVP
cGVyYXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2syKGsy
KQogICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDcsMzAgQEAgRkVDb21wb3NpdGU6OkZFQ29t
cG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBl
LCBmbG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wg
RkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlIHR5cGUpCitG
bG9hdFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIGlmIChtX3R5cGUgPT0g
dHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVz
dCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28g
anVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVy
ZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9J
TiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApCisg
ICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRz
WzFdLT5pbWFnZVJlY3QoKSwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0
ZTo6c2V0SzEoZmxvYXQgazEpCi17Ci0gICAgaWYgKG1fazEgPT0gazEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX2sxID0gazE7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgLy8gQXJp
dGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24u
IFNvIHdlIGNhbid0CisgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgorICAg
IGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVU
SUMpCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZl
U3VicmVnaW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzIoZmxvYXQgazIpCi17Ci0gICAg
aWYgKG1fazIgPT0gazIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2syID0gazI7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VS
ZWN0KGlucHV0cywgZ2VvbWV0cnksIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLWJvb2wgRkVD
b21wb3NpdGU6OnNldEszKGZsb2F0IGszKQotewotICAgIGlmIChtX2szID09IGszKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMyA9IGszOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKLXsKLSAgICBpZiAobV9rNCA9PSBrNCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazQgPSBrNDsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkKLXsK
LSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0g
ICAgCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUoaW50IGMpCitGaWx0ZXJJbWFnZVZl
Y3RvciBGRUNvbXBvc2l0ZTo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNv
bnN0CiB7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUg
Pj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2
b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBm
bG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUu
MGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAg
d2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
aTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwot
ICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIx
KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYg
KGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5h
dGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAgICArK3NvdXJjZTsKLSAgICAgICAgKytk
ZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRo
ZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBl
bmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0
b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lk
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwg
dW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCBzY2FsZWRLMTsK
LSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAgICAgIHNjYWxlZEsxID0gazEg
LyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOwot
Ci0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0
aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKLSAgICAgICAg
aWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKLSAgICAg
ICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OwotCi0gICAgICAgICpk
ZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICsrZGVzdGlu
YXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLXN0YXRp
YyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGZsb2F0IHVwcGVyTGltaXQg
PSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBm
LCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsg
c3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMpICsgazQ7Ci0gICAgaWYgKChr
NCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBwZXJM
aW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0gMS4w
ZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAg
ICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0
aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAs
IDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAg
ICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0
aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4o
c291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoazQpIHsKLSAgICAg
ICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4oc291
cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQ
aXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsy
LCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1Bp
eGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIs
IGszLCBrNCk7Ci0gICAgfQorICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSwgc3RhY2sudGFrZUxhc3QoKSB9OwogfQotI2VuZGlmCiAK
LWlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0
b3ImIGNvbXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGludCBsZW5ndGggPSBzb3VyY2UubGVuZ3Ro
KCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxl
bmd0aCgpKSk7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhh
cHBlbiBkeW5hbWljYWxseS4KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgQVNT
RVJUKCEobGVuZ3RoICYgMHgzKSk7Ci0gICAgcGxhdGZvcm1Bcml0aG1ldGljTmVvbihzb3VyY2Uu
ZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2Vs
c2UKLSAgICBhcml0aG1ldGljU29mdHdhcmUoc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0
YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNlbmRpZgotfQotCi12b2lkIEZFQ29tcG9z
aXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgc3dpdGNoIChtX3R5cGUp
IHsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgotICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBl
ZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKLSAgICAgICAgLy8gdGhlIHNlY29u
ZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IG9mIHRoZSBzZWNv
bmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0
KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgY2xpcEFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRI
TUVUSUM6Ci0gICAgICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZp
bHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4ndAotICAgICAgICAvLyBvcHRpbWl6ZSB0
aGUgcGFpbnQgcmVnaW9uIGhlcmUuCi0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZh
dWx0OgotICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0IGVmZmVjdHMuCi0g
ICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIGlmIChtX3R5cGUgPT0g
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAg
ICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGluMi0+Y29weVByZW11
bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0KLSAgICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29m
dHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9r
MiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVz
dWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVy
IHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9JTjogewotICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGlu
dGVyc2VjdGVkIHJlZ2lvbi4KLSAgICAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+
YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJz
ZWN0KGFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpZiAoZGVzdGluYXRpb25SZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBJbnRSZWN0IGFkanVzdGVkRGVz
dGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2Nh
dGlvbigpOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBp
bi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBJbnRSZWN0IHNvdXJj
ZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0
aW9uKCk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2Uy
UmVjdCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2VS
ZWN0KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4gfSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09VVDoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZl
cjItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRv
cCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgot
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50
KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhPUik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjoK
LSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVz
TGlnaHRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBl
KSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBi
cmVhazsKQEAgLTMyOCwxOCArOTksMTMgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbZmVDb21wb3NpdGUiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwi
IiA8PCBtX3R5cGUgPDwgIlwiIjsKLSAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FSSVRITUVUSUMpCisgICAgdHMgPDwgIiBvcGVyYXRpb249XCIiIDw8IG1fY29tcG9zaXRl
T3BlcmF0b3IgPDwgIlwiIjsKKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRvciA9PSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQogICAgICAgICB0cyA8PCAiIGsxPVwiIiA8PCBtX2sx
IDw8ICJcIiBrMj1cIiIgPDwgbV9rMiA8PCAiXCIgazM9XCIiIDw8IG1fazMgPDwgIlwiIGs0PVwi
IiA8PCBtX2s0IDw8ICJcIiI7CiAgICAgdHMgPDwgIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJ
bmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiB0
czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3MTA3YjRiOTY4YzU4ZTNhMzdjMzJhZTJm
NzZhZWEwYzMuLmMzYzk2MGY3YzNmZGViMTM0M2EwNjMxNmI2Y2I1OWJmYzM3MzEyYjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIzLDEyICsyNCw5IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CitlbnVtIEZF
Q29tcG9zaXRlT3BlcmF0b3IgewogICAgIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV04gICAg
PSAwLCAKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSICAgICAgID0gMSwKICAgICBGRUNP
TVBPU0lURV9PUEVSQVRPUl9JTiAgICAgICAgID0gMiwKQEAgLTQxLDUyICszOSw5OCBAQCBlbnVt
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFzcyBGRUNvbXBvc2l0ZSA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0
ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRpb25UeXBlKTsKLQotICAgIGZsb2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMTsgfQot
ICAgIGJvb2wgc2V0SzEoZmxvYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVD
b21wb3NpdGU+IGNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIs
IGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICBmbG9hdCBrMigpIGNvbnN0IHsgcmV0dXJuIG1f
azI7IH0KLSAgICBib29sIHNldEsyKGZsb2F0KTsKKyAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJh
dG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpIHsgbV9jb21wb3NpdGVP
cGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdG9yOyB9CisgICAgdm9pZCBzZXRLMShmbG9hdCBrMSkg
eyBtX2sxID0gazE7IH0KKyAgICB2b2lkIHNldEsyKGZsb2F0IGsyKSB7IG1fazIgPSBrMjsgfQor
ICAgIHZvaWQgc2V0SzMoZmxvYXQgazMpIHsgbV9rMyA9IGszOyB9CisgICAgdm9pZCBzZXRLNChm
bG9hdCBrNCkgeyBtX2s0ID0gazQ7IH0KIAotICAgIGZsb2F0IGszKCkgY29uc3QgeyByZXR1cm4g
bV9rMzsgfQotICAgIGJvb2wgc2V0SzMoZmxvYXQpOwotCi0gICAgZmxvYXQgazQoKSBjb25zdCB7
IHJldHVybiBtX2s0OyB9Ci0gICAgYm9vbCBzZXRLNChmbG9hdCk7Ci0KLXByb3RlY3RlZDoKLSAg
ICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFQ29tcG9zaXRl
Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShGaWx0ZXIm
LCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBvc2l0ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICB2b2lkIGNvcnJl
Y3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtl
SW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBp
bmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAgICBib29sIGFwcGx5QXJpdGhtZXRpY1Nv
ZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpY1Nv
ZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICAKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+Ci0gICAgc3RhdGljIGlu
bGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzTmVvbihjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2Vu
dGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9y
bUFyaXRobWV0aWNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KTsKLSNlbmRpZgotCi0gICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBtX3R5
cGU7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBtX2NvbXBvc2l0ZU9wZXJhdG9yOwogICAgIGZs
b2F0IG1fazE7CiAgICAgZmxvYXQgbV9rMjsKICAgICBmbG9hdCBtX2szOwogICAgIGZsb2F0IG1f
azQ7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRUNvbXBvc2l0ZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbXBvc2l0
ZU9wZXJhdG9yOworICAgIGVuY29kZXIgPDwgbV9rMTsKKyAgICBlbmNvZGVyIDw8IG1fazI7Cisg
ICAgZW5jb2RlciA8PCBtX2szOworICAgIGVuY29kZXIgPDwgbV9rNDsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFQ29tcG9zaXRlPj4gRkVDb21wb3Np
dGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RkVDb21w
b3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3BlcmF0b3I7CisgICAgZGVjb2RlciA+PiBjb21wb3Np
dGVPcGVyYXRvcjsKKyAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazE7CisgICAgZGVjb2Rl
ciA+PiBrMTsKKyAgICBpZiAoIWsxKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazI7CisgICAgZGVjb2RlciA+PiBrMjsKKyAgICBpZiAo
IWsyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gazM7CisgICAgZGVjb2RlciA+PiBrMzsKKyAgICBpZiAoIWszKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazQ7CisgICAgZGVj
b2RlciA+PiBrNDsKKyAgICBpZiAoIWs0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIEZFQ29tcG9zaXRlOjpjcmVhdGUoKmNvbXBvc2l0ZU9wZXJhdG9yLCAqazEs
ICprMiwgKmszLCAqazQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZFQ29tcG9z
aXRlT3BlcmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBX
ZWJDb3JlOjpGRUNvbXBvc2l0ZU9wZXJhdG9yLAorCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9T
SVRFX09QRVJBVE9SX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJB
VE9SX09WRVIsCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX0lOLAorICAg
ICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQsCisgICAgICAgIFdlYkNvcmU6
OkZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1AsCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRF
X09QRVJBVE9SX1hPUiwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQywKKyAgICAgICAgV2ViQ29yZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUgor
ICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19GSUxURVJfRUZGRUNUKEZFQ29tcG9zaXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5k
ZXggM2JiZTc4MzU5OGQ3MDkzNWE5NWM2ZjE1NmVjMjkzM2MwZTk5ZjA1MC4uYmE4MjYxOTJkZTU0
NjdiNDE3ZThhZmM0YTFjM2VkYjdlNzEwZWFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTggKzI1LDE5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCi0jaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFy
YWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb252b2x2
ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpD
b252b2x2ZU1hdHJpeCkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4Ojpj
cmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlh
cywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9m
ZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1h
dHJpeCkpOworfQorCitGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IElu
dFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBv
aW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2lu
dCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVDb252b2x2ZU1h
dHJpeCkKICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxTaXplKQogICAgICwgbV9kaXZpc29yKGRp
dmlzb3IpCiAgICAgLCBtX2JpYXMoYmlhcykKQEAgLTQ5LDM4OSArNTEsMTUgQEAgRkVDb252b2x2
ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAK
LVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxv
YXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2Vy
dmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZp
c29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAotICAg
ICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKLX0KLQotdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpCi17Ci0gICAg
QVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChrZXJuZWxTaXplLmhl
aWdodCgpID4gMCk7Ci0gICAgbV9rZXJuZWxTaXplID0ga2VybmVsU2l6ZTsKLX0KLQotdm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsKQot
ewotICAgIG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyAKLX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0
cml4OjpzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpCi17Ci0gICAgQVNTRVJUKGRpdmlzb3IpOwot
ICAgIGlmIChtX2Rpdmlzb3IgPT0gZGl2aXNvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fZGl2aXNvciA9IGRpdmlzb3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDb252
b2x2ZU1hdHJpeDo6c2V0QmlhcyhmbG9hdCBiaWFzKQotewotICAgIGlmIChtX2JpYXMgPT0gYmlh
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmlhcyA9IGJpYXM7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KGNvbnN0
IEludFBvaW50JiB0YXJnZXRPZmZzZXQpCi17Ci0gICAgaWYgKG1fdGFyZ2V0T2Zmc2V0ID09IHRh
cmdldE9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdGFyZ2V0T2Zmc2V0ID0g
dGFyZ2V0T2Zmc2V0OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29udm9sdmVNYXRy
aXg6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBpZiAobV9lZGdl
TW9kZSA9PSBlZGdlTW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZWRnZU1vZGUg
PSBlZGdlTW9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4
OjpzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgp
CitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoa2VybmVs
VW5pdExlbmd0aC54KCkgPiAwKTsKLSAgICBBU1NFUlQoa2VybmVsVW5pdExlbmd0aC55KCkgPiAw
KTsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoID09IGtlcm5lbFVuaXRMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2tlcm5lbFVuaXRMZW5ndGggPSBrZXJuZWxVbml0TGVu
Z3RoOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJS
ZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotYm9vbCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKK0ZpbHRlckltYWdlVmVjdG9yIEZF
Q29udm9sdmVNYXRyaXg6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dAogewotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEgPT0gcHJlc2VydmVBbHBoYSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fcHJlc2VydmVBbHBoYSA9IHByZXNlcnZlQWxwaGE7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KLSAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRoZSBpbWFnZSByZWN0YW5nbGUgaXMgc3Bs
aXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0r
Ci0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8Ci0gICAgICB8IEIgfCAgICAgIEMg
ICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgICstLS0tLS0t
LS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEUgICAgICAgICAgfAotICAgICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUgcmVnaW9uIEMgY29udGFpbnMgdGhvc2Ug
cGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3Np
bmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQotICAgRXhhbXBsZToKLSAgICAgIEltYWdl
IHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0gICAgICBPcmRlciAoa2VybmVsIG1hdHJp
eCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAgICBUYXJnZXQ6IHg6MSwgeTozCi0KLSAg
ICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJu
ZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLi4uCi0gICAg
ICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlzIGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6
Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBhbmQgKHgyLCB5MikgaXMgdGhlIGJvdHRv
bS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBw
YXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9ubHkgdGhvc2UgKHgsIHkpIHBpeGVscywg
d2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwgeTIKLQotICAgICAgUmVnaW9uIEE6IHgx
OiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAgUmVnaW9uIEI6IHgxOiAwLCB5MTogMywg
eDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgxOiAxLCB5MTogMywgeDI6IDksIHkyOiAx
MAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywgeDI6IDEwLCB5MjogMTAKLSAgICAgIFJl
Z2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHkyOiAxMCAoZW1wdHkgcmVnaW9uKQotCi0g
ICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5zIG1vc3Qgb2YgdGhlIHBpeGVscywgd2Ug
aW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVz
LCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgotICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZh
c3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBjYWxscyBnZXRQaXhlbFZhbHVlLAotICAg
dG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gSW4gYSByYXJlIHNpdHVhdGlv
bnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmlnZ2VyIHRoYW4gdGhlIGltYWdlLCBhbGwg
cGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAgIGZ1bmN0aW9uLgotCi0gICBBbHRob3Vn
aCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGluIGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0
byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3IgdGhlbSwgc2luY2UgdGhlcmUgYXJlIGtl
eSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQg
dG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIg
Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXggPSAyNTUpCi17
Ci0gICAgaWYgKGNoYW5uZWwgPD0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5u
ZWwgPj0gbWF4KQotICAgICAgICByZXR1cm4gbWF4OwotICAgIHJldHVybiBjaGFubmVsOwotfQot
Ci10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQg
c2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVs
cywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3Rh
bHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMpCi17Ci0gICAgdW5zaWduZWQgY2hhciBtYXhB
bHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNb
M10gLyBkaXZpc29yICsgYmlhcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0g
ICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAv
IGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0gICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1
ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVscy5pdGVtKHBp
eGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRlc3RQaXhlbHMu
c2V0KHBpeGVsKyssIG1heEFscGhhKTsKLX0KLQotI2lmIENPTVBJTEVSKE1TVkMpCi0vLyBJbmNv
cnJlY3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBvZiBzdGFjayBpbiB8dG90YWxzfCBkdWUgdG8g
fHByZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgotCi0vLyBPbmx5IGZvciByZWdpb24gQwotdGVt
cGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29u
dm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5k
KQotewotICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAg
aW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIG1f
dGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwotICAgIGludCBrZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdo
dCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNpemUud2lkdGgoKSAtIDEpICog
NDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxv
YXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07Ci0KLSAgICAvLyBt
X2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMg
dGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0gICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhj
bGlwQm90dG9tIC0geUVuZCknIGxpbmVzCi0gICAgcGl4ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKLSAgICBpbnQgc3RhcnRLZXJu
ZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNsaXBSaWdodCAr
IDEpICogNCk7Ci0KLSAgICBmb3IgKGludCB5ID0geUVuZCArIDE7IHkgPiB5U3RhcnQ7IC0teSkg
ewotICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0teCkgewotICAg
ICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXpl
KCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJuZWxQaXhlbDsK
LSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOwotCi0gICAgICAg
ICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAg
ICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMp
Ci0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGtl
cm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAg
ICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVs
UGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2Vy
bmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0
PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKSk7Ci0gICAgICAg
ICAgICAgICAgKytrZXJuZWxQaXhlbDsKLSAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwot
ICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBrZXJu
ZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBt
X2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4
ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7Ci0gICAgICAgICAgICBz
dGFydEtlcm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0geEluY3Jl
YXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0K
LUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUoUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKLXsKLSAgICBpZiAoeCA+PSAwICYm
IHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeSA+PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVp
Z2h0KQotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwot
Ci0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Ci0gICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9O
RQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6Ci0gICAg
ICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICBlbHNlIGlmICh4ID49
IHBhaW50aW5nRGF0YS53aWR0aCkKLSAgICAgICAgICAgIHggPSBwYWludGluZ0RhdGEud2lkdGgg
LSAxOwotICAgICAgICBpZiAoeSA8IDApCi0gICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgZWxz
ZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICAgICAgeSA9IHBhaW50aW5n
RGF0YS5oZWlnaHQgLSAxOwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGgg
KyB4KSA8PCAyOwotICAgIGNhc2UgRURHRU1PREVfV1JBUDoKLSAgICAgICAgd2hpbGUgKHggPCAw
KQotICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHggJT0gcGFp
bnRpbmdEYXRhLndpZHRoOwotICAgICAgICB3aGlsZSAoeSA8IDApCi0gICAgICAgICAgICB5ICs9
IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsK
LSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICB9
Ci19Ci0KLS8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2
ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5
MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0
OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwotICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0g
ICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBtX3RhcmdldE9mZnNldC54KCk7Ci0gICAg
aW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0
S2VybmVsUGl4ZWxZID0geTEgLSBtX3RhcmdldE9mZnNldC55KCk7Ci0gICAgaW50IHhJbmNyZWFz
ZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRo
ZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2
ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUgMCwg
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2
aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7Ci0gICAgICAg
IGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5l
bFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAg
ICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgaW50
IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgaW50IHdpZHRo
ID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7Ci0g
ICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKLSAg
ICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICB0b3Rh
bHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAg
ICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEs
IGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxJ
bmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJ
bmRleCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5k
ZXggPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKLSAgICAgICAgICAgICAgICAr
K2tlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAg
ICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFgg
PSBzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7
Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlv
blBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFp
bnRpbmdEYXRhLmJpYXMpOwotICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAg
ICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4
ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0g
ICAgfQotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApIC8vIERp
c2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAgIC8v
IE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlT
X0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJj
ZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0
SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20s
IHlTdGFydCwgeUVuZCk7Ci0gICAgZWxzZQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8
ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhl
bHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGlu
dCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0
aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJlCi0gICAgLy8gYmVjYXVzZSBzZXRJbnRl
cmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhlcmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFs
cGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwg
eTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+
KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwotfQotCi12b2lkIEZFQ29udm9sdmVNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJl
c2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VQaXhlbEFy
cmF5OwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkg
PSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIGVsc2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVt
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50
U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNp
emUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhID0gewotICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5LAotICAgICAgICBwYWludFNpemUud2lkdGgoKSwKLSAgICAgICAgcGFp
bnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAgIG5vcm1hbGl6
ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCi0gICAgfTsKLQotICAgIC8vIERyYXdpbmcgZnVsbHkg
Y292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRTaXplLndpZHRoKCkgLSBt
X2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50U2l6ZS5oZWln
aHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKLQotICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8
IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1p
emllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgp
LndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3RE
aW1lbnNpb24pIHsKLSAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25z
OwotICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBz
dHJpZGU7Ci0KLSAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwg
WyZdKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBp
bmRleCk7Ci0gICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGlu
ZGV4ICsgMSksIGNsaXBCb3R0b20pOwotCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhw
YWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAg
ICAgfSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKLQotICAgIGNsaXBSaWdo
dCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwotICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRP
ZmZzZXQueSgpICsgMTsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgbV90
YXJnZXRPZmZzZXQueSgpKTsKLSAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQo
KSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBw
YWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICBpZiAobV90YXJnZXRP
ZmZzZXQueCgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBt
X3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAg
aWYgKGNsaXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUu
d2lkdGgoKSwgY2xpcEJvdHRvbSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAg
IHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1
MywxMCArODEsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0
cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVh
bSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJb
ZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJu
ZWxTaXplIDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5lbE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxN
YXRyaXggIDw8ICJcIiAiCiAgICAgICAgPDwgImRpdmlzb3I9XCIiIDw8IG1fZGl2aXNvciA8PCAi
XCIgIgpAQCAtNDY1LDkgKzkyLDYgQEAgVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXQKICAgICAgICA8
PCAiZWRnZU1vZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwgIlwiICIKICAgICAgICA8PCAia2VybmVs
VW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoIDw8ICJcIiAiCiAgICAgICAgPDwg
InByZXNlcnZlQWxwaGE9XCIiIDw8IG1fcHJlc2VydmVBbHBoYSA8PCAiXCJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0
dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdl
ZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjEzMzliYTdhNmI2ZmVkMTFiZTE0YThiYzIyNjBhOWQx
NjlkM2ZlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3MCArMzgsMzAgQEAgZW51
bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4IDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVh
dGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNv
bnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKLSAgICAgICAg
ICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXpl
LCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0
LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wg
cHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAotICAg
IEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQotICAg
IHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBzZXRLZXJuZWxT
aXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpIHsgbV9rZXJuZWxTaXplID0ga2VybmVsU2l6
ZTsgfQorICAgIHZvaWQgc2V0RGl2aXNvcihmbG9hdCBkaXZpc29yKSB7IG1fZGl2aXNvciA9IGRp
dmlzb3I7IH0KKyAgICB2b2lkIHNldEJpYXMoZmxvYXQgYmlhcykgeyBtX2JpYXMgPSBiaWFzOyB9
CisgICAgdm9pZCBzZXRUYXJnZXRPZmZzZXQoY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCkg
eyBtX3RhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldDsgfQorICAgIHZvaWQgc2V0RWRnZU1vZGUo
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsgfQorICAgIHZv
aWQgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
KSB7IG1fa2VybmVsVW5pdExlbmd0aCA9IGtlcm5lbFVuaXRMZW5ndGg7IH0KKyAgICB2b2lkIHNl
dFByZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKSB7IG1fcHJlc2VydmVBbHBoYSA9IHBy
ZXNlcnZlQWxwaGE7IH0KKyAgICB2b2lkIHNldEtlcm5lbE1hdHJpeChjb25zdCBWZWN0b3I8Zmxv
YXQ+JiBrZXJuZWxNYXRyaXgpIHsgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWxNYXRyaXg7IH0KIAot
ICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVs
TWF0cml4OyB9Ci0gICAgdm9pZCBzZXRLZXJuZWwoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0g
ICAgZmxvYXQgZGl2aXNvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGl2aXNvcjsgfQotICAgIGJvb2wg
c2V0RGl2aXNvcihmbG9hdCk7Ci0KLSAgICBmbG9hdCBiaWFzKCkgY29uc3QgeyByZXR1cm4gbV9i
aWFzOyB9Ci0gICAgYm9vbCBzZXRCaWFzKGZsb2F0KTsKLQotICAgIEludFBvaW50IHRhcmdldE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0OyB9Ci0gICAgYm9vbCBzZXRUYXJn
ZXRPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KLSAgICBib29sIHNldEVkZ2VNb2RlKEVkZ2VN
b2RlVHlwZSk7Ci0KLSAgICBGbG9hdFBvaW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGgo
Y29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyB9Ci0gICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wp
OworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8
RkVDb252b2x2ZU1hdHJpeD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6CisgICAgRkVD
b252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNv
bnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAotICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0
aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVj
dG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQotICAgIEZFQ29udm9sdmVNYXRyaXgo
RmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4IjsgfQotCi0gICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0
b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdo
dCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKKyAgICBib29sIGFwcGx5
U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEFMV0FZ
U19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsK
LQotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICB2b2lkIGZhc3RT
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQg
eTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBC
b3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHky
KTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0cwotICAgIHN0YXRpYyBjb25zdCBpbnQg
c19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBs
aW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlz
b3I7CkBAIC0xMTMsNSArNzMsODAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8ZmxvYXQ+IG1fa2Vy
bmVsTWF0cml4OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVDb252b2x2
ZU1hdHJpeDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCBtX2tlcm5lbFNpemU7CisgICAgZW5jb2RlciA8PCBtX2Rpdmlzb3I7CisgICAgZW5jb2RlciA8
PCBtX2JpYXM7CisgICAgZW5jb2RlciA8PCBtX3RhcmdldE9mZnNldDsKKyAgICBlbmNvZGVyIDw8
IG1fZWRnZU1vZGU7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbFVuaXRMZW5ndGg7CisgICAgZW5j
b2RlciA8PCBtX3ByZXNlcnZlQWxwaGE7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbE1hdHJpeDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFQ29udm9s
dmVNYXRyaXg+PiBGRUNvbnZvbHZlTWF0cml4OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IGtlcm5lbFNpemU7CisgICAgZGVjb2RlciA+PiBr
ZXJuZWxTaXplOworICAgIGlmICgha2VybmVsU2l6ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRpdmlzb3I7CisgICAgZGVjb2RlciA+
PiBkaXZpc29yOworICAgIGlmICghZGl2aXNvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJpYXM7CisgICAgZGVjb2RlciA+PiBiaWFz
OworICAgIGlmICghYmlhcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IHRhcmdldE9mZnNldDsKKyAgICBkZWNvZGVyID4+IHRhcmdl
dE9mZnNldDsKKyAgICBpZiAoIXRhcmdldE9mZnNldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8RWRnZU1vZGVUeXBlPiBlZGdlTW9kZTsKKyAgICBk
ZWNvZGVyID4+IGVkZ2VNb2RlOworICAgIGlmICghZWRnZU1vZGUpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+IGtlcm5lbFVuaXRM
ZW5ndGg7CisgICAgZGVjb2RlciA+PiBrZXJuZWxVbml0TGVuZ3RoOworICAgIGlmICgha2VybmVs
VW5pdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0
aW9uYWw8Ym9vbD4gcHJlc2VydmVBbHBoYTsKKyAgICBkZWNvZGVyID4+IHByZXNlcnZlQWxwaGE7
CisgICAgaWYgKCFrZXJuZWxVbml0TGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8ZmxvYXQ+PiBrZXJuZWxNYXRyaXg7CisgICAg
ZGVjb2RlciA+PiBrZXJuZWxNYXRyaXg7CisgICAgaWYgKCFrZXJuZWxNYXRyaXgpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVDb252b2x2ZU1hdHJpeDo6Y3Jl
YXRlKCprZXJuZWxTaXplLCAqZGl2aXNvciwgKmJpYXMsICp0YXJnZXRPZmZzZXQsICplZGdlTW9k
ZSwgKmtlcm5lbFVuaXRMZW5ndGgsICpwcmVzZXJ2ZUFscGhhLCBXVEZNb3ZlKCprZXJuZWxNYXRy
aXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpFZGdlTW9kZVR5cGU+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpFZGdlTW9kZVR5
cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVfVU5LTk9XTiwKKyAgICAgICAgV2ViQ29y
ZTo6RURHRU1PREVfRFVQTElDQVRFLAorICAgICAgICBXZWJDb3JlOjpFREdFTU9ERV9XUkFQLAor
ICAgICAgICBXZWJDb3JlOjpFREdFTU9ERV9OT05FCisgICAgPjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb252b2x2
ZU1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5kZXggZWViMTcyOGRiMzVlOGFj
MzAyYjI3ZTRjM2ZmMzRjYjg4NTViOWQwOS4uNWI1M2QzNTY2YTlhODY2ZjY0ZDk4OGU4ODcyNWJi
ZWJjZjE0ZjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMzYgKzI4LDI3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0
aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNl
KQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhY
LCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VM
aWdodGluZykKK1JlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0
ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IExpZ2h0U291cmNlJiYgc291cmNlKQogeworICAgIHJldHVybiBjcmVhdGUoY29sb3IsIHN1cmZh
Y2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVs
VW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSk7CiB9CiAKLVJlZjxGRURpZmZ1c2VMaWdodGlu
Zz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZm
dXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwg
V1RGTW92ZShsaWdodFNvdXJjZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1
c2VMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIHNwZWN1bGFy
Q29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0
TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVE
aWZmdXNlTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNl
dERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCitGRURpZmZ1c2VMaWdodGlu
Zzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3Is
IHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxh
ckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUo
c291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7Ci0gICAgaWYgKG1fZGlmZnVzZUNv
bnN0YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
ZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OwotICAgIHJldHVybiB0cnVlOwogfQog
Ci1UZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIHN1cmZhY2VT
Y2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAiZGlmZnVzZUNv
bnN0YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8PCAiXCIgIgogICAgICAgIDw8ICJrZXJu
ZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJu
ZWxVbml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0
aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVz
ZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRj
My4uMjBjNzgwYzUyMmZjOTlkZjM4ZmI5MTE1ZDJhMGMwZmY2YmY0ZDc2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGlu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNSwyMSArMjYsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBMaWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdo
dGluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRl
KEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxM
aWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKLQotICAg
IGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50
OyB9Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQpOworICAgIHN0YXRpYyBSZWY8
RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYpOwogCi0gICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8UmVmPEZFRGlmZnVzZUxpZ2h0aW5nPj4gZGVjb2RlKERlY29kZXImKTsK
IAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIEZF
RGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBk
aWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
TGlnaHRTb3VyY2UmJik7CisgICAgCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxGRURpZmZ1c2VMaWdodGluZz4+IEZFRGlmZnVzZUxpZ2h0aW5nOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGluZzo6ZGVjb2RlPERlY29kZXIsIEZFRGlm
ZnVzZUxpZ2h0aW5nPihkZWNvZGVyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBh
N2MzMmIxNmM1NjNmYTEuLjliMTljNzY5ZDM2MGI2YzRmZjI5YmIwYmZlNTFhMzk2ZjFkZjQ2ZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMzIgKzI1LDQ2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlz
cGxhY2VtZW50TWFwKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVs
U2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2Nh
bGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpEaXNwbGFjZW1lbnRNYXApCi0g
ICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKLSAgICAsIG1feUNoYW5u
ZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQotICAgICwgbV9zY2FsZShzY2FsZSkKK1JlZjxG
RURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvciwgZmxvYXQgc2NhbGUpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFj
ZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0K
IAotUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hh
bm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2Vs
ZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1l
bnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3hDaGFubmVsU2VsZWN0b3IgPT0geENoYW5uZWxT
ZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feENoYW5uZWxTZWxlY3RvciA9
IHhDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3lDaGFubmVsU2VsZWN0b3IgPT0geUNoYW5u
ZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1feUNoYW5uZWxTZWxlY3Rv
ciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVEaXNw
bGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZF
RGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hh
bm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpGRURpc3BsYWNlbWVudE1hcCkKKyAgICAsIG1feENoYW5uZWxTZWxl
Y3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVs
U2VsZWN0b3IpCisgICAgLCBtX3NjYWxlKHNjYWxlKQogewotICAgIGlmIChtX3NjYWxlID09IHNj
YWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNw
YWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjppbWFnZUNvbG9yU3BhY2UoY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVy
cG9sYXRpb24tZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3Vy
Y2UgaW1hZ2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGlt
YWdlLiBUaGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3Vy
cmVudCBjb2xvciBzcGFjZS4KICAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xv
ciBzcGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgot
ICAgIEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVz
dWx0Q29sb3JTcGFjZSgpKTsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0g
ICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIg
dGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgp
ID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmNvbG9yU3BhY2UoKTsKIH0KIAotc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5
LCB1bnNpZ25lZCByb3dCeXRlcykKK0Zsb2F0UmVjdCBGRURpc3BsYWNlbWVudE1hcDo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
IHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICByZXR1cm4geCAq
IGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBU
b0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVEaXNw
bGFjZW1lbnRNYXA6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAog
ewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZl
Y3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3Rv
ciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0g
Q0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIEludFJlY3QgZWZm
ZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwotCi0gICAgSW50UmVjdCBlZmZlY3RCRHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2
YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGll
ZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0gICAgCi0gICAgaWYgKCFpbnB1dElt
YWdlIHx8ICFkaXNwbGFjZW1lbnRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7Ci0K
LSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIEludFNpemUgcGFpbnRT
aXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3NjYWxlLCBtX3NjYWxlIH0pOwotICAgIGZsb2F0IHNj
YWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlRm9y
Q29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKLSAgICBmbG9hdCBzY2FsZWRPZmZzZXRY
ID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKLSAgICBmbG9hdCBzY2FsZWRPZmZzZXRZID0g
MC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7Ci0gICAgCi0gICAgaW50IGRpc3BsYWNlbWVudENo
YW5uZWxYID0geENoYW5uZWxJbmRleCgpOwotICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9
IHlDaGFubmVsSW5kZXgoKTsKLQotICAgIGludCByb3dCeXRlcyA9IHBhaW50U2l6ZS53aWR0aCgp
ICogNDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kp
IHsKLSAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsKLQotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKLSAgICAgICAg
ICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2Nh
bGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsg
ZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7Ci0gICAgICAgICAgICBpbnQg
c3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50
SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNj
YWxlZE9mZnNldFkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpICsgZGVzdGluYXRpb25JbmRleCk7Ci0gICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3Jj
WCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5o
ZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKmRl
c3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1h
Z2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSAyKTsKKyAgICByZXR1
cm4geyBzdGFjay50YWtlTGFzdCgpLCBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0
b3JUeXBlJiB0eXBlKQpAQCAtMTc0LDE3ICs4OSwxMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFRGlzcGxhY2VtZW50TWFwOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVw
cmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVEaXNwbGFjZW1lbnRNYXAiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwog
ICAgIHRzIDw8ICIgc2NhbGU9XCIiIDw8IG1fc2NhbGUgPDwgIlwiICIKICAgICAgICA8PCAieENo
YW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yIDw8ICJcIiAiCiAgICAgICAg
PDwgInlDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feUNoYW5uZWxTZWxlY3RvciA8PCAiXCJdXG4i
OwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlu
cHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2Vu
dGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRl
eCBkZDczMmE4ODEwNzNlMjY2YmM4NDZhZmU2ODE5ZTY3NTE2MjNhM2EyLi5jZjA0NmVlYjAwOTY4
NGIzNWQzZGZmMDU3MjE5YWM4YjA5MGRiY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDgg
KzIzLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMzggKzM2LDgxIEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9y
VHlwZSB7CiAKIGNsYXNzIEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRl
ciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBm
bG9hdCBzY2FsZSk7CiAKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7IH0KLSAgICBib29sIHNldFhDaGFu
bmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7CisgICAgdm9pZCBzZXRYQ2hh
bm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rvcikg
eyBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRZ
Q2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rv
cikgeyBtX3lDaGFubmVsU2VsZWN0b3IgPSB5Q2hhbm5lbFNlbGVjdG9yOyB9CisgICAgdm9pZCBz
ZXRTY2FsZShmbG9hdCBzY2FsZSkgeyBtX3NjYWxlID0gc2NhbGU7IH0KIAotICAgIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxT
ZWxlY3RvcjsgfQotICAgIGJvb2wgc2V0WUNoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2Vs
ZWN0b3JUeXBlKTsKLQotICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsg
fQotICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNw
YWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRl
OworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8
RkVEaXNwbGFjZW1lbnRNYXA+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZF
RGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAg
RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBD
aGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEaXNwbGFj
ZW1lbnRNYXAiOyB9CisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hD
aGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1h
Z2VDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsg
fQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5u
ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBG
aWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBD
aGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIG1feUNoYW5uZWxTZWxlY3RvcjsKICAgICBmbG9hdCBtX3NjYWxlOwogfTsKIAordGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV94Q2hhbm5lbFNlbGVjdG9y
OworICAgIGVuY29kZXIgPDwgbV95Q2hhbm5lbFNlbGVjdG9yOworICAgIGVuY29kZXIgPDwgbV9z
Y2FsZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZF
RGlzcGxhY2VtZW50TWFwPj4gRkVEaXNwbGFjZW1lbnRNYXA6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhbm5lbFNlbGVjdG9yVHlwZT4geENoYW5uZWxT
ZWxlY3RvcjsKKyAgICBkZWNvZGVyID4+IHhDaGFubmVsU2VsZWN0b3I7CisgICAgaWYgKCF4Q2hh
bm5lbFNlbGVjdG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxDaGFubmVsU2VsZWN0b3JUeXBlPiB5Q2hhbm5lbFNlbGVjdG9yOworICAgIGRlY29k
ZXIgPj4geUNoYW5uZWxTZWxlY3RvcjsKKyAgICBpZiAoIXlDaGFubmVsU2VsZWN0b3IpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzY2Fs
ZTsKKyAgICBkZWNvZGVyID4+IHNjYWxlOworICAgIGlmICghc2NhbGUpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSgq
eENoYW5uZWxTZWxlY3RvciwgKnlDaGFubmVsU2VsZWN0b3IsICpzY2FsZSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6Q2hhbm5lbFNlbGVjdG9yVHlwZT4geworICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkNoYW5uZWxTZWxlY3RvclR5cGUs
CisKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9VTktOT1dOLAorICAgICAgICBXZWJDb3JlOjpD
SEFOTkVMX1IsCisgICAgICAgIFdlYkNvcmU6OkNIQU5ORUxfRywKKyAgICAgICAgV2ViQ29yZTo6
Q0hBTk5FTF9CLAorICAgICAgICBXZWJDb3JlOjpDSEFOTkVMX0EKKyAgICA+OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChG
RURpc3BsYWNlbWVudE1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4
ZGQ1NDI2ZDk2NWJiZmU3ODlmNmJiZGQ4Li5lYmI4YTNiNmRjNWVmMGExMjdlYjdkMDAxNjNkNDhm
YTQ2YmUyOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDE5ICsyMywyMyBAQAogCiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAi
RmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUg
IlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotRkVEcm9w
U2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0
ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBz
aGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRv
dykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwgbV9zdGRZKHN0ZFkpCisKK1JlZjxGRURyb3BT
aGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0
ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRHJv
cFNoYWRvdyhzdGREZXZpYXRpb25YLCBzdGREZXZpYXRpb25ZLCBkeCwgZHksIHNoYWRvd0NvbG9y
LCBzaGFkb3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0
IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRvdykKKyAgICAsIG1fc3RkRGV2aWF0aW9uWChzdGRE
ZXZpYXRpb25YKQorICAgICwgbV9zdGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblkpCiAgICAgLCBt
X2R4KGR4KQogICAgICwgbV9keShkeSkKICAgICAsIG1fc2hhZG93Q29sb3Ioc2hhZG93Q29sb3Ip
CkBAIC00MiwxMDAgKzQ3LDQ2IEBAIEZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYg
ZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvCiB7CiB9CiAKLVJl
ZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9h
dCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFk
b3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKK0ludE91dHNldHMgRkVEcm9wU2hhZG93Ojpj
YWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURy
b3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dP
cGFjaXR5KSk7Ci19Ci0KLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCi17Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLQotICAgIEZs
b2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50
UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0ZVBh
aW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgYWJzb2x1dGVQYWludFJl
Y3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwotCi0gICAgSW50U2l6ZSBrZXJuZWxT
aXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOwotCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQg
bXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGlt
ZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBh
YnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7
CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNl
dFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2aWF0aW9uWSB9KTsKKyAgICByZXR1cm4g
eworICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwK
KyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKKyAg
ICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpICsgbV9keSksCisgICAg
ICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCkKKyAgICB9Owog
fQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVj
dCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0g
aW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7CisgICAgaW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVzb2x2ZUltYWdlU2l6ZSh7IG1f
ZHgsIG1fZHkgfSkpOwogICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVy
UmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7Ci0KLSAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9m
ZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9m
ZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
ICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKLSAgICByZXN1bHRD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zm
c2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0gICAgU2hhZG93Qmx1ciBj
b250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7Ci0KLSAgICBQ
aXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIElu
dFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7
Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBp
eGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworICAg
IGltYWdlUmVjdC51bml0ZShpbnB1dHNbMF0tPmltYWdlUmVjdCgpKTsKICAgICAKLSAgICByZXN1
bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKLQotICAg
IHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwotICAgIHJl
c3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0
aW5hdGlvbk92ZXIpOworICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVLZXJuZWxTaXplKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7
CisgICAgCisgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkg
aXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAg
aW1hZ2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKyAgICBp
bWFnZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJh
d2luZ1JlZ2lvbik7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFByaW1pdGl2ZVN1YnJl
Z2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUludE91dHNldHMgRkVE
cm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9yIEZFRHJvcFNoYWRv
dzo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgSW50
U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBt
X3N0ZFgsIG1fc3RkWSB9KTsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBv
dXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRz
ZXRTaXplLmhlaWdodCgpICsgbV9keSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0
U2l6ZS53aWR0aCgpIC0gbV9keCkKLSAgICB9OworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgp
KTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZF
RHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEcm9wU2hh
ZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwiW2Zl
RHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
WCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8
PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFk
b3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50
U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRz
LCByZXByZXNlbnRhdGlvbik7CisgICAgdHMgPDwgIiBzdGREZXZpYXRpb249XCIiIDw8IG1fc3Rk
RGV2aWF0aW9uWCA8PCAiLCAiIDw8IG1fc3RkRGV2aWF0aW9uWSA8PCAiXCIgZHg9XCIiIDw8IG1f
ZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxvb2Qtb3Bh
Y2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwogICAgIHJldHVybiB0czsKIH0K
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAxMmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEy
OWVmZjM4NGMuLmRmOTAxNzQ3OGEwMjBmNGVhMWZhODRjZWJjYjM2ODg3NGRmYTBlNGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMCw1MyArMjEsOTIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVEcm9wU2hhZG93IDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShm
bG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKLSAgICBmbG9hdCBzdGREZXZpYXRp
b25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9Ci0gICAgdm9pZCBzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHN0ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQotCi0gICAgZmxvYXQgc3RkRGV2aWF0aW9u
WSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWShm
bG9hdCBzdGRZKSB7IG1fc3RkWSA9IHN0ZFk7IH0KLQotICAgIGZsb2F0IGR4KCkgY29uc3QgeyBy
ZXR1cm4gbV9keDsgfQorICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCBzdGREZXZpYXRp
b25YKSB7IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlhdGlvblg7IH0KKyAgICB2b2lkIHNldFN0
ZERldmlhdGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkgeyBtX3N0ZERldmlhdGlvblkgPSBzdGRE
ZXZpYXRpb25ZOyB9CiAgICAgdm9pZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KLQot
ICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9keTsgfQogICAgIHZvaWQgc2V0RHkoZmxv
YXQgZHkpIHsgbV9keSA9IGR5OyB9Ci0KLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBj
b25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9yOyB9IAogICAgIHZvaWQgc2V0U2hhZG93Q29sb3Io
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKSB7IG1fc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsg
fQotCi0gICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93T3Bh
Y2l0eTsgfQogICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7
IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVEcm9wU2hhZG93Pj4gZGVjb2Rl
KERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBGRURyb3BTaGFkb3coRmlsdGVyJiwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRHJvcFNo
YWRvdyhmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRHJvcFNoYWRvdyI7IH0KKyAg
ICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0
ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBmbG9hdCBt
X3N0ZFg7Ci0gICAgZmxvYXQgbV9zdGRZOworICAgIGZsb2F0IG1fc3RkRGV2aWF0aW9uWDsKKyAg
ICBmbG9hdCBtX3N0ZERldmlhdGlvblk7CiAgICAgZmxvYXQgbV9keDsKICAgICBmbG9hdCBtX2R5
OwogICAgIENvbG9yIG1fc2hhZG93Q29sb3I7CiAgICAgZmxvYXQgbV9zaGFkb3dPcGFjaXR5Owog
fTsKLSAgICAKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVEcm9wU2hhZG93Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2
aWF0aW9uWDsKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8
IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5OworICAgIGVuY29kZXIgPDwgbV9zaGFkb3dDb2xv
cjsKKyAgICBlbmNvZGVyIDw8IG1fc2hhZG93T3BhY2l0eTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRHJvcFNoYWRvdz4+IEZFRHJvcFNoYWRvdzo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3Rk
RGV2aWF0aW9uWDsKKyAgICBkZWNvZGVyID4+IHN0ZERldmlhdGlvblg7CisgICAgaWYgKCFzdGRE
ZXZpYXRpb25YKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWTsKKyAgICBkZWNvZGVyID4+IHN0ZERldmlhdGlvblk7
CisgICAgaWYgKCFzdGREZXZpYXRpb25ZKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHg7CisgICAgZGVjb2RlciA+PiBkeDsKKyAgICBp
ZiAoIWR4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxmbG9hdD4gZHk7CisgICAgZGVjb2RlciA+PiBkeTsKKyAgICBpZiAoIWR5KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2hhZG93Q29s
b3I7CisgICAgZGVjb2RlciA+PiBzaGFkb3dDb2xvcjsKKyAgICBpZiAoIXNoYWRvd0NvbG9yKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4g
c2hhZG93T3BhY2l0eTsKKyAgICBkZWNvZGVyID4+IHNoYWRvd09wYWNpdHk7CisgICAgaWYgKCFz
aGFkb3dPcGFjaXR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJu
IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCpzdGREZXZpYXRpb25YLCAqc3RkRGV2aWF0aW9uWSwgKmR4
LCAqZHksICpzaGFkb3dDb2xvciwgKnNoYWRvd09wYWNpdHkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURyb3BT
aGFkb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmNwcAppbmRleCBiNDIzNTUzNGMzOGIxZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2
YjAxLi45MWE4ODU3NmQzMzVlYjFlOTA4YjQ0M2VjMmUxOWUwZDkzMzUwNTAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAK
QEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNTYgKzI1LDMzIEBACiAjaW5jbHVkZSAiRkVG
bG9vZC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0
ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29sb3IpCi0gICAgLCBt
X2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCi17Ci19Ci0KLVJlZjxGRUZsb29kPiBGRUZsb29k
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBm
bG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29k
KGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVGbG9vZChjb2xvciwgb3BhY2l0eSkpOwogfQogCi1ib29sIEZFRmxvb2Q6OnNldEZs
b29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChtX2Zsb29kQ29sb3IgPT0g
Y29sb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2Zsb29kQ29sb3IgPSBjb2xvcjsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxv
YXQgZmxvb2RPcGFjaXR5KQorRkVGbG9vZDo6RkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RDb2xv
ciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRmxvb2Qp
CisgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKKyAgICAsIG1fZmxvb2RPcGFjaXR5KGZs
b29kT3BhY2l0eSkKIHsKLSAgICBpZiAobV9mbG9vZE9wYWNpdHkgPT0gZmxvb2RPcGFjaXR5KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9vZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7
Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKK0Zsb2F0UmVjdCBGRUZsb29kOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVy
UmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0
aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAg
IHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAgICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIg
PDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAgICB0cyA8PCAiIGZsb29kLWNvbG9yPVwi
IiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChtX2Zsb29kQ29sb3IpIDw8ICJc
IiAiIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBtX2Zsb29kT3BhY2l0eSA8PCAiXCJdXG4iOwog
ICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2
ODJmYTA2MTczNDhlLi43YTVkY2JkMzc5MWUxODAxNjQwNWZlOGI0MWZjODBlM2Q3YjhkYTcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiw0MiArMjMsNjIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3Im
LCBmbG9hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUo
Y29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAotICAgIGNvbnN0IENvbG9yJiBmbG9vZENv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9Ci0gICAgYm9vbCBzZXRGbG9vZENv
bG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikgeyBtX2Zsb29kQ29sb3IgPSBjb2xvcjsgfQorICAgIHZvaWQgc2V0Rmxvb2RPcGFjaXR5
KGZsb2F0IGZsb29kT3BhY2l0eSkgeyBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0eTsgfQog
Ci0gICAgZmxvYXQgZmxvb2RPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZE9wYWNpdHk7
IH0KLSAgICBib29sIHNldEZsb29kT3BhY2l0eShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUZsb29kPj4gZGVjb2RlKERlY29k
ZXImKTsKKworcHJpdmF0ZToKKyAgICBGRUZsb29kKGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0
eSk7CiAKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3QgcGVyZm9ybSBjb2xv
ciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0
aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9m
IGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZl
Y3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9
Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KICNlbmRpZgogCi1w
cml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7Ci0KLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRmxvb2Qi
OyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1h
eEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBv
dXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgQ29sb3IgbV9mbG9vZENvbG9yOwogICAgIGZsb2F0IG1fZmxvb2RPcGFjaXR5OwogfTsKIAor
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVGbG9vZDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2Zsb29kQ29sb3I7CisgICAgZW5jb2Rl
ciA8PCBtX2Zsb29kT3BhY2l0eTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6
b3B0aW9uYWw8UmVmPEZFRmxvb2Q+PiBGRUZsb29kOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmbG9vZENvbG9yOworICAgIGRlY29kZXIgPj4g
Zmxvb2RDb2xvcjsKKyAgICBpZiAoIWZsb29kQ29sb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBmbG9vZE9wYWNpdHk7CisgICAgZGVj
b2RlciA+PiBmbG9vZE9wYWNpdHk7CisgICAgaWYgKCFmbG9vZE9wYWNpdHkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVGbG9vZDo6Y3JlYXRlKCpmbG9vZENv
bG9yLCAqZmxvb2RPcGFjaXR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVGbG9vZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2YzNmViYjZiYmI4YWIzNjM5NDM2NS4uYmQz
NGMwMmQyMTc5NjU5MGVjY2ZiYzRmNWQ5ZjIzYjczZGRjYzIyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNDUwICsyNiw0
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAK
LSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNs
dWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0
ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotCi1zdGF0aWMgaW5saW5lIGZs
b2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRm
KDIgKiBwaUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUw
MDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihp
bnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYg
ZGVsdGFSaWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShm
bG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMuCi0gICAgc3dpdGNoIChibHVy
SXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewot
ICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMiAtIDE7Ci0gICAgICAgICAgICBkZWx0
YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRp
dXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgot
ICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0g
ICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFS
aWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHN0ZERldmlh
dGlvblgsIHN0ZERldmlhdGlvblksIGVkZ2VNb2RlKSk7CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpG
RUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5C
bHVyKQotICAgICwgbV9zdGRYKHgpCi0gICAgLCBtX3N0ZFkoeSkKK0ZFR2F1c3NpYW5CbHVyOjpG
RUdhdXNzaWFuQmx1cihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVHYXVzc2lh
bkJsdXIpCisgICAgLCBtX3N0ZERldmlhdGlvblgoc3RkRGV2aWF0aW9uWCkKKyAgICAsIG1fc3Rk
RGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKQogICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKIHsK
IH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoZmlsdGVyLCB4LCB5LCBlZGdlTW9k
ZSkpOwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25YKGZsb2F0IHgp
Ci17Ci0gICAgbV9zdGRYID0geDsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWShmbG9hdCB5KQotewotICAgIG1fc3RkWSA9IHk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lh
bkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBtX2VkZ2VN
b2RlID0gZWRnZU1vZGU7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gb25seSBvcGVyYXRlcyBvbiBB
bHBoYSBjaGFubmVsLgotaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJy
YXksCi0gICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3Ry
aWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0
LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCi17Ci0gICAgY29uc3QgdWludDhfdCogc3JjRGF0
YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhl
bEFycmF5LmRhdGEoKTsKLSAgICAvLyBNZW1vcnkgYWxpZ25tZW50IGlzOiBSR0JBLCB6ZXJvLWlu
ZGV4IGJhc2VkLgotICAgIGNvbnN0IGludCBjaGFubmVsID0gMzsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3Ry
aWRlTGluZTsKLSAgICAgICAgaW50IHN1bSA9IDA7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUga2Vy
bmVsLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgewot
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OwotICAgICAgICAg
ICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEJsdXJy
aW5nLgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlICsg
Y2hhbm5lbDsKLSAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5
dGVPZmZzZXQ7Ci0gICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
IC8gZHgpOwotCi0gICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0gICAgICAgICAgICBpZiAo
eCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4
ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1
bSAtPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoeCArIGR4Umln
aHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICBj
b25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgc3VtICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLWlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVs
QXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVkIGR4
LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGlu
dCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgY29uc3QgaW50IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1p
bihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7Ci0gICAgaWYgKGFscGhhSW1hZ2UpCi0gICAgICAgIHJl
dHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIGR4LCBk
eExlZnQsIGR4UmlnaHQsIHN0cmlkZSwgc3RyaWRlTGluZSwgIGVmZmVjdFdpZHRoLCBlZmZlY3RI
ZWlnaHQsIG1heEtlcm5lbFNpemUpOwotCi0gICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNy
Y1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5
LmRhdGEoKTsKLQotICAgIC8vIENvbmNlcm5pbmcgdGhlIGFycmF5IHdpZHRoL2xlbmd0aDogaXQg
aXMgRWxlbWVudCBzaXplICsgTWFyZ2luICsgQm9yZGVyLiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3
aWxsIGJlCi0gICAgLy8gUCA9IHdpZHRoICogaGVpZ2h0ICogY2hhbm5lbHMuCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9IHkg
KiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtUiA9IDAsIHN1bUcgPSAwLCBzdW1CID0gMCwg
c3VtQSA9IDA7Ci0KLSAgICAgICAgaWYgKGVkZ2VNb2RlID09IEVER0VNT0RFX05PTkUpIHsKLSAg
ICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gbGluZSArIGkgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCog
c3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQ
dHIrKzsKLSAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAg
ICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQdHI7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAgICAgICAg
ICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQotICAgICAg
ICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0g
ICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4
KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1C
IC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAg
ICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
ZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0
clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVP
ZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50
OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAg
IHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsx
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciAnd3JhcCcgaGVyZS4KLSAgICAgICAgICAgIC8vIEdldCBlZGdlIHZhbHVlcyBmb3IgZWRn
ZU1vZGUgJ2R1cGxpY2F0ZScuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVM
ZWZ0ID0gc3JjRGF0YSArIGxpbmU7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBlZGdlVmFs
dWVSaWdodCAgPSBzcmNEYXRhICsgKGxpbmUgKyAoZWZmZWN0V2lkdGggLSAxKSAqIHN0cmlkZSk7
Ci0KLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgIGZvciAoaW50
IGkgPSBkeExlZnQgKiAtMTsgaSA8IGR4UmlnaHQ7ICsraSkgewotICAgICAgICAgICAgICAgIC8v
IElzIHRoaXMgcmlnaHQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBvZiAnaSc/Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLQotICAgICAgICAgICAg
ICAgIGlmIChpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZUxl
ZnRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlTGVmdFsxXTsKLSAg
ICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChpID49IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRn
ZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmln
aHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAg
ICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRy
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1
cnJpbmcuCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAq
IHN0cmlkZTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4
ZWxCeXRlT2Zmc2V0OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW1HIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBT
aGlmdCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYgKHggPCBkeExlZnQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtUiAtPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1HIC09IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgLT0g
ZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBlZGdlVmFsdWVM
ZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0
T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIg
LT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPj0gZWZm
ZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFsw
XTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAg
ICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9m
ZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAg
c3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFd
OwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9p
ZCBhY2NlbGVyYXRlQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xh
bXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBp
bnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpCi17Ci0gICAgaWYgKCFpb0J1ZmZlci5k
YXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGVmZmVjdFdpZHRoIDw9IDAg
fHwgZWZmZWN0SGVpZ2h0IDw9IDAgfHwgc3RyaWRlIDw9IDApIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBtdXN0IGFs
d2F5cyB1c2UgYW4gb2RkIHJhZGl1cy4KLSAgICBpZiAoa2VybmVsU2l6ZSAlIDIgIT0gMSkKLSAg
ICAgICAga2VybmVsU2l6ZSArPSAxOwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RJbkJ1ZmZl
cjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGlvQnVmZmVy
LmRhdGEoKSk7Ci0gICAgZWZmZWN0SW5CdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKLSAgICBl
ZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0SW5CdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsK
LSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBCdWZmZXIuZGF0YSgpOwotICAgIGVmZmVj
dE91dEJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwotICAgIGVmZmVjdE91dEJ1ZmZlci5oZWln
aHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRl
OwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBj
YWxsaW5nIHRoZSBmdW5jdGlvbiBmaXJzdCB3aXRoIGEgc3BlY2lhbCBmbGFnLiB2SW1hZ2Ugd2ls
bCByZXR1cm4KLSAgICAvLyB0aGUgc2l6ZSBuZWVkZWQsIG9yIGFuIGVycm9yICh3aGljaCBhcmUg
YWxsIG5lZ2F0aXZlKS4KLSAgICBzaXplX3QgdG1wQnVmZmVyU2l6ZSA9IHZJbWFnZUJveENvbnZv
bHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgMCwgMCwgMCwg
a2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQgfCBrdkltYWdlR2V0
VGVtcEJ1ZmZlclNpemUpOwotICAgIGlmICh0bXBCdWZmZXJTaXplIDw9IDApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHZvaWQqIHRtcEJ1ZmZlciA9IGZhc3RNYWxsb2ModG1wQnVmZmVyU2l6ZSk7
Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0
T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2
SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
T3V0QnVmZmVyLCAmZWZmZWN0SW5CdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZl
X0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAw
LCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAg
V1RGOjpmYXN0RnJlZSh0bXBCdWZmZXIpOwotCi0gICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91
bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9
PSB0ZW1wQnVmZmVyLmxlbmd0aCgpKTsKLSAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1w
QnVmZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotfQotI2VuZGlmCi0KLWlubGluZSB2
b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xh
bXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1h
Z2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBpbnQgZHhMZWZ0ID0gMDsKLSAgICBp
bnQgZHhSaWdodCA9IDA7Ci0gICAgaW50IGR5TGVmdCA9IDA7Ci0gICAgaW50IGR5UmlnaHQgPSAw
OwotICAgIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOwot
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOwotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7Ci0g
ICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0
KTsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgICAgICAgICBpZiAoIWlzQWxw
aGFJbWFnZSkKLSAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVm
ZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53
aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVm
dCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdo
dCgpLCB0cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1
ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUs
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSwgZWRn
ZU1vZGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZm
ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtlcm5lbFNpemVZKSB7Ci0gICAgICAgICAg
ICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKLSNpZiBI
QVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkK
LSAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJu
ZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwg
cGFpbnRTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJv
eEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdo
dCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCB0cnVl
LCBlZGdlTW9kZSk7Ci0jZWxzZQotICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRv
QnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6
ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwot
I2VuZGlmCi0gICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVk
IGluIGlvQnVmZmVyLgotICAgIGlmICgmaW9CdWZmZXIgIT0gZnJvbUJ1ZmZlcikgewotICAgICAg
ICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAg
ICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVy
Lmxlbmd0aCgpKTsKLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKLXsKLSAgICBpbnQgc3RyaWRlID0gNCAqIHBh
aW50U2l6ZS53aWR0aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGtlcm5lbFNp
emVYID09IGtlcm5lbFNpemVZICYmIChtX2VkZ2VNb2RlID09IEVER0VNT0RFX05PTkUgfHwgbV9l
ZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7Ci0gICAgICAgIGFjY2VsZXJhdGVCb3hC
bHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNp
emUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotCi0gICAgc3RhbmRhcmRCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2Uo
KSwgbV9lZGdlTW9kZSk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlX
b3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgSW50U2l6
ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBhcmFtZXRlcnMtPmhlaWdodCk7Ci0gICAg
cGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW1ldGVycy0+aW9Q
aXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVs
U2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUpOwotfQotCi1pbmxpbmUg
dm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9C
dWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxT
aXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKK3N0YXRpYyBp
bmxpbmUgZmxvYXQgZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKQogewotI2lmICFVU0UoQUNDRUxFUkFU
RSkKLSAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0gICAgaW50IGV4
dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKLSAgICBpbnQgb3B0aW1hbFRocmVh
ZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkgLyAoc19t
aW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOwot
Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFdURjo6UGFyYWxs
ZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBw
bHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIGludCBqb2JzID0gcGFy
YWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAoam9icyA+IDEpIHsKLSAgICAg
ICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiYmxvY2tIZWlnaHQiLXNpemVkIGpvYnMgYnV0
IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQot
ICAgICAgICAgICAgLy8gYmxvY2tIZWlnaHQgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0
cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgotICAgICAg
ICAgICAgY29uc3QgaW50IGJsb2NrSGVpZ2h0ID0gcGFpbnRTaXplLmhlaWdodCgpIC8gam9iczsK
LSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRTaXplLmhlaWdodCgp
ICUgam9iczsKLQotICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKLSAgICAgICAgICAgIGZv
ciAoaW50IGpvYiA9IDA7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9i
KTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLQotICAgICAgICAgICAg
ICAgIGludCBzdGFydFkgPSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0
ICsgMSA6IGJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBlbmRZID0gam9iID09IGpv
YnMgLSAxID8gY3VycmVudFkgOiBjdXJyZW50WSArIGV4dHJhSGVpZ2h0OwotCi0gICAgICAgICAg
ICAgICAgaW50IGJsb2NrU2l6ZSA9IChlbmRZIC0gc3RhcnRZKSAqIHNjYW5saW5lOwotICAgICAg
ICAgICAgICAgIGlmICgham9iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVs
QXJyYXkgPSAmaW9CdWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFy
cmF5ID0gJnRtcFBpeGVsQXJyYXk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50
bXBQaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxv
Y2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb1BpeGVsQXJyYXkt
PmRhdGEoKSwgaW9CdWZmZXIuZGF0YSgpICsgc3RhcnRZICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0gcGFp
bnRTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBz
dGFydFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0KLSAgICAg
ICAgICAgIC8vIENvcHkgdG9nZXRoZXIgdGhlIHBhcnRzIG9mIHRoZSBpbWFnZS4KLSAgICAgICAg
ICAgIGN1cnJlbnRZID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IDE7IGpvYiA8IGpv
YnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBh
cmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBpbnQg
c291cmNlT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbk9mZnNldDsKLSAg
ICAgICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgICAgICBpbnQgYWRqdXN0ZWRCbG9j
a0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hl
aWdodDsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGFkanVzdGVkQmxvY2tIZWlnaHQ7
Ci0gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gZXh0cmFIZWlnaHQgKiBzY2FubGluZTsK
LSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9IGN1cnJlbnRZICogc2NhbmxpbmU7
Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxvY2tIZWlnaHQgKiBzY2FubGluZTsK
LQotICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9m
ZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsgc291cmNlT2Zmc2V0LCBzaXplKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAv
LyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0jZW5kaWYKLQotICAg
IC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2Fs
bHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKKyAg
ICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKIH0KIAogc3RhdGljIGludCBj
bGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQogewogICAgIC8vIExpbWl0IHRoZSBrZXJu
ZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVu
Y2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0CiAgICAgLy8gaW5mbGF0ZXMgdGhlIGFic29sdXRl
IHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJl
aGF2aW9yLgorICAgIHN0YXRpYyBjb25zdCBpbnQgZ01heEtlcm5lbFNpemUgPSA1MDA7CiAgICAg
dW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKSArIDAuNWYpKSk7CiAgICAg
cmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Z01heEtlcm5lbFNpemUpKSk7CiB9Ci0gICAgCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKKworSW50U2l6
ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+
PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsKICAgICBJbnRTaXplIGtlcm5lbFNp
emU7CkBAIC00ODMsMTIgKzc0LDEyIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVybiBr
ZXJuZWxTaXplOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxT
aXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorSW50U2l6
ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0
ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZp
bHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSk7CisgICAgcmV0dXJu
IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24gLypmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikqLyk7CiB9CiAKLUludFNpemUgRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0lu
dFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXpl
JiBzdGREZXZpYXRpb24pCiB7CiAgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7CiAKQEAgLTQ5Niw3MiArODcsNDMgQEAgSW50U2l6
ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0
aW9uKQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVs
U2l6ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQorSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2Vy
bmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBJbnRTaXplIG91dHNl
dFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlh
dGlvblkgfSk7CisgICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53
aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCkgfTsKK30KIAot
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0
ZVBhaW50UmVjdCgpOworRmxvYXRSZWN0IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sK
KyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiAgICAgLy8gRWRn
ZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3QgaW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFp
bnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3Qp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9lZGdlTW9kZSAhPSBFREdFTU9E
RV9OT05FKQorICAgICAgICByZXR1cm4gaW1hZ2VSZWN0OwogCi0gICAgLy8gV2UgdGFrZSB0aGUg
aGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBy
dW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgo
MyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0Lmlu
ZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisgICAgYXV0byBrZXJuZWxT
aXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRyeS5yZXNvbHZlSW1hZ2VTaXplKHsgbV9z
dGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSkpOwogCi0gICAgaWYgKGNsaXBzVG9Cb3Vu
ZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3Qo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RS
ZWN0KCkpOworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5
IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgorICAg
IGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAg
aW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CiAKLSAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0
KSk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFn
ZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFR2F1c3NpYW5CbHVyOjppc0FscGhhSW1hZ2Uo
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwot
ICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNp
emUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBt
X3N0ZFkgfSk7Ci0gICAga2VybmVsU2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsK
LQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0g
ICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gdG1w
SW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFp
bnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1wSW1hZ2VEYXRhKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdl
RGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUp
OworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFnZSgpOwogfQogCi1JbnRPdXRzZXRz
IEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9yIEZFR2F1
c3NpYW5CbHVyOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsK
LSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBt
X3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53
aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCkgfTsKKyAgICBB
U1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9
OwogfQogCi1UZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW2ZlR2F1c3NpYW5CbHVyIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHN0ZERldmlhdGlv
bj1cIiIgPDwgbV9zdGRYIDw8ICIsICIgPDwgbV9zdGRZIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCkt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAi
IHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGREZXZpYXRpb25YIDw8ICIsICIgPDwgbV9zdGREZXZp
YXRpb25ZIDw8ICJcIl1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgK
aW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQzZS4uMGU4ZTQ5ZDc4
ZGEyNmQzY2ViNWZkZGI4ZWVjOTNjMTc2NGEyN2U3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw2NCAr
MjMsNzMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRl
ciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQg
c3RkRGV2aWF0aW9uWSwgRWRnZU1vZGVUeXBlKTsKIAotICAgIGZsb2F0IHN0ZERldmlhdGlvblgo
KSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxv
YXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCBzdGREZXZpYXRpb25YKSB7IG1f
c3RkRGV2aWF0aW9uWCA9IHN0ZERldmlhdGlvblg7IH0KKyAgICB2b2lkIHNldFN0ZERldmlhdGlv
blkoZmxvYXQgc3RkRGV2aWF0aW9uWSkgeyBtX3N0ZERldmlhdGlvblkgPSBzdGREZXZpYXRpb25Z
OyB9CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdl
TW9kZSA9IGVkZ2VNb2RlOyB9CiAKLSAgICBmbG9hdCBzdGREZXZpYXRpb25ZKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGREZXZpYXRpb25ZKGZsb2F0KTsKKyAgICBz
dGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2
aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwogCi0gICAgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQotICAgIHZv
aWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKLQotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0g
ICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBz
dGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUdhdXNzaWFuQmx1cj4+IGRlY29kZShEZWNvZGVyJik7CiAK
IHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdl
TW9kZVR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5p
bWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9y
IHBhcmFsbGVsIGpvYnMKKyAgICBGRUdhdXNzaWFuQmx1cihmbG9hdCBzdGREZXZpYXRpb25YLCBm
bG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOworICAgIEludE91dHNldHMg
Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RydWN0IFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVzc2lhbkJsdXIqIGZpbHRlcjsKLSAgICAg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwot
ICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKLSAgICAg
ICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBi
b29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlk
ZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMg
dm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5l
cmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplKTsKLQotICAgIGZsb2F0IG1fc3RkWDsKLSAgICBmbG9hdCBtX3N0ZFk7Cisg
ICAgZmxvYXQgbV9zdGREZXZpYXRpb25YOworICAgIGZsb2F0IG1fc3RkRGV2aWF0aW9uWTsKICAg
ICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIEZFR2F1c3NpYW5CbHVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2
aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8IG1fZWRnZU1vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUdhdXNzaWFuQmx1cj4+IEZFR2F1c3NpYW5C
bHVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBzdGREZXZpYXRpb25YOworICAgIGRlY29kZXIgPj4gc3RkRGV2aWF0aW9uWDsKKyAgICBpZiAo
IXN0ZERldmlhdGlvblgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25ZOworICAgIGRlY29kZXIgPj4gc3RkRGV2aWF0
aW9uWTsKKyAgICBpZiAoIXN0ZERldmlhdGlvblkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEVkZ2VNb2RlVHlwZT4gZWRnZU1vZGU7CisgICAgZGVj
b2RlciA+PiBlZGdlTW9kZTsKKyAgICBpZiAoIWVkZ2VNb2RlKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnN0ZERldmlh
dGlvblgsICpzdGREZXZpYXRpb25ZLCAqZWRnZU1vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUdhdXNzaWFu
Qmx1cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2ZjhlMDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNh
MTEzZTU2ZjUuLjg4M2Q2YzVmYTJkZjE4N2JlMmFkOTgxZGZlNDc4M2VhYmExZTI1OTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5p
dmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsMzMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKLSNp
bmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5j
bHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBMaWdodGluZ1R5cGUgbGlnaHRp
bmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCB0eXBlKQotICAgICwgbV9saWdodGluZ1R5cGUobGlnaHRpbmdU
eXBlKQotICAgICwgbV9saWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKLSAgICAsIG1f
bGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQorRkVMaWdodGluZzo6RkVMaWdodGluZyhjb25z
dCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYg
c291cmNlLCBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckVmZmVjdCh0eXBl
KQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2Fs
ZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKICAgICAsIG1fc3Bl
Y3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQogICAgICwgbV9zcGVjdWxhckV4cG9uZW50
KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRM
ZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKKyAg
ICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpz
ZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKQorRmxvYXRSZWN0IEZFTGlnaHRpbmc6
OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0CiB7Ci0gICAgaWYgKG1fc3VyZmFjZVNjYWxlID09IHN1cmZhY2VTY2FsZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zdXJmYWNlU2NhbGUgPSBzdXJmYWNlU2NhbGU7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0TGlnaHRpbmdDb2xvcihj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKLXsKLSAgICBpZiAobV9saWdodGluZ0NvbG9yID09
IGxpZ2h0aW5nQ29sb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fbGlnaHRpbmdD
b2xvciA9IGxpZ2h0aW5nQ29sb3I7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdo
dGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQga2VybmVsVW5pdExlbmd0aFgpCi17Ci0g
ICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2VybmVsVW5pdExlbmd0aFgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVu
Z3RoWDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxV
bml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKLXsKLSAgICBpZiAobV9rZXJuZWxV
bml0TGVuZ3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgY29uc3RleHByIGludCBjUGl4ZWxTaXplID0gNDsKLXN0YXRp
YyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOwotc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOwotCi0v
LyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50cyBjb21lIGZyb20gdGhl
IHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYy
ID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8g
My5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAtMSAvIDQuZjsKLXN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7Ci0KLWlubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90
dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogY2VudGVyIC0gcmlnaHQgKyAyICogYm90
dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
OjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGlu
dCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9t
TGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgLSByaWdodCAr
IGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9t
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50ZXIgLSBi
b3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBib3R0b21M
ZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAg
IGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAy
ICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAg
ICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBi
b3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBib3R0b20gKyBi
b3R0b21SaWdodAotICAgIH07CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lv
bihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBo
YVdpbmRvdykgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9yIEZFTGlnaHRpbmc6OnRha2VJbnB1dHMo
RmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGludCByaWdodEFscGhhT2Zm
c2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7Ci0gICAgCi0g
ICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9m
ZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotICAgIGlu
dCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFP
ZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotCi0gICAgaW50IGxlZnQgPSBh
bHBoYVdpbmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50b3BMZWZ0
KCk7Ci0gICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwotCi0gICAgaW50IGJvdHRvbUxl
ZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0gICAgaW50IGJvdHRvbSA9IGFscGhhV2lu
ZG93LmJvdHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNoaWZ0ZWQs
IGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICBhbHBoYVdpbmRvdy5h
bHBoYVswXVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzFdWzJdID0gcmln
aHQ7Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKLSAgICAKLSAg
ICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29tZSBzcG90
LWNoZWNrcy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBpeGVscy0+aXRl
bShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9w
KCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQotICAgIHJldHVybiB7Ci0gICAgICAgIC10
b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBi
b3R0b21SaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBib3R0
b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQg
Y2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
LSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAt
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBi
b3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
IHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVy
IC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsgYm90
dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4g
ewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAotICAg
ICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0gICAgfTsKLX0K
LQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9w
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9w
UmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0
ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAy
ICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0gICAgfTsKLX0K
LQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBs
ZWZ0ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsgbGVmdCArIDIg
KiBjZW50ZXIKLSAgICB9OwotfQotCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKGludCBvZmZz
ZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZh
Y3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFs
MkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rvclks
IEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQotewotICAgIGZsb2F0IHogPSBh
bHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0
aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGlu
Z0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7
Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2
ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAg
ICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0g
ICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAg
ICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgK
LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0g
aGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25l
bnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0
YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3Rh
bnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aCwgbV9zcGVj
dWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9p
bnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBmYWN0b3JYICogbm9ybWFsMkRWZWN0
b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAgZmFjdG9yWSAqIG5v
cm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAgICAgICAgICAx
LjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1h
bFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdo
dGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlm
ZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvcikg
LyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9
IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAotICAgICAg
ICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCi0gICAgICAgICAgICAgICAg
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxl
bmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5n
dGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJF
eHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFy
Q29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9y
TGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1h
bFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlW
ZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsKLSAg
ICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOwotCi0g
ICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90
PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAqIDI1NS4wZiks
Ci0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0Rh
dGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhf
dD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkgKiAyNTUuMGYp
Ci0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywg
b2Zmc2V0KTsKLX0KLQotLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8g
dGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5l
bCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQg
ZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSByZWFkIGZy
b20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZKTsKLSAg
ICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwg
ZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRhLndpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFydCA9IHJv
d1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAg
aW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9m
IGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0
dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAgICAgICAv
LyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJp
Z2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAgICAgIGFs
cGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdodChkYXRh
LnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5waXhlbHMt
Pml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFs
cGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5z
ZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+
aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
Ci0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9m
ZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOwot
ICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
eCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zm
c2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVy
cy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KHBhcmFtZXRlcnMtPmRhdGEsIHBh
cmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55
RW5kKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSAtIDE7Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nl
c3MgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNp
Z25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgLSAxKSAqIHJvd3NUb1Byb2Nlc3MpIC8g
c19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxU
aHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgcGFyYWxsZWwgam9icwot
ICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnM+
IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIsIG9wdGltYWxUaHJlYWRO
dW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAgICAgICBp
bnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAoam9iID4g
MSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJ5U3RlcCItc2l6ZWQgam9i
cyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNp
bmNlCi0gICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRy
YXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAg
ICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9jZXNzIC8gam9iOwotICAgICAgICAgICAg
Y29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Qcm9jZXNzICUgam9iOwotCi0gICAgICAg
ICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAgICAgICAgICAgIGZvciAoLS1qb2I7IGpvYiA+PSAwOyAt
LWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyYg
cGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBh
cmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5kYXRhID0gZGF0YTsK
LSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFpbnRpbmdEYXRhOwotICAg
ICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3RhcnQ7Ci0gICAgICAgICAgICAgICAgeVN0
YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3RlcCArIDEgOiB5U3RlcDsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotCi0g
ICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBl
dmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0j
aWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0Nf
Q09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGluZ0RhdGEpOwot
I2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0RhdGEpOwotI2Vu
ZGlmCi19Ci0KLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQotICAgIC8v
IEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBp
eGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0
aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQgPD0g
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwot
ICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBk
YXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGln
aHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9y
ID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwotCi0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50
aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKLQotICAgIC8vIFRvcCBsZWZ0LgotICAgIGlu
dCBvZmZzZXQgPSAwOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAw
LCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNl
dCkpOwotCi0gICAgLy8gVG9wIHJpZ2h0LgotICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0b3IyZGl2Mywg
Y0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90
dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2Mywg
Y0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBC
b3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWlu
dGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwo
b2Zmc2V0KSk7Ci0KLSAgICBpZiAod2lkdGggPj0gMykgewotICAgICAgICAvLyBUb3Agcm93Lgot
ICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAg
ICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFj
dG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0KSk7Ci0KLSAg
ICAgICAgLy8gQm90dG9tIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwot
ICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4
LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRp
djMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7Ci0gICAgfQot
Ci0gICAgaWYgKGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIExlZnQgY29sdW1uLgotICAgICAg
ICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBmb3Ig
KGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRp
djMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKLQotICAgICAgICAvLyBSaWdodCBj
b2x1bW4uCi0gICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdo
dERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEs
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMs
IGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKHdpZHRo
ID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgotICAg
ICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0gICAgfQotCi0gICAgaW50
IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0g
ICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VMaWdodGluZykgewotICAgICAgICBmb3Ig
KGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxT
aXplKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQ
aXhlbFNpemUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVscy0+aXRlbShp
KTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMSk7Ci0g
ICAgICAgICAgICB1aW50OF90IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIpOwotICAgICAg
ICAgICAgLy8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKLSAgICAgICAgICAg
IGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykg
OiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEp
LiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwotICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0
ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMg
c3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5k
IEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCi0gICAgLy8gQW55d2F5LCBmZUNvbnZv
bHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KLQotICAgIEludFNp
emUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBk
cmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0
aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0Vt
cHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCAwZmZmY2QwNjQzOTZkOGY0YjY0MDgyMjY5Y2My
MDc0ZjdjOWRiZGJjLi5hMWZkYzMzMDQwMDYyMGI1YmQyOTc3ZThlMjg0ZDA2YTA4YjlkYzI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5p
dmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE0MiArMjgsMTA0IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBG
RURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uOwotCiBjbGFzcyBG
RUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCi0gICAgZmxvYXQgc3VyZmFj
ZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KLSAgICBib29sIHNldFN1
cmZhY2VTY2FsZShmbG9hdCk7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
IHsgbV9jb2xvciA9IGNvbG9yOyB9CisgICAgdm9pZCBzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3Vy
ZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3VyZmFjZVNjYWxlOyB9CisgICAgdm9pZCBz
ZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KSB7IG1fZGlmZnVzZUNvbnN0
YW50ID0gZGlmZnVzZUNvbnN0YW50OyB9CiAKLSAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wgc2V0TGlnaHRp
bmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0U3BlY3VsYXJDb25zdGFudChmbG9h
dCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFyQ29uc3Rh
bnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OyB9CiAKLSAgICBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7
IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKKyAgICB2b2lkIHNldEtl
cm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKSB7IG1fa2VybmVsVW5pdExl
bmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0
aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpIHsgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOyB9CiAKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5n
dGhZKGZsb2F0KTsKKyAgICBjb25zdCBMaWdodFNvdXJjZSYgc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KIAotICAgIGNvbnN0IExpZ2h0U291cmNlJiBsaWdodFNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2RlciwgY2xhc3MgQ2xhc3NOYW1lPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8Q2xhc3NO
YW1lPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCBp
bnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEg
bGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAg
ICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLSAg
ICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhhWzNdWzNd
IHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVk
IHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50OF90IHRv
cExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQotICAgICAg
ICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsw
XTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVy
biBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2VudGVyKCkg
Y29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4
X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0K
LSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsx
XSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAg
IHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90
IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2b2lkIHNl
dFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KLSAg
ICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9
IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsg
YWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVp
bnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFb
MV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hpZnRSb3co
YWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAgICAgICAg
c2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBMaWdo
dGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQt
b25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsK
LSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAgICAgICBp
bnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVm
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENv
bHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgaW50
ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAgICAgaW5s
aW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAg
IGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAg
ICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNz
IFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRl
cnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBk
YXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAg
ICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKLQotICAgIHN0YXRp
YyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFy
YW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGln
aHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAgICBGRUxpZ2h0aW5nKEZpbHRlciYsIExp
Z2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQotCi0gICAg
Ym9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7Ci0KLSAgICB2
b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0
IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKLSAgICB2b2lkIHNldFBpeGVsSW50ZXJu
YWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwg
SW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKLQotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExp
Z2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lmIENQVShBUk1fTkVPTikgJiYgQ1BVKEFS
TV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0gICAgc3RhdGljIGlu
dCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBvbmVudCk7Ci0gICAgaW5saW5lIHZvaWQg
cGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5
cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwotCi0gICAgQ29sb3IgbV9s
aWdodGluZ0NvbG9yOworICAgIEZFTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmLCBGaWx0ZXJFZmZlY3Q6OlR5cGUpOworCisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1
dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wg
YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Q29sb3IgbV9jb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2Rp
ZmZ1c2VDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQg
bV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CiAgICAg
ZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBMaWdodFNvdXJjZSBtX3NvdXJjZTsKIH07
CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZFTGlnaHRpbmc6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fc3VyZmFjZVNjYWxlOworICAgIGVuY29k
ZXIgPDwgbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAgZW5jb2RlciA8PCBtX3NwZWN1bGFyQ29uc3Rh
bnQ7CisgICAgZW5jb2RlciA8PCBtX3NwZWN1bGFyRXhwb25lbnQ7CisgICAgZW5jb2RlciA8PCBt
X2tlcm5lbFVuaXRMZW5ndGhYOworICAgIGVuY29kZXIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWTsK
KyAgICBlbmNvZGVyIDw8IG1fc291cmNlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyLCBj
bGFzcyBDbGFzc05hbWU+CitzdGQ6Om9wdGlvbmFsPFJlZjxDbGFzc05hbWU+PiBGRUxpZ2h0aW5n
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBj
b2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdXJmYWNlU2Nh
bGU7CisgICAgZGVjb2RlciA+PiBzdXJmYWNlU2NhbGU7CisgICAgaWYgKCFzdXJmYWNlU2NhbGUp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAgZGVjb2RlciA+PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAg
aWYgKCFkaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzcGVjdWxhckNvbnN0YW50OworICAgIGRlY29kZXIgPj4g
c3BlY3VsYXJDb25zdGFudDsKKyAgICBpZiAoIXNwZWN1bGFyQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzcGVjdWxhckV4
cG9uZW50OworICAgIGRlY29kZXIgPj4gc3BlY3VsYXJFeHBvbmVudDsKKyAgICBpZiAoIXNwZWN1
bGFyRXhwb25lbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBrZXJuZWxVbml0TGVuZ3RoWDsKKyAgICBkZWNvZGVyID4+IGtlcm5lbFVu
aXRMZW5ndGhYOworICAgIGlmICgha2VybmVsVW5pdExlbmd0aFgpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBrZXJuZWxVbml0TGVuZ3Ro
WTsKKyAgICBkZWNvZGVyID4+IGtlcm5lbFVuaXRMZW5ndGhZOworICAgIGlmICgha2VybmVsVW5p
dExlbmd0aFkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPExpZ2h0U291cmNlPiBzb3VyY2U7CisgICAgZGVjb2RlciA+PiBzb3VyY2U7CisgICAgaWYg
KCFzb3VyY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gQ2xh
c3NOYW1lOjpjcmVhdGUoKmNvbG9yLCAqc3VyZmFjZVNjYWxlLCAqZGlmZnVzZUNvbnN0YW50LCAq
c3BlY3VsYXJDb25zdGFudCwgKnNwZWN1bGFyRXhwb25lbnQsICprZXJuZWxVbml0TGVuZ3RoWCwg
Kmtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKCpzb3VyY2UpKTsKK30KIAorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcw
MjZlN2IzZi4uNGI0Njk1NTAyNjVlZDI1YTVjMDM3NzNkY2RmMTNjOGVlODFmYTkyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
Y3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiw1MSArMjMsMzggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU1lcmdl
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZpbHRl
ciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitSZWY8
RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKQog
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UobnVtYmVyT2ZFZmZlY3RJbnB1dHMp
KTsKIH0KIAotUmVmPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZF
TWVyZ2U6OkZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpCisgICAgOiBGaWx0
ZXJFZmZlY3QoVHlwZTo6RkVNZXJnZSkKKyAgICAsIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVt
YmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShm
aWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVmZmVjdElucHV0cyk7CiB9CiAKLXZvaWQg
RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlckltYWdlVmVjdG9yIEZFTWVy
Z2U6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIHVu
c2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4g
MCk7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSBtX251bWJlck9mRWZmZWN0SW5wdXRzKTsK
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxS
ZWY8RmlsdGVySW1hZ2U+PiBpbnB1dHM7CisgICAgZm9yIChhdXRvIGlucHV0c1NpemUgPSBtX251
bWJlck9mRWZmZWN0SW5wdXRzOyBpbnB1dHNTaXplLS07ICkKKyAgICAgICAgaW5wdXRzLmFwcGVu
ZChzdGFjay50YWtlTGFzdCgpKTsKIAotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChp
KTsKLSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpKQotICAgICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgfQorICAgIHJldHVybiBpbnB1dHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUg
PSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgdHMg
PDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFt
OjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZlY3QoaSktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8
IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdl
LmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uYjEwMzFm
MDQ5NjQ5YThhMzFlOTU2MTRmOGQ1ZmI2M2ZkODRlYjc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDIzICsyMyw0NSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU1lcmdlIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoRmls
dGVyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUodW5z
aWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU1lcmdlPj4gZGVjb2RlKERlY29kZXImKTsK
IAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAgIEZFTWVyZ2UodW5zaWduZWQg
bnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQorICAgIEZpbHRlckltYWdlVmVjdG9yIHRh
a2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseVNv
ZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1
dHM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRU1lcmdlOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fbnVtYmVyT2ZFZmZl
Y3RJbnB1dHM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxGRU1lcmdlPj4gRkVNZXJnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gbnVtYmVyT2ZFZmZlY3RJbnB1dHM7CisgICAgZGVjb2RlciA+
PiBudW1iZXJPZkVmZmVjdElucHV0czsKKyAgICBpZiAoIW51bWJlck9mRWZmZWN0SW5wdXRzKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFTWVyZ2U6OmNyZWF0
ZSgqbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1lcmdlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5MGUzODM4NjM5MzU2MmI5ZDhkZjUuLjAw
MGY5YzM1M2Y0ZmVmZTRiNGJlNTY5ODRlMGExMjg0ZDFmZWFjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAy
MDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjUsMjY1ICsyNSw1MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5j
bHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3ko
RmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1vcnBo
b2xvZ3kpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQotICAg
ICwgbV9yYWRpdXNZKHJhZGl1c1kpCi17Ci19Ci0KLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhv
bG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwotfQotCi1i
b29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV90eXBlID09IHR5cGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZF
TW9ycGhvbG9neTo6c2V0UmFkaXVzWChmbG9hdCByYWRpdXNYKQotewotICAgIGlmIChtX3JhZGl1
c1ggPT0gcmFkaXVzWCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcmFkaXVzWCA9IHJh
ZGl1c1g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRp
dXNZKGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgaWYgKG1fcmFkaXVzWSA9PSByYWRpdXNZKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNZID0gcmFkaXVzWTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRl
UGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBw
YWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRp
dXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBh
aW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBh
aW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBp
eGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkKLXsKLSAgICByZXR1cm4gKHkg
KiB3aWR0aCArIHgpICogNDsKLX0KLQotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4
ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsKLX0K
LQotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9u
ZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCi17Ci0g
ICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVp
bnQ4X3Q+Pihjb21wb25lbnRzKSB9OwotfQotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5P
ck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiYgYikKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBwZXJDb21wb25lbnRNaW4oYSwgYik7Ci0K
LSAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIpOwotfQotCi10ZW1wbGF0ZTxNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxB
cnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCi17Ci0gICAgYXV0
byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xv
cjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJh
eS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOwotCi0gICAg
Zm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKLSAgICAgICAgYXV0byBw
aXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdC
QSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRh
KCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKLSAgICAgICAgZXh0cmVtdW0g
PSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwpOwotICAgIH0KLSAgICByZXR1cm4gZXh0
cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNv
bHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQg
eCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSB0eXBlKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9n
eU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSkKIHsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAg
ICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNy
Y1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNvbHVt
bkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgs
IHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9y
PENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCi17Ci0gICAg
YXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtl
cm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRy
ZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotQUxXQVlTX0lO
TElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29s
dW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
a2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0g
ICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtl
cm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0g
ICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJh
eSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5
ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OwotCi0gICAgY29uc3QgaW50IHJhZGl1c1gg
PSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5n
RGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsK
LSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLQotICAgIEFTU0VS
VChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKLSAgICBBU1NFUlQoc3Rh
cnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1
bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIg
KiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5
KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7
Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSAr
IDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOwotCi0gICAgICAgIC8vIFdlIHN0YXJ0
IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29s
dW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFk
aXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAvLyBLZXJu
ZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSBy
YWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNy
Y1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRo
LCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAg
ICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVs
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4
ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFr
ZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1f
dHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFTW9ycGhvbG9neShtb3JwaG9sb2d5T3BlcmF0b3IsIHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0K
IAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBh
cmFtZXRlcnMqIHBhcmFtKQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
KyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1vcnBob2xvZ3kpCisgICAgLCBtX21vcnBob2xv
Z3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IpCisgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkK
KyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3Jt
QXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+
ZW5kWSk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNv
bnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5l
YXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42
NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICog
cGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiAKLSAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNh
bCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWduZWQgbWF4TnVt
VGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxU
aHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBh
aW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRo
cmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBXVEY6
OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1i
ZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpv
YnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9i
cyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBq
b2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0
aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBqb2JTaXplID0g
cGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBqb2Jz
V2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKLSAgICAgICAg
ICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1PZlRo
cmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAg
ICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbS5z
dGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2Jz
V2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOwotICAgICAgICAgICAgICAgIHBhcmFt
LmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAm
cGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4
ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxs
YmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAgfQorICAgIGltYWdlUmVjdC5pbmZsYXRl
KGdlb21ldHJ5LnJlc29sdmVJbWFnZVNpemUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAK
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5o
ZWlnaHQpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24o
aW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXks
IGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQorYm9v
bCBGRU1vcnBob2xvZ3k6OmlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzKSBjb25zdAogewotICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJh
ZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJy
YXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0Fs
cGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU1vcnBob2xvZ3k6OnRha2VJbnB1dHMoRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0K
LSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gs
IG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhl
aWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJl
c3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAo
IXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJhZGl1cyA9IGZsb29y
ZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1f
cmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVj
dC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3RkOjpt
aW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwotCi0g
ICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZm
ZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBp
eGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS53aWR0
aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0Lmhl
aWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNY
ID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0Rh
dGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAg
ICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5
KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3JwaG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAg
c3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChtb3JwaG9sb2d5T3BlcmF0b3IpIHsKICAgICBj
YXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgogICAgICAgICB0cyA8PCAiVU5LTk9X
TiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk3LDE1ICs4MiwxMCBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVNb3JwaG9sb2d5Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUg
cmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRU1vcnBob2xvZ3k6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTW9ycGhvbG9neSI7Ci0gICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMg
PDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9wZXJhdG9yKCkgPDwgIlwiICIKLSAgICAg
ICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwgIiwgIiA8PCByYWRpdXNZKCkgPDwgIlwi
XVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAg
ICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOworICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8IG1fbW9ycGhvbG9neU9wZXJhdG9yIDw8
ICJcIiAiIDw8ICJyYWRpdXM9XCIiIDw8IG1fcmFkaXVzWCA8PCAiLCAiIDw8IG1fcmFkaXVzWSA8
PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1
NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWExMS4uNzZjOWU2ODE0MjYwNTQ1MTMzNWU2
ZWRlMjExZTFjNzA2ZjVhMzVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxMSArMjMsMTAgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsK
K2VudW0gTW9ycGhvbG9neU9wZXJhdG9yIHsKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5L
Tk9XTiA9IDAsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKICAgICBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgpAQCAtMzQsNTUgKzM0LDc2IEBAIGVudW0gTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUo
RmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFk
aXVzWSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0
ZShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0g
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlKTsKKyAgICB2b2lkIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5
T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKSB7IG1fbW9ycGhvbG9neU9wZXJhdG9yID0gbW9y
cGhvbG9neU9wZXJhdG9yOyB9CisgICAgdm9pZCBzZXRSYWRpdXNYKGZsb2F0IHJhZGl1c1gpIHsg
bV9yYWRpdXNYID0gcmFkaXVzWDsgfQorICAgIHZvaWQgc2V0UmFkaXVzWShmbG9hdCByYWRpdXNZ
KSB7IG1fcmFkaXVzWSA9IHJhZGl1c1k7IH0KIAotICAgIGZsb2F0IHJhZGl1c1goKSBjb25zdCB7
IHJldHVybiBtX3JhZGl1c1g7IH0KLSAgICBib29sIHNldFJhZGl1c1goZmxvYXQpOwotCi0gICAg
ZmxvYXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWTsgfQotICAgIGJvb2wgc2V0
UmFkaXVzWShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFJlZjxGRU1vcnBob2xvZ3k+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRl
OgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9h
dCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9w
ZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAotICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNb3JwaG9sb2d5IjsgfQorICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMo
RmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVj
dCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOworICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
LSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFk
aXVzWTsKLSAgICB9OworICAgIE1vcnBob2xvZ3lPcGVyYXRvciBtX21vcnBob2xvZ3lPcGVyYXRv
cjsKKyAgICBmbG9hdCBtX3JhZGl1c1g7CisgICAgZmxvYXQgbV9yYWRpdXNZOworfTsKIAotICAg
IHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTW9ycGhvbG9neSog
ZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICAgICAg
Y29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgfTsKK3RlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Cit2b2lkIEZFTW9ycGhvbG9neTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX21vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBlbmNvZGVy
IDw8IG1fcmFkaXVzWDsKKyAgICBlbmNvZGVyIDw8IG1fcmFkaXVzWTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFTW9ycGhvbG9neT4+IEZFTW9ycGhv
bG9neTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxNb3Jw
aG9sb2d5T3BlcmF0b3I+IG1vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBkZWNvZGVyID4+IG1vcnBo
b2xvZ3lPcGVyYXRvcjsKKyAgICBpZiAoIW1vcnBob2xvZ3lPcGVyYXRvcikKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHJhZGl1c1g7Cisg
ICAgZGVjb2RlciA+PiByYWRpdXNYOworICAgIGlmICghcmFkaXVzWCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHJhZGl1c1k7CisgICAg
ZGVjb2RlciA+PiByYWRpdXNZOworICAgIGlmICghcmFkaXVzWSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRU1vcnBob2xvZ3k6OmNyZWF0ZSgqbW9ycGhvbG9n
eU9wZXJhdG9yLCAqcmFkaXVzWCwgKnJhZGl1c1kpOworfQogCi0gICAgc3RhdGljIHZvaWQgcGxh
dGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYp
OwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50
IHN0YXJ0WSwgaW50IGVuZFkpOworbmFtZXNwYWNlIFdURiB7CiAKLSAgICBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIG1fdHlwZTsKLSAgICBmbG9hdCBtX3JhZGl1c1g7Ci0gICAgZmxvYXQgbV9yYWRp
dXNZOwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpNb3JwaG9sb2d5T3Bl
cmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3Jl
OjpNb3JwaG9sb2d5T3BlcmF0b3IsCisKKyAgICAgICAgV2ViQ29yZTo6RkVNT1JQSE9MT0dZX09Q
RVJBVE9SX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6OkZFTU9SUEhPTE9HWV9PUEVSQVRPUl9F
Uk9ERSwKKyAgICAgICAgV2ViQ29yZTo6RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURQorICAg
ID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXVEYKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTW9ycGhvbG9neSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5j
cHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5MTdjMmQ2NWFhNDE0MGY2OS4uNjEyMjE4
MmI4M2E2MWFhY2I5NmViYTg2MTU3ZjMzNjdmOTM2MTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTQsNiAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
ICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3MSArMjUsNTAgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU9mZnNldC5oIgogCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdl
VmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZFT2Zmc2V0OjpGRU9mZnNldChGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgs
IGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6T2Zmc2V0KQorRkVP
ZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVjdChU
eXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1S
ZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBm
bG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQg
ZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAotdm9p
ZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0
ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdAogewotICAgIG1fZHggPSBkeDsKLX0KKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAx
KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiAKLXZvaWQg
RkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQotewotICAgIG1fZHkgPSBkeTsKKyAgICBpbWFnZVJl
Y3QubW92ZShnZW9tZXRyeS5yZXNvbHZlSW1hZ2VTaXplKHsgbV9keCwgbV9keSB9KSk7CisKKyAg
ICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwg
cHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQorYm9vbCBGRU9mZnNldDo6aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlu
cHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0g
dGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
UmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0g
ICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGlucHV0
c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU9mZnNldDo6dGFrZUlucHV0cyhGaWx0ZXJJ
bWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOworICAgIEFTU0VSVCghc3RhY2suaXNF
bXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKLVRleHRTdHJl
YW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRU9mZnNl
dDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVPZmZzZXQiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwot
ICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwiIGR5PVwiIiA8PCBkeSgpIDw8ICJcIl1c
biI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKKyAgICB0cyA8PCAiIGR4PVwiIiA8PCBtX2R4IDw8ICJcIiBkeT1cIiIgPDwgbV9keSA8PCAi
XCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3
NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLjFhYWFlZGJjOGFjMGI5ZmJjZmUwOTVhZTUxNmMzMGY3
NWZhMjA1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw1OSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQg
ZHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9h
dCBkeCwgZmxvYXQgZHkpOwogCi0gICAgZmxvYXQgZHgoKSBjb25zdCB7IHJldHVybiBtX2R4OyB9
Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9pZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4
ID0gZHg7IH0KKyAgICB2b2lkIHNldER5KGZsb2F0IGR5KSB7IG1fZHkgPSBkeTsgfQogCi0gICAg
ZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9Ci0gICAgdm9pZCBzZXREeShmbG9hdCk7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxG
RU9mZnNldD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmls
dGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQg
ZHkpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRU9mZnNldCI7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0
YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9h
dCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
dm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5j
b2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwgbV9keTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zmc2V0Pj4gRkVPZmZzZXQ6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR4OworICAgIGRl
Y29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5OworICAgIGRlY29kZXIgPj4gZHk7CisgICAg
aWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRU9m
ZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVPZmZzZXQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAKaW5kZXggNTk5NzIzMDY4ODZhNjNmYTQxMmI1YjcxNDFmNzRmOWM0
ODdhMTQ0Yy4uNDI0OWEzN2E0N2RiZTUzZmUwNWQwZDI1ZWQxOTBjY2U3OTZmZjk2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFy
TGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDkgKzIzLDMxIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRkVTcGVjdWxhckxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJMaWdodFNv
dXJjZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXIm
IGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGlu
ZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVj
dWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorUmVmPEZFU3BlY3VsYXJM
aWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgTGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7CisgICAgcmV0dXJuIGNyZWF0ZShjb2xvciwgc3Vy
ZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxV
bml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSk7CiB9CiAKLVJl
ZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
JiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBk
aWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhw
b25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
TGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVj
dWxhckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFu
dCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJjZSkpKTsKIH0KIAotRkVTcGVjdWxhckxp
Z2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCi1ib29sIEZFU3BlY3Vs
YXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KQor
RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGNvbG9y
LCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3Vs
YXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmIHNvdXJjZSkKKyAgICA6
IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nKQogewot
ICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFudCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7
Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVj
dWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCi17Ci0gICAgaWYgKG1fc3BlY3Vs
YXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBvbmVudDsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxpZ2h0aW5nOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGlnaHRpbmc6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAg
IHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdodGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwg
IiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNjYWxlIDw8ICJcIiAiCiAgICAgICAgPDwg
InNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxhckNvbnN0YW50IDw8ICJcIiAiCiAgICAg
ICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1fc3BlY3VsYXJFeHBvbmVudCA8PCAiXCJd
XG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAg
IGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlv
bik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAppbmRleCBl
OTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNiMjQ5NThhLi40ZGJhYjQ0YjliMmFmMWFl
NTQzYThjZjk0MzM1NWQ1ZDNlODQ3ZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIw
ICsyOCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGlu
ZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFU3BlY3Vs
YXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZF
U3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBj
cmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYpOwogCi0gICAgZmxvYXQgc3Bl
Y3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQotICAg
IGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4
cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9Ci0gICAgYm9vbCBz
ZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2
YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBG
RVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0
IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBMaWdodFNvdXJjZSYmKTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3Zl
cnJpZGU7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8
RkVTcGVjdWxhckxpZ2h0aW5nPj4gRkVTcGVjdWxhckxpZ2h0aW5nOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGluZzo6ZGVjb2RlPERlY29kZXIsIEZFU3Bl
Y3VsYXJMaWdodGluZz4oZGVjb2Rlcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFU3BlY3VsYXJMaWdodGluZykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi4yNzNh
ZTE3YzI3ODQ2Zjk5MjkzZTNmZjlmOWZjNTNmOGRlNTcwNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBl
bmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDgwICsyMiw0MyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFVGlsZS5oIgogCi0jaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1Rl
eHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVy
R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK1JlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRl
KCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLVJlZjxGRVRp
bGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorRkVUaWxlOjpGRVRpbGUoKQorICAg
IDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVGlsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRVRpbGUoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorRmxvYXRSZWN0IEZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1
LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlz
IGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0K
LSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6
ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBj
dXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9u
IGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVj
dFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5s
b2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0
ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0g
ICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwg
ZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0byB0
aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVj
dCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5k
ZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQo
KTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54
KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigp
KTsKLQotICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2
ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKLSAg
ICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZm
ZWN0TG9jYXRpb24pOwotCi0gICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJ
bWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVlLCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3Jt
IH0pOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKTsKLSAgICBmaWx0ZXJDb250ZXh0LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0
dGVybikpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKyAgICAvLyBEb24ndCB1c2UgdGhlIGlu
cHV0J3MgZHJhd2luZ1JlY3QgZm9yIDxmZVRpbGU+LgorICAgIHJldHVybiBnZW9tZXRyeS5jbGlw
VG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotVGV4dFN0cmVhbSYgRkVU
aWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlv
blR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0Citib29sIEZFVGlsZTo6aXNBbHBoYUltYWdlKGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiXVxuIjsKKyAgICByZXR1cm4gaW5wdXRz
WzBdLT5pc0FscGhhSW1hZ2UoKTsKK30KIAotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGlu
ZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOworRmlsdGVySW1hZ2VWZWN0b3IgRkVUaWxlOjp0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKK3sKKyAgICBBU1NFUlQoIXN0YWNr
LmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OworfQogCitUZXh0
U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAoreworICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVGls
ZV1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRleCA0OWJkOTlmMDk0NDdkYWUxY2YwOWFm
MTIzNThjNmRlODQwNjg3NzE0Li43YmUyNWUyODFkNTM0Y2FhYTNmOGJlYmU1YTMwZDU2NDFiYjk0
MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIyLDI3ICsyMywyNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IAogY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVUaWxlKEZpbHRlciYp
OworICAgIEZFVGlsZSgpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZpbHRlckltYWdlVmVjdG9y
IHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29s
dXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBi
b29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRVRpbGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKaW5kZXggYWMyMzQ2ZThhNGJhNThhYWE5MjRhNmQ2N2JkNWU0Yjc3ZGQyMjY4Zi4u
N2EzYmQ4ZjFmZTk3NGY4NmI2NDFkMjU3NDY0OWM2MmNhOGM5ZGViYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8
cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8
bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNiwzMSArMjYsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVR1
cmJ1bGVuY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxK
b2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLyoKLSAgICBQcm9kdWNlcyBy
ZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIg
PSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAg
bSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAg
U2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5
ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQg
MTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBv
cmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0g
NDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAy
KiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcq
KjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3
MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCitS
ZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShUdXJidWxlbmNlVHlwZSB0eXBl
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3Rh
dmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVks
IG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Cit9CiAKLUZFVHVyYnVsZW5jZTo6RkVU
dXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNl
RnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBz
ZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6
VHVyYnVsZW5jZSkKLSAgICAsIG1fdHlwZSh0eXBlKQorRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVu
Y2UoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3Rp
dGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVUdXJidWxlbmNlKQorICAgICwg
bV90dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgo
YmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQog
ICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBAIC01OSw0MDUgKzQ3LDkgQEAgRkVUdXJi
dWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUs
IGZsb2F0IGJhc2VGcmVxdWUKIHsKIH0KIAotUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNl
OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNl
ZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJi
dWxlbmNlKGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1P
Y3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0
VHlwZShUdXJidWxlbmNlVHlwZSB0eXBlKQotewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJl
cXVlbmN5WSkKLXsKLSAgICBpZiAobV9iYXNlRnJlcXVlbmN5WSA9PSBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFzZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVl
bmN5WTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VG
cmVxdWVuY3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQotewotICAgIGlmIChtX2Jhc2VGcmVxdWVu
Y3lYID09IGJhc2VGcmVxdWVuY3lYKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNl
RnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVkKQotewotICAgIGlmIChtX3NlZWQgPT0g
c2VlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc2VlZCA9IHNlZWQ7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXROdW1PY3RhdmVzKGludCBudW1P
Y3RhdmVzKQotewotICAgIGlmIChtX251bU9jdGF2ZXMgPT0gbnVtT2N0YXZlcykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG1fbnVtT2N0YXZlcyA9IG51bU9jdGF2ZXM7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRj
aCkKLXsKLSAgICBpZiAobV9zdGl0Y2hUaWxlcyA9PSBzdGl0Y2gpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3N0aXRjaFRpbGVzID0gc3RpdGNoOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lv
biBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKLS8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKLQotLy8gQ29t
cHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGluZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFp
bnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRl
ICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOwotICAgIGlm
IChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07Ci0gICAgc2Vl
ZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgZmxvYXQgc21vb3Ro
Q3VydmUoZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsKLX0KLQot
aW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQg
YikKLXsKLSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOwotfQotCi12b2lkIEZFVHVyYnVsZW5j
ZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAgIGZsb2F0IG5v
cm1hbGl6YXRpb25GYWN0b3I7Ci0KLSAgICAvLyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUg
cmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KLSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQg
PD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSAtKHBhaW50aW5nRGF0YS5zZWVkICUg
KHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA+IHNf
cmFuZE1heGltdW0gLSAxKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IHNfcmFuZE1heGlt
dW0gLSAxOwotCi0gICAgZmxvYXQqIGdyYWRpZW50OwotICAgIGZvciAoaW50IGNoYW5uZWwgPSAw
OyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c19ibG9ja1NpemU7ICsraSkgewotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltpXSA9IGk7Ci0gICAgICAgICAgICBncmFkaWVudCA9IHBhaW50aW5nRGF0YS5ncmFkaWVu
dFtjaGFubmVsXVtpXTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBncmFkaWVu
dFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBz
X2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICAg
ICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20o
KSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAg
ICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYmICFncmFkaWVudFsxXSk7Ci0gICAgICAg
ICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpoeXBvdChncmFkaWVudFswXSwgZ3JhZGll
bnRbMV0pOwotICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsK
LSAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gc19ibG9ja1NpemUgLSAxOyBpID4gMDsgLS1p
KSB7Ci0gICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKLSAg
ICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9tKCkgJSBzX2Jsb2NrU2l6ZTsKLSAgICAg
ICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VSVChqIDwgMiAqIHNfYmxvY2tTaXplICsg
Mik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2pdOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVj
dG9yW2pdID0gazsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXpl
ICsgMjsgKytpKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9j
a1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGZv
ciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAg
ICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVswXSA9IHBh
aW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVswXTsKLSAgICAgICAgICAgIHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi1GRVR1cmJ1
bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUg
dGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBj
b25zdAotewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQot
ICAgIGZsb2F0IHRpbGVXaWR0aCA9IHRpbGVTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgdGlsZUhl
aWdodCA9IHRpbGVTaXplLmhlaWdodCgpOwotICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwICYmIHRp
bGVIZWlnaHQgPiAwKTsKLQotICAgIC8vIFdoZW4gc3RpdGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2Us
IHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVkCi0gICAgLy8gc28gdGhhdCB0aGUgdGls
ZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsK
LSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVXaWR0aCAqIGJhc2VGcmVx
dWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxm
KHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgLy8gQmFz
ZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRh
cmQuCi0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVx
dWVuY3kgLyBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gbG93
RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGhp
Z2hGcmVxdWVuY3k7Ci0gICAgfQotICAgIGlmIChiYXNlRnJlcXVlbmN5WSkgewotICAgICAgICBm
bG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAv
IHRpbGVIZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlSGVp
Z2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKLSAgICAgICAgaWYgKGJhc2VGcmVx
dWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lZKQot
ICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gaGlnaEZyZXF1ZW5jeTsKLSAgICB9Ci0KLSAg
ICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgc3RpdGNoRGF0YS53aWR0aCA9IHJvdW5kZih0
aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAgc3RpdGNoRGF0YS53cmFwWCA9IHNfcGVy
bGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwotICAgIHN0aXRjaERhdGEuaGVpZ2h0ID0gcm91
bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgc3RpdGNoRGF0YS53cmFwWSA9
IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKLQotICAgIHJldHVybiBzdGl0Y2hE
YXRhOwotfQotCi0vLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3
LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KLUNvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBG
bG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKLXsKLSAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlv
biB7Ci0gICAgICAgIGludCBpbmRleDsgLy8gYngwLCBieTAgaW4gdGhlIHNwZWMgdGV4dC4KLSAg
ICAgICAgaW50IG5leHRJbmRleDsgLy8gYngxLCBieTEgaW4gdGhlIHNwZWMgdGV4dC4KLSAgICAg
ICAgZmxvYXQgZnJhY3Rpb247IC8vIHJ4MCwgcnkwIGluIHRoZSBzcGVjIHRleHQuCi0KLSAgICAg
ICAgTm9pc2VQb3NpdGlvbihmbG9hdCBjb21wb25lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vICB0ID0gdmVjWzBdICsgUGVybGluTjsKLSAgICAgICAgICAgIC8vICBieDAgPSAoaW50KXQ7
Ci0gICAgICAgICAgICAvLyAgYngxID0gYngwKzE7Ci0gICAgICAgICAgICAvLyAgcngwID0gdCAt
IChpbnQpdDsKLSAgICAgICAgICAgIGZsb2F0IHBvc2l0aW9uID0gY29tcG9uZW50ICsgc19wZXJs
aW5Ob2lzZTsKLSAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7
Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleCArIDE7Ci0gICAgICAgICAgICBmcmFjdGlv
biA9IHBvc2l0aW9uIC0gaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQg
c3RpdGNoKGludCBzaXplLCBpbnQgd3JhcFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IGlmIChieDAgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngwIC09
IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gd3JhcFNpemUp
Ci0gICAgICAgICAgICAgICAgaW5kZXggLT0gc2l6ZTsKLQotICAgICAgICAgICAgLy8gaWYgKGJ4
MSA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAgICAgICAgLy8gICBieDEgLT0gcFN0aXRj
aEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPj0gd3JhcFNpemUpCi0g
ICAgICAgICAgICAgICAgbmV4dEluZGV4IC09IHNpemU7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgTm9pc2VQb3NpdGlvbiBub2lzZVgobm9pc2VWZWN0b3IueCgpKTsKLSAgICBOb2lzZVBvc2l0
aW9uIG5vaXNlWShub2lzZVZlY3Rvci55KCkpOwotCi0gICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1
c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0gICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsK
LSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndpZHRoLCBzdGl0Y2hEYXRhLndyYXBY
KTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRhLmhlaWdodCwgc3RpdGNoRGF0YS53
cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJNOwotICAgIC8vIGJ4MSAmPSBCTTsKLSAg
ICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJNOwotICAgIG5vaXNlWC5pbmRleCAmPSBz
X2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5v
aXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkubmV4dEluZGV4ICY9IHNfYmxv
Y2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0b3JbYngwXTsKLSAgICAvLyBqID0g
dUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBsYXR0aWNlSW5kZXggPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07Ci0gICAgaW50IG5leHRMYXR0aWNlSW5k
ZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5uZXh0SW5kZXhdOwotCi0g
ICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsKLSAgICAvLyBzeSA9IGRvdWJsZShzX2N1
cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3RoQ3VydmUobm9pc2VYLmZyYWN0aW9uKTsK
LSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5mcmFjdGlvbik7Ci0KLSAgICBhdXRv
IG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5lbCkgewotICAgICAgICAvLyBiMDAgPSB1
TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAgIGludCBiMDAgPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRleF07Ci0gICAgICAgIC8v
IHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAwXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAg
KiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSAr
IG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjEwID0gdUxhdHRpY2VTZWxl
Y3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRleF07Ci0gICAgICAgIC8vIHJ4MSA9
IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEw
XTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAgIGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0
aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLSAgICAgICAgLy8gYSA9
IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBhID0gbGluZWFySW50ZXJwb2xhdGlvbihz
eCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkxXTsK
LSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUlu
ZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8vIHJ5MSA9IHJ5MCAtIDEuMGY7Ci0g
ICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFb
MF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJhY3Rpb24gKiBxWzBdICsgKG5vaXNlWS5m
cmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAvLyBiMTEgPSB1TGF0dGljZVNlbGVjdG9y
W2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8vIHEgPSBm
R3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFd
OwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMV07Ci0gICAg
ICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAt
IDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9h
dCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gcmV0dXJu
IGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwg
YSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgw
KSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQotICAgIH07Ci19Ci0KLS8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQgZGVzY3Jp
YmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21wb25lbnRzLgotLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDg+PihTUkdCQTxmbG9hdD4pIHRvIGdl
dCB0aGUgc2FtZSBiZWhhdmlvci4KLXN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
IHsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0
PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpj
bGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSks
IDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50Pihm
bG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1
KSwKLSAgICB9OwotfQotCi1Db2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNl
OjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkgY29uc3QKLXsKLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdDsKLSAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50
aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVx
dWVuY3lZKTsKLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0YXZlID0gMDsg
b2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAobV90eXBlID09
IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVj
dG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9y
KS5hYnMoKSAvIHJhdGlvOwotCi0gICAgICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3Iu
eCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7
Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0KLSAgICAgICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAg
ICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5v
aXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCi0gICAgICAgICAgICAvLyBhZGRpbmcg
aXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KLSAgICAgICAg
ICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKLSAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFgg
PSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBzdGl0
Y2hEYXRhLmhlaWdodCAqPSAyOwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWSA9IDIgKiBz
dGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgY29tZXMgZnJvbSAoKHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAyNTUpIC8gMiBieSBmcmFjdGFsTm9pc2UK
LSAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5j
ZS4KLSAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0gICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAq
IDAuNWYgKyAwLjVmOwotCi0gICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdp
b24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBj
b25zdAotewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIEludFJlY3QgZmlsdGVy
UmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdpb24uc2NhbGUoZmls
dGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdp
b24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAq
IChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJz
ZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVl
X29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBl
bmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAg
cG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBv
aW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW52ZXJz
ZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlcyA9IGNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwg
bG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJhbmdlKHZhbHVlcy5jb21w
b25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0gICAgICAgICAgICBpbmRl
eE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQotewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4
ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0
YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKLX0KLQotdm9pZCBGRVR1
cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0gICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0K
LSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAg
IHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAocmVz
dWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9G
aWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0g
cm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAg
IGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
ID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVu
Y3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwg
YmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdE
YXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVh
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGhlaWdodCA9IHJl
c3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0
IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWdu
ZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLSAgICBp
ZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8
RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKLQotICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxK
b2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAobnVtSm9icyA+IDEpIHsKLSAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpvYnMsIGRpc3RyaWJ1dGlu
ZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhFeHRyYSIgam9icy4KLSAg
ICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9iczsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2JzOwotICAgICAgICAgICAg
dW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBh
cmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0g
JmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdE
YXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9
IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkg
PyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFt
cy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdo
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZhbGxiYWNr
IHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRo
cmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0
aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsK
KyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lv
bik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBU
dXJidWxlbmNlVHlwZSB0eXBlKQpAQCAtNDc2LDE1ICs2OCwxMCBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFVHVyYnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9u
KSBjb25zdAorVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgdHlwZT1cIiIg
PDwgdHlwZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImJhc2VGcmVxdWVuY3k9XCIiIDw8IGJhc2VG
cmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVlbmN5WSgpIDw8ICJcIiAiCi0gICAgICAg
PDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgotICAgICAgIDw8ICJudW1PY3RhdmVzPVwi
IiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKLSAgICAgICA8PCAic3RpdGNoVGlsZXM9XCIiIDw8
IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxuIjsKKyAgICB0cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHVy
YnVsZW5jZVR5cGUgPDwgIlwiICIgPDwgImJhc2VGcmVxdWVuY3k9XCIiIDw8IG1fYmFzZUZyZXF1
ZW5jeVggPDwgIiwgIiA8PCBtX2Jhc2VGcmVxdWVuY3lZIDw8ICJcIiAiIDw8ICJzZWVkPVwiIiA8
PCBtX3NlZWQgPDwgIlwiICIgPDwgIm51bU9jdGF2ZXM9XCIiIDw8IG1fbnVtT2N0YXZlcyA8PCAi
XCIgIiA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IG1fc3RpdGNoVGlsZXMgPDwgIlwiXVxuIjsKICAg
ICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRkNTM2YjM3YTgwYWFkZjkxMWVi
ZmNlODk3NzRjZDNjY2VjYjVjZmIuLjdlMDM4NzQyMjY3N2NiNjVkZTBjNjBmYWI0NTcwYzhlNTcz
ODE1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJl
bmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI0LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw5MSArMzYsMjgg
QEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNl
PiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9h
dCwgYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNy
ZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVx
dWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAK
LSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAg
Ym9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKKyAgICB2b2lkIHNldFR1cmJ1bGVuY2VUeXBl
KFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlKSB7IG1fdHVyYnVsZW5jZVR5cGUgPSB0dXJi
dWxlbmNlVHlwZTsgfQorICAgIHZvaWQgc2V0QmFzZUZyZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1
ZW5jeVgpIHsgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOyB9CisgICAgdm9pZCBz
ZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkgeyBtX2Jhc2VGcmVxdWVuY3lZ
ID0gYmFzZUZyZXF1ZW5jeVk7IH0KKyAgICB2b2lkIHNldE51bU9jdGF2ZXMoaW50IG51bU9jdGF2
ZXMpIHsgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsgfQorICAgIHZvaWQgc2V0U2VlZChmbG9h
dCBzZWVkKSB7IG1fc2VlZCA9IHNlZWQ7IH0KKyAgICB2b2lkIHNldFN0aXRjaFRpbGVzKGJvb2wg
c3RpdGNoVGlsZXMpIHsgbV9zdGl0Y2hUaWxlcyA9IHN0aXRjaFRpbGVzOyB9CiAKLSAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVg7IH0KLSAg
ICBib29sIHNldEJhc2VGcmVxdWVuY3lYKGZsb2F0KTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFVHVyYnVsZW5jZT4+IGRlY29kZShEZWNv
ZGVyJik7CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFz
ZUZyZXF1ZW5jeVk7IH0KLSAgICBib29sIHNldEJhc2VGcmVxdWVuY3lZKGZsb2F0KTsKK3ByaXZh
dGU6CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5
WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29s
IHN0aXRjaFRpbGVzKTsKIAotICAgIGZsb2F0IHNlZWQoKSBjb25zdCB7IHJldHVybiBtX3NlZWQ7
IH0KLSAgICBib29sIHNldFNlZWQoZmxvYXQpOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtT2N0YXZlczsgfQot
ICAgIGJvb2wgc2V0TnVtT2N0YXZlcyhpbnQpOworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0
ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
aWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBzdGl0Y2hUaWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RpdGNoVGlsZXM7IH0KLSAgICBib29sIHNldFN0aXRjaFRpbGVz
KGJvb2wpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLXBy
aXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0
aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0gICAgc3RhdGlj
IGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGly
aWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0IFBhaW50aW5n
RGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50
U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAgICAgICAgLCBm
aWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZ
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0gICAgICAgIGlu
dCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAgIGZsb2F0IGdy
YWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRTaXplIGZpbHRl
clNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAgICB9OwotCi0g
ICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBkZWZhdWx0Owot
Ci0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3Jh
cCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1pbmltdW0gdmFs
dWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAgaW50IHdyYXBZ
IHsgMCB9OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotICAgIGZyaWVu
ZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMg
ewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsKLSAgICAgICAgVWludDhDbGFtcGVkQXJy
YXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOwotICAg
ICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAg
IGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKEZp
bGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVs
ZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7Ci0KLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0K
LQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdE
YXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwg
Y29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29u
c3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owot
ICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0
YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKLQotICAgIHN0YXRp
YyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwotCi0gICAgVHVyYnVsZW5jZVR5cGUgbV90
eXBlOworICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHVyYnVsZW5jZVR5cGU7CiAgICAgZmxvYXQgbV9i
YXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lZOwogICAgIGludCBtX251
bU9jdGF2ZXM7CkBAIC0xMzAsNSArNjUsNjcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc3RpdGNo
VGlsZXM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRVR1cmJ1bGVuY2U6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV90dXJi
dWxlbmNlVHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fYmFzZUZyZXF1ZW5jeVg7CisgICAgZW5jb2Rl
ciA8PCBtX2Jhc2VGcmVxdWVuY3lZOworICAgIGVuY29kZXIgPDwgbV9udW1PY3RhdmVzOworICAg
IGVuY29kZXIgPDwgbV9zZWVkOworICAgIGVuY29kZXIgPDwgbV9zdGl0Y2hUaWxlczsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFVHVyYnVsZW5jZT4+
IEZFVHVyYnVsZW5jZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRp
b25hbDxUdXJidWxlbmNlVHlwZT4gdHVyYnVsZW5jZVR5cGU7CisgICAgZGVjb2RlciA+PiB0dXJi
dWxlbmNlVHlwZTsKKyAgICBpZiAoIXR1cmJ1bGVuY2VUeXBlKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJhc2VGcmVxdWVuY3lY
OworICAgIGRlY29kZXIgPj4gYmFzZUZyZXF1ZW5jeVg7CisgICAgaWYgKCFiYXNlRnJlcXVlbmN5
WCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBiYXNlRnJlcXVlbmN5WTsKKyAgICBkZWNvZGVyID4+IGJhc2VGcmVxdWVuY3lZOwor
ICAgIGlmICghYmFzZUZyZXF1ZW5jeVkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPGludD4gbnVtT2N0YXZlczsKKyAgICBkZWNvZGVyID4+IG51bU9j
dGF2ZXM7CisgICAgaWYgKCFudW1PY3RhdmVzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2VlZDsKKyAgICBkZWNvZGVyID4+IHNlZWQ7
CisgICAgaWYgKCFzZWVkKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3Rk
OjpvcHRpb25hbDxib29sPiBzdGl0Y2hUaWxlczsKKyAgICBkZWNvZGVyID4+IHN0aXRjaFRpbGVz
OworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoKnR1cmJ1bGVuY2VUeXBlLCAqYmFzZUZy
ZXF1ZW5jeVgsICpiYXNlRnJlcXVlbmN5WSwgKm51bU9jdGF2ZXMsICpzZWVkLCAqc3RpdGNoVGls
ZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VHVyYnVsZW5j
ZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6VHVyYnVsZW5jZVR5cGU6OlVua25vd24sCisgICAg
ICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UsCisgICAgICAgIFdlYkNv
cmU6OlR1cmJ1bGVuY2VUeXBlOjpUdXJidWxlbmNlCisgICAgPjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVUdXJidWxl
bmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNzY5NjUwMjg5NDYyMGIwMjdhODI0YzY0MmY2NGMwNDNh
MDFhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmlsdGVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJG
aWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnR1cGxlPFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVyOjphcHBseShJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgRmlsdGVySW1hZ2VWZWN0b3Igc3RhY2s7
CisgICAgRmlsdGVyUmVzdWx0IHJlc3VsdChyZW5kZXJpbmdNb2RlKCkpOworCisgICAgaWYgKHNv
dXJjZUltYWdlKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGdl
b21ldHJ5LmZpbHRlclJlZ2lvbigpLCBzb3VyY2VJbWFnZVJlY3QsIHsgKnNvdXJjZUltYWdlIH0p
OworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
c3RhY2suYXBwZW5kKGltYWdlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIGlmICgh
YXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlID0gc3RhY2sudGFr
ZUxhc3QoKTsKKyAgICBpbWFnZS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4geyBpbWFnZS0+aW1hZ2VCdWZmZXIoKSwgZ2Vv
bWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlLT5pbWFnZVJlY3QoKSkgfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEw
YmMxZi4uYmQ5ZDBlODNjOWUwNTZkYTg4MzJkOTljNWE2MDAzMmVjZTY2YmZhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMSwyNCBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
VmVjdG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVy
RnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAotY2xhc3MgRmls
dGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxl
ID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQot
ICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVh
bCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
ICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0
OjpUeXBlKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJ
bWFnZSk7IH0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3NvdXJj
ZUltYWdlLmdldCgpOyB9Ci0KLSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1
dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29sdXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0
aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQotCi0gICAgZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9h
dCBzY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gc2NhbGU7IH0KLQotICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJh
bnNmb3JtOyB9Ci0KLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlcmluZ01vZGU7IH0KLSAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9h
dFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQot
ICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBsZTxSZWZQdHI8SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+
IGFwcGx5KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAg
ICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAg
ICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQotICAgIHsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwotICAg
IEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJz
b2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07Ci0gICAgZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEg
fTsKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJl
NzdkZWNkMzFmMjhlNWUyNTgwMmRlM2ZjY2Y4ZDQxM2Q0MzY2NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlT
ZXQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
aWx0ZXJCb3VuZGFyeVNldCB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBGbGFncyB7CisgICAg
ICAgIEhhc1ggICAgICA9IDEgPDwgMCwKKyAgICAgICAgSGFzWSAgICAgID0gMSA8PCAxLAorICAg
ICAgICBIYXNXaWR0aCAgPSAxIDw8IDIsCisgICAgICAgIEhhc0hlaWdodCA9IDEgPDwgMworICAg
IH07CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCgpID0gZGVmYXVsdDsKKworICAgIEZpbHRlckJv
dW5kYXJ5U2V0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRhcmllcywgT3B0aW9uU2V0PEZsYWdzPiBm
bGFncykKKyAgICAgICAgOiBtX2JvdW5kYXJpZXMoYm91bmRhcmllcykKKyAgICAgICAgLCBtX2Zs
YWdzKGZsYWdzKQorICAgIHsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNYKSkK
KyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMueCgpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHkoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1kpKQorICAgICAg
ICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy55KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gd2lkdGgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1dpZHRoKSkKKyAgICAg
ICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBoZWlnaHQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc0hlaWdodCkp
CisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLmhlaWdodCgpOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJCb3VuZGFyeVNldD4gZGVjb2RlKERlY29kZXImKTsK
KworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGFyaWVzOworICAgIE9wdGlvblNldDxG
bGFncz4gbV9mbGFnczsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRl
ckJvdW5kYXJ5U2V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IG1fYm91bmRhcmllczsKKyAgICBlbmNvZGVyIDw8IG1fZmxhZ3M7Cit9CisKK3RlbXBs
YXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEZpbHRlckJvdW5kYXJ5U2V0PiBGaWx0
ZXJCb3VuZGFyeVNldDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGJvdW5kYXJpZXM7CisgICAgZGVjb2RlciA+PiBib3VuZGFyaWVzOwor
ICAgIGlmICghYm91bmRhcmllcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8T3B0aW9uU2V0PEZsYWdzPj4gZmxhZ3M7CisgICAgZGVjb2RlciA+PiBm
bGFnczsKKyAgICBpZiAoIWZsYWdzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgcmV0dXJuIEZpbHRlckJvdW5kYXJ5U2V0KCpib3VuZGFyaWVzLCAqZmxhZ3MpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncz4geworICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckJvdW5k
YXJ5U2V0OjpGbGFncywKKworICAgICAgICBXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6Rmxh
Z3M6Okhhc1gsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFz
WSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNIZWlnaHQKKyAg
ICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggZmI2
Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5MjdkYjEwOC4uNDc5MWM5YTNmNWE0NWJiZDdk
ZmM5M2IyMzU4ZmNkYjdhMWRmZjZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjQsNjYwICsy
NCwxMDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
IAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAi
RmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLSNlbmRpZgotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0
ZXImIGZpbHRlciwgVHlwZSB0eXBlKQotICAgIDogbV9maWx0ZXIoZmlsdGVyKQotICAgICwgbV9m
aWx0ZXJFZmZlY3RDbGFzc1R5cGUodHlwZSkKLXsKLX0KLQotRmlsdGVyRWZmZWN0Ojp+RmlsdGVy
RWZmZWN0KCkgPSBkZWZhdWx0OwotCi12b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZl
U3VicmVnaW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdl
b21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBj
b25zdAogewotICAgIG1fYWJzb2x1dGVQYWludFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVj
dC51bml0ZShlZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGNsaXBBYnNvbHV0ZVBh
aW50UmVjdCgpOwotfQorICAgIC8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBodHRwczovL3d3
dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMtMS8jRmlsdGVyUHJpbWl0aXZlU3ViUmVnaW9uLgor
ICAgIEZsb2F0UmVjdCBkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uOwogCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBj
bGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmICht
X2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVu
Y2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fi
c29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7
Ci19Ci0KLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAotewotICAgIEZsb2F0UG9pbnQg
YWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQ
b2ludC5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJu
IGFic29sdXRlUG9pbnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKLXsK
LSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsK
LSAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJu
IEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxv
YXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBG
bG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJhbnNsYXRlKC1tX2Fic29sdXRlUGFpbnRS
ZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFuc2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsK
LX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVyYnVsZW5jZSwgRkVGbG9vZCBkb24ndCBo
YXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRlciByZWdpb24gYXMgdW5pdGUgcmVjdC4K
LSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlmICh1bnNpZ25lZCBudW1iZXJPZklucHV0
RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkgewotICAgICAgICBzdWJyZWdpb24gPSBp
bnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKSB7
Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZlU3VicmVnaW9uID0gaW5wdXRFZmZlY3Qo
aSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICAgICAgc3Vi
cmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVnaW9uKTsKLSAgICAgICAgfQorICAgIC8v
IERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24gZm9yIDxmZVRpbGU+LgorICAgIGlmICgh
aW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgICAgIGRlZmF1
bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXQtPnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5V
c2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFn
YWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVm
ZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25J
blVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygp
OwotICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgp
KTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnko
KSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3Vu
ZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9u
LnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsKLQotICAgIHNldEZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwotCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1f
ZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8g
ZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNv
bHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMg
YmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBm
cm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgotICAgIHNldFVuY2xpcHBlZEFi
c29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKKyAgICAgICAgZGVmYXVsdFByaW1p
dGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRlclJlZ2lvbigpOwogCi0gICAgLy8gQ2xpcCBl
dmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1
dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNv
bHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNv
bHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOworICAg
IEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb247CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFi
c29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3VicmVnaW9uOwotfQorICAgIHByaW1pdGl2
ZVN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJ5U2V0LngoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZl
U3VicmVnaW9uLngoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRZKGJvdW5kYXJ5U2V0
LnkoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLnkoKSkpOworICAgIHByaW1p
dGl2ZVN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyeVNldC53aWR0aCgpLnZhbHVlX29yKGRlZmF1
bHRQcmltaXRpdmVTdWJyZWdpb24ud2lkdGgoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5z
ZXRIZWlnaHQoYm91bmRhcnlTZXQuaGVpZ2h0KCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1
YnJlZ2lvbi5oZWlnaHQoKSkpOwogCi1GaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRF
ZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3RzLnNpemUoKSk7Ci0gICAgcmV0dXJu
IG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBj
b2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZp
bHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwotICAgICAgICBjb2xsZWN0RWZmZWN0
cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUoKTsK
LX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkg
Y29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0g
ICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVmZmVjdHMpOworICAgIHJldHVybiBw
cmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCitGbG9h
dFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6
ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpOwotICAgICAgICBp
bi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0OworICAgIGZvciAoYXV0byYgaW5wdXQg
OiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVuaXRlKGlucHV0LT5pbWFnZVJlY3QoKSk7
CiAKLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVj
dCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGluLCBp
KTsKLSAgICB9Ci0KLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldFJl
c3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLQotICAgIExPR19XSVRIX1NU
UkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8
PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAi
IDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAi
IDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9u
ICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA8PCAiXG4gIGFic29sdXRlUGFpbnRS
ZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBt
X21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpIDw8ICJcbiAgZmlsdGVyIHJlc29sdXRpb24gIiA8PCBtX2ZpbHRlci5maWx0ZXJSZXNv
bHV0aW9uKCkpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBp
eGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0g
ICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7
Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlv
bnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7
CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5n
UmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNl
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseVBsYXRm
b3JtKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKSBjb25zdAogewotICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1
bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgotICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8m
IGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVp
bnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5
TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3Vy
IGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVs
QXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAg
aWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVs
ID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAg
dWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsw
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
MV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4
ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgo
cGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsK
LSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhl
bEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgaWYgKHJl
bmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIHJldHVy
biBhcHBseUNvcmVJbWFnZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOwogI2VuZGlmCi0KLSAg
ICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRl
IG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBjb21w
b25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7Ci0gICAg
ICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0gICAgICAgIHVpbnQ4X3Qg
YSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50IHRv
IGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBhKQot
ICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAgICAgKytwaXhlbERhdGE7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQotICAgICAgICArK3Bp
eGVsRGF0YTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5U29mdHdhcmUob3V0cHV0LCBpbnB1dHMs
IGdlb21ldHJ5KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKK2Jvb2wg
RmlsdGVyRWZmZWN0OjphcHBseShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0
b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0
ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gYXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnksIEZp
bHRlckJvdW5kYXJ5U2V0KCkpOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRz
UmVjdXJzaXZlKCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseShGaWx0ZXJSZXN1bHQmIHJlc3Vs
dCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgY29uc3QKIHsKLSAgICAv
LyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBo
YXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVy
cm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0
KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3Rz
LmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIq
IEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPR19XSVRIX1NUUkVB
TShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZl
ciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlm
ICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gaW5wdXRz
ID0gdGFrZUlucHV0cyhzdGFjayk7CiAKLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVm
ZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jl
c3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVm
ZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFJlY3QgZGVzdGlu
YXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBp
ZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRp
b25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVs
QnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAg
IHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1SZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQot
ewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNj
YWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVh
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhl
bEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tl
ZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7
Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIElu
dFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUu
YXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0g
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwot
ICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJl
dHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIEludFJlY3Qgc2NhbGVk
UmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0K
LSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywg
aWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVj
dC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRT
aXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0
aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9l
cyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhY
KCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6
ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRS
ZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4T3JpZ2luIDwgMCkgewotICAg
ICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2luID0gMDsKKyAgICBpZiAoYXV0
byBpbWFnZSA9IHJlc3VsdC5pbWFnZXMoKS5nZXQoeyAqdGhpcyB9KSkgeworICAgICAgICBzdGFj
ay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBp
bnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRT
aXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKIAot
ICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAg
ICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAg
eU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0g
ICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBz
Y2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBj
YWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRzLCBnZW9tZXRyeSwgYm91bmRhcnlTZXQp
OworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBk
ZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291
cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCog
ZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRS
ZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhl
bCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkg
KyB4T3JpZ2luKSAqIDQ7CisgICAgYXV0byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJbWFnZVJlY3Qo
aW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICBhdXRvIGFic29sdXRl
SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlUmVjdCk7CiAKLSAgICB3aGls
ZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNv
dXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlv
blNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAg
ICAgKyt5T3JpZ2luOwotICAgIH0KLX0KKyAgICBpZiAoYWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0
eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5z
aXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0
aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICog
NDsKKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMtPmlzQWxwaGFJbWFnZShpbnB1dHMpOwor
ICAgIGF1dG8gaW1hZ2VDb2xvclNwYWNlID0gdGhpcy0+aW1hZ2VDb2xvclNwYWNlKGlucHV0cyk7
CiAKLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7CisgICAgYXV0byBpbWFnZSA9IHJlc3VsdC5jcmVhdGVGaWx0ZXJJbWFn
ZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCBhYnNvbHV0ZUlt
YWdlUmVjdC5zaXplKCksIGltYWdlQ29sb3JTcGFjZSk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKyAgICBMT0dfV0lUSF9T
VFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0
ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKKyAgICAgICAgPDwgIlxuICBw
cmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxu
ICBtYXhQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24o
cHJpbWl0aXZlU3VicmVnaW9uKQorICAgICAgICA8PCAiXG4gIGltYWdlUmVjdCAiIDw8IGltYWdl
UmVjdAorICAgICAgICA8PCAiXG4gIGFic29sdXRlSW1hZ2VnUmVjdCAiIDw8IGFic29sdXRlSW1h
Z2VSZWN0KTsKIAotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVz
dCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21w
b25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNv
bXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBk
ZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKyAgICBpZiAoIWFwcGx5
UGxhdGZvcm0oKmltYWdlLCBpbnB1dHMsIGdlb21ldHJ5LCByZXN1bHQucmVuZGVyaW5nTW9kZSgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8
IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMF0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMl0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNd
ID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBjb3B5
VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQot
ewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53
aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlu
cHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0g
ICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAg
ICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1
dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3Qu
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAg
ICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3Vy
Y2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChp
bnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNv
bXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50
IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAg
ICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0
YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9
IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVs
QnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29s
b3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAgIC8vIEZJWE1FOiBVc2lu
ZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlz
IHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAgICBJbnRSZWN0IGRlc3Rp
bmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOwotICAgIGRlc3RpbmF0
aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXpl
IGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5z
aXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQ
aXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVk
U2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBv
cGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1
ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29udmVydElt
YWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0
aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQpOwotfQotCi1zdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIElt
YWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBjYW4g
YmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVyQ29udmVyc2lvbi4KLQotICAg
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNp
emUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBj
b2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lv
bgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVk
U2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0
YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghY29udmVydGVk
QnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHN0YWNrLmFwcGVuZCh7
ICppbWFnZSB9KTsKKyAgICByZXN1bHQuaW1hZ2VzKCkuYWRkKHsgKnRoaXMgfSwgUmVmPEZpbHRl
ckltYWdlPigqaW1hZ2UpKTsKIAotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVu
cyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhl
cgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1
ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0
QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFjZSB9OwotICAg
IHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1h
Z2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCitUZXh0U3RyZWFtJiBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRl
clJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIC8vIENvbnZlcnRz
IHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0
aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZm
ZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9p
bnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBp
ZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdl
Qnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0
KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVz
dGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGlu
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0g
ICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAg
YXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFj
ZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVm
ZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICAKLSAgICBM
T0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0
ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4
aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAg
ICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1Bp
eGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAg
ICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAq
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xv
clNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jl
c3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVz
dWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAg
aWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1
dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBp
eGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAg
QVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lv
biBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0
KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJz
aW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVm
ZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAg
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
IH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXpl
IGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAg
ICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgICAgICAg
ICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2Ug
PT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUp
OwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVxdWly
ZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAg
IGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmls
dGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFt
ZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlw
ZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fic29s
dXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
LSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkg
b25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0g
ICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fic29s
dXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3Vs
dFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsK
LSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShm
b3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZm
ZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwg
dGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFT
U0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
bV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQ
aXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWly
ZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2Yg
YW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBleHRy
YSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRo
ZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4
ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNl
KCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25hbCBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VE
X1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVT
RShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFs
bHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0jZWxzZQotICAg
IGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0Q29s
b3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0
aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRk
aW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVu
fW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRv
Q29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xvclNw
YWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0
ZDo6bnVsbG9wdDsKLSNlbmRpZgotfQotCi1UZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBkdW1wIHRo
ZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlz
bid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVudCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUg
ZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRhcmdldCBvYmplY3QuCi0gICAgCi0gICAg
aWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZykg
eworICAgIGlmIChyZXByZXNlbnRhdGlvbiA9PSBGaWx0ZXJSZXByZXNlbnRhdGlvbjo6RGVidWdn
aW5nKSB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxwaGFJbWFnZSk7CiAg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBtX29wZXJhdGlu
Z0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNl
IiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICAgICAgdHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAg
ICAgfQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXIpCi17Ci0gICAgLy8gVXNlIGEgbmV3
IHN0cmVhbSBiZWNhdXNlIHdlIHdhbnQgbXVsdGlsaW5lIG1vZGUgZm9yIGxvZ2dpbmcgZmlsdGVy
cy4KLSAgICBUZXh0U3RyZWFtIGZpbHRlclN0cmVhbTsKLSAgICBmaWx0ZXIuZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihmaWx0ZXJTdHJlYW0sIEZpbHRlckVmZmVjdDo6UmVwcmVzZW50YXRpb25UeXBl
OjpEZWJ1Z2dpbmcpOwotICAgIAotICAgIHJldHVybiB0cyA8PCBmaWx0ZXJTdHJlYW0ucmVsZWFz
ZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCAxMmRl
ZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0NzFjLi4yYWQ2YzYyNmQwYTZkODc4ZThi
ZGQ2ZWE5MzY1NTIwN2ExNjE3ZDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTIyLDIzNyArMjIsNTgg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgi
CiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRT
dHJlYW07Ci19CisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmlsdGVyOwotY2xhc3MgRmls
dGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci0KLXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7Ci0KLWVudW0gRmlsdGVyRWZmZWN0VHlw
ZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUlt
YWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3Vy
Y2VJbnB1dAotfTsKK2NsYXNzIEZpbHRlckJvdW5kYXJ5U2V0OwogCi1jbGFzcyBGaWx0ZXJFZmZl
Y3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVj
dCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBl
IDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29udm9s
dmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2VtZW50
TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1c3Np
YW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1lcmdl
LAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1bGFy
TGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAgIFNv
dXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5G
aWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFy
UmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29u
c3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6
bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVz
dWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
PSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVByZW11
bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5w
dXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29u
c3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBt
X2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0
SW5wdXRzKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGltYWdlQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJu
IG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3Vs
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3Jt
IHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkg
RmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAg
ICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEludFJlY3QgcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAK
LSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBk
aWZmZXJlbnQgYWxwaGEgdmFsdWVzLgotICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0gICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBo
YUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7IH0KLQotICAgIEludFJlY3QgYWJz
b2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlUGFpbnRSZWN0OyB9Ci0g
ICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50
UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJzb2x1dGVQYWludFJlY3Q7IH0KLQotICAg
IEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0
OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0
UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9IAotCi0gICAgdm9pZCBh
cHBseSgpOwotCi0gICAgLy8gQ29ycmVjdCBhbnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2Fy
eSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZpbHRlciBvcGVyYXRpb24uCi0gICAgLy8gVGhpcyBtZXRo
b2QgaXMgdXNlZCB0byBlbnN1cmUgdmFsaWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMg
YW5kIHRoZSBmaW5hbCByZXN1bHQuCi0gICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3Np
dGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9uLgotICAgIHZpcnR1YWwg
dm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZl
Y3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBl
VW5rbm93bjsgfQotCi0gICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJl
dHVybiBJbnRPdXRzZXRzKCk7IH0KLQotICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBl
IHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0cHV0KSBjb25zdDsKLQotICAgIC8vIFRo
ZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcgc3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAgICAvLyBTZWUgYnVnIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTYxNC4KLSAgICBib29sIGhhc1goKSBj
b25zdCB7IHJldHVybiBtX2hhc1g7IH0KLSAgICB2b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBt
X2hhc1ggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNZKCkgY29uc3QgeyByZXR1cm4gbV9oYXNZ
OyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJvb2wgdmFsdWUpIHsgbV9oYXNZID0gdmFsdWU7IH0KLQot
ICAgIGJvb2wgaGFzV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgdm9p
ZCBzZXRIYXNXaWR0aChib29sIHZhbHVlKSB7IG1faGFzV2lkdGggPSB2YWx1ZTsgfQotCi0gICAg
Ym9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hhc0hlaWdodDsgfQotICAgIHZvaWQg
c2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNIZWlnaHQgPSB2YWx1ZTsgfQotCi0gICAg
RmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLQotICAg
IEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3Vu
ZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYg
ZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVz
OyB9Ci0gICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBG
bG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAK
LSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQp
IGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkg
eyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2
YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQotCiAgICAgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVy
YXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5n
Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFj
ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVy
RWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1f
b3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3Rv
cjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0g
ICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUo
KSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNb
aV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKLSAgICB9CisgICAgYm9vbCBh
cHBseShGaWx0ZXJSZXN1bHQmLCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdDsKKworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKLSAgICBGaWx0
ZXJFZmZlY3QoRmlsdGVyJiwgVHlwZSk7CisgICAgdXNpbmcgRmlsdGVyRnVuY3Rpb246OkZpbHRl
ckZ1bmN0aW9uOwogICAgIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVn
aW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25zdDsKIAotICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEg
dmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21w
b25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11
bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3Qg
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNv
bnN0OwogCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4
ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNl
VmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAgdmlydHVhbCBib29sIGlzQWxwaGFJbWFn
ZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIHZpcnR1YWwgRmlsdGVySW1hZ2VW
ZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJuIHsgfTsg
fQogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9
IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNv
bnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZl
cnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUGl4ZWxCdWZmZXImKTsKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0ID0gMDsKICAg
ICAKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlDb3JlSW1hZ2Uo
RmlsdGVySW1hZ2UmLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogCi0gICAgRmlsdGVyJiBtX2Zp
bHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFJlY3Qg
bV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEg
ZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24g
aW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQg
cmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZs
b2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBh
IGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRp
b24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5k
IG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAg
RmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOworICAgIGJvb2wgYXBwbHlQbGF0
Zm9ybShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIFJlbmRlcmluZ01vZGUpIGNvbnN0OwogCi0gICAgLy8g
eCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5l
ZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJp
bWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVz
OworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZpbmFsOwogICAgIAotICAgIC8vIGZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbiBtYXBwZWQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMgYmVmb3Jl
IGNsaXBwaW5nLgotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uOwot
Ci0gICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNYIHsgZmFs
c2UgfTsKLSAgICBib29sIG1faGFzWSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1dpZHRoIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faGFzSGVpZ2h0IHsgZmFsc2UgfTsKLQotICAgIC8vIFNob3Vs
ZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1
c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5wdXRzLgotICAgIGJvb2wgbV9jbGlwc1Rv
Qm91bmRzIHsgdHJ1ZSB9OwotCi0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJ
TkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3Bh
Y2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKICAgICBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBt
X3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAg
IAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7CiB9OwogCi1XRUJDT1JF
X0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgRmlsdGVyRWZmZWN0Jik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJFZmZlY3QpCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1
cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3QoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChDbGFz
c05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Q2xhc3NOYW1l
KSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYg
ZWZmZWN0KSB7IHJldHVybiBlZmZlY3QudHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6Q2xhc3NOYW1lOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDlkYTg1NWNkYjk2MzE3YjgyZGUzNTY3ZmMzMWU1YjllOWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6
Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgotCi0jaWYgVVNFKENPUkVfSU1B
R0UpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5k
ZXJlcj4gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShib29sIGFjY2VsZXJhdGVkRmls
dGVyUmVuZGVyaW5nRW5hYmxlZCwgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQotewotI2lmIFVT
RShDT1JFX0lNQUdFKQotICAgIGlmIChhY2NlbGVyYXRlZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRl
KGxhc3RFZmZlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJS
ZW5kZXJpbmdFbmFibGVkKTsKLSAgICBVTlVTRURfUEFSQU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotCi19IC8vIG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZi
ZTI0NzM2MWY1M2IzYzA5ZWNiNTcxMzIyYjc1YTc1NzNlOWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
MiArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJl
bmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUo
Ym9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0
ZXJFZmZlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0
ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAgICAKLXByb3RlY3RlZDoKLSAgICBGaWx0
ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9J
bWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdFZlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NWY0YzgzMmNlM2FlMTZk
OWVhOTIwOWNmODcyZWRiNzhjMGNiNzkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKwordXNpbmcgRmlsdGVyRWZmZWN0VmVjdG9y
ID0gVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGMzMDAzYmUyNzdhNTdiMmM5MzRlM2Q1
YzFiOTExMWQ2ZDY4NDgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJG
dW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYXV0byYgZmlsdGVyTmFtZXMoKQoreworICAgIHVzaW5nIEZp
bHRlck5hbWVNYXAgPSBIYXNoTWFwPEZpbHRlckZ1bmN0aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBX
VEY6OkludEhhc2g8RmlsdGVyRnVuY3Rpb246OlR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJh
aXRzPEZpbHRlckZ1bmN0aW9uOjpUeXBlPj47CisKKyAgICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1l
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CisgICAgICAgIEZpbHRlck5hbWVNYXAgZmlsdGVy
TmFtZXMgPSB7CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIs
ICAgICAgICAgICAiQ1NTRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyLCAgICAgICAgICAgIlNWR0ZpbHRlciJfcyAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVCbGVuZCwgICAgICAgICAgICAgIkZFQmxlbmQiX3MgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsICAgICAgICJGRUNv
bG9yTWF0cml4Il9zICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRUNvbXBvbmVudFRyYW5zZmVyLCAiRkVDb21wb25lbnRUcmFuc2ZlciJfcyB9LAorICAgICAg
ICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsICAgICAgICAgIkZFQ29t
cG9zaXRlIl9zICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFQ29udm9sdmVNYXRyaXgsICAgICJGRUNvbnZvbHZlTWF0cml4Il9zICAgIH0sCisgICAgICAg
ICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgICAiRkVEaWZm
dXNlTGlnaHRpbmciX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVEaXNwbGFjZW1lbnRNYXAsICAgIkZFRGlzcGxhY2VtZW50TWFwIl9zICAgfSwKKyAgICAgICAg
ICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdywgICAgICAgICJGRURyb3BT
aGFkb3ciX3MgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUZsb29kLCAgICAgICAgICAgICAiRkVGbG9vZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsICAgICAgIkZFR2F1c3Np
YW5CbHVyIl9zICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
SW1hZ2UsICAgICAgICAgICAgICJGRUltYWdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlLCAgICAgICAgICAgICAiRkVNZXJnZSJf
cyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVN
b3JwaG9sb2d5LCAgICAgICAgIkZFTW9ycGhvbG9neSJfcyAgICAgICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LCAgICAgICAgICAgICJGRU9mZnNldCJf
cyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNw
ZWN1bGFyTGlnaHRpbmcsICAiRkVTcGVjdWxhckxpZ2h0aW5nIl9zICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLCAgICAgICAgICAgICAgIkZFVGlsZSJfcyAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVy
YnVsZW5jZSwgICAgICAgICJGRVR1cmJ1bGVuY2UiX3MgICAgICAgIH0sCisKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFscGhhLCAgICAgICAgICJTb3VyY2VBbHBo
YSJfcyAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VHcmFwaGljLCAgICAgICAiU291cmNlR3JhcGhpYyJfcyAgICAgICB9CisKKyAgICAgICAgfTsK
KyAgICAgICAgcmV0dXJuIGZpbHRlck5hbWVzOworICAgIH0oKSk7CisgICAgCisgICAgcmV0dXJu
IGZpbHRlck5hbWVzLmdldCgpOworfQorCitBdG9tU3RyaW5nIEZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJOYW1lKFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gZmlsdGVyTmFtZXMoKS5nZXQodHlwZSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NTBlMWMyYTQ0ZjI3ODQwMTQxYzFlNDUwNTM1MTE2MTc1NzU3NWEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5j
dGlvbi5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0
b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXByZXNlbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludFJl
Y3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOwor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3Mg
RmlsdGVyUmVzdWx0OworY2xhc3MgSW1hZ2VCdWZmZXI7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9u
IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdG
aWx0ZXIsCisKKyAgICAgICAgRkVNaW5pbXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmlt
dW0sCisgICAgICAgIEZFQ29sb3JNYXRyaXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIs
CisgICAgICAgIEZFQ29tcG9zaXRlLAorICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAg
ICBGRURpZmZ1c2VMaWdodGluZywKKyAgICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAg
IEZFRHJvcFNoYWRvdywKKyAgICAgICAgRkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIs
CisgICAgICAgIEZFSW1hZ2UsCisgICAgICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9n
eSwKKyAgICAgICAgRkVPZmZzZXQsCisgICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAg
ICAgRkVUaWxlLAorICAgICAgICBGRVR1cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAor
ICAgICAgICBTb3VyY2VHcmFwaGljLAorCisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBo
aWMKKyAgICB9OworCisgICAgRmlsdGVyRnVuY3Rpb24oVHlwZSk7CisgICAgdmlydHVhbCB+Rmls
dGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKworICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gVHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkNTU0ZpbHRlciB8fCBtX3R5cGUgPT0gVHlw
ZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV90eXBlIDw9IFR5cGU6OkZFTWF4aW11bTsg
fQorCisgICAgc3RhdGljIEF0b21TdHJpbmcgZmlsdGVyTmFtZShUeXBlKTsKKyAgICBzdGF0aWMg
QXRvbVN0cmluZyBzb3VyY2VBbHBoYU5hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNv
dXJjZUFscGhhKTsgfQorICAgIHN0YXRpYyBBdG9tU3RyaW5nIHNvdXJjZUdyYXBoaWNOYW1lKCkg
eyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQorICAgIEF0b21TdHJp
bmcgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZpbHRlck5hbWUobV90eXBlKTsgfQorCisj
aWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVu
ZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisgICAgdmlydHVhbCBJ
bnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKworICAg
IHZpcnR1YWwgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQmLCBGaWx0ZXJJbWFnZVZlY3RvciYgc3Rh
Y2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmls
dGVyUmVwcmVzZW50YXRpb24gPSBGaWx0ZXJSZXByZXNlbnRhdGlvbjo6VGVzdE91dHB1dCkgY29u
c3QgPSAwOworCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlLAorCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAgICAgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9y
cGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0
aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTc4
ZDM2MzZhZjk3Nzk4MDdmNTZlZGNhYWMyMmM3N2E3NzllMzMxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5j
cHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmlsdGVyR2VvbWV0cnk6OkZpbHRlckdlb21l
dHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBmbG9hdCBmaWx0ZXJTY2FsZSwgQ2xp
cE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVn
aW9uKQorICAgICwgbV9maWx0ZXJTY2FsZShGbG9hdFNpemUoZmlsdGVyU2NhbGUsIGZpbHRlclNj
YWxlKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlwT3BlcmF0aW9uKQoreworfQorCitGaWx0
ZXJHZW9tZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRT
aXplPiYgdGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+JiYgZmls
dGVyRWZmZWN0Qm91bmRhcnlTZXRzKQorICAgIDogRmlsdGVyR2VvbWV0cnkoZmlsdGVyUmVnaW9u
LCBmaWx0ZXJTY2FsZSwgdGFyZ2V0Qm91bmRpbmdTaXplLCBXVEZNb3ZlKGZpbHRlckVmZmVjdEJv
dW5kYXJ5U2V0cyksIENsaXBPcGVyYXRpb246OkludGVyc2VjdCkKK3sKK30KKworRmlsdGVyR2Vv
bWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4m
IHRhcmdldEJvdW5kaW5nU2l6ZSwgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiYmIGZpbHRlckVm
ZmVjdEJvdW5kYXJ5U2V0cywgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDogbV9m
aWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2Fs
ZSkKKyAgICAsIG1fdGFyZ2V0Qm91bmRpbmdTaXplKHRhcmdldEJvdW5kaW5nU2l6ZSkKKyAgICAs
IG1fZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFdURk1vdmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlT
ZXRzKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlwT3BlcmF0aW9uKQoreworfQorCitGbG9h
dFNpemUgRmlsdGVyR2VvbWV0cnk6OmNhbGN1bGF0ZUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFNpemUmIGFic29sdXRlU2NhbGUpCit7Cisg
ICAgYXV0byBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdCA9IHNvdXJjZUltYWdlUmVjdDsKKyAgICBh
YnNvbHV0ZVNvdXJjZUltYWdlUmVjdC5zY2FsZShhYnNvbHV0ZVNjYWxlKTsKKyAgICBhdXRvIGNs
YW1waW5nU2NhbGUgPSBGbG9hdFNpemUgeyAxLCAxIH07CisgICAgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGFic29sdXRlU291cmNlSW1hZ2VSZWN0LnNpemUoKSwgY2xhbXBpbmdTY2Fs
ZSk7CisgICAgcmV0dXJuIGFic29sdXRlU2NhbGUgKiBjbGFtcGluZ1NjYWxlOworfQorCitGbG9h
dFNpemUgRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGltYWdlU2l6ZSAqIG1fdGFyZ2V0Qm91bmRp
bmdTaXplLnZhbHVlX29yKEZsb2F0U2l6ZSgxLCAxKSk7Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXJH
ZW9tZXRyeTo6bWFwSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAor
eworICAgIHJldHVybiBpbWFnZVNpemUgKiBtX2ZpbHRlclNjYWxlOworfQorCitGbG9hdFNpemUg
RmlsdGVyR2VvbWV0cnk6Om1hcFJlc29sdmVkSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBtYXBJbWFnZVNpemUocmVzb2x2ZUltYWdlU2l6
ZShpbWFnZVNpemUpKTsKK30KKworCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6Om1hcEltYWdl
UmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHNjYWxl
ZEltYWdlUmVjdCA9IGltYWdlUmVjdDsKKyAgICBzY2FsZWRJbWFnZVJlY3Quc2NhbGUobV9maWx0
ZXJTY2FsZSk7CisgICAgcmV0dXJuIHNjYWxlZEltYWdlUmVjdDsKK30KKworRmxvYXRSZWN0IEZp
bHRlckdlb21ldHJ5OjptYXBJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0SW1hZ2VSZWN0KSBjb25zdAoreworICAgIGF1dG8gbW92ZWRJ
bWFnZVJlY3QgPSBpbWFnZVJlY3Q7CisgICAgbW92ZWRJbWFnZVJlY3QubW92ZUJ5KC10YXJnZXRJ
bWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIG1hcEltYWdlUmVjdChtb3ZlZEltYWdl
UmVjdCk7Cit9CisKK0ZpbHRlckJvdW5kYXJ5U2V0IEZpbHRlckdlb21ldHJ5Ojpib3VuZGFyeVNl
dChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAg
aWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IHR5cGUgPT0g
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmIChtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBpZiAoaW5kZXggPj0gbV9maWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMu
c2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0c1tpbmRl
eF07Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvRmlsdGVyUmVnaW9uKGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBp
bnRlcnNlY3Rpb24ocHJpbWl0aXZlU3VicmVnaW9uLCBtX2ZpbHRlclJlZ2lvbik7Cit9CisKK0Zs
b2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZs
b2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGlwT3BlcmF0aW9uID09IENsaXBPcGVyYXRpb246Oklu
dGVyc2VjdCA/IGludGVyc2VjdGlvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbikgOiB1
bmlvblJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworfQorCitGbG9hdFJlY3Qg
RmlsdGVyR2VvbWV0cnk6OmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIGNsaXBU
b0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3NzNkNWZhODc4MzYzNGYzZjM0
NDg0NDJmNGViOGYxYzNlOTA0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKQEAgLTAsMCArMSwxMzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJCb3VuZGFyeVNldC5oIgorI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJHZW9tZXRyeSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDbGlwT3Bl
cmF0aW9uIHsgSW50ZXJzZWN0LCBVbml0ZSB9OworCisgICAgRmlsdGVyR2VvbWV0cnkoY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGZsb2F0IGZpbHRlclNjYWxlID0gMSwgQ2xpcE9wZXJh
dGlvbiA9IENsaXBPcGVyYXRpb246OkludGVyc2VjdCk7CisgICAgRmlsdGVyR2VvbWV0cnkoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYgdGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0
b3I8RmlsdGVyQm91bmRhcnlTZXQ+JiYpOworCisgICAgc3RhdGljIEZsb2F0U2l6ZSBjYWxjdWxh
dGVGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxv
YXRTaXplJiBhYnNvbHV0ZVNjYWxlKTsKKworICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7IH0KKworICAgIEZsb2F0U2l6ZSByZXNv
bHZlSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplKSBjb25zdDsKKworICAgIEZs
b2F0U2l6ZSBtYXBJbWFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUpIGNvbnN0Owor
ICAgIEZsb2F0U2l6ZSBtYXBSZXNvbHZlZEltYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbWFwSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgaW1hZ2VSZWN0KSBjb25zdDsKKyAgICBGbG9hdFJlY3QgbWFwSW1hZ2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmVndEltYWdlUmVjdCkgY29u
c3Q7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCBib3VuZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5
cGUsIHVuc2lnbmVkKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBjbGlwVG9GaWx0ZXJSZWdpb24o
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OworCisgICAgRmxvYXRS
ZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OworICAgIEZsb2F0UmVj
dCBjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKKworICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJHZW9tZXRyeT4g
ZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBXRUJDT1JFX0VYUE9SVCBGaWx0ZXJH
ZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+JiB0YXJnZXRCb3VuZGlu
Z1NpemUsIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4mJiwgQ2xpcE9wZXJhdGlvbik7CisKKyAg
ICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgRmxvYXRTaXplIG1fZmlsdGVyU2NhbGU7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gbV90YXJnZXRCb3VuZGluZ1NpemU7Cisg
ICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsK
KworICAgIENsaXBPcGVyYXRpb24gbV9jbGlwT3BlcmF0aW9uIHsgQ2xpcE9wZXJhdGlvbjo6SW50
ZXJzZWN0IH07Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJHZW9t
ZXRyeTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBt
X2ZpbHRlclJlZ2lvbjsKKyAgICBlbmNvZGVyIDw8IG1fZmlsdGVyU2NhbGU7CisKKyAgICBlbmNv
ZGVyIDw8IG1fdGFyZ2V0Qm91bmRpbmdTaXplOworICAgIGVuY29kZXIgPDwgbV9maWx0ZXJFZmZl
Y3RCb3VuZGFyeVNldHM7CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcE9wZXJhdGlvbjsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RmlsdGVyR2VvbWV0cnk+IEZp
bHRlckdlb21ldHJ5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gZmlsdGVyUmVnaW9uOworICAgIGRlY29kZXIgPj4gZmlsdGVyUmVnaW9u
OworICAgIGlmICghZmlsdGVyUmVnaW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IGZpbHRlclNjYWxlOworICAgIGRlY29kZXIg
Pj4gZmlsdGVyU2NhbGU7CisgICAgaWYgKCFmaWx0ZXJTY2FsZSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRpb25hbDxGbG9hdFNpemU+
PiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgZGVjb2RlciA+PiB0YXJnZXRCb3VuZGluZ1NpemU7
CisgICAgaWYgKCF0YXJnZXRCb3VuZGluZ1NpemUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4+IGZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0czsKKyAgICBkZWNvZGVyID4+IGZpbHRlckVmZmVjdEJvdW5kYXJ5
U2V0czsKKyAgICBpZiAoIWZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cykKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q2xpcE9wZXJhdGlvbj4gY2xpcE9w
ZXJhdGlvbjsKKyAgICBkZWNvZGVyID4+IGNsaXBPcGVyYXRpb247CisgICAgaWYgKCFjbGlwT3Bl
cmF0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZpbHRl
ckdlb21ldHJ5KCpmaWx0ZXJSZWdpb24sICpmaWx0ZXJTY2FsZSwgKnRhcmdldEJvdW5kaW5nU2l6
ZSwgV1RGTW92ZSgqZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKSwgKmNsaXBPcGVyYXRpb24pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0
aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6
RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24sCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
R2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OlVuaXRlCisgICAgPjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmE1MTAwMjQ2Y2Y5OTc2NTAw
ZmU5NGNlODY1MWQ5ODFmNjQwMjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJGaWx0
ZXJJbWFnZVNvZnR3YXJlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorCisjaWYgVVNFKENP
UkVfSU1BR0UpCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCIKKyNlbmRpZgorCisj
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+CisjZW5k
aWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0
ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlckltYWdl
PiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Up
Cit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5pc0VtcHR5KCkgfHwgaW1hZ2VSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworI2lmIFVTRShDT1JFX0lNQUdF
KQorICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZUNvcmVJbWFnZShwcmltaXRp
dmVTdWJyZWdpb24sIGltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCBsb2dpY2FsU2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKSk7CisjZW5kaWYKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZVNvZnR3YXJlKHByaW1pdGl2ZVN1YnJlZ2lvbiwg
aW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0
ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlckltYWdlU29mdHdhcmUocHJpbWl0aXZl
U3VicmVnaW9uLCBpbWFnZVJlY3QsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Cit9CisKK0ZpbHRl
ckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQor
ICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICwgbV9p
bWFnZVJlY3QoaW1hZ2VSZWN0KQorICAgICwgbV9pc0FscGhhSW1hZ2UoaXNBbHBoYUltYWdlKQor
ICAgICwgbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1fcmVuZGVyaW5nTW9kZShy
ZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQor
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQ
cmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQorewor
I2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0
aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0
U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAg
c3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBk
ZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNp
emUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2
SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRh
dGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRT
aXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29t
cG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVu
dCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFd
ID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7Cisg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBj
b3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXpl
KQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6
ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9
IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7
CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsK
KyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBp
bnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRl
c3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisK
KyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBz
b3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCAr
IChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCk7CisgICAgdWludDhfdCogZGVzdGlu
YXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisgICAgd2hpbGUgKHNvdXJjZUNv
bXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107
CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihz
b3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1
NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOworICAgICAgICB9CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBv
bmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNl
bmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVySW1hZ2U6OnBpeGVs
QnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAg
ICByZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA6IG1fcHJlbXVsdGlwbGllZFBp
eGVsQnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZm
ZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZm
ZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29s
b3JTcGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhp
c3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZm
ZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfSk7CisgICAg
ICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBJbnRTaXpl
IHNjYWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRl
KGZvcm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7CisgICAg
ZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKSkKKyAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpLT5kYXRhKCks
IHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUpOworCisgICAgcmV0dXJuICZwaXhlbEJ1
ZmZlci52YWx1ZSgpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckltYWdl
OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOworICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAgICBz
Y2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8gY2hlY2tlZEFy
ZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChjaGVj
a2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAor
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZv
cm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCiti
b29sIEZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24o
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7
CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdl
IG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIC8v
IFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2Ug
aXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1h
bmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJuIGNvbG9yU3BhY2UgJiYgbV9jb2xvclNw
YWNlICE9ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29s
b3JTcGFjZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgRmlsdGVySW1h
Z2U6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxT
aXplKTsKKyAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisg
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlm
IG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3Qu
eCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGlu
YXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMg
bm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHNjYWxlZFJlY3QubWF4WCgp
IDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUu
aGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVj
dC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBpZiAoeE9yaWdpbiA8IDApIHsKKyAgICAg
ICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgfQorICAgIGlu
dCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNp
emUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOworCisg
ICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAg
IGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAg
ICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IHNj
YWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2lu
KSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkg
KiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICog
NDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsg
KCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBh
aW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwg
eUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNp
emUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Cisg
ICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOworICAgICAgICArK3lPcmlnaW47
CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0
Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0
ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXpl
IENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJ
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBoYXBwZW5z
IGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBhbm90aGVy
CisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9y
bWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3BhY2UgfTsKKyAgICByZXR1cm4gY29udmVy
dGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZl
cihQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFG
b3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIElu
dFJlY3QgcmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOworICAgIHJlY3Quc2Nh
bGUoMSAvIG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworCisgICAgLy8gQ3JlYXRlIGFu
IEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCisgICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwg
cmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwg
YWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpj
b3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvKiBw
aXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpID8gJnBpeGVsQnVm
ZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOworCisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VD
b252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252
ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgICAgICAgICAgSW50UmVj
dCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShtX2xvZ2ljYWxTaXplKSB9OworICAg
ICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVk
UGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3BhY2Up
KQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlz
LT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFG
b3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRl
ZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCksIGRl
c3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11
bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0
aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMu
CisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0
YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKKwor
ICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBp
eGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKKyAg
ICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGgg
JiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxE
YXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0
cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsx
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
Ml0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAg
ICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFz
dFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0
ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9y
IGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDApIHsK
KyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAgdWlu
dDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21wb25l
bnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0YSA+
IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3BpeGVs
RGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAgICAg
ICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworI2lmIFVTRShD
RykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFsbHku
CisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vsc2UKKyAgICBpZiAoY29sb3JTcGFj
ZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBXZSBj
YW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJz
aW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0
aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xv
clNwYWNlKG1fY29sb3JTcGFjZSwgY29sb3JTcGFjZSk7CisKKyAgICBtX2NvbG9yU3BhY2UgPSBj
b2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxv
cHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0
ZmE4N2MwNzJiYjc2YzVjYjY4OTA5MzAwYThmMGNiZjA1ZWJkNjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgK
QEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZl
cjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4g
eworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3Qs
IGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYpOworICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIFJlZjxJ
bWFnZUJ1ZmZlcj4mJik7CisKKyAgICB2aXJ0dWFsIH5GaWx0ZXJJbWFnZSgpID0gZGVmYXVsdDsK
KworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3By
aW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlUmVjdDsgfQorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0FscGhhSW1hZ2U7IH0KKworICAgIEZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7
IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0
cygpID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpID0gMDsKKwor
ICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb24pOworICAgIFBpeGVsQnVmZmVyKiBwaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBj
b3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICAKKyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0
aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAgICB2b2lkIHRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcm90ZWN0ZWQ6CisgICAgRmlsdGVySW1hZ2UoY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0
LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmKTsKKworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBj
b3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRl
ZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGlu
YXRpb25Db2xvclNwYWNlKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJl
Z2lvbjsKKyAgICBGbG9hdFJlY3QgbV9pbWFnZVJlY3Q7CisgICAgYm9vbCBtX2lzQWxwaGFJbWFn
ZSB7IGZhbHNlIH07CisKKyAgICBGbG9hdFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBSZW5kZXJp
bmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAg
ICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisgICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2VWZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2VWZWN0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
YTc1MzU5MmE3YzZhOWQyZjZmYzU0OWU0ZDdlZjk0Y2Y3MjAwOGY4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZVZl
Y3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVySW1hZ2U7CisKK3VzaW5nIEZpbHRl
ckltYWdlVmVjdG9yID0gVmVjdG9yPFJlZjxGaWx0ZXJJbWFnZT4+OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRiZmY3
ZDgwNDdjZWY5ZWY2M2EzNmVjYzM1ZTVlOWIyMDExY2VlNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVwcmVzZW50YXRp
b24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBj
bGFzcyBGaWx0ZXJSZXByZXNlbnRhdGlvbiA6IHVpbnQ4X3QgeworICAgIFRlc3RPdXRwdXQsCisg
ICAgRGVidWdnaW5nCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmQyODdkMTUzYzA0MWIyOTk4MWE2OWRhZmUzYTY0OWU5NzU0YzMyMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyUmVzdWx0LmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJSZXN1bHQuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJSZXN1bHQ6
OkZpbHRlclJlc3VsdChSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBtX3JlbmRl
cmluZ01vZGUocmVuZGVyaW5nTW9kZSkKK3sKK30KKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0
ZXJSZXN1bHQ6OmNyZWF0ZUZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKHByaW1pdGl2
ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGlzQWxwaGFJbWFnZSwgbG9naWNhbFNpemUsIG1fcmVu
ZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkYzg4MzRmNzdmZjlkM2VkY2NmMGFiMjgxZjgyMTIz
M2U4OGM3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbjsKK2NsYXNzIEZpbHRlckdlb21l
dHJ5OworY2xhc3MgRmlsdGVySW1hZ2U7CisKK2NsYXNzIEZpbHRlclJlc3VsdCB7CitwdWJsaWM6
CisgICAgdXNpbmcgSW1hZ2VzID0gSGFzaE1hcDxSZWY8Y29uc3QgRmlsdGVyRnVuY3Rpb24+LCBS
ZWY8RmlsdGVySW1hZ2U+PjsKKworICAgIEZpbHRlclJlc3VsdChSZW5kZXJpbmdNb2RlKTsKKwor
ICAgIEltYWdlcyYgaW1hZ2VzKCkgeyByZXR1cm4gbV9pbWFnZXM7IH0KKyAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKwor
ICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgZHJhd2luZ1JlY3QsIGJvb2wg
aXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZXMgbV9pbWFnZXM7CisgICAg
UmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyZjBlYjk0ODJjNjEwZjU1ZGJiMzIzNGZh
NjJlY2RlZTdhMjc4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpo
ZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitMaWdodFNvdXJjZTo6TGlnaHRTb3VyY2UoRGF0YSYmIGRhdGEpCisgICAgOiBtX2RhdGEo
V1RGTW92ZShkYXRhKSkKK3sKK30KKwordm9pZCBMaWdodFNvdXJjZTo6c2V0QXppbXV0aChmbG9h
dCBhemltdXRoKQoreworICAgIGlmIChhdXRvKiBkYXRhID0gc3RkOjpnZXRfaWY8RGlzdGFudExp
Z2h0U291cmNlRGF0YT4oJm1fZGF0YSkpCisgICAgICAgIGRhdGEtPnNldEF6aW11dGgoYXppbXV0
aCk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldEVsZXZhdGlvbihmbG9hdCBlbGV2YXRpb24p
Cit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxEaXN0YW50TGlnaHRTb3VyY2VE
YXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0RWxldmF0aW9uKGVsZXZhdGlvbik7Cit9
CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFgoZmxvYXQgeCkKK3sKKyAgICBpZiAoYXV0byogZGF0
YSA9IHN0ZDo6Z2V0X2lmPFBvaW50TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkgeworICAgICAg
ICBkYXRhLT5zZXRYKHgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF1dG8q
IGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAg
ICAgZGF0YS0+c2V0WCh4KTsKK30KKwordm9pZCBMaWdodFNvdXJjZTo6c2V0WShmbG9hdCB5KQor
eworICAgIGlmIChhdXRvKiBkYXRhID0gc3RkOjpnZXRfaWY8UG9pbnRMaWdodFNvdXJjZURhdGE+
KCZtX2RhdGEpKSB7CisgICAgICAgIGRhdGEtPnNldFkoeSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoYXV0byogZGF0YSA9IHN0ZDo6Z2V0X2lmPFNwb3RMaWdodFNvdXJjZURh
dGE+KCZtX2RhdGEpKQorICAgICAgICBkYXRhLT5zZXRZKHkpOworfQorCit2b2lkIExpZ2h0U291
cmNlOjpzZXRaKGZsb2F0IHopCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxQ
b2ludExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpIHsKKyAgICAgICAgZGF0YS0+c2V0Wih6KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdXRvKiBkYXRhID0gc3RkOjpnZXRf
aWY8U3BvdExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpCisgICAgICAgIGRhdGEtPnNldFooeik7
Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WChmbG9hdCBwb2ludHNBdFgpCit7
CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigm
bV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRYKHBvaW50c0F0WCk7Cit9CisKK3Zv
aWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WShmbG9hdCBwb2ludHNBdFkpCit7CisgICAgaWYg
KGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkK
KyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRZKHBvaW50c0F0WSk7Cit9CisKK3ZvaWQgTGlnaHRT
b3VyY2U6OnNldFBvaW50c0F0WihmbG9hdCBwb2ludHNBdFopCit7CisgICAgaWYgKGF1dG8qIGRh
dGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAg
ZGF0YS0+c2V0UG9pbnRzQXRaKHBvaW50c0F0Wik7Cit9CisgICAgCit2b2lkIExpZ2h0U291cmNl
OjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpCit7CisgICAgaWYg
KGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkK
KyAgICAgICAgZGF0YS0+c2V0U3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KTsKK30K
Kwordm9pZCBMaWdodFNvdXJjZTo6c2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdD
b25lQW5nbGUpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRT
b3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0TGltaXRpbmdDb25lQW5nbGUo
bGltaXRpbmdDb25lQW5nbGUpOworfQorCitMaWdodFNvdXJjZVBhaW50RGF0YSBMaWdodFNvdXJj
ZTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JW
ZWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9kYXRhLAorICAgICAg
ICBbJl0gKGNvbnN0IERpc3RhbnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAg
IHJldHVybiBkYXRhLmNvbXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb2xvclZlY3Rvcik7Cisg
ICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUG9pbnRMaWdodFNvdXJjZURhdGEmIGRhdGEp
IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShj
b2xvclZlY3Rvcik7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgU3BvdExpZ2h0U291
cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291
cmNlUGFpbnREYXRhKGNvbG9yVmVjdG9yKTsKKyAgICAgICAgfQorICAgICk7Cit9CisKK0xpZ2h0
U291cmNlUGl4ZWxEYXRhIExpZ2h0U291cmNlOjpjb21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEo
Y29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBm
bG9hdCB6KSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAg
ICAgWyZdIChjb25zdCBEaXN0YW50TGlnaHRTb3VyY2VEYXRhJiBkYXRhKSB7CisgICAgICAgICAg
ICByZXR1cm4gZGF0YS5jb21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEocGFpbnRpbmdEYXRhLCB4
LCB5LCB6KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBQb2ludExpZ2h0U291cmNl
RGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291cmNl
UGl4ZWxEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CisgICAgICAgIH0sCisgICAgICAgIFsm
XSAoY29uc3QgU3BvdExpZ2h0U291cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJu
IGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7
CisgICAgICAgIH0KKyAgICApOworfQorCitUZXh0U3RyZWFtJiBMaWdodFNvdXJjZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgRGlzdGFudExpZ2h0U291cmNl
RGF0YSYgZGF0YSkgLT4gVGV4dFN0cmVhbSYgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3Qg
UG9pbnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIC0+IFRleHRTdHJlYW0mIHsKKyAgICAgICAgICAg
IHJldHVybiBkYXRhLmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICB9LAorICAg
ICAgICBbJl0gKGNvbnN0IFNwb3RMaWdodFNvdXJjZURhdGEmIGRhdGEpIC0+IFRleHRTdHJlYW0m
IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwor
ICAgICAgICB9CisgICAgKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5o
CmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1NWQyMzVhNzM4OWY1ZDUuLmQ1ZTYxYjkz
MDBjMDhjMmIxZjNhZTAyN2RkMjhiNjViNmY3ZTVkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTQsNiAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOCArMjQsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSAiRGlzdGFudExpZ2h0U291cmNlRGF0YS5oIgorI2luY2x1ZGUgIlBvaW50TGlnaHRT
b3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlRGF0YS5oIgogCiBuYW1lc3Bh
Y2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CkBAIC0zMiw2NiArMzQsNjEgQEAgY2xhc3MgVGV4
dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIExpZ2h0VHlwZSB7Ci0gICAg
TFNfRElTVEFOVCwKLSAgICBMU19QT0lOVCwKLSAgICBMU19TUE9UCi19OworY2xhc3MgTGlnaHRT
b3VyY2UgeworcHVibGljOgorICAgIHVzaW5nIERhdGEgPSBzdGQ6OnZhcmlhbnQ8CisgICAgICAg
IERpc3RhbnRMaWdodFNvdXJjZURhdGEsCisgICAgICAgIFBvaW50TGlnaHRTb3VyY2VEYXRhLAor
ICAgICAgICBTcG90TGlnaHRTb3VyY2VEYXRhCisgICAgPjsKIAotY2xhc3MgRmlsdGVyRWZmZWN0
OworICAgIFdFQkNPUkVfRVhQT1JUIExpZ2h0U291cmNlKERhdGEmJik7CisKKyAgICB2b2lkIHNl
dEF6aW11dGgoZmxvYXQpOworICAgIHZvaWQgc2V0RWxldmF0aW9uKGZsb2F0KTsKKyAgICAKKyAg
ICAvLyBUaGVzZSBhcmUgaW4gdXNlciBzcGFjZSBjb29yZGluYXRlcy4KKyAgICB2b2lkIHNldFgo
ZmxvYXQpOworICAgIHZvaWQgc2V0WShmbG9hdCk7CisgICAgdm9pZCBzZXRaKGZsb2F0KTsKKyAg
ICB2b2lkIHNldFBvaW50c0F0WChmbG9hdCk7CisgICAgdm9pZCBzZXRQb2ludHNBdFkoZmxvYXQp
OworICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZsb2F0KTsKKyAgICAKKyAgICB2b2lkIHNldFNwZWN1
bGFyRXhwb25lbnQoZmxvYXQpOworICAgIHZvaWQgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQp
OworCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgY29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRh
KGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3IpIGNvbnN0OwogCi1jbGFzcyBMaWdodFNv
dXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291cmNlPiB7Ci1wdWJsaWM6Ci0gICAgc3Ry
dWN0IENvbXB1dGVkTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVj
dG9yOwotICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JWZWN0b3I7Ci0gICAgICAgIGZsb2F0IGxp
Z2h0VmVjdG9yTGVuZ3RoOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAg
ICAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgaW5pdGlhbExpZ2h0aW5nRGF0YTsKLSAgICAgICAg
RmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKLSAgICAgICAgZmxvYXQgY29uZUN1dE9mZkxp
bWl0OwotICAgICAgICBmbG9hdCBjb25lRnVsbExpZ2h0OwotICAgICAgICBpbnQgc3BlY3VsYXJF
eHBvbmVudDsKLSAgICB9OwotCi0gICAgTGlnaHRTb3VyY2UoTGlnaHRUeXBlIHR5cGUpCi0gICAg
ICAgIDogbV90eXBlKHR5cGUpCi0gICAgeyB9Ci0KLSAgICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgp
ID0gZGVmYXVsdDsKLQotICAgIExpZ2h0VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWlu
dGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgPSAwOwogICAgIC8v
IHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQg
YnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUiIGNvbnN0YW50LCB3aGlj
aCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQuCiAgICAgLy8geCBhbmQgeSBh
cmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZlY3QncyBidWZmZXIuCi0gICAg
dmlydHVhbCBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29u
c3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCA9IDA7CisgICAg
TGlnaHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExp
Z2h0U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCBzZXRBemltdXRoKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0g
ICAgLy8gVGhlc2UgYXJlIGluIHVzZXIgc3BhY2UgY29vcmRpbmF0ZXMuCi0gICAgdmlydHVhbCBi
b29sIHNldFgoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNldFko
ZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNldFooZmxvYXQpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNldFBvaW50c0F0WChmbG9hdCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0UG9pbnRzQXRZKGZsb2F0KSB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzZXRQb2ludHNBdFooZmxvYXQpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHNldFNwZWN1bGFyRXhwb25lbnQo
ZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNldExpbWl0aW5nQ29u
ZUFuZ2xlKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxMaWdodFNvdXJjZT4gZGVj
b2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBMaWdodFR5cGUgbV90eXBlOworICAgIERh
dGEgbV9kYXRhOwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgTGlnaHRTb3VyY2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIGVuY29kZXIgPDwgbV9kYXRhOworfQogCi0jZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfTElHSFRTT1VSQ0UoQ2xhc3NOYW1lLCBUeXBlKSBcCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNsYXNzTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXZWJDb3JlOjpMaWdodFNvdXJjZSYgc291cmNlKSB7IHJldHVybiBzb3VyY2UudHlw
ZSgpID09IFdlYkNvcmU6OlR5cGU7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGlnaHRTb3VyY2U+IExpZ2h0
U291cmNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERh
dGE+IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOworICAgIGlmICghZGF0YSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBMaWdodFNvdXJjZShXVEZNb3ZlKCpk
YXRhKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2VEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlRGF0YS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRjOGMwYTc2ZWZjODE4ZDdmYzc5MTQ0ZDcyYWMwNDFiZjVkY2E1ODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xp
Z2h0U291cmNlRGF0YS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBMaWdodFNvdXJjZVBpeGVsRGF0YSB7CisgICAgRmxv
YXRQb2ludDNEIGNvbG9yVmVjdG9yOworICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvcjsKKyAg
ICBmbG9hdCBsaWdodFZlY3Rvckxlbmd0aDsKK307CisKK3N0cnVjdCBMaWdodFNvdXJjZVBhaW50
RGF0YSB7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEgaW5pdGlhbExpZ2h0aW5nRGF0YTsKKyAg
ICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uVmVjdG9yOworICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1p
dDsKKyAgICBmbG9hdCBjb25lRnVsbExpZ2h0OworICAgIGludCBzcGVjdWxhckV4cG9uZW50Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3
OTEyOGY1NGI0NGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2UuaCIKLQotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWlu
dGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYp
Ci17Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9t
VXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8g
c2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0
aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZl
Y3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngo
KSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsK
LSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9u
LngoKSk7Ci19Ci0KLUxpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0
U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKLXsKLSAgICBGbG9hdFBvaW50
M0QgbGlnaHRWZWN0b3IgPSB7Ci0gICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwKLSAg
ICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAotICAgICAgICBtX2J1ZmZlclBvc2l0aW9u
LnooKSAtIHoKLSAgICB9OwotCi0gICAgcmV0dXJuIHsgbGlnaHRWZWN0b3IsIHBhaW50aW5nRGF0
YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLCBsaWdodFZlY3Rvci5sZW5ndGgoKSB9
OwotfQotCi1ib29sIFBvaW50TGlnaHRTb3VyY2U6OnNldFgoZmxvYXQgeCkKLXsKLSAgICBpZiAo
bV91c2VyU3BhY2VQb3NpdGlvbi54KCkgPT0geCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WCh4KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQb2ludExpZ2h0U291cmNlOjpzZXRZKGZsb2F0IHkpCi17Ci0gICAgaWYgKG1fdXNlclNwYWNl
UG9zaXRpb24ueSgpID09IHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnNldFkoeSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUG9pbnRMaWdo
dFNvdXJjZTo6c2V0WihmbG9hdCB6KQotewotICAgIGlmIChtX3VzZXJTcGFjZVBvc2l0aW9uLnoo
KSA9PSB6KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV91c2VyU3BhY2VQb3NpdGlvbi5z
ZXRaKHopOwotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0U3RyZWFtJiBQb2ludExpZ2h0U291
cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAg
IHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKLSAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8
PCBwb3NpdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfTsgLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY3YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5ODU5NmQ3MTE1ZjRiYjk1YTUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8
cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBvaW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGln
aHRTb3VyY2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UG9pbnRMaWdodFNvdXJjZT4gY3Jl
YXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBQb2ludExpZ2h0U291cmNlKHBvc2l0aW9uKSk7Ci0gICAgfQotCi0gICAg
Y29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclNwYWNl
UG9zaXRpb247IH0KLSAgICBib29sIHNldFgoZmxvYXQpIG92ZXJyaWRlOwotICAgIGJvb2wgc2V0
WShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsKLQotICAg
IHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEm
KSBvdmVycmlkZTsKLSAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGlu
Z0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBm
aW5hbDsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBQb2ludExpZ2h0
U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCi0gICAgICAgIDogTGlnaHRTb3Vy
Y2UoTFNfUE9JTlQpCi0gICAgICAgICwgbV91c2VyU3BhY2VQb3NpdGlvbihwb3NpdGlvbikKLSAg
ICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9zaXRpb247Ci0gICAg
RmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElHSFRTT1VSQ0UoUG9pbnRMaWdodFNvdXJj
ZSwgTFNfUE9JTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZURhdGEuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmMxNDhlZWNjZDNjNjkzM2I5ZTIyNDI4OGI4MjQ5ZGQ3ZGViZTEyZjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2VEYXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlRGF0YS5oIgorCisjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BvaW50TGln
aHRTb3VyY2VEYXRhOjpQb2ludExpZ2h0U291cmNlRGF0YShjb25zdCBGbG9hdFBvaW50M0QmIHBv
c2l0aW9uKQorICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbikKK3sKK30KKworTGlnaHRTb3VyY2VQ
YWludERhdGEgUG9pbnRMaWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdodFNvdXJjZVBhaW50RGF0
YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9yKSBjb25zdAoreworICAgIG1fYnVmZmVy
UG9zaXRpb24uc2V0WFkobV9wb3NpdGlvbi54eSgpKTsKKyAgICAvLyBUbyBzY2FsZSBaLCBtYXAg
YSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlv
biBieSB6LgorICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IHsgbV9wb3NpdGlvbi54KCkgKyBtX3Bv
c2l0aW9uLnooKSwgbV9wb3NpdGlvbi55KCkgfTsKKyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoo
bWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisgICAgCisgICAgTGlnaHRTb3Vy
Y2VQYWludERhdGEgcGFpbnREYXRhID0geyB9OworICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRp
bmdEYXRhLmNvbG9yVmVjdG9yID0gY29sb3JWZWN0b3I7CisgICAgcmV0dXJuIHBhaW50RGF0YTsK
K30KKworTGlnaHRTb3VyY2VQaXhlbERhdGEgUG9pbnRMaWdodFNvdXJjZURhdGE6OmNvbXB1dGVM
aWdodFNvdXJjZVBpeGVsRGF0YShjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSYgcGFpbnREYXRh
LCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludDNEIGxpZ2h0
VmVjdG9yID0geworICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLngoKSAtIHgsCisgICAgICAgIG1f
YnVmZmVyUG9zaXRpb24ueSgpIC0geSwKKyAgICAgICAgbV9idWZmZXJQb3NpdGlvbi56KCkgLSB6
CisgICAgfTsKKworICAgIHJldHVybiB7IHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yLCBsaWdodFZlY3RvciwgbGlnaHRWZWN0b3IubGVuZ3RoKCkgfTsKK30KKworVGV4
dFN0cmVhbSYgUG9pbnRMaWdodFNvdXJjZURhdGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgIlt0eXBlPVBPSU5ULUxJR0hUXSAiOwor
ICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IG1fcG9zaXRpb24gPDwgIlwiXSI7CisgICAgcmV0
dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3Vy
Y2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNDFmMWNmZTI4YWNmMWQwMjA2MThhMTc2NTZmNzhhOWFj
NTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFp
bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMaWdodFNvdXJj
ZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQb2ludExpZ2h0U291cmNl
RGF0YSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgUG9pbnRMaWdodFNvdXJjZURhdGEo
Y29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbik7CisKKyAgICB2b2lkIHNldFgoZmxvYXQgeCkg
eyBtX3Bvc2l0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3Bvc2l0
aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFooZmxvYXQgeikgeyBtX3Bvc2l0aW9uLnNldFko
eik7IH0KKworICAgIExpZ2h0U291cmNlUGFpbnREYXRhIGNvbXB1dGVMaWdodFNvdXJjZVBhaW50
RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9yKSBjb25zdDsKKyAgICBMaWdodFNv
dXJjZVBpeGVsRGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEoY29uc3QgTGlnaHRTb3Vy
Y2VQYWludERhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0OworCisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0
OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBv
aW50TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIEZs
b2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIG11dGFibGUgRmxvYXRQb2ludDNEIG1fYnVmZmVy
UG9zaXRpb247Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBQb2ludExpZ2h0
U291cmNlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBtX3Bvc2l0aW9uOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxQb2ludExpZ2h0U291cmNlRGF0YT4gUG9pbnRMaWdodFNvdXJjZURhdGE6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludDNEPiBwb3Np
dGlvbjsKKyAgICBkZWNvZGVyID4+IHBvc2l0aW9uOworICAgIGlmICghcG9zaXRpb24pCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gUG9pbnRMaWdodFNvdXJjZURh
dGEoKnBvc2l0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFkNmNmM2EzLi4xZDM3MzEw
N2QzYmQzZGFmZGNhMzViMmVlOGQzYzk5ODU0ZDMxNzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjAgKzIxLDMyIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKIAotI2luY2x1ZGUgIkNv
bG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VW
ZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFs
cGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQorUmVm
PFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTb3VyY2VBbHBoYSgpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6
OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKCkKKyAgICA6IEZpbHRlckVm
ZmVjdChUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsK
IH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmls
dGVySW1hZ2VWZWN0b3IgU291cmNlQWxwaGE6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQotewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgw
KS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0
LCBDb2xvcjo6YmxhY2spOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOwot
fQotCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAorVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUFscGhhXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJF
ZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3QuZmls
dGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
c291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3RzKCku
YXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4uZmI2
NmRiOGRjZGM5N2ZiMTQwMGVjMjY0NjNlYjZlZjVmZWVlN2Y3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTcsOCArMTgsNyBAQAogICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0j
ZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAg
ICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7Ci0KLSAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBSZWY8U291
cmNlQWxwaGE+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNvdXJjZUFscGhh
KEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQor
ICAgIFNvdXJjZUFscGhhKCk7CisKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZp
bHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUFscGhhIjsgfQorICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBv
dmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNl
QWxwaGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIw
Mjc0YzExMDdkNzgzOTJlOS4uZTYyMmVhOWQzNzliNWU2MDkwYzYyNzJiZWJiYjAyNTI2Y2M5MzRl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMCw0NyArMjEsMzQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
b3VyY2VHcmFwaGljLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBo
aWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMo
ZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0K
IAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VH
cmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VH
cmFwaGljKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VHcmFwaGljIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291
cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IFNvdXJj
ZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0g
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRS
ZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCku
aGVpZ2h0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgcmV0dXJuIGlu
cHV0c1swXS0+aW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK0ZpbHRlckltYWdlVmVjdG9yIFNvdXJjZUdyYXBoaWM6OnRha2VJbnB1
dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZp
bHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIEFTU0VSVCghc3RhY2suaXNF
bXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07CiB9CiAKLVRleHRTdHJl
YW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdyYXBoaWNdXG4iOwogICAg
IHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEz
MjhlZjIxMDZiN2ZjYTViZi4uOGRkY2JkZTAyNzQ2YjQxNzcyYzY3ZDY0NTk5M2Q3NmRjYjMyNjQ2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0xOCw0MSArMTksMzEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlR3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYXBo
aWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VHcmFwaGlj
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVm
PFNvdXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsKLQotICAgIHN0YXRpYyBjb25zdCBBdG9t
U3RyaW5nJiBlZmZlY3ROYW1lKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTb3Vy
Y2VHcmFwaGljPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBTb3VyY2VHcmFwaGljKEZpbHRl
ciYgZmlsdGVyKQotICAgICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdy
YXBoaWMpCi0gICAgewotICAgICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9CisgICAgU291cmNlR3Jh
cGhpYygpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotfTsKKyAgICBGaWx0
ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qg
b3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29yZQorICAgIGJvb2wgYXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWMpCi0gICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3Qu
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisjaWYgVVNFKENP
UkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGFwcGx5Q29yZUltYWdlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAorICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0jZW5kaWYgLy8gU291cmNlR3JhcGhpY19o
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYz
NDhkMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdl
YmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNa
RUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCi0K
LSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gc3BvdC1saWdodCBlZGdlIGRhcmtlbmlu
ZyBkZXBlbmRzIG9uIGFuIGFic29sdXRlIHRyZXNob2xkCi0vLyBhY2NvcmRpbmcgdG8gdGhlIFNW
RyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwotc3RhdGljIGNvbnN0IGZsb2F0IGFudGlB
bGlhc1RyZXNob2xkID0gMC4wMTZmOwotCi12b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEpCi17Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3Qu
bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7
Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQ
b3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFog
PSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0
aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1
ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3Rv
ciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIHBhaW50
aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXplKCk7Ci0KLSAgICBpZiAoIW1fbGltaXRp
bmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAu
MGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gLWFudGlBbGlhc1RyZXNo
b2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9s
aW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikK
LSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gLWxpbWl0aW5nQ29uZUFuZ2xlOwotICAg
ICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5n
Q29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQg
PSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICAgICAgcGFp
bnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0g
YW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21t
b24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBpZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkK
LSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAwOwotICAgIGVsc2UgaWYg
KG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICBwYWludGluZ0RhdGEuc3BlY3Vs
YXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBpcyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYK
LSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhwb25lbnQgPSAyOwotfQotCi1MaWdodFNv
dXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgU3BvdExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxM
aWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQg
eSwgZmxvYXQgeikgY29uc3QKLXsKLSAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7Ci0g
ICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwKLSAgICAgICAgbV9idWZmZXJQb3NpdGlv
bi55KCkgLSB5LAotICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKLSAgICB9OwotICAg
IGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRWZWN0b3IubGVuZ3RoKCk7Ci0KLSAgICBm
bG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9yICogcGFpbnRpbmdEYXRhLmRpcmVjdGlv
blZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKLSAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBh
aW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKLSAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJv
ZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKLSAgICAgICAgcmV0dXJuIHsgbGlnaHRW
ZWN0b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5ndGggfTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhl
IGNvbG9yIG9mIHRoZSBwaXhlbAotICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgc3dpdGNo
IChwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCkgewotICAgIGNhc2UgMDoKLSAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVPZkFuZ2xlIF4gMCA9PSAxCi0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFu
Z2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNvc2luZU9mQW5nbGUKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IHBvd2YoLWNvc2luZU9m
QW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpCi0gICAgICAg
IGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVP
ZkFuZ2xlKSAvIChwYWludGluZ0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gcGFpbnRpbmdEYXRhLmNv
bmVGdWxsTGlnaHQpOwotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxLjBmKQotICAgICAgICBs
aWdodFN0cmVuZ3RoID0gMS4wZjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIGxpZ2h0VmVjdG9y
LAotICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciAq
IGxpZ2h0U3RyZW5ndGgsCi0gICAgICAgIGxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgfTsKLX0KLQot
Ym9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFgoZmxvYXQgeCkKLXsKLSAgICBpZiAobV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgPT0geCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNw
YWNlUG9zaXRpb24uc2V0WCh4KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90TGln
aHRTb3VyY2U6OnNldFkoZmxvYXQgeSkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi55
KCkgPT0geSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24u
c2V0WSh5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNl
dFooZmxvYXQgeikKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi56KCkgPT0geikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0Wih6KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WChm
bG9hdCBwb2ludHNBdFgpCi17Ci0gICAgaWYgKG1fdXNlclNwYWNlUG9pbnRzQXQueCgpID09IHBv
aW50c0F0WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9pbnRzQXQu
c2V0WChwb2ludHNBdFgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNwb3RMaWdodFNv
dXJjZTo6c2V0UG9pbnRzQXRZKGZsb2F0IHBvaW50c0F0WSkKLXsKLSAgICBpZiAobV91c2VyU3Bh
Y2VQb2ludHNBdC55KCkgPT0gcG9pbnRzQXRZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV91c2VyU3BhY2VQb2ludHNBdC5zZXRZKHBvaW50c0F0WSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgU3BvdExpZ2h0U291cmNlOjpzZXRQb2ludHNBdFooZmxvYXQgcG9pbnRzQXRaKQot
ewotICAgIGlmIChtX3VzZXJTcGFjZVBvaW50c0F0LnooKSA9PSBwb2ludHNBdFopCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3VzZXJTcGFjZVBvaW50c0F0LnNldFoocG9pbnRzQXRaKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFNwZWN1bGFy
RXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkKLXsKLSAgICBpZiAobV9zcGVjdWxhckV4
cG9uZW50ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9uZW50OwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQgbGlt
aXRpbmdDb25lQW5nbGUpCi17Ci0gICAgaWYgKG1fbGltaXRpbmdDb25lQW5nbGUgPT0gbGltaXRp
bmdDb25lQW5nbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2xpbWl0aW5nQ29uZUFu
Z2xlID0gbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJl
YW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsKLSAgICB0cyA8PCAi
W3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOwotICAgIHRzIDw8ICJbZGlyZWN0
aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsKLSAgICB0cyA8PCAiW3NwZWN1bGFyRXhw
b25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8PCAiXCJdIjsKLSAgICB0cyA8PCAiW2xp
bWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0NvbmVBbmdsZSgpIDw8ICJcIl0iOwotICAg
IHJldHVybiB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZh
ZTQ0MmE1ZWE1MzRmZDFmM2JmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExp
Z2h0U291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgi
Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNw
b3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9u
LAotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTcG90TGlnaHRTb3VyY2UocG9zaXRpb24sIGRpcmVjdGlvbiwgc3BlY3Vs
YXJFeHBvbmVudCwgbGltaXRpbmdDb25lQW5nbGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBGbG9h
dFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3BhY2VQb3NpdGlvbjsg
fQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91
c2VyU3BhY2VQb2ludHNBdDsgfQotICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7
IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAgICBmbG9hdCBsaW1pdGluZ0NvbmVBbmds
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25lQW5nbGU7IH0KLQotICAgIGJvb2wgc2V0
WChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRZKGZsb2F0KSBvdmVycmlkZTsKLSAgICBi
b29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwotICAgIGJvb2wgc2V0UG9pbnRzQXRYKGZsb2F0KSBv
dmVycmlkZTsKLSAgICBib29sIHNldFBvaW50c0F0WShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBzZXRQb2ludHNBdFooZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBzZXRTcGVjdWxhckV4
cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZs
b2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKLSAgICBDb21wdXRlZExpZ2h0aW5nRGF0
YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBTcG90TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwg
Y29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgICAgICA6IExpZ2h0U291cmNlKExTX1NQT1QpCi0g
ICAgICAgICwgbV91c2VyU3BhY2VQb3NpdGlvbihwb3NpdGlvbikKLSAgICAgICAgLCBtX3VzZXJT
cGFjZVBvaW50c0F0KGRpcmVjdGlvbikKLSAgICAgICAgLCBtX3NwZWN1bGFyRXhwb25lbnQoc3Bl
Y3VsYXJFeHBvbmVudCkKLSAgICAgICAgLCBtX2xpbWl0aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29u
ZUFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb3Np
dGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb2ludHNBdDsKLQotICAgIEZsb2F0
UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOwotCi0gICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50
OwotICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElHSFRTT1VSQ0UoU3BvdExpZ2h0U291
cmNlLCBMU19TUE9UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2VEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTVlNzlmODc2YmVmMmU0NjFmMzFjZjU2NmNmNDIwMTk4NmQ3MWM5YwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlRGF0YS5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlRGF0YS5oIgorCisj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Nwb3RMaWdodFNvdXJjZURhdGE6OlNwb3RMaWdodFNvdXJjZURhdGEoY29uc3QgRmxvYXRQb2lu
dDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgIDogbV91c2VyU3BhY2VQ
b3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fdXNlclNwYWNlUG9pbnRzQXQoZGlyZWN0aW9uKQor
ICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCisgICAgLCBtX2xpbWl0
aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQoreworfQorCisvLyBzcG90LWxpZ2h0IGVk
Z2UgZGFya2VuaW5nIGRlcGVuZHMgb24gYW4gYWJzb2x1dGUgdHJlc2hvbGQKKy8vIGFjY29yZGlu
ZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCitzdGF0aWMgY29uc3Qg
ZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CisKK0xpZ2h0U291cmNlUGFpbnREYXRh
IFNwb3RMaWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb25zdCBG
bG9hdFBvaW50M0QmIGNvbG9yVmVjdG9yKSBjb25zdAoreworICAgIExpZ2h0U291cmNlUGFpbnRE
YXRhIHBhaW50RGF0YTsKKyAgICAKKyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKG1fdXNlclNw
YWNlUG9zaXRpb24ueHkoKSk7CisgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0
IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KKyAgICBG
bG9hdFBvaW50IG1hcHBlZFogPSB7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH07CisgICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOworICAgIAor
ICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gY29sb3JWZWN0
b3I7CisKKyAgICBwYWludERhdGEuZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2ludHNB
dCAtIG1fdXNlclNwYWNlUG9zaXRpb247CisgICAgcGFpbnREYXRhLmRpcmVjdGlvblZlY3Rvci5u
b3JtYWxpemUoKTsKKworICAgIGlmICghbV9saW1pdGluZ0NvbmVBbmdsZSkgeworICAgICAgICBw
YWludERhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsKKyAgICAgICAgcGFpbnREYXRhLmNvbmVG
dWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmxv
YXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5nQ29uZUFuZ2xlOworICAgICAgICBpZiAo
bGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQorICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUg
PSAtbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAgIGlmIChsaW1pdGluZ0NvbmVBbmdsZSA+IDkw
LjBmKQorICAgICAgICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSA5MC4wZjsKKyAgICAgICAgcGFp
bnREYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVnMnJhZCgxODAuMGYgLSBsaW1pdGluZ0Nv
bmVBbmdsZSkpOworICAgICAgICBwYWludERhdGEuY29uZUZ1bGxMaWdodCA9IHBhaW50RGF0YS5j
b25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9sZDsKKyAgICB9CisKKyAgICAvLyBPcHRp
bWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9uZW50IHZhbHVlcworICAgIGlmICghbV9z
cGVjdWxhckV4cG9uZW50KQorICAgICAgICBwYWludERhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7
CisgICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCisgICAgICAgIHBhaW50
RGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKKyAgICBlbHNlIC8vIEl0IGlzIG5laXRoZXIgMC4w
ZiBub3IgMS4wZgorICAgICAgICBwYWludERhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDI7CisgICAg
CisgICAgcmV0dXJuIHBhaW50RGF0YTsKK30KKworTGlnaHRTb3VyY2VQaXhlbERhdGEgU3BvdExp
Z2h0U291cmNlRGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291
cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKK3sK
KyAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7CisgICAgICAgIG1fYnVmZmVyUG9zaXRp
b24ueCgpIC0geCwKKyAgICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAorICAgICAgICBt
X2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKKyAgICB9OworICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVu
Z3RoID0gbGlnaHRWZWN0b3IubGVuZ3RoKCk7CisKKyAgICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0g
KGxpZ2h0VmVjdG9yICogcGFpbnREYXRhLmRpcmVjdGlvblZlY3RvcikgLyBsaWdodFZlY3Rvckxl
bmd0aDsKKyAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50RGF0YS5jb25lQ3V0T2ZmTGltaXQp
IHsKKyAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVw
ZGF0ZWQKKyAgICAgICAgcmV0dXJuIHsgbGlnaHRWZWN0b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5n
dGggfTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbAorICAgIGZs
b2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgc3dpdGNoIChwYWludERhdGEuc3BlY3VsYXJFeHBvbmVu
dCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8vIC1jb3Np
bmVPZkFuZ2xlIF4gMCA9PSAxCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0g
LWNvc2luZU9mQW5nbGUKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbGln
aHRTdHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVudCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnREYXRh
LmNvbmVGdWxsTGlnaHQpCisgICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50RGF0YS5jb25l
Q3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludERhdGEuY29uZUN1dE9mZkxpbWl0
IC0gcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQpOworCisgICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAx
LjBmKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKKworICAgIHJldHVybiB7CisgICAg
ICAgIGxpZ2h0VmVjdG9yLAorICAgICAgICBwYWludERhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5j
b2xvclZlY3RvciAqIGxpZ2h0U3RyZW5ndGgsCisgICAgICAgIGxpZ2h0VmVjdG9yTGVuZ3RoCisg
ICAgfTsKK30KKworVGV4dFN0cmVhbSYgU3BvdExpZ2h0U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9U1BP
VC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBtX3VzZXJTcGFjZVBvc2l0
aW9uIDw8ICJcIl0iOworICAgIHRzIDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBtX3VzZXJTcGFjZVBv
aW50c0F0IDw8ICJcIl0iOworICAgIHRzIDw8ICJbc3BlY3VsYXJFeHBvbmVudD1cIiIgPDwgbV9z
cGVjdWxhckV4cG9uZW50IDw8ICJcIl0iOworICAgIHRzIDw8ICJbbGltaXRpbmdDb25lQW5nbGU9
XCIiIDw8IG1fbGltaXRpbmdDb25lQW5nbGUgPDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmExZmRiOTM0MmI2ZDUwOGE5YjA4YzljMzhmNDg2NzAzMTA2YmJhMmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMaWdodFNvdXJjZURhdGEuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTcG90TGlnaHRTb3VyY2VEYXRhIHsKK3B1YmxpYzoK
KyAgICBXRUJDT1JFX0VYUE9SVCBTcG90TGlnaHRTb3VyY2VEYXRhKGNvbnN0IEZsb2F0UG9pbnQz
RCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxh
ckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSk7CisKKyAgICB2b2lkIHNldFgoZmxv
YXQgeCkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lkIHNldFkoZmxv
YXQgeSkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFooZmxv
YXQgeikgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFooeik7IH0KKworICAgIHZvaWQgc2V0UG9p
bnRzQXRYKGZsb2F0IHBvaW50c0F0WCkgeyBtX3VzZXJTcGFjZVBvaW50c0F0LnNldFgocG9pbnRz
QXRYKTsgfQorICAgIHZvaWQgc2V0UG9pbnRzQXRZKGZsb2F0IHBvaW50c0F0WSkgeyBtX3VzZXJT
cGFjZVBvaW50c0F0LnNldFkocG9pbnRzQXRZKTsgfQorICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZs
b2F0IHBvaW50c0F0WikgeyBtX3VzZXJTcGFjZVBvaW50c0F0LnNldFoocG9pbnRzQXRaKTsgfQor
CisgICAgdm9pZCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25lbnQpIHsg
bV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBvbmVudDsgfQorICAgIHZvaWQgc2V0TGlt
aXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpIHsgbV9saW1pdGluZ0NvbmVB
bmdsZSA9IGxpbWl0aW5nQ29uZUFuZ2xlOyB9CisKKyAgICBMaWdodFNvdXJjZVBhaW50RGF0YSBj
b21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBjb2xvclZlY3Rv
cikgY29uc3Q7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4
ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6
KSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxTcG90TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2RlciYp
OworCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvc2l0aW9uOworICAg
IEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvaW50c0F0OworCisgICAgbXV0YWJsZSBGbG9hdFBv
aW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKworICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsK
KyAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgU3BvdExpZ2h0U291cmNlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3VzZXJTcGFjZVBvc2l0aW9uOworICAgIGVuY29k
ZXIgPDwgbV91c2VyU3BhY2VQb2ludHNBdDsKKyAgICBlbmNvZGVyIDw8IG1fc3BlY3VsYXJFeHBv
bmVudDsKKyAgICBlbmNvZGVyIDw8IG1fbGltaXRpbmdDb25lQW5nbGU7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNwb3RMaWdodFNvdXJjZURhdGE+IFNwb3RM
aWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRQb2ludDNEPiB1c2VyU3BhY2VQb3NpdGlvbjsKKyAgICBkZWNvZGVyID4+IHVz
ZXJTcGFjZVBvc2l0aW9uOworICAgIGlmICghdXNlclNwYWNlUG9zaXRpb24pCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQzRD4gdXNl
clNwYWNlUG9pbnRzQXQ7CisgICAgZGVjb2RlciA+PiB1c2VyU3BhY2VQb2ludHNBdDsKKyAgICBp
ZiAoIXVzZXJTcGFjZVBvaW50c0F0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3BlY3VsYXJFeHBvbmVudDsKKyAgICBkZWNvZGVyID4+
IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgaWYgKCFzcGVjdWxhckV4cG9uZW50KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gbGltaXRpbmdD
b25lQW5nbGU7CisgICAgZGVjb2RlciA+PiBsaW1pdGluZ0NvbmVBbmdsZTsKKyAgICBpZiAoIWxp
bWl0aW5nQ29uZUFuZ2xlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0
dXJuIFNwb3RMaWdodFNvdXJjZURhdGEoKnVzZXJTcGFjZVBvc2l0aW9uLCAqdXNlclNwYWNlUG9p
bnRzQXQsICpzcGVjdWxhckV4cG9uZW50LCAqbGltaXRpbmdDb25lQW5nbGUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmVlYjA3MmQ1ZjZiNzIwZDE3NDFmOGU1MzRjZDE2MjgzNTM2YTMwYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRkVCbGVuZC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNs
dWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKK2Jvb2wg
RkVCbGVuZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgYXV0byYgaW5wdXQgPSBp
bnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW5wdXQyID0gaW5wdXRzWzFdLmdldCgpOworCisg
ICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBhdXRvIGlucHV0
MkltYWdlID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlIHx8ICFp
bnB1dDJJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFn
ZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VS
ZWN0KGlucHV0LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgIGF1dG8gaW1h
Z2VSZWN0MiA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1
dC5pbWFnZVJlY3QoKSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBv
dXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIAorICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbnB1dDJJbWFnZSwgaW1hZ2VSZWN0Mik7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGltYWdlUmVjdCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxv
Z2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0p
OworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YjMzZGRiYjI2ZGUxZTdkOTZkMWY1NjgxYmU0MDc3ZWM5MzkwYzI3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgor
CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgor
I2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgdm9pZCBtYXRyaXgo
ZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9h
dCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisgICAgZmxvYXQgYSA9IGFscGhhOwor
CisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNb
IDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiAg
ID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsgdmFs
dWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBd
ICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICogYSAr
IHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVz
WzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAq
IDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwg
ZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCit7Cisg
ICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJs
dWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVudHNbMF0gKyBnICogY29tcG9uZW50c1sx
XSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVuICAgPSByICogY29tcG9uZW50c1szXSAr
IGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9IHIg
KiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNbN10gKyBiICogY29tcG9uZW50c1s4XTsK
K30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rp
b24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVk
LCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpCit7CisgICAgYWxwaGEg
PSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CisgICAgcmVk
ID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxF
UkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RB
cHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6
ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEo
KSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMg
YSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNv
bG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0
byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8
IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CisgICAgdWludDhfdCogZGF0
YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3Jj
LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBidWZmZXJTaXpl
LmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Cisg
ICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBk
ZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVy
U2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICog
NDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Cisg
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGludDE2
X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlz
b3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZd
ICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZh
bHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZp
c29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
IDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9OworICAg
ICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBk
aXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90
IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAg
ICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAor
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9B
UkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBr
dkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0
cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBk
aXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZp
c29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29y
KSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FS
R0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVy
VHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXplIGJ1ZmZlclNpemUpCit7CisgICAgZmxv
YXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhf
VFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVD
b21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisgICAgZWxzZSBpZiAoZmlsdGVyVHlw
ZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4
OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7CisK
KyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRl
clR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCisgICAg
ICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOworI2VuZGlm
CisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4
ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsK
KyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQp
OworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zm
c2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0
ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBtYXRyaXgocmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhl
bEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewor
ICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7
CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRl
KHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5z
ZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJy
YXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQg
PSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdy
ZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAg
ZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAg
ICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMp
OworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAg
ICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworVmVjdG9yPGZsb2F0PiBGRUNvbG9yTWF0cml4Ojpu
b3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKK3sKKyAgICBWZWN0
b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG5vcm1hbGl6ZWRWYWx1
ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKKyAgICByZXR1cm4gbm9ybWFsaXpl
ZFZhbHVlczsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gb3V0
cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW5wdXQuaW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgYXV0byBpbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFn
ZVJlY3QoKSk7CisgICAgICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICB9CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVs
Rm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KEludFBvaW50KCksIG91dHB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBp
eGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0
KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvIHBpeGVsQXJy
YXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKKworICAgIGF1dG8gdmFsdWVzID0g
bm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisKKyAgICBzd2l0Y2ggKG1fY29sb3JNYXRyaXhU
eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBlZmZlY3RU
eXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FU
VVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAg
IGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFs
dWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgICAgIGVmZmVjdFR5cGU8RkVD
T0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4
ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBvdXRwdXRJ
bWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJh
bnNmZXJTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OThmN2VmYWEyM2NkNjNiODU5MjhhNzQ2M2Q2ZTc5NWJhYzZiYjFkNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVDb21w
b25lbnRUcmFuc2Zlci5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3Qs
IDI1Nj47CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCit7Cit9CisKK3N0YXRpYyB2b2lkIGNv
bXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CisgICAgdW5z
aWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAgICBpZiAobiA8IDEpCisgICAgICAgIHJl
dHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOworICAgICAgICB1bnNpZ25lZCBrID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKKyAgICAgICAgZG91YmxlIHYxID0gdGFi
bGVWYWx1ZXNba107CisgICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChr
ICsgMSksIChuIC0gMSkpXTsKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMg
KiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOworICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAs
IHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRh
YmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1
ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0YWJs
ZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1cm47CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNp
Z25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICogbikgLyAyNTUuMCk7CisgICAgICAg
IGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJs
ZVZhbHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwg
dmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZh
bHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRy
YW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OworICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0
ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExv
b2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5z
ZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4
cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0
IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQorICAgICAgICBkb3VibGUgdmFsID0g
MjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4
cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKKyAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0aWMgTG9va3VwVGFibGUgY29t
cHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9u
KQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAgICAgdGFibGVbaV0gPSBpOworCisgICAg
dXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsK
KyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRh
YmxlLAorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLAorICAgICAgICBjb21wdXRlRGlzY3Jl
dGVUYWJsZSwKKyAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLAorICAgICAgICBjb21wdXRlR2Ft
bWFUYWJsZQorICAgIH07CisKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlv
bi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOworICAgIGNhbGxFZmZlY3Rb
ZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsKKworICAgIHJldHVybiB0YWJsZTsKK30K
KworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBv
dXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsK
KyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFn
ZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7CisgICAgaWYg
KCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYg
b3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBv
dXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgp
LCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0
UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRS
ZWN0KG91dHB1dEltYWdlUmVjdCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBMb29r
dXBUYWJsZSByZWRUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAg
ICBMb29rdXBUYWJsZSBncmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZ3JlZW5GdW5j
dGlvbik7CisgICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1f
Ymx1ZUZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlID0gY29tcHV0ZUxvb2t1
cFRhYmxlKG1fYWxwaGFGdW5jdGlvbik7CisKKyAgICB1bnNpZ25lZCBvdXRwdXRQaXhlbEFycmF5
TGVuZ3RoID0gb3V0cHV0UGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0g
b3V0cHV0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0
ID0gMDsgcGl4ZWxPZmZzZXQgPCBvdXRwdXRQaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCAr
PSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdID0gcmVkVGFibGVbZGF0YVtwaXhlbE9m
ZnNldF1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFb
cGl4ZWxPZmZzZXQgKyAxXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVU
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsg
M10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07CisgICAgfQorICAgIAorICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9z
aXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGQ2ZjNhZTk0
ZTdjN2Q4MDhiNTdjMWZjYzQ0MjRjYjg4MTBiMTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNv
ZnR3YXJlLmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZS5oIgorCisjaW5jbHVk
ZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBj
KQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihjKSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oYyk7CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+
IDEpKV07Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9p
ZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVk
IGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0
IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxv
YXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBm
OworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdo
aWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkx
ID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAg
ICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChi
NCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRp
b24gPSBjbGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVz
dGluYXRpb247CisgICAgfQorfQorCisvLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0aGUg
Y29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5h
YmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9y
aXphdGlvbi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVu
c2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEs
IGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgc2NhbGVkSzE7Cisg
ICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAgICBzY2FsZWRLMSA9IGsxIC8g
MjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKKwor
ICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgeworICAgICAgICB1bnNpZ25lZCBj
aGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlv
bjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7CisgICAgICAgIGlm
IChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7CisgICAgICAg
IGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKKworICAgICAgICAqZGVz
dGluYXRpb24gPSByZXN1bHQ7CisgICAgICAgICsrc291cmNlOworICAgICAgICArK2Rlc3RpbmF0
aW9uOworICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitzdGF0aWMg
aW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5z
aWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCB1cHBlckxpbWl0ID0g
c3RkOjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwg
azMpICsgazQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0
ZDo6bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OworICAgIGlmICgoazQg
Pj0gMC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGlt
aXQgPD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYp
KSB7CisgICAgICAgIGlmIChrNCkgeworICAgICAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAg
ICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGlu
YXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAx
Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoazEpCisgICAgICAgICAgICAgICAg
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlv
biwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNv
dXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGs0KSB7CisgICAgICAg
IGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNl
LCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHM8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBr
MywgazQpOworICAgIH0KK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1B
cml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOworICAgIEFTU0VS
VChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvbi5sZW5ndGgoKSkpOworICAg
IC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2Fs
bHkuCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIEFTU0VSVCghKGxlbmd0aCAm
IDB4MykpOworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05lb24oc291cmNlLmRhdGEoKSwgZGVzdGlu
YXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyNlbHNlCisgICAgYXJpdGht
ZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7CisjZW5kaWYKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlBcml0
aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBd
LmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8g
b3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBp
eGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9IGdlb21ldHJ5
Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0LmltYWdlUmVjdCgpKTsKKyAg
ICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIWlucHV0UGl4ZWxBcnJheSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXQySW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFw
SW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQyLmltYWdlUmVjdCgpKTsKKyAgICBp
bnB1dDIuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0MkltYWdlUmVjdCksIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisKKyAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqaW5wdXRQ
aXhlbEFycmF5LCBvdXRwdXRQaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6YXBwbHlOb25Bcml0aG1ldGlj
U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VS
VChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgp
OworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJ
bWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbnB1dDJJbWFnZSA9IGlucHV0
Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSB8fCAhaW5wdXQySW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29u
dGV4dCgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICBhdXRvIGlucHV0
MkltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dDIuaW1hZ2VSZWN0KCksIG91
dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBzd2l0Y2ggKG1fY29tcG9zaXRlT3BlcmF0b3IpIHsK
KyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJ
bWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogeworICAgICAgICAvLyBBcHBsaWVzIG9ubHkg
dG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1
dC5pbWFnZVJlY3QoKTsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QyID0gaW5wdXQyLmltYWdlUmVj
dCgpOworICAgICAgICBhdXRvIG91dHB1dFJlY3QgPSBvdXRwdXQuaW1hZ2VSZWN0KCk7CisKKyAg
ICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbWFnZVJlY3Q7CisgICAgICAgIGRlc3RpbmF0
aW9uUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0Mik7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3Qob3V0cHV0UmVjdCk7CisgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byBhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAgICAgYWRqdXN0ZWREZXN0aW5hdGlvblJl
Y3QubW92ZUJ5KC1vdXRwdXRSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBhZGp1c3RlZERlc3Rp
bmF0aW9uUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChhZGp1c3RlZERlc3RpbmF0aW9uUmVj
dCk7CisKKyAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0OworICAgICAg
ICBzb3VyY2VSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBzb3Vy
Y2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KHNvdXJjZVJlY3QpOworCisgICAgICAgIGF1
dG8gc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7CisgICAgICAgIHNvdXJjZTJSZWN0Lm1v
dmVCeSgtaW1hZ2VSZWN0Mi5sb2NhdGlvbigpKTsKKyAgICAgICAgc291cmNlMlJlY3QgPSBnZW9t
ZXRyeS5tYXBJbWFnZVJlY3Qoc291cmNlMlJlY3QpOworCisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QsIHNv
dXJjZTJSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0
SW1hZ2UsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCB7IENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCwgSW50UmVjdChJ
bnRQb2ludCgpLCBpbnB1dDJJbWFnZS0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9y
OjpEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVRPUDoKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlu
cHV0MkltYWdlLCBpbnB1dDJJbWFnZVJlY3QpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QsIEludFJlY3QoSW50UG9pbnQo
KSwgaW5wdXRJbWFnZS0+bG9naWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VB
dG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5w
dXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlu
cHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0LCBJbnRSZWN0KEludFBvaW50KCksIGlucHV0SW1hZ2Ut
PmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9MSUdIVEVSOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNM
aWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgRkVDb21wb3NpdGU6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWNTb2Z0
d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOworICAgIHJldHVybiBhcHBseU5vbkFyaXRo
bWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdkNDJkMTcwZmYyMTU2MDlkMjgzZjY5YzY2YWZm
MGNmNmIxZDg3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcApAQCAt
MCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKKworI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvKgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCisgICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUgaW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0
IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor
ICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAorICAgICAgfCBCIHwgICAgICBDICAg
ICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAgICAgIHwgICB8CisgICAgICArLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBFICAgICAgICAgIHwKKyAgICAgICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIHJlZ2lvbiBDIGNvbnRhaW5zIHRob3NlIHBp
eGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IGNyb3NzaW5n
IHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisKKyAgIEV4YW1wbGU6CisgICAgICBJbWFnZSBz
aXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKworICAgICAgT3JkZXIgKGtlcm5lbCBtYXRyaXgg
c2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAgICAgVGFyZ2V0OiB4OjEsIHk6MworCisgICAg
ICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGFyZ2V0IGluc2lkZSB0aGUga2VybmVs
IG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAgICAgLi4uCisgICAgICAgIC4uLgorICAgICAg
ICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhpcyBjYXNlIGFyZSB0aGUgZm9sbG93aW5nOgor
ICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQgYW5kICh4MiwgeTIpIGlzIHRoZSBib3R0b20t
cmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cgeDIgYW5kIGNvbHVtbiB5MiBpcyBub3QgcGFy
dCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBvbmx5IHRob3NlICh4LCB5KSBwaXhlbHMsIHdo
ZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8IHkyCisKKyAgICAgIFJlZ2lvbiBBOiB4MTog
MCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAgIFJlZ2lvbiBCOiB4MTogMCwgeTE6IDMsIHgy
OiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4MTogMSwgeTE6IDMsIHgyOiA5LCB5MjogMTAK
KyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMsIHgyOiAxMCwgeTI6IDEwCisgICAgICBSZWdp
b24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5MjogMTAgKGVtcHR5IHJlZ2lvbikKKworICAg
U2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlucyBtb3N0IG9mIHRoZSBwaXhlbHMsIHdlIGlt
cGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0gdG8gY2FsY3VsYXRlIHRoZXNlIHZhbHVlcywg
Y2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4KKyAgIEZvciBvdGhlciByZWdpb25zLCBmYXN0
U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2ggY2FsbHMgZ2V0UGl4ZWxWYWx1ZSwKKyAgIHRv
IGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUgaW1hZ2UuIEluIGEgcmFyZSBzaXR1YXRpb25z
LCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJpZ2dlciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBp
eGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisgICBmdW5jdGlvbi4KKworICAgQWx0aG91Z2gg
dGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBpbiBjb21tb24sIEkgZGVjaWRlZCBub3QgdG8g
bWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9yIHRoZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkg
ZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRv
IHVuZGVyc3RhbmQuCisqLworCisvLyBQYXJhbGxlbGl6YXRpb24gcGFydHMKK3N0YXRpYyBjb25z
dGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJp
Y2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKworc3RydWN0IFBhaW50aW5nRGF0YSB7
CisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7CisgICAgVWludDhD
bGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWln
aHQ7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXplOworICAgIGZsb2F0IGRpdmlzb3I7Cisg
ICAgZmxvYXQgYmlhczsKKyAgICBJbnRQb2ludCB0YXJnZXRPZmZzZXQ7CisgICAgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlOworICAgIGJvb2wgcHJlc2VydmVBbHBoYTsKKyAgICBWZWN0b3I8ZmxvYXQ+
IGtlcm5lbE1hdHJpeDsKK307CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIg
Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXggPSAyNTUpCit7
CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNoYW5u
ZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4gbWF4OworICAgIHJldHVybiBjaGFubmVsOworfQor
CitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4
ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCB0b3RhbHNbNF0sIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJp
YXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1heEFs
cGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1sz
XSAvIGRpdmlzb3IgKyBiaWFzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKKyAg
ICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFsdWUodG90YWxzW2ldIC8g
ZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CisKKyAgICBpZiAocHJlc2VydmVBbHBoYVZhbHVl
cykgeworICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4
ZWwpKTsKKyAgICAgICAgKytwaXhlbDsKKyAgICB9IGVsc2UKKyAgICAgICAgZGVzdFBpeGVscy5z
ZXQocGl4ZWwrKywgbWF4QWxwaGEpOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNl
dEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0
LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCit7CisgICAgLy8gZWRnZSBt
b2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKKyAgICBpbnQgcGl4ZWwgPSAocGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGluZ0RhdGEud2lkdGggKyBwYWludGluZ0Rh
dGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGludCBrZXJuZWxJbmNyZWFzZSA9IGNsaXBS
aWdodCAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEua2VybmVsU2l6ZS53
aWR0aCgpIC0gMSkgKiA0OworICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBv
bmVudHMKKyAgICBmbG9hdCB0b3RhbHNbNF07CisKKyAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJl
IDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAgIEFTU0VSVChw
YWludGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0
b20gLSB5RW5kKScgbGluZXMKKyAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJ
bmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOworICAgIGludCBzdGFydEtlcm5lbFBpeGVs
ID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0
KTsKKworICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7CisgICAg
ICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7CisgICAgICAgICAg
ICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7
CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOworICAgICAg
ICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKworICAg
ICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CisgICAg
ICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKworICAg
ICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKKyAgICAgICAgICAgICAgICB0b3Rh
bHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNf
Y2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsr
KSk7CisgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1syXSAr
PSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZs
b2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKQorICAgICAgICAg
ICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxW
YWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRl
bShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7CisgICAgICAg
ICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsK
KyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7CisgICAg
ICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERlc3Rp
bmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0
UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5n
RGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICBzdGFy
dEtlcm5lbFBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNl
OworICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKKyAgICB9Cit9CisKK3N0
YXRpYyBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdE
YXRhLndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAg
cmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKworICAgIHN3aXRjaCAo
cGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7CisgICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQor
ICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6CisgICAgICAg
IGlmICh4IDwgMCkKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICBlbHNlIGlmICh4ID49IHBh
aW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgICAgIHggPSBwYWludGluZ0RhdGEud2lkdGggLSAx
OworICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgZWxzZSBp
ZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0
YS5oZWlnaHQgLSAxOworICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4
KSA8PCAyOworICAgIGNhc2UgRURHRU1PREVfV1JBUDoKKyAgICAgICAgd2hpbGUgKHggPCAwKQor
ICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7CisgICAgICAgIHggJT0gcGFpbnRp
bmdEYXRhLndpZHRoOworICAgICAgICB3aGlsZSAoeSA8IDApCisgICAgICAgICAgICB5ICs9IHBh
aW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKyAg
ICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9
CisKKy8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQworc3RhdGljIHZvaWQgc2V0T3V0ZXJQaXhl
bHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGlu
dCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGggKyB4MSkg
KiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOworICAgIGludCB3aWR0aCA9IHgyIC0geDE7
CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBwYWludGluZ0RhdGEudGFyZ2V0T2Zm
c2V0LngoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsK
KyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZz
ZXQueSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndpZHRoIC0gd2lkdGgp
ICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCisgICAg
ZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKKyAgICBBU1NFUlQocGFpbnRpbmdEYXRh
LmRpdmlzb3IpOworCisgICAgZm9yIChpbnQgeSA9IGhlaWdodDsgeSA+IDA7IC0teSkgeworICAg
ICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAtLXgpIHsKKyAgICAgICAgICAgIGludCBr
ZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKKyAgICAg
ICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgICAg
IGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBpeGVsWTsKKyAgICAgICAgICAgIGludCB3
aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CisKKyAgICAgICAgICAgIHRv
dGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOworICAgICAgICAgICAgdG90
YWxzWzJdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisKKyAgICAgICAgICAgIHdo
aWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IHBpeGVsSW5kZXgg
PSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkp
OworICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVd
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4
ZWxJbmRleCkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOworICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXBh
aW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXggPj0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
cGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKKyAgICAg
ICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkg
eworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsK
KyAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7CisgICAgICAgICAgICAgICAgICAg
IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4
ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWlu
dGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxY
OworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKKyAgICAgICAgc3RhcnRL
ZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICAgICAgKytzdGFydEtlcm5lbFBp
eGVsWTsKKyAgICB9Cit9CisKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHlTb2Z0d2FyZShG
aWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5z
aXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBh
dXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKG1fcHJlc2VydmVBbHBo
YSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA6IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBn
ZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3Qo
KSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlucHV0UGl4ZWxBcnJheTsKKyAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5n
ZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIElu
dFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBlbHNl
CisgICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IEludFNpemUob3V0
cHV0LmxvZ2ljYWxTaXplKCkpOworCisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsK
KyAgICAgICAgKmlucHV0UGl4ZWxBcnJheSwKKyAgICAgICAgb3V0cHV0UGl4ZWxBcnJheSwKKyAg
ICAgICAgcGFpbnRTaXplLndpZHRoKCksCisgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKKyAg
ICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rpdmlzb3IsCisgICAgICAgIG1fYmlhcyAq
IDI1NSwKKyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisgICAgICAgIG1fZWRnZU1vZGUsCisgICAg
ICAgIG1fcHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZs
b2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICB9OworCisgICAgLy8gRHJhd2luZyBmdWxseSBjb3Zl
cmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAtIG1fa2Vy
bmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhlaWdodCgp
IC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworCisgICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xp
cEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVk
IGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBh
aW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAocGFpbnRTaXplLndpZHRoKCkg
KiBwYWludFNpemUuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgeworICAgICAg
ICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7CisgICAgICAgIGludCBjaHVu
a0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKKworICAgICAgICBD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4KSB7
CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKKyAgICAgICAgICAg
IGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJvdHRv
bSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOworICAgICAgICB9KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBC
b3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0
LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOworICAg
IGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWlu
dGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwor
ICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBzZXRPdXRl
clBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBw
YWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwg
bV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFp
bnRTaXplLndpZHRoKCkpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xp
cFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9t
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTM5MDMyOWQ2N2JiMTkxOTA0N2NiMjBiOWRhNGFhYWZhMjU5MGQ3OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgor
I2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZz
ZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorewor
ICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAgIHJldHVybiB4ICogYnl0
ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKK30KKworYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6
YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKKyAgICAKKyAgICBBU1NF
UlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQo
KTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1
dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1
ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJ
bWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisgICAgYXV0
byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChvdXRwdXRJbWFnZVJlY3Qp
KTsKKyAgICAKKyAgICBhdXRvIG91dHB1dDJJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJl
Y3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dDIuaW1hZ2VSZWN0KCkpOworICAgIC8vIFRoZSBj
YWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVy
Zm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KKyAgICBhdXRvIGlu
cHV0MlBpeGVsQnVmZmVyID0gaW5wdXQyLmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5nSW50UmVjdChvdXRwdXQySW1hZ2VSZWN0
KSk7CisKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIgfHwgIWlucHV0MlBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoaW5wdXRQaXhlbEJ1ZmZlci0+bGVu
Z3RoKCkgPT0gaW5wdXQyUGl4ZWxCdWZmZXItPmxlbmd0aCgpKTsKKworICAgIGF1dG8gcGFpbnRT
aXplID0gZXhwYW5kZWRJbnRTaXplKG91dHB1dC5sb2dpY2FsU2l6ZSgpKTsKKworICAgIGF1dG8g
c2NhbGUgPSBnZW9tZXRyeS5tYXBJbWFnZVNpemUoeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAg
IGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOworICAgIGZsb2F0
IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKyAgICBmbG9hdCBzY2Fs
ZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKKyAgICBmbG9hdCBzY2FsZWRP
ZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7CisgICAgCisgICAgaW50IGRpc3Bs
YWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOworICAgIGludCBkaXNwbGFjZW1lbnRD
aGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKworICAgIGludCByb3dCeXRlcyA9IHBhaW50U2l6
ZS53aWR0aCgpICogNDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRTaXplLmhlaWdo
dCgpOyArK3kpIHsKKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsK
KworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsK
KyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAq
IDQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0
PGludD4oc2NhbGVGb3JDb2xvclggKiBpbnB1dDJQaXhlbEJ1ZmZlci0+aXRlbShkZXN0aW5hdGlv
bkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CisgICAgICAg
ICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogaW5w
dXQyUGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5u
ZWxZKSArIHNjYWxlZE9mZnNldFkpOworCisgICAgICAgICAgICB1bnNpZ25lZCogb3V0cHV0UGl4
ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRh
KCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKKyAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNY
ID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhl
aWdodCgpKSB7CisgICAgICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gMDsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKm91dHB1dFBp
eGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5k
YXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODA0ZTllZWEyZjlmMWZjYjcwMTI0N2JjZGYzZGI5N2FiZjU2NWZkMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisj
aW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVE
cm9wU2hhZG93OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9
IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVm
ZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRw
dXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBibHVyUmFkaXVzID0g
MiAqIGdlb21ldHJ5Lm1hcFJlc29sdmVkSW1hZ2VTaXplKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0
ZERldmlhdGlvblkgfSk7CisgICAgYXV0byBvZmZzZXQgPSBnZW9tZXRyeS5tYXBSZXNvbHZlZElt
YWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gaW5w
dXQuaW1hZ2VSZWN0KCk7CisgICAgaW5wdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJl
Y3QoaW5wdXRJbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBhdXRvIGlucHV0
SW1hZ2VSZWN0V2l0aE9mZnNldCA9IGlucHV0SW1hZ2VSZWN0OworICAgIGlucHV0SW1hZ2VSZWN0
V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBhdXRvJiBvdXRwdXRDb250ZXh0ID0gb3V0
cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93
T3BhY2l0eSk7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2Us
IGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRBbHBoYSgx
KTsKKworICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1f
c2hhZG93Q29sb3IpOworCisgICAgYXV0byBmb3JtYXQgPSBQaXhlbEJ1ZmZlckZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
b3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIGF1dG8gc2hhZG93QXJlYSA9IEludFJlY3QgeyBJ
bnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+bG9naWNhbFNpemUoKSB9OworICAgIGF1dG8gc2hhZG93
UGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dB
cmVhKTsKKyAgICBpZiAoIXNoYWRvd1BpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJyYXkgPSBzaGFkb3dQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc2hhZG93UGl4ZWxBcnJheS5k
YXRhKCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBzaGFkb3dQaXhlbEJ1ZmZlci0+
c2l6ZSgpLndpZHRoKCkpOworCisgICAgb3V0cHV0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpzaGFk
b3dQaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAgICBvdXRwdXRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOworICAgIG91dHB1dENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0LmxvZ2ljYWxTaXpl
KCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKworICAgIG91dHB1dENv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNv
ZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmJlYWUxMGJlNTBlZWNmMTk5
NGI3ZWY1Yzk0YWQ1MWY2MDk1ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVGbG9vZDo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0Lmlt
YWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byBjb2xvciA9IG1fZmxvb2RDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeShtX2Zsb29kT3BhY2l0eSk7CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVj
dChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRJbWFnZS0+bG9naWNhbFNpemUoKSksIGNv
bG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODU1MTQ2MGY3OGQ1ZDZiNDJiNmU2MWE5MDg4NTM2NWNmNDc1NGRlYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCisK
KyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2lu
Y2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0
aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQor
eworICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVH
YXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgorICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlv
bikgeworICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAg
ICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOworICAgICAgICAgICAgZGVsdGFSaWdodCA9
IHJhZGl1cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbHRh
TGVmdCA9IHJhZGl1cyAvIDI7CisgICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVs
dGFMZWZ0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAg
aWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCsrOworICAgICAgICAg
ICAgZGVsdGFSaWdodC0tOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoK
KyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhUmlnaHQrKzsK
KyAgICAgICAgICAgIHJhZGl1cysrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCitz
dGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCisgICAg
dW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQm
IHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBp
bnQmIG1heEtlcm5lbFNpemUpCit7CisgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1Bp
eGVsQXJyYXkuZGF0YSgpOworICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRh
dGEoKTsKKyAgICAvLyBNZW1vcnkgYWxpZ25tZW50IGlzOiBSR0JBLCB6ZXJvLWluZGV4IGJhc2Vk
LgorICAgIGNvbnN0IGludCBjaGFubmVsID0gMzsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
ZWZmZWN0SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsK
KyAgICAgICAgaW50IHN1bSA9IDA7CisKKyAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgorICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgeworICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7CisgICAgICAgICAgICBjb25z
dCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zmc2V0OworICAgICAgICAgICAgc3VtICs9
IHNyY1B0cltjaGFubmVsXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJsdXJyaW5nLgorICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlICsgY2hhbm5lbDsK
KyAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7
CisgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtIC8gZHgpOwor
CisgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisgICAgICAgICAgICBpZiAoeCA+PSBkeExl
ZnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zm
c2V0IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgIHN1bSAtPSAqc3Jj
UHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZl
Y3RXaWR0aCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxC
eXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50
OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7CisgICAgICAgICAgICAgICAgc3Vt
ICs9ICpzcmNQdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKKyAgICB1bnNpZ25lZCBkeCwg
aW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQg
ZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQoreworICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4o
ZHhSaWdodCwgZWZmZWN0V2lkdGgpOworICAgIGlmIChhbHBoYUltYWdlKQorICAgICAgICByZXR1
cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhM
ZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVp
Z2h0LCBtYXhLZXJuZWxTaXplKTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQ
aXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5k
YXRhKCk7CisKKyAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlz
IEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2ls
bCBiZQorICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgorICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50IGxpbmUgPSB5ICog
c3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1
bUEgPSAwOworCisgICAgICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7CisgICAg
ICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1heEtlcm5lbFNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisgICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRy
Kys7CisgICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAg
c3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCbHVycmluZy4KKyAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOworICAgICAgICAgICAgICAg
IHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7CisKKyAgICAgICAg
ICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOworICAg
ICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7
CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAv
IGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
QSAvIGR4KTsKKworICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KKyAgICAgICAgICAg
ICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVm
dE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAgICAg
ICBzdW1HIC09IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJb
Ml07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zm
c2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBz
dW1SICs9IHNyY1B0clswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07
CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOworICAgICAgICAgICAgICAg
ICAgICBzdW1BICs9IHNyY1B0clszXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgJ3dyYXAnIGhlcmUuCisgICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VN
b2RlICdkdXBsaWNhdGUnLgorICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVm
dCA9IHNyY0RhdGEgKyBsaW5lOworICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVl
UmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwor
CisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAvLyBJ
cyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisKKyAgICAgICAgICAgICAg
ICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0
WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07CisgICAg
ICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaSA+PSBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VW
YWx1ZVJpZ2h0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0
WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOworICAg
ICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOworICAg
ICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAg
c3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEJsdXJy
aW5nLgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBz
dHJpZGU7CisgICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVs
Qnl0ZU9mZnNldDsKKworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN1bVIgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0
aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOworCisgICAgICAgICAgICAgICAgLy8gU2hp
ZnQga2VybmVsLgorICAgICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsKKyAgICAgICAgICAgICAgICAgICAg
c3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVk
Z2VWYWx1ZUxlZnRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVm
dFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOworICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07CisgICAgICAgICAg
ICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CIC09
IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVj
dFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07
CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07CisgICAgICAg
ICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZz
ZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90
KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsK
KyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUEgKz0gc3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3RhdGljIGlubGlu
ZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJp
ZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKK3sKKyAgICBpZiAoIWlvQnVm
ZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZWZmZWN0V2lkdGgg
PD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIG11
c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgorICAgIGlmIChrZXJuZWxTaXplICUgMiAhPSAx
KQorICAgICAgICBrZXJuZWxTaXplICs9IDE7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdElu
QnVmZmVyOworICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9C
dWZmZXIuZGF0YSgpKTsKKyAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwor
ICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZlY3RJbkJ1
ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVm
ZmVyOworICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5kYXRhKCk7CisgICAg
ZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7CisgICAgZWZmZWN0T3V0QnVmZmVy
LmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZlY3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBz
dHJpZGU7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVy
IGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFsIGZsYWcuIHZJbWFn
ZSB3aWxsIHJldHVybgorICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNo
IGFyZSBhbGwgbmVnYXRpdmUpLgorICAgIHNpemVfdCB0bXBCdWZmZXJTaXplID0gdkltYWdlQm94
Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAw
LCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCB8IGt2SW1h
Z2VHZXRUZW1wQnVmZmVyU2l6ZSk7CisgICAgaWYgKHRtcEJ1ZmZlclNpemUgPD0gMCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJT
aXplKTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZl
ZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwg
MCwga3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZl
ZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxT
aXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7CisgICAgdkltYWdlQm94Q29u
dm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZm
ZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsK
KyAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7CisKKyAgICAvLyBUaGUgZmluYWwgcmVzdWx0
IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisgICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0
aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCks
IHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Cit9CisjZW5kaWYKKworc3Rh
dGljIGlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwg
dW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9v
bCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgZHhMZWZ0
ID0gMDsKKyAgICBpbnQgZHhSaWdodCA9IDA7CisgICAgaW50IGR5TGVmdCA9IDA7CisgICAgaW50
IGR5UmlnaHQgPSAwOworICAgIAorICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBmcm9tQnVmZmVyID0g
JmlvQnVmZmVyOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVy
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgaWYgKGtlcm5l
bFNpemVYKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgICAgICAg
ICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1
ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUs
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVs
U2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFp
bnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQorICAgICAgICAgICAgYm94
Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0
LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIGlzQWxw
aGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1
ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtlcm5lbFNpemVZKSB7
CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgICAgICAgICBpZiAoIWlz
QWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRv
QnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6
ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5
TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53
aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQorICAgICAgICAgICAgYm94Qmx1cigqZnJv
bUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUs
IDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlzQWxwaGFJbWFnZSwg
ZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9C
dWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91
bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIGlmICgmaW9CdWZmZXIgIT0gZnJvbUJ1ZmZl
cikgeworICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJvbUJ1ZmZlci0+bGVu
Z3RoKCkpOworICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9tQnVmZmVyLT5kYXRh
KCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xh
bXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQg
a2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0
aCgpOworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5l
bFNpemVZICYmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IGVkZ2VNb2RlID09IEVER0VN
T0RFX0RVUExJQ0FURSkpIHsKKyAgICAgICAgYWNjZWxlcmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRt
cFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWlu
dFNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBz
dGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJu
ZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworfQor
CisjaWYgIVVTRShBQ0NFTEVSQVRFKQorc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQ
bGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBJbnRTaXplIHBhaW50
U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKKyAgICBwYXJhbWV0
ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJy
YXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwg
cGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Cit9CisjZW5kaWYKKworc3RhdGlj
IGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBV
aW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVu
c2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdl
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisjaWYgIVVTRShBQ0NFTEVSQVRFKQorICAgIGlu
dCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKKyAgICBpbnQgZXh0cmFIZWlnaHQg
PSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworICAgIGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0g
KHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0
RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CisKKyAgICBpZiAo
b3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxh
dGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwg
b3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMu
bnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChqb2JzID4gMSkgeworICAgICAgICAgICAgLy8g
U3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBm
ZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCisgICAgICAgICAg
ICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhh
bmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCisgICAgICAgICAgICBjb25z
dCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOworICAgICAgICAg
ICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwor
CisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9i
ID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAg
ICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOworCisgICAgICAgICAgICAgICAgaW50IHN0
YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxv
Y2tIZWlnaHQ7CisgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBj
dXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CisKKyAgICAgICAgICAgICAgICBpbnQg
YmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7CisgICAgICAgICAgICAgICAg
aWYgKCFqb2IpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZp
b0J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1w
UGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQoYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJy
YXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwor
ICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBp
b0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBwYWludFNpemUud2lk
dGgoKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKKyAg
ICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKworICAgICAgICAgICAgLy8g
Q29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgY3VycmVu
dFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsgam9iIDwgam9iczsgam9iKysp
IHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFy
YWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAgICAgIGludCBzb3VyY2VPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uT2Zmc2V0OworICAgICAgICAgICAg
ICAgIGludCBzaXplOworICAgICAgICAgICAgICAgIGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0g
am9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OworCisg
ICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0ZWRCbG9ja0hlaWdodDsKKyAgICAgICAg
ICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdodCAqIHNjYW5saW5lOworICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVudFkgKiBzY2FubGluZTsKKyAgICAgICAg
ICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdodCAqIHNjYW5saW5lOworCisgICAgICAg
ICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJh
bXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VPZmZzZXQsIHNpemUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZhbGxiYWNr
IHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0KKyNlbmRpZgorCisgICAgLy8gVGhlIHNl
bGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21l
IHBsYXRmb3Jtcy4KKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxB
cnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwg
ZWRnZU1vZGUpOworfQorCitib29sIEZFR2F1c3NpYW5CbHVyOjphcHBseVNvZnR3YXJlKEZpbHRl
ckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUo
KSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8g
b3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBp
eGVsQnVmZmVyLT5kYXRhKCk7CisgICAgCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9t
ZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7
CisKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChvdXRwdXRJbWFnZVJlY3QpLCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghbV9zdGREZXZpYXRpb25YICYmICFtX3N0
ZERldmlhdGlvblkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBrZXJuZWxTaXpl
ID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1f
c3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25ZIH0pKTsKKyAgICBhdXRvIHBhaW50U2l6ZSA9
IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworCisgICAgYXV0byB0bXBJbWFnZURhdGEg
PSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJl
YSgpICogNCk7CisgICAgaWYgKCF0bXBJbWFnZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHBsYXRmb3JtQXBwbHkob3V0cHV0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2Vy
bmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUsIG91dHB1dC5p
c0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZjZlMDM1YTU2ODc5NTc5YTRkNWViNTNiMTllZTIwMmJkZjk3
ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMzEzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIx
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKworI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rv
ci5oIgorI2luY2x1ZGUgIkxpZ2h0aW5nRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpv
YnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgUGxhdGZvcm1BcHBseUdlbmVy
aWNQYXJhbWV0ZXJzIHsKKyAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBMaWdodFNvdXJjZVBh
aW50RGF0YSBwYWludERhdGE7CisgICAgaW50IHlTdGFydDsKKyAgICBpbnQgeUVuZDsKK307CisK
Ky8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0
aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50Lgorc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRp
djIgPSAtMSAvIDIuZjsKK3N0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEg
LyAzLmY7CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwor
c3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKKworc3RhdGlj
IGlubGluZSB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdE
YXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSYgcGFpbnREYXRhLCBpbnQgeCwg
aW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0
b3IsIGZsb2F0IGFscGhhKQoreworICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNj
YWxlOworICAgIExpZ2h0U291cmNlUGl4ZWxEYXRhIHBpeGVsRGF0YSA9IGRhdGEuc291cmNlLT5j
b21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEocGFpbnREYXRhLCB4LCB5LCB6KTsKKworICAgIGZs
b2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7Cisg
ICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJl
cXVlbnQgY2FzZS4KKyAgICAgICAgaWYgKGRhdGEudHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlm
ZnVzZUNvbnN0YW50ICogcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIHBpeGVsRGF0YS5saWdo
dFZlY3Rvckxlbmd0aDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBGbG9hdFBvaW50M0Qg
aGFsZndheVZlY3RvciA9IHsKKyAgICAgICAgICAgICAgICBwaXhlbERhdGEubGlnaHRWZWN0b3Iu
eCgpLAorICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5saWdodFZlY3Rvci55KCksCisgICAgICAg
ICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLnooKSArIHBpeGVsRGF0YS5saWdodFZlY3Rv
ckxlbmd0aAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JM
ZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGRhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRh
LnNwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5n
dGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRh
dGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVj
dG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKKyAgICAgICAgICAgIGZh
Y3RvclggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCisgICAg
ICAgICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3IuaGVpZ2h0KCkgKiBkYXRhLnN1cmZhY2VT
Y2FsZSwKKyAgICAgICAgICAgIDEuMGYKKyAgICAgICAgfTsKKyAgICAgICAgZmxvYXQgbm9ybWFs
VmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOworCisgICAgICAgIGlmIChkYXRh
LnR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3Ig
KiBwaXhlbERhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIHBpeGVsRGF0
YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRmxvYXRQ
b2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CisgICAgICAgICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0
VmVjdG9yLngoKSwKKyAgICAgICAgICAgICAgICBwaXhlbERhdGEubGlnaHRWZWN0b3IueSgpLAor
ICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5saWdodFZlY3Rvci56KCkgKyBwaXhlbERhdGEubGln
aHRWZWN0b3JMZW5ndGgKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmbG9hdCBoYWxmd2F5
VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChk
YXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3Ip
IC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29u
c3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0
b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgZGF0YS5zcGVjdWxhckV4cG9uZW50KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsaWdodFN0cmVuZ3RoID4gMSkKKyAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IDE7CisgICAgaWYgKGxpZ2h0U3RyZW5ndGggPCAwKQorICAgICAgICBs
aWdodFN0cmVuZ3RoID0gMDsKKworICAgIHVpbnQ4X3QgcGl4ZWxWYWx1ZVszXSA9IHsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIHBpeGVsRGF0YS5jb2xvclZl
Y3Rvci54KCkgKiAyNTUuMGYpLAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0
cmVuZ3RoICogcGl4ZWxEYXRhLmNvbG9yVmVjdG9yLnkoKSAqIDI1NS4wZiksCisgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBwaXhlbERhdGEuY29sb3JWZWN0b3Iu
eigpICogMjU1LjBmKQorICAgIH07CisgICAgCisgICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBp
eGVsVmFsdWUsIDMsIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbChp
bnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlUGFp
bnREYXRhJiBwYWludERhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK3sKKyAgICBzZXRQaXhlbEludGVybmFsKG9m
ZnNldCwgZGF0YSwgcGFpbnREYXRhLCB4LCB5LCBmYWN0b3JYLCBmYWN0b3JZLCBub3JtYWwyRFZl
Y3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
fQorCisvLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgc2FtZSBw
aXhlbCBidWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRoZSBhbHBoYSBjaGFubmVsLCBhbmQgd3Jp
dGVzIHRoZSBub24tYWxwaGEgY2hhbm5lbHMuCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1B
cHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291
cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCBzdGFydFksIGludCBlbmRZKQoreworICAgIC8v
IE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdlIHJlYWQgZnJvbSB0aGUgcHJldmlvdXMg
cm93IGluIHRoZSBsb29wLgorICAgIEFTU0VSVChzdGFydFkpOworICAgIEFTU0VSVChlbmRZID4g
c3RhcnRZKTsKKworICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKKyAg
ICAgICAgaW50IHJvd1N0YXJ0T2Zmc2V0ID0geSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7CisgICAgICAgIGludCBwcmV2aW91c1Jvd1N0YXJ0ID0gcm93U3RhcnRPZmZzZXQgLSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgbmV4dFJvd1N0YXJ0
ID0gcm93U3RhcnRPZmZzZXQgKyBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworCisg
ICAgICAgIC8vIGFscGhhV2luZG93IGlzIGEgbG9jYWwgY2FjaGUgb2YgYWxwaGEgdmFsdWVzLgor
ICAgICAgICAvLyBGaWxsIHRoZSB0d28gcmlnaHQgY29sdW1ucyBwdXR0aW5nIHRoZSBsZWZ0IGVk
Z2UgdmFsdWUgaW4gdGhlIGNlbnRlciBjb2x1bW4uCisgICAgICAgIC8vIEZvciBlYWNoIHBpeGVs
LCB3ZSBzaGlmdCBlYWNoIHJvdyBsZWZ0IHRoZW4gZmlsbCB0aGUgcmlnaHQgY29sdW1uLgorICAg
ICAgICBBbHBoYVdpbmRvdyBhbHBoYVdpbmRvdzsKKyAgICAgICAgYWxwaGFXaW5kb3cuc2V0VG9w
KGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldFRvcFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHBy
ZXZpb3VzUm93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworCisg
ICAgICAgIGFscGhhV2luZG93LnNldENlbnRlcihkYXRhLnBpeGVscy0+aXRlbShyb3dTdGFydE9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgYWxwaGFXaW5kb3cuc2V0Umln
aHQoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGFscGhhV2luZG93LnNldEJvdHRvbShkYXRhLnBp
eGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAg
IGFscGhhV2luZG93LnNldEJvdHRvbVJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisKKyAgICAgICAgaW50IG9m
ZnNldCA9IHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNp
emUpIHsKKyAgICAgICAgICAgIGFscGhhV2luZG93LnNoaWZ0KCk7CisgICAgICAgICAgICBzZXRQ
aXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQs
IGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1hbChvZmZzZXQsIGFscGhhV2luZG93KSwg
YWxwaGFXaW5kb3cuY2VudGVyKCkpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQ
YXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
cGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnREYXRhLCBwYXJhbWV0ZXJzLT55U3Rh
cnQsIHBhcmFtZXRlcnMtPnlFbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1B
cHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBh
aW50RGF0YSBwYWludERhdGEpCit7CisgICAgdW5zaWduZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOworICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBy
b3dzVG9Qcm9jZXNzIC8gODsKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3Rk
OjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Q
cm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOworICAgIGlm
IChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFs
bGVsIGpvYnMKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQ
YXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyLCBvcHRp
bWFsVGhyZWFkTnVtYmVyKTsKKworICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkK
KyAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKKyAgICAgICAg
aWYgKGpvYiA+IDEpIHsKKyAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAieVN0ZXAi
LXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5
IGxhcmdlciBzaW5jZQorICAgICAgICAgICAgLy8geVN0ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4g
VGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEi
LgorICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0gcm93c1RvUHJvY2VzcyAvIGpvYjsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJhID0gcm93c1RvUHJvY2VzcyAlIGpvYjsK
KworICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7CisgICAgICAgICAgICBmb3IgKC0tam9iOyBq
b2IgPj0gMDsgLS1qb2IpIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
cmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7CisgICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50
RGF0YSA9IHBhaW50RGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0
OworICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8geVN0ZXAg
KyAxIDogeVN0ZXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnlFbmQgPSB5U3RhcnQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJl
YWRlZCBtb2RlLgorICAgIH0KKworICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoZGF0YSwg
cGFpbnREYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBM
aWdodFNvdXJjZVBhaW50RGF0YSYgcGFpbnREYXRhKQoreworICAgIC8vIFRoZSBzZWxlY3Rpb24g
aGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9y
bXMuCisjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxF
UihHQ0NfQ09NUEFUSUJMRSkKKyAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludERhdGEp
OworI2Vsc2UKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludERhdGEpOworI2Vu
ZGlmCit9CisKK3N0YXRpYyBib29sIGRyYXdMaWdodGluZyhjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmNvbG9yLnRvQ29sb3JDb21wb25l
bnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOworICAgIExpZ2h0U291
cmNlUGFpbnREYXRhIHBhaW50RGF0YSA9IGRhdGEuc291cmNlLT5jb21wdXRlTGlnaHRTb3VyY2VQ
YWludERhdGEoRmxvYXRQb2ludDNEKHIsIGcsIGIpKTsKKworICAgIC8vIFRvcCBsZWZ0LgorICAg
IGludCBvZmZzZXQgPSAwOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCAw
LCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNl
dCkpOworCisgICAgLy8gVG9wIHJpZ2h0LgorICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnREYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOworCisgICAgLy8gQm90dG9t
IGxlZnQuCisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWlu
dERhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3Rv
cjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7CisKKyAgICAvLyBCb3R0b20g
cmlnaHQuCisgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJv
dHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOworCisgICAgaWYgKGRhdGEud2lkdGhEZWNyZWFzZWRC
eU9uZSA+PSAyKSB7CisgICAgICAgIC8vIFRvcCByb3cuCisgICAgICAgIG9mZnNldCA9IGNQaXhl
bFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludERhdGEsIHgsIDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBk
YXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKKworICAgICAgICAvLyBCb3R0b20gcm93LgorICAg
ICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQor
ICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIHgsIGRhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRv
bVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSA+PSAyKSB7CisgICAgICAgIC8vIExlZnQgY29sdW1uLgorICAgICAgICBvZmZzZXQg
PSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB5ID0g
MTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50RGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVm
dENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKworICAgICAgICAvLyBSaWdodCBjb2x1bW4uCisgICAg
ICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVs
U2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQorICAg
ICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1
bW5Ob3JtYWwob2Zmc2V0KSk7CisgICAgfQorCisgICAgaWYgKGRhdGEud2lkdGhEZWNyZWFzZWRC
eU9uZSA+PSAyICYmIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPj0gMikgeworICAgICAgICAv
LyBJbnRlcmlvciBwaXhlbHMuCisgICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0YSwgcGFpbnREYXRh
KTsKKyAgICB9CisKKyAgICBpbnQgbGFzdFBpeGVsID0gKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaWYgKGRhdGEu
dHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQ
aXhlbFNpemUpCisgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkg
Kz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5p
dGVtKGkpOworICAgICAgICAgICAgdWludDhfdCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAx
KTsKKyAgICAgICAgICAgIHVpbnQ4X3QgYTMgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Cisg
ICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRvIG1heChhMSwgYTIsIGEzKQorICAgICAg
ICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6
IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1h
Z2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVy
R2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09
IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBvdXRw
dXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxC
dWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFw
SW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5wdXQuaW1hZ2VSZWN0KCkpOworCisgICAg
aW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKworICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhz
IG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCisgICAgLy8g
c3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChs
aWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5l
bFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KKyAgICAv
LyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRh
dGlvbgorCisgICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShvdXRwdXQubG9naWNhbFNpemUoKSk7
CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90
aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBj
YXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCisgICAgaWYgKHNpemUud2lkdGgoKSA8
PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBM
aWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmNvbG9yID0gbV9jb2xvcjsKKyAgICBkYXRhLnN1
cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOworICAgIGRhdGEuZGlmZnVzZUNv
bnN0YW50ID0gbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAgZGF0YS5zcGVjdWxhckNvbnN0YW50ID0g
bV9zcGVjdWxhckNvbnN0YW50OworICAgIGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9IG1fc3BlY3Vs
YXJFeHBvbmVudDsKKyAgICBkYXRhLnNvdXJjZSA9ICZtX3NvdXJjZTsKKyAgICBkYXRhLm9wZXJh
dGluZ0NvbG9yU3BhY2UgPSAmb3BlcmF0aW5nQ29sb3JTcGFjZSgpOworICAgIGRhdGEudHlwZSA9
IHR5cGUoKTsKKworICAgIGRhdGEucGl4ZWxzID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7
CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gc2l6ZS53aWR0aCgpIC0gMTsKKyAgICBk
YXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gc2l6ZS5oZWlnaHQoKSAtIDE7CisKKyAgICBkcmF3
TGlnaHRpbmcoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZDQ4NTJjOTRlZmJhMzEzYzdmYzlhYTg3YTAwZWE5MjFiMmUwYjIzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisKKyNpbmNsdWRlICJGaWx0
ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVy
SW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBw
bHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgcmVzdWx0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFpbnB1dHMuaXNFbXB0eSgpKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQu
aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOworCisgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykgeworICAgICAgICBh
dXRvIGltYWdlQnVmZmVyID0gaW5wdXQtPmltYWdlQnVmZmVyKCk7CisgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBpbWFn
ZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQtPmltYWdlUmVjdCgpLCByZXN1bHQu
aW1hZ2VSZWN0KCkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xv
Z3lTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzMWViOTM1ZGM3N2M1ZjgxMjhjN2Q0NDhkNjAy
N2I3NTk1MWVhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCkBAIC0wLDAg
KzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgorCisjaW5jbHVkZSAiQ29sb3JDb21w
b25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21l
dHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZl
Y3Rvci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Cisj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHsKKyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9y
cGhvbG9neU9wZXJhdG9yOworICAgIGludCByYWRpdXNYOworICAgIGludCByYWRpdXNZOworCisg
ICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7CisgICAgVWludDhDbGFt
cGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7
Cit9OworCitzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgeworICAgIHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhJiwgaW50LCBpbnQpPiBmaWxsUmVn
aW9uOworICAgIGludCBzdGFydFk7CisgICAgaW50IGVuZFk7CisgICAgY29uc3QgTW9ycGhvbG9n
eVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworfTsKKwordXNpbmcgQ29sdW1uRXh0cmVtYSA9
IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4sIDE2PjsKKworc3RhdGljIGlubGlu
ZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKQoreworICAgIHJl
dHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OworfQorCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6
UkdCQSBwaXhlbCkKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhl
bCkpOworfQorCitpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29s
b3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50
cykKK3sKKyAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8
U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Cit9CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lP
cGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4m
IGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYikKK3sKKyAgICBpZiAobW9y
cGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKKyAgICAgICAg
cmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKKworICAgIHJldHVybiBwZXJDb21wb25lbnRN
YXgoYSwgYik7Cit9CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3Bl
cmF0b3I+CitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5F
eHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGlu
dCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCit7CisgICAgYXV0byBleHRyZW11bSA9IG1h
a2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhl
bEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOworCisgICAgZm9yIChpbnQgeSA9IHlT
dGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKKyAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xv
ckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5
SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDxtb3Jw
aG9sb2d5T3BlcmF0b3I+KGV4dHJlbXVtLCBwaXhlbCk7CisgICAgfQorICAgIHJldHVybiBleHRy
ZW11bTsKK30KKworQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3IgbW9y
cGhvbG9neU9wZXJhdG9yKQoreworICAgIGlmIChtb3JwaG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFKQorICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVN
T1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQs
IHdpZHRoKTsKKworICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKK30KKwor
dGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcj4KK0FMV0FZU19J
TkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENv
bHVtbkV4dHJlbWEmIGtlcm5lbCkKK3sKKyAgICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQorICAgICAgICBl
eHRyZW11bSA9IG1pbk9yTWF4PG1vcnBob2xvZ3lPcGVyYXRvcj4oZXh0cmVtdW0sIGtlcm5lbFtp
XSk7CisKKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisKK0FMV0FZU19JTkxJTkUgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtl
cm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKK3sKKyAgICBpZiAo
bW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKKyAgICAg
ICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2Vy
bmVsKTsKKworICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
RElMQVRFPihrZXJuZWwpOworfQorCitzdGF0aWMgdm9pZCBmaWxsUmVnaW9uKGNvbnN0IE1vcnBo
b2xvZ3lQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7
CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgY29uc3QgYXV0byYgc3JjUGl4ZWxB
cnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKKyAgICBhdXRvJiBkc3RQaXhlbEFy
cmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OworCisgICAgY29uc3QgaW50IHJhZGl1
c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKKyAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50
aW5nRGF0YS5yYWRpdXNZOworICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0
aDsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKworICAgIEFT
U0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQo
c3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7CisKKyAgICBD
b2x1bW5FeHRyZW1hIGV4dHJlbWE7CisgICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDIgKiByYWRpdXNYICsgMSk7CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsg
Kyt5KSB7CisgICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVz
WSk7CisgICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVz
WSArIDEpOworCisgICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOworCisgICAgICAgIC8vIFdlIHN0
YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1gg
Y29sdW1ucy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCisgICAg
ICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5
UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEubW9ycGhvbG9neU9w
ZXJhdG9yKSk7CisKKyAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2Yg
bmV4dCBjb2x1bW4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Cisg
ICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKKyAgICAgICAgICAgICAgICBleHRy
ZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJh
ZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVy
YXRvcikpOworCisgICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCisgICAgICAgICAgICAgICAg
ZXh0cmVtYS5yZW1vdmUoMCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFy
cmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4
ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRp
bmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpLnZhbHVlOworICAgICAgICB9CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
KiBwYXJhbSkKK3sKKyAgICBwYXJhbS0+ZmlsbFJlZ2lvbigqcGFyYW0tPnBhaW50aW5nRGF0YSwg
cGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworfQorCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFw
cGx5KGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICAv
LyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNv
bmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgorICAgIGZsb2F0
IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEu
cmFkaXVzWSkgKiAwLjY1OworCisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsQXJlYSA9ICgx
NjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAg
IAorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsK
KyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChw
YWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAv
IG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJl
ciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRl
cnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJl
cik7CisgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9i
cygpOworICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4gMSkgeworICAgICAgICAgICAgLy8gU3Bs
aXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2Jz
IHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAgIC8vIGpv
YlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRo
ZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAgICAgICAgICAgaW50IGpvYlNpemUgPSBw
YWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGpvYnNX
aXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOworICAgICAgICAg
ICAgaW50IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhy
ZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgeworICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKKyAgICAg
ICAgICAgICAgICBwYXJhbS5maWxsUmVnaW9uID0gZmlsbFJlZ2lvbjsKKyAgICAgICAgICAgICAg
ICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBq
b2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOworICAgICAgICAgICAg
ICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKKyAgICAgICAgICAgICAgICBwYXJhbS5wYWludGlu
Z0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCisgICAgfQorCisgICAgZmlsbFJl
Z2lvbihwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworfQorCitzdGF0aWMg
Ym9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShGaWx0ZXJJbWFnZSYgaW4sIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KQoreworICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYg
IXJhZGl1c1kpKSB7CisgICAgICAgIGluLmNvcHlQaXhlbEJ1ZmZlcihkc3RQaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QsIGNvbG9yU3Bh
Y2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEZFTW9ycGhvbG9neTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0
byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVy
ID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgp
OworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBJbnRSZWN0KGdlb21ldHJ5Lm1hcEltYWdl
UmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0LmltYWdlUmVjdCgpKSk7CisKKyAgICBJbnRT
aXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVz
WSkpOworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxB
cnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIHJhZGl1cy53aWR0
aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8g
aW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNl
KCkpOworICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShnZW9tZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6
ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWlu
KG91dHB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOworICAgIGludCBy
YWRpdXNZID0gc3RkOjptaW4ob3V0cHV0SW1hZ2VSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhl
aWdodCgpKTsKKworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShpbnB1dCwgb3V0cHV0
UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIHJhZGl1
c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBNb3JwaG9sb2d5
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEubW9ycGhvbG9neU9w
ZXJhdG9yID0gbV9tb3JwaG9sb2d5T3BlcmF0b3I7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1gg
PSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1
c1kpOworCisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBpbnB1dFBpeGVsQXJyYXku
Z2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJh
eTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihvdXRwdXRJbWFnZVJlY3Qud2lkdGgo
KSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKG91dHB1dEltYWdlUmVjdC5oZWln
aHQoKSk7CisKKyAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
T2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzZmIwYjhhYWFkMGE1YTU1Mjg4ZDE3ZWVj
NDA4MDEyZTZlN2VmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFT2Zmc2V0OjphcHBseVNvZnR3YXJlKEZp
bHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNp
emUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1
dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGlucHV0LmltYWdlUmVjdCgpOworICAg
IGlucHV0SW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVzb2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1f
ZHkgfSkpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0
SW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworCisgICAgb3V0cHV0SW1hZ2UtPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0
d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2EwNTM1Y2MyN2M0MzQyMmM2OGIx
ZWM5ZjY4MGIzMGIzMTAxOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nl
c3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRVRp
bGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZpbHRlckdl
b21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZVZlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhdHRl
cm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFVGlsZTo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0
cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91
dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsK
KyAgICBpbnB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dEltYWdlUmVj
dCk7CisKKyAgICBhdXRvIHRpbGVSZWN0ID0gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKGlu
cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICB0aWxlUmVjdCA9IGdlb21ldHJ5Lm1hcElt
YWdlUmVjdCh0aWxlUmVjdCk7CisKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9IG91dHB1dC5p
bWFnZVJlY3QoKTsKKyAgICBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qo
b3V0cHV0SW1hZ2VSZWN0KTsKKworICAgIGF1dG8gbWF4T3V0cHV0UmVjdCA9IGdlb21ldHJ5LmNs
aXBUb0ZpbHRlclJlZ2lvbihvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIG1heE91
dHB1dFJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QobWF4T3V0cHV0UmVjdCk7CisKKyAgICBh
dXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIXRpbGVJbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VD
b250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgdGlsZUltYWdlQ29udGV4
dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkpOworICAgIHRpbGVJbWFnZUNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdC5sb2NhdGlvbigpKTsK
KworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
V1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBpZiAoIXRpbGVJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07Cisg
ICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QubG9jYXRpb24oKSAtIG1heE91
dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVh
dGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5z
Zm9ybSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgb3V0cHV0Q29udGV4dCA9IG91dHB1dElt
YWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pKTsKKyAgICAKKyAgICBvdXRwdXRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIG91dHB1dEltYWdlUmVjdC5zaXplKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTdiNDAxNTFlNDc2MGRlNWNlZmJm
OTFiMDkwMmViM2ZmNWQyZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAK
QEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxl
IEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5
LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlz
IGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lm
aWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1
cmJ1bGVuY2UKKworLyoKKyAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioq
MzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSBy
YW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAx
ID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2
b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKKyAgICBUbyB0ZXN0OiB0aGUgYWxnb3Jp
dGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQorICAgIGFzIHRoZSAxMCww
MDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCisqLworc3Rh
dGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKK3N0YXRpYyBjb25zdCBsb25nIHNf
cmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKK3N0YXRpYyBjb25zdCBpbnQg
c19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KK3N0
YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKK3N0YXRpYyBjb25zdCBp
bnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0YXRpYyBjb25zdCBpbnQgc19ibG9ja1Np
emUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAx
OworCitzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAw
KTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMuCisKK3N0cnVjdCBU
dXJidWxlbmNlUGFpbnRpbmdEYXRhIHsKKyAgICBUdXJidWxlbmNlUGFpbnRpbmdEYXRhKFR1cmJ1
bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMs
IGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAgICAgICAgOiB0dXJidWxlbmNlVHlwZSh0
dXJidWxlbmNlVHlwZSkKKyAgICAgICAgLCBiYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkK
KyAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKKyAgICAgICAgLCBudW1P
Y3RhdmVzKG51bU9jdGF2ZXMpCisgICAgICAgICwgc2VlZChzZWVkKQorICAgICAgICAsIHN0aXRj
aFRpbGVzKHN0aXRjaFRpbGVzKQorICAgICAgICAsIHBhaW50aW5nU2l6ZShwYWludGluZ1NpemUp
CisgICAgeworICAgIH0KKworICAgIC8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCisg
ICAgaW5saW5lIGxvbmcgcmFuZG9tKCkKKyAgICB7CisgICAgICAgIGxvbmcgcmVzdWx0ID0gc19y
YW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFu
ZFEpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApCisgICAgICAgICAgICByZXN1bHQgKz0gc19y
YW5kTWF4aW11bTsKKyAgICAgICAgc2VlZCA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBUdXJidWxlbmNlVHlwZSB0dXJidWxlbmNlVHlwZTsKKyAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKKyAgICBpbnQgbnVt
T2N0YXZlczsKKyAgICBsb25nIHNlZWQ7CisgICAgYm9vbCBzdGl0Y2hUaWxlczsKKyAgICBJbnRT
aXplIHBhaW50aW5nU2l6ZTsKKworICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tT
aXplICsgMl07CisgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07
Cit9OworCitzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsK
KworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBm
b3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0byB3
cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAgaW50IHdyYXBZIHsgMCB9OworfTsKKwor
c3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVWlu
dDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
VHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCwgaW50KT4gZmlsbFJlZ2lv
bjsKKyAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKKyAgICBJbnRSZWN0IGZpbHRl
clJlZ2lvbjsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGU7CisgICAgVHVyYnVsZW5jZVBhaW50
aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICBp
bnQgc3RhcnRZOworICAgIGludCBlbmRZOworfTsKKworaW5saW5lIGZsb2F0IHNtb290aEN1cnZl
KGZsb2F0IHQpCit7CisgICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Cit9CisKK2lubGlu
ZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7
CisgICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKK30KKworc3RhdGljIHZvaWQgaW5pdFBhaW50
KFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICBmbG9hdCBub3Jt
YWxpemF0aW9uRmFjdG9yOworCisgICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJh
bmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9
IDApCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChz
X3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3Jh
bmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVt
IC0gMTsKKworICAgIGZsb2F0KiBncmFkaWVudDsKKyAgICBmb3IgKGludCBjaGFubmVsID0gMDsg
Y2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNf
YmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbaV0gPSBpOworICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1baV07CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRb
MF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19i
bG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgICAg
IGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkg
JSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAg
ICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOworICAgICAgICAg
ICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50
WzFdKTsKKyAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7Cisg
ICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkg
eworICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CisgICAg
ICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7CisgICAgICAg
IEFTU0VSVChqID49IDApOworICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIp
OworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltqXTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltqXSA9IGs7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSAr
IDI7ICsraSkgeworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tT
aXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOworICAgICAgICBmb3Ig
KGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAg
cGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07CisgICAgICAgICAgICBwYWludGluZ0Rh
dGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5n
cmFkaWVudFtjaGFubmVsXVtpXVsxXTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIFN0
aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAg
ICBpZiAoIXN0aXRjaFRpbGVzKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgZmxvYXQgdGls
ZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNp
emUuaGVpZ2h0KCk7CisgICAgQVNTRVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+IDAp
OworCisgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5j
aWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2ls
bCBiZSBjb250aW51b3VzLgorICAgIGlmIChiYXNlRnJlcXVlbmN5WCkgeworICAgICAgICBmbG9h
dCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGls
ZVdpZHRoOworICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRoICog
YmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNo
b3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KKyAgICAgICAg
aWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VG
cmVxdWVuY3lYKQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsK
KyAgICB9CisgICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1
ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsK
KyAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJl
cXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dG
cmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpCisgICAgICAgICAgICBi
YXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5OworICAgIH0KKworICAgIFN0aXRjaERhdGEg
c3RpdGNoRGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJh
c2VGcmVxdWVuY3lYKTsKKyAgICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0
aXRjaERhdGEud2lkdGg7CisgICAgc3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdo
dCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lz
ZSArIHN0aXRjaERhdGEuaGVpZ2h0OworCisgICAgcmV0dXJuIHN0aXRjaERhdGE7Cit9CisKKy8v
IFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NW
RzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50Lgorc3RhdGljIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQm
IG5vaXNlVmVjdG9yKQoreworICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKKyAgICAgICAgaW50
IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgorICAgICAgICBpbnQgbmV4dElu
ZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0LgorICAgICAgICBmbG9hdCBmcmFjdGlv
bjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4KKworICAgICAgICBOb2lzZVBvc2l0aW9u
KGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gIHQgPSB2ZWNbMF0g
KyBQZXJsaW5OOworICAgICAgICAgICAgLy8gIGJ4MCA9IChpbnQpdDsKKyAgICAgICAgICAgIC8v
ICBieDEgPSBieDArMTsKKyAgICAgICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0OworICAgICAg
ICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOworICAgICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIG5l
eHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRpb24gLSBp
bmRleDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzdGl0Y2goaW50IHNpemUs
IGludCB3cmFwU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYgKGJ4MCA+PSBwU3Rp
dGNoSW5mby0+bldyYXBYKQorICAgICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaEluZm8tPm5X
aWR0aDsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSB3cmFwU2l6ZSkKKyAgICAgICAgICAgICAg
ICBpbmRleCAtPSBzaXplOworCisgICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0Y2hJbmZv
LT5uV3JhcFgpCisgICAgICAgICAgICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwor
ICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFwU2l6ZSkKKyAgICAgICAgICAgICAgICBu
ZXh0SW5kZXggLT0gc2l6ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBOb2lzZVBvc2l0aW9u
IG5vaXNlWChub2lzZVZlY3Rvci54KCkpOworICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNl
VmVjdG9yLnkoKSk7CisKKyAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50
cyBhY2NvcmRpbmdseS4KKyAgICBpZiAocGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAg
ICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFwWCk7Cisg
ICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEud3JhcFkp
OworICAgIH0KKworICAgIC8vIGJ4MCAmPSBCTTsKKyAgICAvLyBieDEgJj0gQk07CisgICAgLy8g
YnkwICY9IEJNOworICAgIC8vIGJ5MSAmPSBCTTsKKyAgICBub2lzZVguaW5kZXggJj0gc19ibG9j
a01hc2s7CisgICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVku
aW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFz
azsKKworICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07CisgICAgLy8gaiA9IHVMYXR0
aWNlU2VsZWN0b3JbYngxXTsKKyAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxh
dHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOworICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0g
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKKworICAgIC8v
IHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7CisgICAgLy8gc3kgPSBkb3VibGUoc19jdXJ2ZShy
eTApKTsKKyAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7CisgICAg
ZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOworCisgICAgYXV0byBub2lz
ZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKKyAgICAgICAgLy8gYjAwID0gdUxhdHRp
Y2VTZWxlY3RvcltpICsgYnkwXQorICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOworICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkwICogcVsx
XTsKKyAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5l
bF1bYjAwXTsKKyAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyBub2lz
ZVkuZnJhY3Rpb24gKiBxWzFdOworCisgICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2VsZWN0b3Jb
aiArIGJ5MF07CisgICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9y
W25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOworICAgICAgICAvLyByeDEgPSByeDAg
LSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMF07IHYg
PSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFk
aWVudFtjaGFubmVsXVtiMTBdOworICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAt
IDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07CisgICAgICAgIC8vIGEgPSBsZXJw
KHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUs
IHYpOworCisgICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07CisgICAg
ICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCAr
IG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOworICAgICAg
ICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBxWzBdICsg
cnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVti
MDFdOworICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVkuZnJhY3Rp
b24gLSAxKSAqIHFbMV07CisKKyAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3RvcltqICsg
YnkxXTsKKyAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4
dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyBxID0gZkdyYWRp
ZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsxXTsKKyAg
ICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOworICAgICAgICB2
ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAq
IHFbMV07CisgICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYiA9
IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworCisgICAgICAgIC8vIHJldHVybiBsZXJw
KHN5LCBhLCBiKTsKKyAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIp
OworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAgICBub2lzZUZvckNoYW5uZWwoMCksCisg
ICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKKyAgICAgICAgbm9pc2VGb3JDaGFubmVsKDIpLAor
ICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKKyAgICB9OworfQorCisvLyBodHRwczovL3d3dy53
My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0
aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KKy8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhl
IHNhbWUgYmVoYXZpb3IuCitzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4mIGZsb2F0Q29tcG9uZW50cykKK3sKKyAgICByZXR1cm4geworICAgICAgICBzdGQ6OmNsYW1w
PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwg
MjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0
Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCisgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhf
dD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUpLAor
ICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25l
bnRzWzNdICogMjU1KSwgMCwgMjU1KSwKKyAgICB9OworfQorCitzdGF0aWMgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFR1
cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQs
IDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKKyAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9y
KHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFp
bnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKKyAgICBmbG9hdCByYXRpbyA9IDE7CisgICAgZm9y
IChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRpbmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0
YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEudHVyYnVsZW5jZVR5cGUgPT0gVHVyYnVs
ZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8g
cmF0aW87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3Vs
dCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygp
IC8gcmF0aW87CisKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAy
KTsKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKKyAgICAg
ICAgcmF0aW8gKj0gMjsKKworICAgICAgICBpZiAocGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7
CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJs
aW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgLy8gYWRk
aW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0IG9uY2UuCisgICAg
ICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndy
YXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAg
c3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAy
ICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20g
KCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5v
aXNlCisgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1
bGVuY2UuCisgICAgaWYgKHBhaW50aW5nRGF0YS50dXJidWxlbmNlVHlwZSA9PSBUdXJidWxlbmNl
VHlwZTo6RnJhY3RhbE5vaXNlKQorICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKKworICAgIHJldHVybiB0b0lu
dEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Cit9CisKK3N0
YXRpYyB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29u
c3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRj
aERhdGEsIGludCBzdGFydFksIGludCBlbmRZKQoreworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZ
KTsKKworICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7
CisgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndp
ZHRoKCkgPDwgMik7CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7
CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CisgICAgICAgIHBvaW50LnNldFgo
ZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVn
aW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAx
KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IHBvaW50LnNjYWxlZCgxIC8g
ZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRp
bmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVs
KTsKKyAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKKyAgICAgICAgfQorICAg
IH0KK30KKworc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVy
cyogcGFyYW1ldGVycykKK3sKKyAgICBwYXJhbWV0ZXJzLT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJz
LT5waXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5maWx0ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRl
clNjYWxlLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRh
LCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworfQorCitib29sIEZFVHVy
YnVsZW5jZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9
IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBJbnRTaXplIG91dHB1dFNpemUob3V0
cHV0LmxvZ2ljYWxTaXplKCkpOworICAgIEludFNpemUgdGlsZVNpemUgPSByb3VuZGVkSW50U2l6
ZShvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKKworICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9
IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0
aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX3N0aXRj
aFRpbGVzKTsKKworICAgIFR1cmJ1bGVuY2VQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fdHVy
YnVsZW5jZVR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9udW1PY3RhdmVz
LCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMsIHRpbGVTaXplKTsKKyAgICBpbml0UGFpbnQocGFpbnRp
bmdEYXRhKTsKKworICAgIGF1dG8gYXJlYSA9IG91dHB1dFNpemUuYXJlYSgpOworICAgIGlmIChh
cmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGhl
aWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CisKKyAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRz
ID0gaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjpt
aW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRz
KTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChnZW9tZXRy
eS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpKSk7CisKKyAgICBpZiAob3B0aW1hbFRo
cmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBh
cmFtZXRlcnM+IHBhcmFsbGVsSm9icygmZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CisgICAgICAgIGF1
dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKKyAgICAgICAgaWYgKG51
bUpvYnMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1z
aXplZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpv
YnNXaXRoRXh0cmEiIGpvYnMuCisgICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAv
IG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUg
bnVtSm9iczsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7CisKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihp
KTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsbFJlZ2lvbiA9IHN0YXRpY19jYXN0PHZvaWQo
KikoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCwgaW50KT4oJmZp
bGxSZWdpb24pOworICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJm91dHB1dFBp
eGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclJlZ2lvbiA9IG91dHB1dElt
YWdlUmVjdDsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyU2NhbGUgPSBnZW9tZXRyeS5m
aWx0ZXJTY2FsZSgpOworICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFp
bnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0
YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOworCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgam9iSGVpZ2h0ID0gKGkgPCBqb2JzV2l0aEV4dHJhKSA/IHN0ZXBZICsg
MSA6IHN0ZXBZOworICAgICAgICAgICAgICAgIHBhcmFtcy5lbmRZID0gcGFyYW1zLnN0YXJ0WSAr
IGpvYkhlaWdodDsKKyAgICAgICAgICAgICAgICBzdGFydFkgKz0gam9iSGVpZ2h0OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGYWxsYmFjayB0byBz
aW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0aHJlYWQg
b3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgorICAgIGZpbGxSZWdpb24ob3V0cHV0UGl4
ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBnZW9tZXRyeS5maWx0ZXJTY2FsZSgpLCBwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdl
U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNWZmYzJlOGUzYTUzNzE3MGZhMjk4YzlmNGQyYzg3
YzZhNzZiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlU29mdHdhcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0
ZXJJbWFnZVNvZnR3YXJlOjpGaWx0ZXJJbWFnZVNvZnR3YXJlKGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgUmVmPEltYWdlQnVm
ZmVyPiYmIGltYWdlQnVmZmVyKQorICAgIDogRmlsdGVySW1hZ2UocHJpbWl0aXZlU3VicmVnaW9u
LCBpbWFnZVJlY3QsIGZhbHNlLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSwgaW1hZ2VCdWZm
ZXItPnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXItPnJlc29sdXRpb25TY2FsZSgpLCBpbWFn
ZUJ1ZmZlci0+Y29sb3JTcGFjZSgpKQorICAgICwgbV9pbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
QnVmZmVyKSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIEZpbHRlckltYWdlU29mdHdhcmU6OmltYWdl
QnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtX2xvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRp
b25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghbV9p
bWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IHJlY3Qg
eyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9naWNhbFNpemUpIH07CisKKyAgICBpZiAo
cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZF
eGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCksIHJlY3QpOworICAg
IGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBp
eGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdh
cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43MTYyN2U4ZWRkZWQ3ZTJlOTU3YjE3ZTkzZGUyMGQ0MmViMTBiOTli
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJlLmgKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoK
KyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoK
KyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckltYWdl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVySW1hZ2VTb2Z0d2FyZSA6
IHB1YmxpYyBGaWx0ZXJJbWFnZSB7CitwdWJsaWM6CisgICAgdXNpbmcgRmlsdGVySW1hZ2U6OkZp
bHRlckltYWdlOworICAgIEZpbHRlckltYWdlU29mdHdhcmUoY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBSZWY8SW1hZ2VCdWZm
ZXI+JiYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVy
SWZFeGlzdHMoKSBvdmVycmlkZSB7IHJldHVybiBtX2ltYWdlQnVmZmVyOyB9CisgICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVySW1hZ2VTb2Z0d2FyZSkKKyAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyBy
ZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0xpZ2h0
aW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9MaWdodGluZ0RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMTQ5ZDRhYmM4NTJlYjBiMTQxMzAyN2Mw
NGEzY2NlNDZlMjliYTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdodGluZ0RhdGEuaApAQCAtMCwwICsxLDI0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3RleHByIGludCBjUGl4ZWxTaXplID0g
NDsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOworc3RhdGlj
IGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4
RkYpOworCitzdHJ1Y3QgQWxwaGFXaW5kb3cgeworICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9
OworICAgIAorICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2Ug
Y29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgorICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAg
ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9CisgICAgdWludDhfdCBsZWZ0KCkgY29u
c3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KKyAgICB1aW50OF90IGJv
dHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQorCisgICAg
dWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07
IH0KKyAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsxXVsxXTsgfQorICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICB2b2lkIHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAg
ICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldENlbnRlcih1aW50OF90
IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldEJvdHRv
bSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KKworICAgIHZv
aWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsg
fQorICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0g
PSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxw
aGFbMl1bMl0gPSB2YWx1ZTsgfQorCisgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBh
bHBoYVszXSkKKyAgICB7CisgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07CisgICAgICAgIGFs
cGhhWzFdID0gYWxwaGFbMl07CisgICAgfQorICAgIAorICAgIHZvaWQgc2hpZnQoKQorICAgIHsK
KyAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOworICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7
CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgTGlnaHRp
bmdEYXRhIHsKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAo
U01QIHNhZmUpIGRhdGEKKyAgICBDb2xvciBjb2xvcjsKKyAgICBmbG9hdCBzdXJmYWNlU2NhbGU7
CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7
CisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAgICBjb25zdCBMaWdodFNvdXJjZSogc291
cmNlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSogb3BlcmF0aW5nQ29sb3JTcGFj
ZTsKKyAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZTsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBwaXhlbHM7CisgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB3
aWR0aERlY3JlYXNlZEJ5T25lOworICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKKworICAg
IGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5s
aW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJ
bnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIAorICAgIGlubGlu
ZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5l
IEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsK
KyAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
KyAgICAKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0OworICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKK307CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAoreworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0yICogY2VudGVyICsgMiAqIHJpZ2h0
IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAgIC0yICogY2VudGVyIC0gcmlnaHQgKyAy
ICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBMaWdo
dGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCAr
IGJvdHRvbVJpZ2h0LAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRv
bUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9OworfQorCitpbmxpbmUgSW50
U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Cit7Cisg
ICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBjZW50ZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b21M
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVy
biB7CisgICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9t
LAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQor
ICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7
CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50
ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdodCwKKyAgICAgICAgLTIgKiB0b3Ag
LSB0b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAorICAgIH07Cit9CisKK2lubGlu
ZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFX
aW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoreworICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0g
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7CisgICAgCisgICAgaW50
IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCkp
OworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0
QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOworICAgIGludCBib3R0
b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQg
KyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOworCisgICAgaW50IGxlZnQgPSBhbHBoYVdp
bmRvdy5sZWZ0KCk7CisgICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50b3BMZWZ0KCk7Cisg
ICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOworCisgICAgaW50IGJvdHRvbUxlZnQgPSBh
bHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7CisgICAgaW50IGJvdHRvbSA9IGFscGhhV2luZG93LmJv
dHRvbSgpOworCisgICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBo
ZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KKyAgICBhbHBoYVdpbmRvdy5hbHBoYVsw
XVsyXSA9IHRvcFJpZ2h0OworICAgIGFscGhhV2luZG93LmFscGhhWzFdWzJdID0gcmlnaHQ7Cisg
ICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKKyAgICAKKyAgICAvLyBD
aGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29tZSBzcG90LWNoZWNr
cy4KKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wKCkgPT0g
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKKworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0
ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21S
aWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0
ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUg
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAg
IGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gMiAq
IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAg
IC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJv
dHRvbSwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0
b20KKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJpZ2h0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAy
ICogY2VudGVyICsgMiAqIHJpZ2h0LAorICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAq
IGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7Cisg
ICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCwKKyAgICAg
ICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJp
Z2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAg
aW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIg
KiBsZWZ0ICsgMiAqIGNlbnRlciwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsgbGVmdCAr
IDIgKiBjZW50ZXIKKyAgICB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1Nv
dXJjZUFscGhhU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTc0
MjhlNzY0ZGNjZmMxNTdkOTgwYTBjOTc5ZGJlZTc1ZDYxZDc2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VB
bHBoYVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJG
aWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmls
dGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlQWxw
aGE6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAorewor
ICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRz
WzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
b3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gZ2Vv
bWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVjdCgpKTsKKworICAgIG91dHB1dEltYWdl
LT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0IHsgeyB9LCBpbnB1dEltYWdlUmVjdC5zaXpl
KCkgfSwgQ29sb3I6OmJsYWNrKTsKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW5wdXRJbWFnZSwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3Rp
bmF0aW9uSW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40NWQwMTUyYjEyNDUyMWY5ODMyNzU4NTI2M2YzNzMzYmZjN2JmNGU5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKworI2luY2x1ZGUgIkZp
bHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBp
bnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOwor
ICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1
dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBGbG9hdFBvaW50
KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGY0NGFlMTI5ZDA3MzhkMzBjNzZl
NzEwODViMmFlYzA1YTdiNmYxZGEuLjgyYTcyMzRkYzIxZDQxZjUwYjdlYjIxZmUwMzAwY2ZlNDZh
ZDk1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNDEyICsyOCwz
NTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2lu
Y2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNv
bG9yTWF0cml4LmgiCiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUg
IkZFRHJvcFNoYWRvdy5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCi0jaW5jbHVkZSAi
RkVNZXJnZS5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVy
SW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmls
dGVyQnVpbGRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VB
bHBoYS5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMu
aCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAot
I2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+CituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRp
b24pCit7CisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZihuZXcgQ1NTRmlsdGVyKG9wZXJhdGlv
bnMpKTsKKworICAgIGlmICghZmlsdGVyLT5idWlsZEZ1bmN0aW9ucyhyZW5kZXJlciwgb3BlcmF0
aW9ucywgY2xpcE9wZXJhdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorI2lm
IFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkICYmICFmaWx0ZXItPnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkpCisg
ICAgICAgIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2Vu
ZGlmCisgICAgICAgIAorICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2Rl
KTsKKyAgICByZXR1cm4gZmlsdGVyOworfQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CitSZWZQdHI8
Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4m
JiBmdW5jdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENTU0ZpbHRlcihXVEZNb3ZlKGZ1bmN0aW9ucyksIHJlbmRlcmluZ01vZGUp
KTsKK30KIAotUmVmPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoKQorQ1NTRmlsdGVyOjpD
U1NGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKKyAgICA6IEZpbHRl
cihUeXBlOjpDU1NGaWx0ZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVy
KTsKKyAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAg
IDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3Vy
Y2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoVmVjdG9yPFJl
ZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUpCisgICAgOiBGaWx0ZXIoVHlwZTo6Q1NTRmlsdGVyKQorICAgICwgbV9mdW5jdGlvbnMoV1RG
TW92ZShmdW5jdGlvbnMpKQorICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCiB7
CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVmYXVsdDsKK3N0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24m
IGJsdXJPcGVyYXRpb24sIEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRp
b24pCit7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVy
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6
OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY2xpcE9wZXJhdGlvbiA9PSBGaWx0
ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUgPyBFREdFTU9ERV9OT05FIDogRURHRU1P
REVfRFVQTElDQVRFKTsKK30KIAotR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29u
dGV4dCgpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQnJpZ2h0bmVzc0VmZmVj
dChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJ
bWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgp
KTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFu
c2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0Zp
bHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRl
ckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVy
T3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZm
ZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5kZXJl
ci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQo
cmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKLSAgICBpZiAoIWZpbHRlckVs
ZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NT
RmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmlu
ZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3Bl
cmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQg
dGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1l
bnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3Rz
LiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgotICAgICAgICAvLyBGSVhNRTogVW5jbGVh
ciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVu
ZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVu
dCgpLCAqZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5j
dGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRy
YW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKworICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBv
bmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
dHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KIAotICAgIGF1dG8gYnVpbGRlciA9
IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oJnByZXZpb3VzRWZmZWN0KTsKLSAgICBtX3Nv
dXJjZUFscGhhID0gYnVpbGRlci0+Z2V0RWZmZWN0QnlJZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFt
ZSgpKTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0
KGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7
CisgICAgZmxvYXQgc3RkID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAg
ICByZXR1cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRp
b24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xv
cigpLCAxKTsKK30KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+IHJlZmVyZW5jZUVmZmVjdHM7CitzdGF0aWMgUmVmUHRyPEZp
bHRlckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVN
aW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAw
LjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1m
aWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZv
ciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3
NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcx
NTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAg
ICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2
ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1
MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAg
ICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYg
KiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUy
IC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAor
ICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZF
Q09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAK
LSAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCpmaWx0ZXJFbGVtZW50KSkgewotICAgICAgICBl
ZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksICp0aGlzKTsKLSAgICAg
ICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjog
ZmFpbGVkIHRvIGJ1aWxkIGVmZmVjdCBmcm9tICIgPDwgZWZmZWN0RWxlbWVudCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0
UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24u
YW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQogCi0gICAg
ICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0g
ICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0
eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6
TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRp
ZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgp
LCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAg
ICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKHJlZmVyZW5jZUVm
ZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGNyZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBl
ID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgp
KTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJh
bnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7CiB9CiAKLWJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVy
Q29uc3VtZXIgY29uc3VtZXIpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlT3Bh
Y2l0eUVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1Bp
eGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMu
aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKyAgICBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJG
dW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9h
dCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUobnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKLSAgICBtX291dHNldHMgPSB7
IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlu
cHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
U2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JN
YXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygx
IC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNl
ZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXgu
aHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVy
cy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRy
aXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVyKGNv
bnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVt
ZW50JiByZW5kZXJlcikKK3sKKyAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVu
ZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpOworICAgIGF1dG8qIGZpbHRlckVs
ZW1lbnQgPSByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJl
bmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7CisKKyAgICBpZiAoIWZpbHRlckVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIHJldHVybiBTVkdGaWx0
ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCk7Cit9CisKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1
bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
b3BlcmF0aW9ucywgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikK
K3sKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVh
dGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CiAg
ICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAg
ICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9w
ZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5
cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAg
ICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWls
ZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVy
YXRpb24pOworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBs
ZS1jb2xvci1maWx0ZXIuCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xv
ck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQg
PSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwot
Ci0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxl
L3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAotICAgICAgICAgICAg
Ly8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3Rvcjxm
bG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcy
MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAu
MjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAu
NzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1v
dmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJM
VVI6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJsdXJG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTog
ewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRp
b24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZj
cy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1
aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0K
LSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUz
NCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdU
Rk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0
KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9Owot
ICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0g
Y3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAg
IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9h
dD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9w
ZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShpbnB1
dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0
PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsK
LSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
LSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJf
VFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAg
IHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRy
YW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OwotCi0gICAgICAgICAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3Jl
YXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25s
eSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50
eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50
ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFu
c2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVu
Y3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
KnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVS
QVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2F0dXJhdGVFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0
aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAw
KTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0
ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6Rmls
dGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKworICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRy
b3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVh
dGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dP
cGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJh
dGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNv
bG9yKCksIDEpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6Cisg
ICAgICAgICAgICBmaWx0ZXIgPSBjcmVhdGVTVkdGaWx0ZXIoZG93bmNhc3Q8UmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVyZXIpOworICAgICAgICAgICAgZWZmZWN0
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVmZmVj
dCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFn
ZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVy
dHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVn
aW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBG
aWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0LT5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVy
T3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAgIG1f
ZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmV2
aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAg
ICAgICAgICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAgICBtX2Z1
bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoZWZmZWN0KQorICAgICAgICAgICAgbV9m
dW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRu
J3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0g
ICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlua1RvRml0KCk7
Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3NvdXJjZURyYXdpbmdSZWdpb24pOwotI2lmIFVT
RShDT1JFX0lNQUdFKQotICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKLSAgICAgICAgbV9maWx0
ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0
dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZl
Y3RzLmxhc3QoKS5nZXQoKSk7Ci0jZW5kaWYKKyAgICBtX2Z1bmN0aW9ucy5zaHJpbmtUb0ZpdCgp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0
b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpCisjaWYgVVNFKENPUkVfSU1BR0Up
Citib29sIENTU0ZpbHRlcjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdAogewot
ICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoZmlsdGVyUmVjdCA9PSBzb3VyY2VJbWFnZVJlY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRlclJlY3QpOworICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAgICBpZiAoIWZ1bmN0aW9uLT5zdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KLQotdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQotewotICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFpbiBoYXMgYmVlbiBidWlsdCwgYW5kIHRo
ZQotICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQuIFdlIGp1c3QgbmVlZCB0byBhdHRhY2gg
dGhlIGdyYXBoaWMKLSAgICAvLyBidWZmZXIgaWYgd2UgaGF2ZSBub3QgeWV0IGRvbmUgc28uCi0K
LSAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKSB9Owot
ICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9
IGxvZ2ljYWxTaXplKSB7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRTb3VyY2VJbWFn
ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJn
ZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0
Q29udGV4dCk7Ci0gICAgICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAg
c2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmls
dGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpC
R1JBOCkpOwogI2VuZGlmCi0gICAgfQotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRy
dWU7Ci19CiAKLXZvaWQgQ1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKQorSW50T3V0c2V0cyBDU1NGaWx0ZXI6OmNhbGN1bGF0ZU91dHNldHMoKSBjb25zdAogewot
ICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RF
ZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0
IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QubWF4RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0
IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0
aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgRmxvYXRTaXplIHNj
YWxlOwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNp
emUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAg
ICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAg
IH0KLX0KKyAgICBpZiAoIW1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQorICAgICAgICByZXR1
cm4geyB9OwogCi12b2lkIENTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCkKLXsK
LSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0KCk7Ci0gICAgaWYgKG1fc291cmNlQWxw
aGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEtPmNsZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRv
JiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAg
ICBJbnRPdXRzZXRzIG91dHNldHM7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rp
b25zKQorICAgICAgICBvdXRzZXRzICs9IGZ1bmN0aW9uLT5jYWxjdWxhdGVPdXRzZXRzKCk7Cisg
ICAgCisgICAgcmV0dXJuIG91dHNldHM7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCitG
aWx0ZXJFZmZlY3RWZWN0b3IgQ1NTRmlsdGVyOjplZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6
VHlwZSB0eXBlKSBjb25zdAogewotICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCku
Z2V0KCk7Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5k
ZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7Ci0gICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVy
LT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICAgICAgcmV0dXJu
OworICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3RzOworCisgICAgZm9yIChhdXRvJiBmdW5j
dGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi0+dHlwZSgpID09IHR5
cGUpIHsKKyAgICAgICAgICAgIGVmZmVjdHMuYXBwZW5kKHsgZG93bmNhc3Q8RmlsdGVyRWZmZWN0
PihmdW5jdGlvbi5nZXQoKSkgfSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRlcigpKSB7CisgICAgICAg
ICAgICBhdXRvJiBmaWx0ZXIgPSBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLmdldCgpKTsK
KyAgICAgICAgICAgIGVmZmVjdHMuYXBwZW5kVmVjdG9yKGZpbHRlci5lZmZlY3RzT2ZUeXBlKHR5
cGUpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3Qu
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
Ci19CiAKLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGly
dHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhl
IGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwg
c28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRpcnR5UmVjdCIuCi0gICAgYXV0byByZWN0Rm9y
UmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAoaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkp
Ci0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91dHNldHMoKTsKLSAgICByZWN0Rm9yUmVwYWlu
dC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0gICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50Owor
ICAgIHJldHVybiBlZmZlY3RzOwogfQogCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQo
KSBjb25zdAorYm9vbCBDU1NGaWx0ZXI6OmFwcGx5KEZpbHRlclJlc3VsdCYgcmVzdWx0LCBGaWx0
ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29u
c3QKIHsKLSAgICBpZiAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVyUmVuZGVyZXItPm91dHB1dCgpOwotICAg
IAotICAgIHJldHVybiBtX2VmZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotfQot
Ci12b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0KQotewotICAgIG1fc291cmNlRHJhd2luZ1JlZ2lvbiA9IHNvdXJjZUltYWdl
UmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3VyY2VJbWFnZVJlY3QpOwotICAgIHNldEZp
bHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hl
ZCA9IGZhbHNlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3Qg
RmxvYXRSZWN0JiBlZmZlY3RSZWN0KQotewotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZl
Y3RzKQotICAgICAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Ci19Ci0K
LUludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0
RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVj
dC5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5o
YXNSZXN1bHQoKSkpCi0gICAgICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7Ci0gICAgCi0gICAg
cmV0dXJuIHsgfTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAg
ICAgICAgaWYgKCFmdW5jdGlvbi0+YXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW50
T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAorVGV4dFN0cmVhbSYgQ1NTRmlsdGVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIW1faGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKCFtX291dHNldHMuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7CisgICAgYXV0byBlbmQgPSBtX2Z1bmN0
aW9ucy5yZW5kKCk7CisgICAgdW5zaWduZWQgbGV2ZWwgPSAwOworCisgICAgZm9yIChhdXRvIGl0
ID0gbV9mdW5jdGlvbnMucmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRv
IGZ1bmN0aW9uID0gKml0OworICAgICAgICBpZiAoZnVuY3Rpb24tPnR5cGUoKSA9PSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7CisgICAgICAgICAgICBBU1NFUlQoaXQgIT0gZW5k
KTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgIH0KKyAgICAgICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIGxldmVsKyspOworICAgICAgICBmdW5jdGlvbi0+ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIH0KIAotICAgIGZv
ciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBtX291dHNldHMgKz0gZWZmZWN0
LT5vdXRzZXRzKCk7Ci0gICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICByZXR1cm4gdHM7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApp
bmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li42MjJiZTI1M2Ey
YThjMzcwMGUyZGRiZDUwOTdjMzI0ZmZkNjhjNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NT
U0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsODIgKzI2LDUyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKLSNpbmNsdWRlICJMYXlvdXRS
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21l
dHJ5LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyOwogY2xhc3Mg
RmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBTb3VyY2VBbHBo
YTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWVudW0gY2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBG
aWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFs
IDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENT
U0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQotCi0gICAgSW1h
Z2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwogCi0gICAgYm9vbCBidWlsZChSZW5kZXJFbGVtZW50
JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKLSAgICB2b2lkIGNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQsIEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uID0gRmlsdGVyR2VvbWV0cnk6OkNs
aXBPcGVyYXRpb246OkludGVyc2VjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0
cjxDU1NGaWx0ZXI+IGNyZWF0ZShWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiwgUmVuZGVy
aW5nTW9kZSk7CiAKICAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzOyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW47IH0KIAotICAg
IHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgSW50T3V0c2V0
cyBvdXRzZXRzKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAgdmly
dHVhbCB+Q1NTRmlsdGVyKCk7CisgICAgY29uc3QgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+
JiBmdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uczsgfQogCi0gICAgYm9vbCBp
c0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHNldFJl
bmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9k
ZSA9IHJlbmRlcmluZ01vZGU7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KIAotICAgIEZsb2F0UmVjdCBz
b3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdp
b247IH0KKyAgICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25zdCBmaW5hbDsKIAot
ICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRl
clJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBw
cmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7Ci0KLSAgICB2b2lkIHNl
dE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0
KiBpbnB1dENvbnRleHQoKTsKLQotICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKK3ByaXZhdGU6CisgICAgQ1NTRmlsdGVy
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBDU1NGaWx0ZXIoVmVjdG9yPFJlZjxGaWx0
ZXJGdW5jdGlvbj4+JiYsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0
KCkgY29uc3Q7CisgICAgYm9vbCBidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uKTsKIAotICAg
IExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOworI2lm
IFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBj
b25zdCBmaW5hbDsKKyNlbmRpZgogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lv
bjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
IGVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9lZmZlY3RzOwotICAgIFJlZjxTb3VyY2VHcmFw
aGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9zb3VyY2VB
bHBoYTsKKyAgICBib29sIGFwcGx5KEZpbHRlclJlc3VsdCYsIEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKIAotICAgIG11dGFibGUg
SW50T3V0c2V0cyBtX291dHNldHM7CisgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0g
ICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVy
OworCisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOworICAgIFJl
bmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggZjcyOGMwZjZjNmUwNzQ3YTMyYzI4NjFmNWZhYzY5Mzlk
NTZiNjE2ZC4uZWFkMDI3MDAyMzBlMjEzOTdmZDM0Nzk3ODg2MGFlMDc4YjExZWFlNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC01NTgyLDcgKzU1ODIsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKIEludE91
dHNldHMgUmVuZGVyTGF5ZXI6OmZpbHRlck91dHNldHMoKSBjb25zdAogewogICAgIGlmIChtX2Zp
bHRlcnMpCi0gICAgICAgIHJldHVybiBtX2ZpbHRlcnMtPmZpbHRlcigpID8gbV9maWx0ZXJzLT5m
aWx0ZXIoKS0+b3V0c2V0cygpIDogSW50T3V0c2V0cygpOworICAgICAgICByZXR1cm4gbV9maWx0
ZXJzLT5maWx0ZXIoKSA/IG1fZmlsdGVycy0+ZmlsdGVyKCktPmNhbGN1bGF0ZU91dHNldHMoKSA6
IEludE91dHNldHMoKTsKICAgICByZXR1cm4gcmVuZGVyZXIoKS5zdHlsZSgpLmZpbHRlck91dHNl
dHMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCA1OGI3
YTE2YTdhOWY3ODUxNmRiNjM4ZDlkYTcwN2RjOWJmMTMyZGE1Li44MzAxNTdiMDcwOWNhNDI1NDkw
ZWI1ZGJiNjBmNTI5NTZlOWFjYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaApAQCAtNjIsNyArNjIsNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIENTU0ZpbHRlcjsKIGNsYXNzIENsaXBSZWN0czsKIGNsYXNzIENsaXBS
ZWN0c0NhY2hlOwogY2xhc3MgRXZlbnRSZWdpb25Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCAyNTBhN2Q1YzBiYWEwYWM3
NDFhOTBjODE4YjYxYTA1Zjk1Yjk2NGE0Li5kZTVkMTZmMmRhMGNjZDEyMGJmNzI3MTk3Njk3NGIy
YzNlNWI0YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmNwcApAQCAtMzQsOCArMzQsMTAgQEAKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKICNp
bmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50
UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTExOCwzNyArMTIwLDU1IEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJz
OjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9pZCBSZW5kZXJMYXllckZpbHRl
cnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2FsZUZhY3Rv
ciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9maWx0ZXIpIHsK
LSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAgICBtX2ZpbHRl
ci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+c2V0UmVu
ZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0
ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJT
Y2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJl
c3VsdHMoKTsKLSAgICB9CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJl
ciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgRmlsdGVyR2VvbWV0
cnk6OkNsaXBPcGVyYXRpb246OlVuaXRlKTsKKyAgICBtX3NjYWxlRmFjdG9yID0gc2NhbGVGYWN0
b3I7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRl
eHQoKQoreworICAgIHJldHVybiBtX3NvdXJjZUltYWdlID8gJm1fc291cmNlSW1hZ2UtPmNvbnRl
eHQoKSA6IG51bGxwdHI7Cit9CiAKLSAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxk
LCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bwotICAg
IC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0
IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgIC8vIEZJWE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBl
bnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5n
ZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5m
aWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkKLSAgICAgICAgbV9maWx0
ZXIgPSBudWxscHRyOwordm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBJbnRTaXplIHNpemUgeyBtX3NvdXJjZUltYWdlUmVjdC5z
aXplKCkgKiBtX3NjYWxlRmFjdG9yIH07CisgICAgYXV0byBob3N0V2luZG93ID0gbV9sYXllci5y
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yb290KCkgPyBtX2xheWVyLnJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpLnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKworICAg
IG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIG1fZmlsdGVyLT5yZW5k
ZXJpbmdNb2RlKCksIFNob3VsZFVzZURpc3BsYXlMaXN0OjpObywgUmVuZGVyaW5nUHVycG9zZTo6
RE9NLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
LCBob3N0V2luZG93KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgaW1hZ2VDb250ZXh0ID0gbV9z
b3VyY2VJbWFnZS0+Y29udGV4dCgpOworICAgIGltYWdlQ29udGV4dC5zY2FsZShtX3NjYWxlRmFj
dG9yKTsKKyAgICAKKyAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwogfQogCi1H
cmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpi
ZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0
ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgYXV0byBmaWx0
ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3Qo
ZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKKyAgICAKKyAgICBhdXRvIGZpbHRlclNvdXJjZVJl
Y3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMo
KSkKKyAgICAgICAgZmlsdGVyU291cmNlUmVjdCArPSBmaWx0ZXIuY2FsY3VsYXRlT3V0c2V0cygp
OworICAgIGZpbHRlclNvdXJjZVJlY3QuaW50ZXJzZWN0KGZpbHRlckJveFJlY3QpOworCiAgICAg
aWYgKGZpbHRlclNvdXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZpbHRlci51cGRhdGVCYWNraW5n
U3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworICAgIAorICAgIGlmIChmaWx0ZXJTb3VyY2VS
ZWN0ICE9IG1fc291cmNlSW1hZ2VSZWN0KSB7CisgICAgICAgIG1fc291cmNlSW1hZ2VSZWN0ID0g
ZmlsdGVyU291cmNlUmVjdDsKKyAgICAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gZmFs
c2U7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0OwogICAgIGVsc2UgewotICAg
ICAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSkKKyAgICAgICAgaWYgKCFtX2dyYXBoaWNz
QnVmZmVyQXR0YWNoZWQpCiAgICAgICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZmlsdGVyU291cmNl
UmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlS
ZWN0OwpAQCAtMTU5LDExICsxNzksOSBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmls
dGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogICAgIG1f
cGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0aW9uKCk7CiAgICAgcmVzZXREaXJ0
eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKTsKLQotICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGRlc3Rp
bmF0aW9uQ29udGV4dCk7Ci0gICAgYXV0byogc291cmNlR3JhcGhpY3NDb250ZXh0ID0gZmlsdGVy
LmlucHV0Q29udGV4dCgpOwotICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0IHx8IGZpbHRl
ci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQorICAgIGFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoKTsKKyAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBpbnB1dENv
bnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZUdyYXBoaWNzQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgY29u
dGVudHMgb2YgdGhlIGxheWVyIGlzIGNhcHR1cmVkIGluIHRoZSBvZmZzY3JlZW4gbWVtb3J5IGJ1
ZmZlci4KQEAgLTE3NywyMyArMTk1LDE5IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJG
aWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0CiAKIHZv
aWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQm
IGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKLSAgICBBU1NFUlQobV9maWx0ZXItPmlucHV0Q29udGV4
dCgpKTsKKyAgICBBU1NFUlQoaW5wdXRDb250ZXh0KCkpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXllckZpbHRlcnMgIiA8PCB0aGlzIDw8ICIg
YXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKLSAg
ICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKLQotICAgIGZpbHRlci5hcHBseSgp
OworICAgIGlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKLSAgICAvLyBHZXQgdGhlIGZpbHRl
cmVkIG91dHB1dCBhbmQgZHJhdyBpdCBpbiBwbGFjZS4KLSAgICBMYXlvdXRSZWN0IGRlc3RSZWN0
ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKLSAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQu
eCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKDEg
LyBtX3NjYWxlRmFjdG9yKTsKIAotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIu
b3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91
dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOworICAgIEZpbHRlckdlb21l
dHJ5IGdlb21ldHJ5KG1fc291cmNlSW1hZ2VSZWN0LCBtX3NjYWxlRmFjdG9yLCBGaWx0ZXJHZW9t
ZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3
RmlsdGVySW1hZ2VCdWZmZXIobV9zb3VyY2VJbWFnZS5nZXQoKSwgbV9zb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlciwgZ2VvbWV0cnkpOwogCi0gICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0
cygpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShtX3NjYWxlRmFjdG9yKTsKIAogICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmlsdGVycyAi
IDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYx
NTUzMTkwYjcwMDNkN2U3ODQ0YzkxOTQ1YmY3Li45MmVmMmZmOWQ4NzYyNjY0ODFjZGM3MDhkMzkx
MTQwZmMzMGJiYTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
RmlsdGVycy5oCkBAIC0zNyw4ICszNywxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDYWNoZWRTVkdEb2N1bWVudDsKK2NsYXNzIENTU0ZpbHRlcjsKIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBGaWx0ZXJPcGVyYXRpb25zOworY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIFJlbmRl
ckxheWVyRmlsdGVycyBmaW5hbCA6IHByaXZhdGUgQ2FjaGVkU1ZHRG9jdW1lbnRDbGllbnQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjksMTQgKzcxLDIwIEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYsIGNvbnN0
IE5ldHdvcmtMb2FkTWV0cmljcyYpIGZpbmFsOwogICAgIHZvaWQgcmVzZXREaXJ0eVNvdXJjZVJl
Y3QoKSB7IG1fZGlydHlTb3VyY2VSZWN0ID0gTGF5b3V0UmVjdCgpOyB9CisgICAgR3JhcGhpY3ND
b250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZO
ZWVkZWQoKTsKIAogICAgIFJlbmRlckxheWVyJiBtX2xheWVyOwogCiAgICAgVmVjdG9yPFJlZlB0
cjxFbGVtZW50Pj4gbV9pbnRlcm5hbFNWR1JlZmVyZW5jZXM7CiAgICAgVmVjdG9yPENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50Pj4gbV9leHRlcm5hbFNWR1JlZmVyZW5jZXM7
CiAKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7CisgICAgRmxvYXRSZWN0
IG1fc291cmNlSW1hZ2VSZWN0OwogICAgIFJlZlB0cjxDU1NGaWx0ZXI+IG1fZmlsdGVyOworICAg
IGZsb2F0IG1fc2NhbGVGYWN0b3IgeyAxIH07CiAgICAgTGF5b3V0UmVjdCBtX2RpcnR5U291cmNl
UmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAg
CiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAgIExheW91dFBvaW50IG1fcGFpbnRPZmZz
ZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggNTA3OGY5Y2FlZmI1MDZmOTIyMzdmMmNlN2FiNmY2
ZTU5MjA4NjdiMS4uYzI5ZjIxNDBkYTVkMDJjNzg0OWZmYzdhN2QxZjZhZGRlOWZkMDljMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3Rl
bShyZW5kZXJlcik7CiAgICAgaWYgKCFjbGlwcGVyRGF0YS5pc1ZhbGlkRm9yR2VvbWV0cnkob2Jq
ZWN0Qm91bmRpbmdCb3gsIGNsaXBwZWRDb250ZW50Qm91bmRzLCBhYnNvbHV0ZVRyYW5zZm9ybSkp
IHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBu
b3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUg
Y29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2guCi0gICAgICAgIGF1dG8gbWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY2xpcHBlZENv
bnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBh
dXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNs
aXBwZWRDb250ZW50Qm91bmRzLCBhYnNvbHV0ZVRyYW5zZm9ybSwgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICBpZiAo
IW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApp
bmRleCAxOTUwOWQ5NzE4YWZmMTEwZjg0MWVjNDk3NmY5N2ZiMWE5MzRkOGE1Li43NWQxMzQ1NzFi
MjJmNzI2YTg5MzcxMDZiYjA3MDU2ODQ3MDI4Zjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtNCw2
ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMzcs
NiArMzksOCBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVy
cy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIu
aCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKQEAg
LTgyLDQ3ICs4NiwxMSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGll
bnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZv
ckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52
YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRp
dmVzKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3Vu
dENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91
bmRpbmdCb3goKTsKLQotICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0
byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpj
cmVhdGUoZmlsdGVyKSk7Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxl
bWVudCgpLnByaW1pdGl2ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5n
Qm94KHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBj
aGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRl
ckVsZW1lbnQoKSkpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksIGZpbHRlcik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBi
dWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhl
ZmZlY3QuY29weVJlZigpLCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNl
dFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVm
ZmVjdEJvdW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCku
cHJpbWl0aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1l
bnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVt
ZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0
ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNl
bHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRl
ci0+YWRkKGVsZW1lbnQucmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJl
dHVybiBidWlsZGVyOwotfQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJl
c291cmNlTW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUX1VOVVNFRChy
ZXNvdXJjZU1vZGUsICFyZXNvdXJjZU1vZGUpOwogCi0gICAgTE9HKEZpbHRlcnMsICJSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlciAlcCBhcHBseVJlc291cmNlIHJlbmRlcmVyICVwIiwgdGhpcywgJnJl
bmRlcmVyKTsKLQogICAgIGlmIChtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVu
ZGVyZXIpKSB7CiAgICAgICAgIEZpbHRlckRhdGEqIGZpbHRlckRhdGEgPSBtX3JlbmRlcmVyRmls
dGVyRGF0YU1hcC5nZXQoJnJlbmRlcmVyKTsKICAgICAgICAgaWYgKGZpbHRlckRhdGEtPnN0YXRl
ID09IEZpbHRlckRhdGE6OlBhaW50aW5nU291cmNlIHx8IGZpbHRlckRhdGEtPnN0YXRlID09IEZp
bHRlckRhdGE6OkFwcGx5aW5nKQpAQCAtMTMwLDEwMSArOTgsNTUgQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgUmVuZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdy
ZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJrZWQgZm9yIHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1
c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KICAgICB9CiAKKyAgICAvLyBCdWlsZCB0aGUgU1ZHRmls
dGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0gbWFrZVVuaXF1ZTxGaWx0ZXJEYXRhPigpOwotICAg
IEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94
KCk7Ci0KLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVz
b2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJF
bGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIGlmIChmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBT
VkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCkpOworICAgIGlmICghZmlsdGVyRGF0YS0+
ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byB0YXJnZXRCb3Vu
ZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgZmlsdGVyRGF0YS0+
Ym91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVy
RWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxlbWVudCgpLmZpbHRlclVuaXRzKCks
IHRhcmdldEJvdW5kaW5nQm94KTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCi0gICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRl
VHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25U
b091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwotICAgIGlmICghYWJzb2x1dGVU
cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0
byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCi0g
ICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zv
cm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRlVHJhbnNmb3JtLnlT
Y2FsZSgpLCAwLCAwKTsKLQotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBib3VuZGFyaWVzIG9m
IHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KKyAgICAvLyBDYWxjdWxhdGUgdGhl
IHNvdXJjZUltYWdlUmVjdAogICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24gPSByZW5kZXJl
ci5zdHJva2VCb3VuZGluZ0JveCgpOwogICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaW50
ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURy
YXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBS
ZWN0KGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24pOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBTVkdG
aWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVy
RWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6
Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURy
YXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBw
cmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBm
aWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRp
dmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBm
b3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4n
dCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9hdFJlY3QgdGVtcFNvdXJj
ZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRTaXplIHNjYWxlKDEsIDEp
OwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyh0ZW1wU291cmNlUmVjdC5zaXpl
KCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2Fs
ZS5oZWlnaHQoKSk7CiAKLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRlci4K
LSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0g
ICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVm
ZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9m
RWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAgIC8vIENhbGN1bGF0
ZSB0aGUgYWJzb2x1dGVUcmFuc2Zvcm0KKyAgICBhdXRvIGFic29sdXRlVHJhbnNmb3JtID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3Jk
aW5hdGVTeXN0ZW0ocmVuZGVyZXIpOworICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
XG4iIDw8ICpmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkpOwotCi0gICAgbGFzdEVm
ZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0
IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKLSAgICAvLyBBdCBsZWFz
dCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKLSAgICAvLyByZWNh
bGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgaWYg
KEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkp
IHsKLSAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxl
KTsKLSAgICAgICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhh
dmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KLSAgICAvLyBFdmVuIGlmIHRoZSB0
YXJnZXQgb2JqZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3
IHRoZSBsYXN0IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCi0gICAg
aWYgKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VS
VCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgICAg
IGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIG1fcmVuZGVyZXJG
aWx0ZXJEYXRhTWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUoZmlsdGVyRGF0YSkpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJz
b2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVh
cmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCisgICAgYXV0byBhYnNvbHV0ZVNjYWxlID0gRmxv
YXRTaXplKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2Nh
bGUoKSk7CisgICAgZmlsdGVyRGF0YS0+c2NhbGUgPSBGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRl
RmlsdGVyU2NhbGUoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgYWJzb2x1dGVTY2FsZSk7CiAK
LSAgICAvLyBDaGFuZ2UgdGhlIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB0byB0
aGUgZmlsdGVyZWQgZWxlbWVudCB0byByZWZsZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBmaWx0
ZXIuCi0gICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3Rp
dmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGVm
ZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRy
YW5zZm9ybSk7CisgICAgYXV0byBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRy
YW5zZm9ybShmaWx0ZXJEYXRhLT5zY2FsZS53aWR0aCgpLCAwLCAwLCBmaWx0ZXJEYXRhLT5zY2Fs
ZS5oZWlnaHQoKSwgMCwgMCk7CiAKLSAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgYXV0byBjb2xvclNwYWNlID0g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCk7CiAjZWxzZQogICAgIGF1dG8gY29s
b3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogI2VuZGlmCi0gICAgYXV0
byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
ZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBjb2xvclNwYWNl
LCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKKworICAgIGF1dG8gaG9zdFdpbmRvdyA9IHJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yb290KCkgPyByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkucm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworCisgICAgYXV0byBzb3VyY2VHcmFw
aGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+
ZHJhd2luZ1JlZ2lvbiwgc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGhvc3RXaW5kb3cpOwogICAgIGlmICghc291cmNl
R3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRh
aW5zKCZyZW5kZXJlcikpOwogICAgICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250
ZXh0OwogICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZN
b3ZlKGZpbHRlckRhdGEpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAg
ICAvLyBTZXQgdGhlIHJlbmRlcmluZyBtb2RlIGZyb20gdGhlIHBhZ2UncyBzZXR0aW5ncy4KLSAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CiAK
KyAgICAvLyBTZXQgdGhlIHdvcmtpbmcgR3JhcGhpY0NvbnRleHQgdG8gdGhlIGZpbHRlciBzb3Vy
Y2VHcmFwaGljCiAgICAgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VHcmFwaGljQ29udGV4dCA9IHNv
dXJjZUdyYXBoaWMtPmNvbnRleHQoKTsKLSAgCisKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFw
aGljQnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGljKTsKICAgICBmaWx0ZXJEYXRhLT5zYXZl
ZENvbnRleHQgPSBjb250ZXh0OwogCiAgICAgY29udGV4dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4
dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRl
cmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92
ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjY5LDM4ICsxOTEs
MjIgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZm
ZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlz
RW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmpl
Y3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQotICAgICAgICAvLyBpbml0aWFs
IGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0
IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCi0gICAgICAgIGlmIChmaWx0ZXJEYXRh
LnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQotICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0
ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVy
KSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0
IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICgh
bGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUg
PSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7
Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsK
LSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICB9CisgICAgaWYgKCFmaWx0ZXJEYXRh
LmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0
ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0
RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAg
ICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuc2NhbGUud2lkdGgo
KSwgMSAvIGZpbHRlckRhdGEuc2NhbGUuaGVpZ2h0KCkpKTsKIAotICAgICAgICAgICAgY29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhl
aWdodCgpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoKnJlc3VsdElt
YWdlLCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOworICAgICAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gdGFyZ2V0Qm91bmRpbmdTaXplOworICAgICAgICBp
ZiAoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQorICAgICAgICAgICAgdGFyZ2V0Qm91bmRpbmdT
aXplID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKS5zaXplKCk7CiAKLSAgICAgICAgICAg
IGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3Jt
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIg
PSBudWxscHRyOworICAgICAgICBhdXRvIGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyA9IFNWR0Zp
bHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKGZpbHRlckVsZW1lbnQo
KSwgcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKSk7CisgICAgICAgIEZpbHRlckdlb21ldHJ5
IGdlb21ldHJ5KGZpbHRlckRhdGEuYm91bmRhcmllcywgZmlsdGVyRGF0YS5zY2FsZSwgdGFyZ2V0
Qm91bmRpbmdTaXplLCBXVEZNb3ZlKGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cykpOworCisgICAg
ICAgIGNvbnRleHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLnNvdXJjZUdyYXBo
aWNCdWZmZXIuZ2V0KCksIGZpbHRlckRhdGEuZHJhd2luZ1JlZ2lvbiwgKmZpbHRlckRhdGEuZmls
dGVyLCBnZW9tZXRyeSk7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAiIDw8IHRoaXMgPDwgIiBwb3N0QXBwbHlSZXNvdXJj
ZSBkb25lXG4iKTsKKyAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5zY2FsZSk7Cisg
ICAgfQogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlc291cmNlQm91
bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCkBAIC0zMDgsMjcgKzIxNCwxMyBA
QCBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlc291cmNlQm91bmRpbmdCb3go
Y29uc3QgUmVuZGVyT2JqZWN0JiBvYmplYwogICAgIHJldHVybiBTVkdMZW5ndGhDb250ZXh0Ojpy
ZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJFbGVtZW50KCksIGZpbHRl
ckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCBvYmplY3Qub2JqZWN0Qm91bmRpbmdCb3goKSk7CiB9
CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5n
ZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkK
K3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpCiB7Ci0gICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBwcmltaXR2ZSA9IHN0YXRpY19jYXN0PFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KG9iamVjdC0+bm9kZSgpKTsKLQotICAgIExP
RyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgJXAgcHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZCByZW5kZXJlciAlcCIsIHRoaXMsIG9iamVjdCk7Ci0KICAgICBmb3IgKGNvbnN0IGF1
dG8mIG9iamVjdEZpbHRlckRhdGFQYWlyIDogbV9yZW5kZXJlckZpbHRlckRhdGFNYXApIHsKICAg
ICAgICAgY29uc3QgYXV0byYgZmlsdGVyRGF0YSA9IG9iamVjdEZpbHRlckRhdGFQYWlyLnZhbHVl
OwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKiBidWlsZGVy
ID0gZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBlZmZl
Y3QgPSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9iamVjdCk7Ci0gICAgICAgIGlmICghZWZm
ZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIFNpbmNlIGFsbCBlZmZlY3Rz
IHNoYXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUsIGFsbAotICAgICAgICAvLyBvciBub25l
IG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAgICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0
ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZmZWN0KTsKLQogICAg
ICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgogICAgICAgICBtYXJrQ2xp
ZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFpci5rZXksIFJlcGFpbnRJbnZh
bGlkYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA4Y2UwYzdhYmMxNDNiZGI2NTM4NTBj
OTNlMzI5MmFjOWRhNDliYmM3Li44YzBmMGZjMTM2MmY5ZjBlMDQ0NjI4NWJlOTk3NmQyMzExYjQz
YTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNp
bmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQz
LDExICs0Miw5IEBAIHB1YmxpYzoKIAogICAgIEZpbHRlckRhdGEoKSA9IGRlZmF1bHQ7CiAKLSAg
ICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRl
ckJ1aWxkZXI+IGJ1aWxkZXI7CisgICAgUmVmUHRyPEZpbHRlcj4gZmlsdGVyOwogICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpY0J1ZmZlcjsKICAgICBHcmFwaGljc0NvbnRleHQq
IHNhdmVkQ29udGV4dCB7IG51bGxwdHIgfTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXM7CiAgICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb247CiAgICAgRmxvYXRTaXplIHNjYWxlOwpAQCAtNzIsOCArNjksNiBA
QCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJPYmplY3QmKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJikgY29uc3Q7Ci0KICAgICBpbmxpbmUgU1ZH
VW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0ZXJVbml0cygpIGNvbnN0OwogICAgIGlubGluZSBT
VkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKaW5kZXggYWRkNzFhNjYzN2FiMjQ1YTljYzQ0MmFl
MGJmM2M5ODcwZTRjOTFiYy4uZTQyNzc0MmY1MWY5MjNiZDBjN2NkZDk5M2M3NGE2YTU5YzVjZDg0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKQEAgLTU1LDIyICs1NSwxOCBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29ucwogewogICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
cjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCi0gICAgYXV0byogZmlsdGVyID0g
cGFyZW50KCk7Ci0gICAgaWYgKCFmaWx0ZXIpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChk
aWZmID09IFN0eWxlRGlmZmVyZW5jZTo6RXF1YWwgfHwgIW9sZFN0eWxlKQogICAgICAgICByZXR1
cm47CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpLnN2Z1N0
eWxlKCk7CiAgICAgaWYgKGlzPFNWR0ZFRmxvb2RFbGVtZW50PihmaWx0ZXJQcmltaXRpdmVFbGVt
ZW50KCkpKSB7CiAgICAgICAgIGlmIChuZXdTdHlsZS5mbG9vZENvbG9yKCkgIT0gb2xkU3R5bGUt
PnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXIpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQodGhpcywg
U1ZHTmFtZXM6OmZsb29kX2NvbG9yQXR0cik7CisgICAgICAgICAgICBmaWx0ZXJQcmltaXRpdmVF
bGVtZW50KCkucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChTVkdOYW1lczo6Zmxvb2RfY29sb3JB
dHRyKTsKICAgICAgICAgaWYgKG5ld1N0eWxlLmZsb29kT3BhY2l0eSgpICE9IG9sZFN0eWxlLT5z
dmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXIpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQodGhpcywg
U1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKTsKKyAgICAgICAgICAgIGZpbHRlclByaW1pdGl2
ZUVsZW1lbnQoKS5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFNWR05hbWVzOjpmbG9vZF9vcGFj
aXR5QXR0cik7CiAgICAgfSBlbHNlIGlmIChpczxTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ+
KGZpbHRlclByaW1pdGl2ZUVsZW1lbnQoKSkgfHwgaXM8U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudD4oZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpKSkgewogICAgICAgICBpZiAobmV3U3R5bGUu
bGlnaHRpbmdDb2xvcigpICE9IG9sZFN0eWxlLT5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSkK
LSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyPigqZmlsdGVyKS5w
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKHRoaXMsIFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0
dHIpOworICAgICAgICAgICAgZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpLnByaW1pdGl2ZUF0dHJp
YnV0ZUNoYW5nZWQoU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cik7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCmluZGV4IGIyMzg3ODYyZGRmMjIyMTcxZTRhNWQ5YzJkZjU1ZjZjOTgzOWJi
NjIuLjZhNTNhZmExZWJkMTRmNzAzMTM5Njc1ODA0ZmY3YjI4NWM3ZTUyYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAjZW5kaWYK
IAogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5v
dCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBj
b250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2Ug
PSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJz
b2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGRlNDkzMjgyNjNkMDYyYTIzNWJjZDJmNDY2N2Vl
ZjA5YzEyZWIzYjMuLjZmNzZmMjBjOWM5ZGNkYTUyMTIwNTMyNzQwNmE4ZWM0MWE5MzBmY2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQu
aCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtNTIsNiArNTMsNyBAQAogI2lu
Y2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBl
cnMuaCIKICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRl
ci5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3hJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU1ZH
TGluZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgpAQCAtNDMxLDEzICs0
MzMsOSBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBh
aXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci5wcmltaXRpdmVVbml0cygpKTsKICAgICAg
ICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIg
d2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAgICAgICBGbG9hdFJlY3QgZHVtbXlS
ZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5l
VHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAg
ICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRl
ci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZH
RmlsdGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLQotICAgICAgICAgICAgaWYg
KEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKLSAgICAg
ICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICAg
ICAgICAgIGR1bW15RmlsdGVyLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291
cmNlVHlwZSkgewogICAgICAgICBjb25zdCBhdXRvJiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyJj4ocmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggZmFi
ZWUzMDVjNzMxOGQ3MjczMjkzZDU2MmI0ZGZlNTdjNjBmNzhiZC4uMzlhNDhkZGU4Yzk4ZDdjMGVl
NzQ4ZDQzOTcxMjhkZmM3MWI3ZTMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0yMjgsNyArMjI4LDcgQEAgQWZm
aW5lVHJhbnNmb3JtIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9u
VG9PdXRlcm1vc3RDb29yZGluYXQKICAgICByZXR1cm4gYWJzb2x1dGVUcmFuc2Zvcm07CiB9CiAK
LVJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQogewogICAgIEludFJlY3QgcGFpbnRSZWN0ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJS
ZWN0KHRhcmdldFJlY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKICAgICAvLyBEb24ndCBjcmVhdGUg
ZW1wdHkgSW1hZ2VCdWZmZXJzLgpAQCAtMjM4LDEyICsyMzgsNyBAQCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgdGFyZwogICAgIEZsb2F0U2l6ZSBzY2FsZTsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOwogCi0j
aWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0LCAxLCBjb2xvclNwYWNlLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0g
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJl
bmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0jZW5kaWYK
KyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
cmVuZGVyaW5nTW9kZSwgU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJpbmdQdXJwb3Nl
OjpET00sIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaG9zdFdpbmRvdyk7CiAg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXgg
NTk2NTk3YmUxMjQ3YTk2YTYwNGFjY2Y0NTdlMDkyOWZkMGY1MGEwZS4uYzM5ZmIxMDJlYmQxZjY5
YzgxYjQyN2U3ODEzZjNhOGQ4NGIzOWFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiwgUGFp
bnRJbmZvJiwgTmVlZHNHcmFwaGljc0NvbnRleHRTYXZlID0gRG9udFNhdmVHcmFwaGljc0NvbnRl
eHQpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdQcmVwYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyaW5nRmxhZ3MgJiBSZW5kZXJpbmdQcmVwYXJlZDsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0g
bnVsbHB0cik7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdN
b2RlLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwogICAgIHN0YXRpYyBSZWZQdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpOwogCiAg
ICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmLCBS
ZW5kZXJFbGVtZW50JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQmxlbmRFbGVtZW50LmNwcAppbmRleCA3YmNmMDQxODAwZjc5OWYxMTc0Y2ZlMDRiODIy
ZDZkMDY0MzFmNjg2Li4yZWYwN2U0ZDhkYTFmYmQ3ODgxM2RiZjExZTU3OTEzMDk3MjNkYmYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTczLDE2ICs3Myw2
IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZH
RkVCbGVuZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVm
ZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVCbGVuZCogYmxl
bmQgPSBzdGF0aWNfY2FzdDxGRUJsZW5kKj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6Om1vZGVBdHRyKQotICAgICAgICByZXR1cm4gYmxlbmQtPnNldEJsZW5kTW9kZSht
b2RlKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
bW9kZUF0dHIpIHsKQEAgLTEwMCwyMCArOTAsMjcgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0Cit2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2Vk
KEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
ICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7Cisg
ICAgRkVCbGVuZCYgYmxlbmQgPSBkb3duY2FzdDxGRUJsZW5kPihlZmZlY3QpOworICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCisgICAgICAgIGJsZW5kLnNldEJsZW5kTW9k
ZShtb2RlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQor
eworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0
byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMigpKTsKIAogICAgIGlmICghaW5wdXQx
IHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3Qg
PSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVj
dHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsK
LSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAg
ICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSkpOworCisgICAgcmV0
dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCksIGlucHV0Mi5y
ZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2Li42
NTA4ODFmZTIyNmU1ZGFmYjU4MzdlOTFjNDIwYzU3MTQyNTVjMjE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKaW5kZXggMDUyNDg1
NzhjMjc0YzhmYTJiM2UxZjI0NGU0MzY3ODY4ZjQyYmE5Yy4uNjkzNGM4ZTJmYzU1OTA2NDZlZjI2
NGQ5OTc3YTdjZTJlYzE3ZTg4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuY3BwCkBAIC03MSwxOCArNzEsNiBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25z
dCBBdAogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFQ29sb3JNYXRyaXgqIGNvbG9yTWF0cml4ID0g
c3RhdGljX2Nhc3Q8RkVDb2xvck1hdHJpeCo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbG9yTWF0cml4LT5zZXRUeXBl
KHR5cGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQotICAg
ICAgICByZXR1cm4gY29sb3JNYXRyaXgtPnNldFZhbHVlcyh2YWx1ZXMoKSk7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0ciB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikgewpAQCAtMTAwLDUwICs4OCw2MyBAQCB2
b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBl
ZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQx
ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KLSAgICBpZiAoIWlucHV0
MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgY29sb3JNYXRyaXggPSBkb3du
Y2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dHlwZUF0dHIpIHsKKyAgICAgICAgY29sb3JNYXRyaXguc2V0Q29sb3JNYXRyaXhUeXBlKHR5
cGUoKSk7CisgICAgICAgIGNvbG9yTWF0cml4LnNldFZhbHVlcyhmaWx0ZXJWYWx1ZXMoKSk7Cisg
ICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikKKyAgICAgICAg
Y29sb3JNYXRyaXguc2V0VmFsdWVzKGZpbHRlclZhbHVlcygpKTsKKyAgICBlbHNlCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi0gICAgVmVjdG9yPGZsb2F0PiBmaWx0ZXJWYWx1
ZXM7Ci0gICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGUgPSB0eXBlKCk7CitWZWN0b3I8Zmxv
YXQ+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpmaWx0ZXJWYWx1ZXMoKSBjb25zdAoreworICAg
IFZlY3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzID0gdmFsdWVzKCk7CisgICAgdW5zaWduZWQgc2l6
ZSA9IHZhbHVlcygpLnNpemUoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1hdHJp
eFZhbHVlQ291bnQgPSAyMDsKIAogICAgIC8vIFVzZSBkZWZhdWx0cyBpZiB2YWx1ZXMgaXMgZW1w
dHkgKFNWRyAxLjEgMTUuMTApLgotICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1
ZXNBdHRyKSkgewotICAgICAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKLSAgICAgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG1hdHJpeFZhbHVlQ291bnQgPSAyMDsKLSAgICAgICAgICAgIGZpbHRlclZhbHVl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hdHJpeFZhbHVlQ291bnQpOworICAgIHN3aXRjaCAo
dHlwZSgpKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBp
ZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0cikgfHwgc2l6ZSAhPSBtYXRyaXhW
YWx1ZUNvdW50KSB7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0cml4VmFsdWVDb3VudDsgaSsrKQotICAgICAg
ICAgICAgICAgIGZpbHRlclZhbHVlcy51bmNoZWNrZWRBcHBlbmQoKGkgJSA2KSA/IDAgOiAxKTsK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlcy5hcHBlbmQo
KGkgJSA2KSA/IDAgOiAxKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgorICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFs
dWVzQXR0cikgfHwgc2l6ZSAhPSAxKQogICAgICAgICAgICAgZmlsdGVyVmFsdWVzID0geyAwIH07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FU
VVJBVEU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FU
VVJBVEU6CisgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB8
fCBzaXplICE9IDEpCiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB7IDEgfTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25lZCBzaXplID0gdmFsdWVzKCkuc2l6ZSgp
OwotCi0gICAgICAgIGlmICgoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
ICYmIHNpemUgIT0gMjApCi0gICAgICAgICAgICB8fCAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFICYmIHNpemUgIT0gMSkKLSAgICAgICAgICAgIHx8IChmaWx0ZXJU
eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSAmJiBzaXplICE9IDEpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAotICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB2
YWx1ZXMoKTsKLSAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CisgICAgICAgIGJy
ZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3Zl
KGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7Cisg
ICAgcmV0dXJuIGZpbHRlclZhbHVlczsKK30KKworCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9
IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGlmICghaW5wdXQxKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0Rmls
dGVyRWZmZWN0KEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSh0eXBlKCksIGZpbHRlclZhbHVlcygpKSk7
CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwo
KSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3YWIxOThiMTJlNzdi
ZTIwNmI5YzVjNDEwMjNmZC4uZjhkZWE1MjFiOTFhMzU3MDk1YzExYjU4M2E2M2I3NDAwODJlMjM5
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKQEAg
LTg1LDggKzg1LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBi
b29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3RvcjxmbG9hdD4g
ZmlsdGVyVmFsdWVzKCkgY29uc3Q7CisKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNo
YW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAK
aW5kZXggOTBhNTViN2VmZmY3YTNmZTYwNmE5ZTA1NzlhNzZlZGU5Zjk2ODAxMS4uOWQ0ODQ3MTEw
MGRjMjk1NTUzMWQ1ZWZjNzM1MTJkM2Y1NTUzYzA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC02MywxMiArNjMs
MTQgQEAgdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY28KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0
dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxk
ZXIpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkp
OwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsg
ZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogCiAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWQ7CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBncmVlbjsKQEAgLTg1LDEwICs4NywxMCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdAogICAg
ICAgICBlbHNlIGlmIChpczxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQpKQogICAgICAgICAgICAg
YWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVudD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rp
b24oKTsKICAgICB9Ci0gICAgCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKworICAgIHNl
dEZpbHRlckVmZmVjdChGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpKTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxl
YXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVk
YWM2ZThiOTkzYTRkZDU0ODYzLi42NWY2OTYxMTBjMzFhMjdiYjZkY2VhMzExMzA0MGZjOTEwNjY0
M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBzdmdB
dHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8
U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlz
KSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAppbmRl
eCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUyMDVhYzk4MjM1Li5iZDA0MDA5NjA0NDVl
ZDcyOGRhMWI0ZGM2ZTkxOWEzMmQ5ZTE2NzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtNDAsNyArNDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3Bl
cnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29t
cG9zaXRlRWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lz
dGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1f
aW4yPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05h
bWVzOjpvcGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUsICZTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJl
Z2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgRkVDb21wb3NpdGVPcGVyYXRv
ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21wb3NpdGVPcGVyYXRvcj4oKTsKICAgICAg
ICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAm
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2sxPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6Om1fazI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8
U1ZHTmFtZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2
LDkgKzU2LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4gU1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JB
dHRyKSB7Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgcHJvcGVydHlWYWx1ZSA9IFNW
R1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVl
KTsKKyAgICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVy
dHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZyb21TdHJpbmcodmFsdWUpOwogICAgICAg
ICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5zZXRC
YXNlVmFsSW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4ocHJvcGVydHlWYWx1ZSk7Cisg
ICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21w
b3NpdGVPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTk1LDI1ICs5NSw2IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tCiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7
CiB9CiAKLWJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1
dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQot
ewotICAgIEZFQ29tcG9zaXRlKiBjb21wb3NpdGUgPSBzdGF0aWNfY2FzdDxGRUNvbXBvc2l0ZSo+
KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCi0g
ICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldE9wZXJhdGlvbihzdmdPcGVyYXRvcigpKTsKLSAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbXBv
c2l0ZS0+c2V0SzEoazEoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMkF0dHIp
Ci0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsyKGsyKCkpOwotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6azNBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRlLT5zZXRLMyhr
MygpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Oms0QXR0cikKLSAgICAgICAgcmV0
dXJuIGNvbXBvc2l0ZS0+c2V0SzQoazQoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmsxQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azJBdHRyIHx8IGF0dHJOYW1l
ID09IFNWR05hbWVzOjprM0F0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Oms0QXR0cikgewpA
QCAtMTMxLDIwICsxMTIsMzUgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3ZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2Vk
KEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
ICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7Ci0g
ICAgCisgICAgYXV0byYgY29tcG9zaXRlID0gZG93bmNhc3Q8RkVDb21wb3NpdGU+KGVmZmVjdCk7
CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCisgICAgICAgIGNv
bXBvc2l0ZS5zZXRDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcGVyYXRvcigpKTsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQorICAgICAgICBjb21wb3NpdGUu
c2V0SzEoazEoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikK
KyAgICAgICAgY29tcG9zaXRlLnNldEsyKGsyKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprM0F0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRLMyhrMygpKTsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKQorICAgICAgICBjb21wb3NpdGUu
c2V0SzQoazQoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZl
Y3Q+Pj4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWls
ZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7Cisg
ICAgYXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMigpKTsKKwogICAgIGlmICgh
aW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBl
ZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwg
azIoKSwgazMoKSwgazQoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMg
PSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNp
dHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0
cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVm
ZmVjdChGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbXBvc2l0ZU9wZXJhdG9yKCksIGsxKCksIGsyKCks
IGszKCksIGs0KCkpKTsKKyAgICAKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1
dDEucmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKaW5kZXggODFhNzhj
ODY1N2EwZmEzMDQ0ZGY1YjdjNWEwODBkNmU3Nzk3MjJmNi4uZWZiY2Y1ZDEzNjAyOWM3NTdjYTFi
YTgxZGU5ODgwNDA0ZjRhNzNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9zaXRlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuaApAQCAtMjcsMTUgKzI3LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRl
bXBsYXRlPD4KLWlubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPENvbXBvc2l0ZU9wZXJh
dGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUM7IH0KK2lubGluZSB1bnNpZ25lZCBTVkdJRExFbnVtTGltaXRz
PEZFQ29tcG9zaXRlT3BlcmF0b3I+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJu
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KIAogdGVtcGxhdGU8Pgotc3RydWN0
IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+IHsKK3N0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPiB7CiAgICAgc3RhdGljIHVuc2lnbmVk
IGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVS
OyB9CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUg
dHlwZSkKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
c3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAgICAgICBjYXNlIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1
Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4gewogICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIEZFQ29t
cG9zaXRlT3BlcmF0b3IgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKHZhbHVlID09ICJvdmVyIikKICAgICAgICAgICAgIHJldHVybiBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9PVkVSOwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcg
aW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgU3RyaW5n
IGluMigpIGNvbnN0IHsgcmV0dXJuIG1faW4yLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIENvbXBv
c2l0ZU9wZXJhdGlvblR5cGUgc3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJh
dG9yLT5jdXJyZW50VmFsdWU8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4oKTsgfQorICAgIEZFQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBv
c2l0ZU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8RkVDb21wb3NpdGVPcGVyYXRvcj4oKTsgfQogICAg
IGZsb2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBm
bG9hdCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazItPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxv
YXQgazMoKSBjb25zdCB7IHJldHVybiBtX2szLT5jdXJyZW50VmFsdWUoKTsgfQpAQCAtOTMsNyAr
OTMsNyBAQCBwdWJsaWM6CiAKICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7
IHJldHVybiBtX2luMTsgfQogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjJBbmltYXRlZCgpIHsg
cmV0dXJuIG1faW4yOyB9Ci0gICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JB
bmltYXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1l
cmF0aW9uJiBjb21wb3NpdGVPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9jb21wb3NpdGVP
cGVyYXRvcjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrMUFuaW1hdGVkKCkgeyByZXR1cm4g
bV9rMTsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrMkFuaW1hdGVkKCkgeyByZXR1cm4gbV9r
MjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrM0FuaW1hdGVkKCkgeyByZXR1cm4gbV9rMzsg
fQpAQCAtMTA4LDEzICsxMDgsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBm
aWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJp
ZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07
CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpj
cmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4yIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+IG1fY29tcG9zaXRlT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVh
dGUodGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKICAgICBSZWY8U1ZHQW5pbWF0
ZWROdW1iZXI+IG1fazEgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2syIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0
aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMyB7IFNWR0FuaW1hdGVkTnVt
YmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvc2l0ZUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5pZGwKaW5kZXggNzhlNDAyMDdmNWIwMmY2NzBmMDQwYjI5Mzc1ZWFkN2MyYjQ1MmRl
MC4uZmM2NzBjOWVjNTZjNDFjMTA5Mjg1NDg0MjdjNWY2YThlMTg1YjFhNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKQEAgLTM4LDcgKzM4LDcgQEAK
IAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBpbjI7Ci0gICAgW0lt
cGxlbWVudGVkQXM9c3ZnT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uIG9wZXJhdG9yOworICAgIFtJbXBsZW1lbnRlZEFzPWNvbXBvc2l0ZU9wZXJhdG9y
XSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMTsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMjsKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBrMzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IGY3NTA1ODE1ZGVjYWJi
NGVhMzRiNDM1YjQ3ZWE1YTgwYzZhMjZkZjEuLjY0ODIzMjEwNWI5ZmU0YzM3NTNiYjg0OTE3OTU2
YmU0MjBmNjk3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50LmNwcApAQCAtMTM4LDI4ICsxMzgsNiBAQCB2b2lkIFNWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdAogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFQ29udm9sdmVNYXRyaXgqIGNvbnZvbHZl
TWF0cml4ID0gc3RhdGljX2Nhc3Q8RkVDb252b2x2ZU1hdHJpeCo+KGVmZmVjdCk7Ci0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0dHIpCi0gICAgICAgIHJldHVybiBjb252
b2x2ZU1hdHJpeC0+c2V0RWRnZU1vZGUoZWRnZU1vZGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpkaXZpc29yQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5z
ZXREaXZpc29yKGRpdmlzb3IoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiaWFz
QXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRCaWFzKGJpYXMoKSk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRYQXR0cikKLSAgICAgICAgcmV0dXJu
IGNvbnZvbHZlTWF0cml4LT5zZXRUYXJnZXRPZmZzZXQoSW50UG9pbnQodGFyZ2V0WCgpLCB0YXJn
ZXRZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFlBdHRyKQotICAg
ICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJn
ZXRYKCksIHRhcmdldFkoKSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpCi0gICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0S2VybmVs
VW5pdExlbmd0aChGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5n
dGhZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRy
KQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldFByZXNlcnZlQWxwaGEocHJlc2Vy
dmVBbHBoYSgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c2V0T3JkZXIoZmxvYXQg
eCwgZmxvYXQgeSkKIHsKICAgICBtX29yZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHgpOwpAQCAt
MTkxLDEzICsxNjksMzYgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0Cit2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOworICAgIGF1dG8mIGNvbnZvbHZlTWF0cml4ID0gZG93bmNhc3Q8RkVDb252b2x2ZU1h
dHJpeD4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0
cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0RWRnZU1vZGUoZWRnZU1vZGUoKSk7CisgICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpdmlzb3JBdHRyKQorICAgICAgICBjb252
b2x2ZU1hdHJpeC5zZXREaXZpc29yKGRpdmlzb3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmJpYXNBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRCaWFzKGJp
YXMoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKQor
ICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRUYXJnZXRPZmZzZXQoSW50UG9pbnQodGFyZ2V0WCgp
LCB0YXJnZXRZKCkpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0
WUF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0
YXJnZXRYKCksIHRhcmdldFkoKSkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjprZXJuZWxVbml0TGVuZ3RoQXR0cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0S2VybmVs
VW5pdExlbmd0aChGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5n
dGhZKCkpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBo
YUF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNldFByZXNlcnZlQWxwaGEocHJlc2VydmVB
bHBoYSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCitz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVp
bGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwog
ICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAorICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmls
dGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OworICAgIAogICAgIGlu
dCBvcmRlclhWYWx1ZSA9IG9yZGVyWCgpOwogICAgIGludCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgp
OwogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpvcmRlckF0dHIpKSB7CkBAIC0yMDYs
MjIgKzIwNywyMiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgIH0KICAgICAvLyBTcGVj
IHNheXMgb3JkZXIgbXVzdCBiZSA+IDAuIEJhaWwgaWYgaXQgaXMgbm90LgogICAgIGlmIChvcmRl
clhWYWx1ZSA8IDEgfHwgb3JkZXJZVmFsdWUgPCAxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvJiBrZXJuZWxNYXRyaXggPSB0aGlzLT5rZXJu
ZWxNYXRyaXgoKTsKICAgICBpbnQga2VybmVsTWF0cml4U2l6ZSA9IGtlcm5lbE1hdHJpeC5pdGVt
cygpLnNpemUoKTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoaXMgaXMgYSByZXF1aXJlbWVudCwg
YW5kIHNob3VsZCBiYWlsIG91dCBpZiBmYWlscwogICAgIGlmIChvcmRlclhWYWx1ZSAqIG9yZGVy
WVZhbHVlICE9IGtlcm5lbE1hdHJpeFNpemUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgaW50IHRhcmdldFhWYWx1ZSA9IHRhcmdldFgoKTsKICAg
ICBpbnQgdGFyZ2V0WVZhbHVlID0gdGFyZ2V0WSgpOwogICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OnRhcmdldFhBdHRyKSAmJiAodGFyZ2V0WFZhbHVlIDwgMCB8fCB0YXJnZXRYVmFsdWUg
Pj0gb3JkZXJYVmFsdWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBkZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRY
ID0gZmxvb3IgKCBvcmRlclggLyAyICkpCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnRhcmdldFhBdHRyKSkKICAgICAgICAgdGFyZ2V0WFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pihm
bG9vcmYob3JkZXJYVmFsdWUgLyAyKSk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
dGFyZ2V0WUF0dHIpICYmICh0YXJnZXRZVmFsdWUgPCAwIHx8IHRhcmdldFlWYWx1ZSA+PSBvcmRl
cllWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9Owog
ICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXM6IHRhcmdldFkgPSBmbG9v
ciAoIG9yZGVyWSAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0
WUF0dHIpKQogICAgICAgICB0YXJnZXRZVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihv
cmRlcllWYWx1ZSAvIDIpKTsKQEAgLTIzNCwxMSArMjM1LDExIEBAIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCCiAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUgPSAxOwogICAgIH0KICAgICBp
ZiAoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSA8PSAwIHx8IGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUg
PD0gMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBmbG9hdCBkaXZpc29yVmFsdWUgPSBkaXZpc29yKCk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6ZGl2aXNvckF0dHIpICYmICFkaXZpc29yVmFsdWUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjpkaXZpc29yQXR0cikpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXJuZWxN
YXRyaXhTaXplOyArK2kpCiAgICAgICAgICAgICBkaXZpc29yVmFsdWUgKz0ga2VybmVsTWF0cml4
Lml0ZW1zKClbaV0tPnZhbHVlKCk7CkBAIC0yNDYsOSArMjQ3LDEyIEBAIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiBmaWx0ZXJCCiAgICAgICAgICAgICBkaXZpc29yVmFsdWUgPSAxOwogICAgIH0KIAotICAgIGF1
dG8gZWZmZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgSW50U2l6ZShvcmRl
clhWYWx1ZSwgb3JkZXJZVmFsdWUpLCBkaXZpc29yVmFsdWUsIGJpYXMoKSwgSW50UG9pbnQodGFy
Z2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9kZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVu
aXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCks
IGtlcm5lbE1hdHJpeCk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07
Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBJbnRTaXplKG9yZGVy
WFZhbHVlLCBvcmRlcllWYWx1ZSk7CisgICAgYXV0byB0YXJnZXRPZmZzZXQgPSBJbnRQb2ludCh0
YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSk7CisgICAgYXV0byBrZXJuZWxVbml0TGVuZ3RoID0g
RmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVl
KTsKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGtlcm5lbFNp
emUsIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlKCksIGtlcm5l
bFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KSk7CisKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTVi
OGQ5MDQ5YjMzOS4uMGUwOGUyOWFjMzFjMTU4YjBkZDBjN2JiNmQ1YmUyYjdjMTQ0YzMyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAg
LTEwMiw4ICsxMDIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVm
ZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAog
ICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBS
ZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0
aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1
Li41ZTU4OGZlOTcwNjIyYTgxYWVmZDMxYmUwMzNhZWQ5NjdjYTQ1MjY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtODEs
NTAgKzgxLDYgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnMKICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAot
Ym9vbCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17
Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcqIGRpZmZ1c2VMaWdodGluZyA9IHN0YXRpY19jYXN0PEZF
RGlmZnVzZUxpZ2h0aW5nKj4oZWZmZWN0KTsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bGlnaHRpbmdfY29sb3JBdHRyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpOwotICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgICAgICBD
b2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7Ci0gICAgfQot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKLSAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsK
LSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCi0gICAg
ICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29u
c3RhbnQoKSk7Ci0KLSAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3Vy
Y2UmPihkaWZmdXNlTGlnaHRpbmctPmxpZ2h0U291cmNlKCkpOwotICAgIGNvbnN0IFNWR0ZFTGln
aHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxl
bWVudCh0aGlzKTsKLSAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKLQotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5z
ZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRF
bGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24oKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFgobGlnaHRF
bGVtZW50LT54KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAg
ICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0RWxlbWVudC0+eSgpKTsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnpBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uu
c2V0WihsaWdodEVsZW1lbnQtPnooKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpw
b2ludHNBdFhBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRYKGxp
Z2h0RWxlbWVudC0+cG9pbnRzQXRYKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
cG9pbnRzQXRZQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WShs
aWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnBvaW50c0F0WkF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFoo
bGlnaHRFbGVtZW50LT5wb2ludHNBdFooKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFNw
ZWN1bGFyRXhwb25lbnQobGlnaHRFbGVtZW50LT5zcGVjdWxhckV4cG9uZW50KCkpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQotICAgICAgICBy
ZXR1cm4gbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25lQW5nbGUobGlnaHRFbGVtZW50LT5saW1p
dGluZ0NvbmVBbmdsZSgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyIHx8IGF0dHJOYW1lID09IFNWR05h
bWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxV
bml0TGVuZ3RoQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRy
KSB7CkBAIC0xNTEsMjggKzEwNyw4MCBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0
JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5w
dXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byYgZGlm
ZnVzZUxpZ2h0aW5nID0gZG93bmNhc3Q8RkVEaWZmdXNlTGlnaHRpbmc+KGVmZmVjdCk7CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikgeworICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAgICAgICAgQVNT
RVJUKHJlbmRlcmVyKTsKKyAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5j
b2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxp
Z2h0aW5nQ29sb3IoKSk7CisgICAgICAgIGRpZmZ1c2VMaWdodGluZy5zZXRDb2xvcihjb2xvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN1cmZhY2VTY2FsZUF0dHIpIHsKKyAgICAgICAgZGlmZnVzZUxpZ2h0aW5nLnNldFN1cmZhY2VT
Y2FsZShzdXJmYWNlU2NhbGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyKSB7CisgICAgICAg
IGRpZmZ1c2VMaWdodGluZy5zZXREaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9j
YXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5nLnNvdXJjZSgpKTsKKyAgICBjb25zdCBT
VkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRM
aWdodEVsZW1lbnQodGhpcyk7CisgICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7CisKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5z
ZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0RWxl
dmF0aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0aW9uKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0WChsaWdodEVsZW1l
bnQtPngoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAg
ICAgICBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0RWxlbWVudC0+eSgpKTsKKyAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFoobGln
aHRFbGVtZW50LT56KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2lu
dHNBdFhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFgobGlnaHRFbGVtZW50
LT5wb2ludHNBdFgoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50
c0F0WUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQt
PnBvaW50c0F0WSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRz
QXRaQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRaKGxpZ2h0RWxlbWVudC0+
cG9pbnRzQXRaKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxh
ckV4cG9uZW50QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0U3BlY3VsYXJFeHBvbmVudChs
aWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uu
c2V0TGltaXRpbmdDb25lQW5nbGUobGlnaHRFbGVtZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7
CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAo
IWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVj
dCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIAogICAgIFJlZlB0ciBsaWdodEVs
ZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKICAgICBp
ZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRT
b3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1l
bnQtPmxpZ2h0U291cmNlKGJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVy
LT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2
Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNl
TGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNv
bnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1v
dmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEg
fTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHNldEZpbHRlckVmZmVjdChGRURpZmZ1c2VMaWdo
dGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtl
cm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpKSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5v
bk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuaAppbmRleCA2ODk5OTYwOWY0YjZiNTZhNzZjODhlYTU2OTVmMWUw
ZTllMjA1NTgwLi41ZmFkNzU5NTQ1MDYzZjMyZTU0MWY5ZmQ0NjBhNzkwZmRhMDA5N2M5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCkBA
IC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBi
b29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZm
ZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAg
ICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJl
ZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRo
aXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2YTI2OWVhNmQ3MjJkZmQwNTE3M2Q4YzIu
LmE4M2JhYTRjZmIwNGIzMmMzMGRjYWVmN2JmY2U0MGIzZjgwMmQ0NTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCkBAIC04NCwy
MCArODQsNiBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29ucwogICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1i
b29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsK
LSAgICBGRURpc3BsYWNlbWVudE1hcCogZGlzcGxhY2VtZW50TWFwID0gc3RhdGljX2Nhc3Q8RkVE
aXNwbGFjZW1lbnRNYXAqPihlZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eENoYW5uZWxTZWxlY3RvckF0dHIpCi0gICAgICAgIHJldHVybiBkaXNwbGFjZW1lbnRNYXAtPnNl
dFhDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKQotICAgICAgICByZXR1cm4gZGlzcGxh
Y2VtZW50TWFwLT5zZXRZQ2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IoKSk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzY2FsZUF0dHIpCi0gICAgICAgIHJldHVybiBkaXNw
bGFjZW1lbnRNYXAtPnNldFNjYWxlKHNjYWxlKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0ciB8fCBhdHRyTmFtZSA9
PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CkBAIC0xMTUsMjAgKzEwMSwzMSBAQCB2b2lkIFNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgYXV0byYgZGlzcGxh
Y2VtZW50TWFwID0gZG93bmNhc3Q8RkVEaXNwbGFjZW1lbnRNYXA+KGVmZmVjdCk7CisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVjdG9yQXR0cikKKyAgICAgICAgZGlz
cGxhY2VtZW50TWFwLnNldFhDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcigpKTsKKyAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIpCisg
ICAgICAgIGRpc3BsYWNlbWVudE1hcC5zZXRZQ2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0
b3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikKKyAg
ICAgICAgZGlzcGxhY2VtZW50TWFwLnNldFNjYWxlKHNjYWxlKCkpOworICAgIGVsc2UKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKIHsKLSAgICBhdXRvIGlucHV0
MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQy
ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEg
PSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIu
bmFtZWRFZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVu
dE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9y
KCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIp
OwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBw
ZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3Qo
RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFubmVsU2Vs
ZWN0b3IoKSwgc2NhbGUoKSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5w
dXQxLnJlbGVhc2VOb25OdWxsKCksIGlucHV0Mi5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5o
CmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1ZDMuLmQxNWY4OGU4
ZTA5YWMzZWY5Njg2MGQ5M2Y2ZWUyZTJiZDY3ZWQyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkwLDggKzkwLDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBv
dmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBv
dmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhp
cykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5j
cHAKaW5kZXggYTY4NmJiOGZhMzhkOWRkZmEyOGUwMmFlZDk1ZTQxYjA4YTM2ZjJmNy4uOWVhMGUw
NzgzYmU4YTJmODBkZDZiN2FiYjY2ZDMwOGViZjcwYTA1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1
cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw3ICsyMSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgiCiAKLSNpbmNs
dWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKKyNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2VE
YXRhLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzYsOSArMzcsOSBAQCBSZWY8U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50PiBTVkdGRURpc3RhbnRM
aWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQog
Ci1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2Uo
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CitMaWdodFNvdXJjZSBTVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewotICAg
IHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0ZShhemltdXRoKCksIGVsZXZhdGlvbigp
KTsKKyAgICByZXR1cm4geyBEaXN0YW50TGlnaHRTb3VyY2VEYXRhKGF6aW11dGgoKSwgZWxldmF0
aW9uKCkpIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuaAppbmRleCBmYmRmNzFjMGVjYmQ5Zjk5N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNj
Li4wZDk5NjJjZWQwYjEyMWYxM2U4MTM4ODQ0YTE4OWVhZTk1ZWJlN2E4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50
ZXJidXJ5LmFjLm56PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsOCArMzEsOSBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZH
RmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIExpZ2h0U291cmNlIGxpZ2h0U291
cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIH07CisKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZF
TGlnaHRFbGVtZW50KSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAppbmRleCAyMmJjZTFkMzMzMTdjOTU3
MWZlNWQ3OWY0YjMyNmE4OWJmYzViNjgxLi5mZTIzMjhiNWNhNjYzYjRkNGM5Yjc3ZTkzMjc0Y2Vj
MGE4ZTFkZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1l
bnQuY3BwCkBAIC04OCw3ICs4OCwxMyBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0bwogCiB2b2lk
IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgaWYgKFByb3BlcnR5UmVnaXN0cnk6OmlzS25vd25B
dHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0
dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3RkRGV2aWF0aW9uQXR0cikgeworICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJk
IGd1YXJkKCp0aGlzKTsKKyAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmluQXR0cikgewogICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0
aGlzKTsKICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CkBAIC05NywyNyAr
MTAzLDQ0IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1S
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZH
RkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CisgICAgYXV0
byYgZmVEcm9wU2hhZG93ID0gZG93bmNhc3Q8RkVEcm9wU2hhZG93PihlZmZlY3QpOworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKQorICAgICAgICBmZURyb3BTaGFkb3cuc2V0
RHgoZHgoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAg
ICAgICAgZmVEcm9wU2hhZG93LnNldER5KGR5KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7CisgICAgICAgIGZlRHJvcFNoYWRvdy5zZXRT
dGREZXZpYXRpb25YKHN0ZERldmlhdGlvblgoKSk7CisgICAgICAgIGZlRHJvcFNoYWRvdy5zZXRT
dGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblkoKSk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5u
YW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFpbnB1dDEpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVm
ZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKKwogICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHN0ZERl
dmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYg
c3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogICAgIAogICAgIENvbG9y
IGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3Zn
U3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RP
cGFjaXR5KCk7CiAKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwotICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBzZXRGaWx0ZXJFZmZlY3QoRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBz
dGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KSk7CiAKLSAgICBhdXRv
IGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBz
dGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKLSAgICBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJl
dHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXgg
OWI2MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0MmY3NDUxZC4uNzZiZjkyNTMxNTk4MzE5
YjI1MWU1OWZiMTdmN2ZlMzQzNWQzMDI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RB
dHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJk
NTY1ZDBlMTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIuLjI3YzE1YjBmZTFjOGM3ZjY0NDNlYmY2
M2FjMTI1YWYxZTg2M2Y1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZs
b29kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmNwcApAQCAtNDIsMzQgKzQyLDM4IEBAIFJlZjxTVkdGRUZsb29kRWxlbWVudD4gU1ZHRkVGbG9v
ZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVGbG9vZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsK
IH0KIAotYm9vbCBTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3ZvaWQg
U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZm
ZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChyZW5kZXJl
cik7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0g
ICAgRkVGbG9vZCogZmxvb2QgPSBzdGF0aWNfY2FzdDxGRUZsb29kKj4oZWZmZWN0KTsKLQorICAg
IAorICAgIGF1dG8mIGZsb29kID0gZG93bmNhc3Q8RkVGbG9vZD4oZWZmZWN0KTsKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX2NvbG9yQXR0cikKLSAgICAgICAgcmV0dXJuIGZs
b29kLT5zZXRGbG9vZENvbG9yKHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKQotICAgICAgICByZXR1
cm4gZmxvb2QtPnNldEZsb29kT3BhY2l0eShzdHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgp
KTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZmxvb2Quc2V0Rmxvb2RDb2xvcihzdHlsZS5zdmdTdHlsZSgpLmZsb29kQ29sb3IoKSk7Cisg
ICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKQorICAg
ICAgICBmbG9vZC5zZXRGbG9vZE9wYWNpdHkoc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHko
KSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJikKIHsKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJl
dHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKKwogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIAorICAgICAgICByZXR1cm4geyB9OworCiAgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUmIHN2Z1N0eWxlID0gcmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKTsKIAogICAg
IENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0
ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUu
Zmxvb2RPcGFjaXR5KCk7CiAKLSAgICByZXR1cm4gRkVGbG9vZDo6Y3JlYXRlKGZpbHRlciwgY29s
b3IsIG9wYWNpdHkpOworICAgIHNldEZpbHRlckVmZmVjdChGRUZsb29kOjpjcmVhdGUoY29sb3Is
IG9wYWNpdHkpKTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAppbmRleCBiOTZhNDNhYTMxM2U3
NWU0YTMxNjcyNDhhMWI2ZjVjZjUxZmVlOTExLi5hOWQ1MjNlYmNkMDg3MWYwMzRmZDRjZWIwNGRj
NmEwNzM1OTc1ZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAt
MzUsOCArMzUsOCBAQCBwcml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQ
cm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRkVGbG9vZEVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJv
cGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsg
fQogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0
eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdhOTk4MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4
MzBkNTYzYzU5OWQuLjFkNTcxNTZhNzgyZWE5NWM2MTY3ZTA2OTdlMjcyNDg4OGU5MGE1NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBA
IC04Niw3ICs4NiwxMyBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQQogCiB2b2lkIFNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNLbm93bkF0dHJpYnV0
ZShhdHRyTmFtZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlv
bkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgeworICAgICAgICBJ
bnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKKyAgICAgICAgcHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBJbnN0YW5jZUlu
dmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAg
ICAgICByZXR1cm47CkBAIC05NSwxOCArMTAxLDMxIEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpmaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8mIGZlR2F1c3NpYW5CbHVyID0gZG93bmNhc3Q8
RkVHYXVzc2lhbkJsdXI+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpz
dGREZXZpYXRpb25BdHRyKSB7CisgICAgICAgIGZlR2F1c3NpYW5CbHVyLnNldFN0ZERldmlhdGlv
blgoc3RkRGV2aWF0aW9uWCgpKTsKKyAgICAgICAgZmVHYXVzc2lhbkJsdXIuc2V0U3RkRGV2aWF0
aW9uWShzdGREZXZpYXRpb25ZKCkpOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmVkZ2VNb2RlQXR0cikKKyAgICAgICAgZmVHYXVzc2lhbkJsdXIuc2V0RWRnZU1vZGUoZWRn
ZU1vZGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWls
ZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAg
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgaWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwg
MCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBp
ZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUo
KSkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwg
c3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgK
aW5kZXggZDg5ZTFhNzQ4ZmIyYzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4uMzg1NTE4ZmVm
MmM4ZGQ2MTliYzk1MzA5NDk2NTFiN2FiNDQwYTVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21T
dHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRl
eCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi5iZGFhYjg4NjQ2NmEz
MzZlYjYxMTgyMGI5MTM3MDA0Y2I2Yjk4ZjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3NCwxNiArMTc1
LDUzIEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1h
cmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50UmVuZGVyZXIp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVy
PiBTVkdGRUltYWdlRWxlbWVudDo6aW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSBjb25zdAogewotICAg
IGlmIChtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElt
YWdlKGZpbHRlciwgbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSwg
cHJlc2VydmVBc3BlY3RSYXRpbygpKTsKLQogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJl
bmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgpKTsKKyAg
ICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKICAgICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0
LmVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBG
RUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYo
KSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICBhdXRvIGNvbnRleHROb2RlID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCk7CisgICAgYXV0byByZW5k
ZXJlciA9IGNvbnRleHROb2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5z
Zm9ybQorICAgIGF1dG8gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
YWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbSgqcmVuZGVy
ZXIpOworICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9
IEFmZmluZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1
dGVUcmFuc2Zvcm0ueVNjYWxlKCksIDAsIDApOworCisgICAgYXV0byBzcmNSZWN0ID0gcmVuZGVy
ZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisKKyAgICBhdXRvIGltYWdlUmVj
dCA9IHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qoc3JjUmVjdCk7CisKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
aW1hZ2VSZWN0LCBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgY29udGV4dCA9
IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVy
U3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVuZGVyZXIsIEFmZmluZVRyYW5zZm9ybSgpKTsK
KworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKQoreworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAg
ICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OworCisgICAgaWYgKG1fY2FjaGVk
SW1hZ2UpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUltYWdlOjpjcmVhdGUoUmVmPEltYWdl
PiB7ICptX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpIH0sIHByZXNl
cnZlQXNwZWN0UmF0aW8oKSkpOworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1
ZmZlckZvckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVJbWFnZTo6Y3JlYXRl
KGltYWdlQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSkpOwor
CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OwogfQogCiB2b2lkIFNWR0ZFSW1h
Z2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYg
dXJscykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKaW5kZXggZDkz
ZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEyNTZiYWRhMTU0YzVjNy4uNDcwN2ZlNjgwNmJhODk2NTEw
NDlhNmY4OTRjOGE3MWFlMjU4NTRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVt
ZW50LmgKQEAgLTU1LDcgKzU1LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlzaElu
c2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyRm9yRWZmZWN0KCkgY29uc3Q7CisgICAgCisgICAgdm9p
ZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZSB7IH0KKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9p
ZCByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1l
bnQuaAppbmRleCBjZDBiZmI5ZWRjZmQ3YjRlMWFmMzliNTVlZGJiYmQ3ODRhYWVhODlkLi4zNzFj
NDJhYzQ1NjZkYzA2ZjZjMDYyYTYwYTJmZWQzNjk0OTBiZjEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVMaWdodEVsZW1lbnQuaApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvbGl2ZXJAbmVyZ2V0LmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVy
OwogY2xhc3MgU1ZHRkVMaWdodEVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChTVkdGRUxpZ2h0RWxlbWVudCk7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBMaWdodFNvdXJjZSBsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3QgPSAwOwogICAgIHN0YXRpYyBTVkdGRUxpZ2h0RWxlbWVudCogZmlu
ZExpZ2h0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7CiAKICAgICBmbG9hdCBhemltdXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9hemltdXRoLT5jdXJyZW50VmFsdWUoKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5kZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1
YmYxODJmMWQ5NDYyM2RkNi4uNDY0N2U0NjkyZGFlOGM5MjBkMmJkOWFjZTQ0MjhmYWJlMGE2OTRj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCkBAIC0yNiw3ICsy
Niw2IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5
cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDUsMjQgKzQ0LDI1IEBAIFJlZjxTVkdGRU1l
cmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJn
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJl
ZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImIGJ1aWxkZXIpCiB7Ci0gICAgYXV0byBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVy
KTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlucHV0czsKIAogICAgIGZvciAoYXV0byYg
bWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykp
IHsKLSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGJ1aWxkZXIu
bmFtZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQo
V1RGTW92ZShtZXJnZUVmZmVjdCkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
bWVyZ2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0K
IAogICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0KCk7Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChG
RU1lcmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMuc2l6ZSgpKSk7CiAKLSAgICByZXR1cm4gZWZmZWN0
OworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCBXVEZNb3ZlKG1lcmdlSW5wdXRzKSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCmluZGV4IDc0NTA4Njgx
NmY2OTc2YzY2OTdkYzUxMDc1ODAyZDI4M2NmNGUzYzIuLmU4ODBlNmU5N2IzY2UyZTJjYmZmMzMy
ZTFkOTNhMTFkMjQ2YzlmM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5o
CkBAIC0zNSw3ICszNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9
IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGRU1lcmdlRWxlbWVudCwgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5
JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lz
dHJ5OyB9CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkg
eyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi4w
YWI1NWIyYWMxZjgxOGVjMmVmNDU2MTU0ZjU0MmU5NGJjOGNhM2ZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIGlu
bGluZSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFn
OwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluQXR0ciwgJlNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6Om1faW4xPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclBy
b3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsICZT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3N2Z09wZXJhdG9yPigpOworICAgICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1vcnBo
b2xvZ3lPcGVyYXRvciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fbW9ycGhvbG9neU9wZXJh
dG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05h
bWVzOjpyYWRpdXNBdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNYLCAmU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNZPigpOwogICAgIH0pOwogfQpAQCAtNTksOSAr
NTksOSBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldFJhZGl1cyhmbG9hdCB4LCBm
bG9hdCB5KQogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBp
ZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lP
cGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgTW9ycGhvbG9neU9wZXJh
dG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+
Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQotICAg
ICAgICAgICAgbV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVy
YXRvclR5cGU+KHByb3BlcnR5VmFsdWUpOworICAgICAgICAgICAgbV9tb3JwaG9sb2d5T3BlcmF0
b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3I+KHByb3BlcnR5VmFsdWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MSwyMiArODEsNiBAQCB2b2lkIFNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0bwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9s
b2d5ID0gc3RhdGljX2Nhc3Q8RkVNb3JwaG9sb2d5Kj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAgICAgICAgcmV0dXJuIG1vcnBob2xvZ3kt
PnNldE1vcnBob2xvZ3lPcGVyYXRvcihzdmdPcGVyYXRvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKLSAgICAgICAgLy8gQm90aCBzZXRSYWRpdXMgZnVu
Y3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJhdGVseS4KLSAgICAgICAgYm9vbCBpc1Jh
ZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWChyYWRpdXNYKCkpOwotICAgICAg
ICBib29sIGlzUmFkaXVzWUNoYW5nZWQgPSBtb3JwaG9sb2d5LT5zZXRSYWRpdXNZKHJhZGl1c1ko
KSk7Ci0gICAgICAgIHJldHVybiBpc1JhZGl1c1hDaGFuZ2VkIHx8IGlzUmFkaXVzWUNoYW5nZWQ7
Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpvcGVyYXRvckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsK
QEAgLTExNCwyMSArOTgsMzQgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAordm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFu
Z2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAgZmxvYXQgeVJhZGl1cyA9IHJh
ZGl1c1koKTsKKyAgICBhdXRvJiBtb3JwaG9sb2d5ID0gZG93bmNhc3Q8RkVNb3JwaG9sb2d5Pihl
ZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQorICAg
ICAgICBtb3JwaG9sb2d5LnNldE1vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3Io
KSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKKyAg
ICAgICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2Vw
YXJhdGVseS4KKyAgICAgICAgbW9ycGhvbG9neS5zZXRSYWRpdXNYKHJhZGl1c1goKSk7CisgICAg
ICAgIG1vcnBob2xvZ3kuc2V0UmFkaXVzWShyYWRpdXNZKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGZsb2F0IHhSYWRpdXMgPSBy
YWRpdXNYKCk7CisgICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKICAgICBpZiAoeFJhZGl1
cyA8IDAgfHwgeVJhZGl1cyA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0Rmls
dGVyRWZmZWN0KEZFTW9ycGhvbG9neTo6Y3JlYXRlKG1vcnBob2xvZ3lPcGVyYXRvcigpLCB4UmFk
aXVzLCB5UmFkaXVzKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRl
KGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2
NjkuLjg0MGI1YmFhZjI4MzYwYzZmNjU5ZjNlOTk3NTQ3MDcxODkzNGM3YTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApAQCAtMjYsMTIgKzI2LDEyIEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KLXN0cnVjdCBTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7CitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yPiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFs
dWUoKSB7IHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOyB9CiAKLSAgICBzdGF0
aWMgU3RyaW5nIHRvU3RyaW5nKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKKyAgICBzdGF0
aWMgU3RyaW5nIHRvU3RyaW5nKE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3Ip
CiAgICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChtb3JwaG9s
b2d5T3BlcmF0b3IpIHsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9X
TjoKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICBjYXNlIEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9FUk9ERToKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IFNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGljIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgZnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0
b3IgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZh
bHVlID09ICJlcm9kZSIpCiAgICAgICAgICAgICByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFOwpAQCAtNjIsMTIgKzYyLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJhZGl1cyhm
bG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAgIFN0cmluZyBpbjEoKSBjb25zdCB7
IHJldHVybiBtX2luMS0+Y3VycmVudFZhbHVlKCk7IH0KLSAgICBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHN2Z09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdmdPcGVyYXRvci0+Y3VycmVudFZh
bHVlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+KCk7IH0KKyAgICBNb3JwaG9sb2d5T3BlcmF0b3Ig
bW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3It
PmN1cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0b3I+KCk7IH0KICAgICBmbG9hdCByYWRpdXNY
KCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNYLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0
IHJhZGl1c1koKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1ktPmN1cnJlbnRWYWx1ZSgpOyB9CiAK
ICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMTsgfQot
ICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVy
biBtX3N2Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgbW9ycGhvbG9n
eU9wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRvcjsgfQogICAg
IFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNYQW5pbWF0ZWQoKSB7IHJldHVybiBtX3JhZGl1c1g7
IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgcmFkaXVzWUFuaW1hdGVkKCkgeyByZXR1cm4gbV9y
YWRpdXNZOyB9CiAKQEAgLTgwLDEyICs4MCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlk
ZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVm
ZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBt
X3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV9tb3JwaG9sb2d5T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUo
dGhpcywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OwogICAgIFJlZjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNZIHsgU1ZHQW5pbWF0ZWROdW1iZXI6
OmNyZWF0ZSh0aGlzKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50LmlkbAppbmRleCBhMmMxODFmMmU2MzdjZDM5MDk4ZWJlNjllNjA5OGFiZTNjMzg1
Y2QxLi4yZDIxZjJhMWQ4ODhkMDJlYzE3OWRmMTBlMmRlNDNmYzY1Mjk3ZDU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCkBAIC0zMyw3ICszMyw3
IEBACiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1ZHX01PUlBIT0xPR1lfT1BFUkFUT1JfRElM
QVRFICAgPSAyOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAg
ICAgaW4xOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1
dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKKyAgICBbSW1wbGVtZW50ZWRBcz1t
b3JwaG9sb2d5T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0
aW9uIG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAg
ICAgIHJhZGl1c1g7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAg
ICAgcmFkaXVzWTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApp
bmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li41OTQ1MDZhM2Vi
NmJlMGI2ZTc1YTJmNzA0YmJhYjY4NWI2ZDUwNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcApAQCAtNzIsNyArNzIsMTMgQEAgdm9pZCBTVkdGRU9mZnNldEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21TdHIKIAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgaWYgKFByb3BlcnR5UmVnaXN0cnk6
OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikgeworICAgICAgICBJ
bnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKKyAgICAgICAgcHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBJbnN0YW5jZUlu
dmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAg
ICAgICByZXR1cm47CkBAIC04MSwxNiArODcsMjcgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3ZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFu
Z2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OworICAgIGF1dG8mIGZlT2Zmc2V0ID0gZG93bmNhc3Q8RkVPZmZzZXQ+KGVmZmVjdCk7CisgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIpCisgICAgICAgIGZlT2Zmc2V0LnNldER4
KGR4KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeUF0dHIpCisgICAg
ICAgIGZlT2Zmc2V0LnNldER5KGR5KCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3Qo
aW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNl
dEZpbHRlckVmZmVjdChGRU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5KCkpKTsKIAotICAgIGF1dG8g
ZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShmaWx0ZXIsIGR4KCksIGR5KCkpOwotICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAg
cmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNk
Y2M3MmRiNjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJlZS4uOWQzZGFmMDlkZDUzMWM0YzIzYjRl
MWJhYzY0ZmI1NTQ2YTRhNDRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1l
bnQuaApAQCAtNDcsNyArNDcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdl
ZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKaW5kZXggOWZmODQ3MzM4YTFi
NmE1NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uY2FhNzYwZmY1MzBmYmJhYWUwNWY4OWExYjMz
YzBmZWY5NWM2ZTJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRM
aWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRF
bGVtZW50LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIwLDExICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRl
ci5oIgorI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2VEYXRhLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM5LDIxICszNywxMCBAQCBSZWY8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD4gU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU1ZHRkVQb2ludExpZ2h0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291
cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitMaWdodFNvdXJjZSBTVkdGRVBv
aW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3QKIHsKLSAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247Ci0gICAgaWYgKGJ1aWxkZXIucHJpbWl0
aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91
bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94
LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0
WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJlbmNlQm94LmhlaWdodCgpKTsKLQotICAg
ICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGln
aHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1Vu
aXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNs
aWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94
Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotICAgIH0gZWxzZQotICAgICAg
ICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKLSAgICAKLSAgICByZXR1
cm4gUG9pbnRMaWdodFNvdXJjZTo6Y3JlYXRlKHBvc2l0aW9uKTsKKyAgICBhdXRvIHBvc2l0aW9u
ID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOworICAgIHJldHVybiB7IFBvaW50TGlnaHRT
b3VyY2VEYXRhKHBvc2l0aW9uKSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
UG9pbnRMaWdodEVsZW1lbnQuaAppbmRleCAzM2E1YmQ3NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0
NWU0OGRhNzllLi4zZTM3NDg0MDQwYWYyNDc2NzUwNjgyYjg5ZTcyZGE1ZDM5ZGQxODZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKQEAgLTMwLDggKzMw
LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdo
dFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGlnaHRTb3Vy
Y2UgbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwog
fTsKKwogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVQb2ludExpZ2h0RWxlbWVudCkgPT0gc2l6
ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApp
bmRleCA5YjdjZTQwYWI5NzE2YWU0ZjMzNWY1NGIyNGNkYTQ1OWE4NDI5YTU5Li5iYzgyNWZhNGE0
NTExMDMxYjkyYWU5YmFkMWViMzdiZTI5YWQwY2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC04OCw1MiArODgsNiBA
QCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVT
cGVjdWxhckxpZ2h0aW5nKiBzcGVjdWxhckxpZ2h0aW5nID0gc3RhdGljX2Nhc3Q8RkVTcGVjdWxh
ckxpZ2h0aW5nKj4oZWZmZWN0KTsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGln
aHRpbmdfY29sb3JBdHRyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOwotICAgICAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgICAgICBDb2xvciBj
b2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRl
cmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKLSAgICAgICAgcmV0dXJu
IHNwZWN1bGFyTGlnaHRpbmctPnNldExpZ2h0aW5nQ29sb3IoY29sb3IpOwotICAgIH0KLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCi0gICAgICAgIHJldHVy
biBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCi0gICAgICAg
IHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTcGVjdWxhckNvbnN0YW50KHNwZWN1bGFyQ29u
c3RhbnQoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50
QXR0cikKLSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFNwZWN1bGFyRXhwb25l
bnQoc3BlY3VsYXJFeHBvbmVudCgpKTsKLQotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3Rf
Y2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRpbmctPmxpZ2h0U291cmNlKCkpOwotICAg
IGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVu
dDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKLQot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCi0gICAgICAgIHJldHVy
biBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgpKTsKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCi0gICAgICAgIHJldHVybiBs
aWdodFNvdXJjZS5zZXRFbGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24oKSk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291
cmNlLnNldFgobGlnaHRFbGVtZW50LT54KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0RWxlbWVudC0+
eSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnpBdHRyKQotICAgICAgICByZXR1
cm4gbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVsZW1lbnQtPnooKSk7Ci0gICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uu
c2V0UG9pbnRzQXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRYKCkpOwotICAgIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNl
LnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJj
ZS5zZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2ludHNBdFooKSk7Ci0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgcmV0dXJuIGxp
Z2h0U291cmNlLnNldFNwZWN1bGFyRXhwb25lbnQobGlnaHRFbGVtZW50LT5zcGVjdWxhckV4cG9u
ZW50KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVB
dHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25lQW5nbGUobGln
aHRFbGVtZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0ciB8fCBh
dHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpr
ZXJuZWxVbml0TGVuZ3RoQXR0cikgewpAQCAtMTYwLDI4ICsxMTQsODUgQEAgdm9pZCBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0K
IAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
Cit2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0
ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7CisgICAgYXV0byYgc3BlY3VsYXJMaWdodGluZyA9IGRvd25jYXN0PEZFU3BlY3VsYXJM
aWdodGluZz4oZWZmZWN0KTsKIAotICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikg
eworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+
c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdT
dHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CisgICAgICAgIHNwZWN1bGFyTGlnaHRpbmcuc2V0Q29s
b3IoY29sb3IpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgUmVmUHRyIGxpZ2h0RWxl
bWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwotICAgIGlm
ICghbGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKKyAgICAgICAgc3BlY3VsYXJMaWdo
dGluZy5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFu
dEF0dHIpIHsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZy5zZXRTcGVjdWxhckNvbnN0YW50KHNw
ZWN1bGFyQ29uc3RhbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCi0gICAgYXV0
byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIp
OworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpIHsK
KyAgICAgICAgc3BlY3VsYXJMaWdodGluZy5zZXRTcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhw
b25lbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBsaWdodFNvdXJj
ZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVjdWxhckxpZ2h0aW5nLnNvdXJjZSgpKTsK
KyAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVs
ZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CisgICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7
CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKQorICAgICAgICBs
aWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgpKTsKKyAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKKyAgICAgICAgbGlnaHRT
b3VyY2Uuc2V0RWxldmF0aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0aW9uKCkpOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0
WChsaWdodEVsZW1lbnQtPngoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnlBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0RWxlbWVudC0+eSgpKTsKKyAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAgICAgIGxpZ2h0U291
cmNlLnNldFoobGlnaHRFbGVtZW50LT56KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFgo
bGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WShs
aWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cG9pbnRzQXRaQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRaKGxp
Z2h0RWxlbWVudC0+cG9pbnRzQXRaKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0U3BlY3Vs
YXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQoKSk7CisgICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKKyAgICAgICAg
bGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25lQW5nbGUobGlnaHRFbGVtZW50LT5saW1pdGluZ0Nv
bmVBbmdsZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQog
CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEo
KSk7CisgICAgaWYgKCFpbnB1dDEpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaGFz
RmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0
MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKKyAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJlZlB0ciBsaWdodEVs
ZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKKyAgICBp
ZiAoIWxpZ2h0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbGlnaHRT
b3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGJ1aWxkZXIpOworCiAgICAgQ29sb3Ig
Y29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5k
ZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CisgICAgCisgICAgc2V0
RmlsdGVyRWZmZWN0KEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2Nh
bGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRM
ZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CiAK
LSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29s
b3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhwb25lbnQo
KSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdo
dFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAg
IHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJl
bGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2ZDFjNzlhMWQzZmQ4
YjMxMThlMmFiNjNiNDdiMTQ2Li5mYTY4NzhmYjVjYjQ3NjQ2YzQyZWUzYjkwNzdhZjhlMTcyMDE5
MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmgKQEAgLTU3LDggKzU3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
b3RMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5jcHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThjYzkzODc0ZWE0YWE5Y2YyZGZiZmZlZS4u
NDRjYTg4NjJlZTg4ODIyYmQ4MWRkMmExMjc1Y2MzNmJiYzJiY2Y2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1
cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMSArMjEsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIgogCi0jaW5jbHVk
ZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTcG90TGlnaHRTb3VyY2UuaCIKLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZURhdGEuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwyOSArMzcsMTEgQEAgUmVmPFNWR0ZFU3Bv
dExpZ2h0RWxlbWVudD4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGEKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRVNwb3RMaWdodEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmPExpZ2h0U291cmNlPiBTVkdGRVNwb3RM
aWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0
CitMaWdodFNvdXJjZSBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKLSAg
ICBGbG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVVbml0
cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewot
ICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGluZ0Jv
eCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgpICsg
eCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJlZmVy
ZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotICAgICAgICAvLyBo
dHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmli
dXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdw
b3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0
YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZ
Q29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotCi0gICAgICAgIHBvaW50c0F0LnNldFgocmVm
ZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAg
ICAgICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVy
ZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcv
ZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBw
b2ludHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94
Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRP
ZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQz
RCh4KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRz
QXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFNw
b3RMaWdodFNvdXJjZTo6Y3JlYXRlKHBvc2l0aW9uLCBwb2ludHNBdCwgc3BlY3VsYXJFeHBvbmVu
dCgpLCBsaW1pdGluZ0NvbmVBbmdsZSgpKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gRmxvYXRQb2lu
dDNEKHgoKSwgeSgpLCB6KCkpOworICAgIGF1dG8gcG9pbnRzQXQgPSBGbG9hdFBvaW50M0QocG9p
bnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7CisgICAgcmV0dXJuIHsgU3BvdExp
Z2h0U291cmNlRGF0YShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1bGFyRXhwb25lbnQoKSwgbGlt
aXRpbmdDb25lQW5nbGUoKSkgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3Bv
dExpZ2h0RWxlbWVudC5oCmluZGV4IDNmNzcxN2MxMjY1YzRmMzFmNTMwODg2OGQ0N2M5Nzg3OTdh
NzMyMTEuLmNhYjk2NDk3NjAyNzIwNzJjNjM2M2Q3ZWU5YjQzYWJhOTc2M2VkYjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRl
cmJ1cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCw3ICszMSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgU1ZHRkVTcG90TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGlnaHRTb3VyY2UgbGlnaHRTb3VyY2Uo
Y29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVt
ZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJk
Y2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi42MzdhMzJmOWNkZTI4ZDRjNjMy
ZTEzMWI3Mjk0ODhhYzhjY2JhMGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwCkBAIC03MCwxNiArNzAsMTYgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
U1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotCisg
ICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlu
cHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVUaWxl
OjpjcmVhdGUoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7
Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51
bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4
IDQ1YjMyNzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIyZGM0MmEzM2E5MWYuLmJlMzc5Njk5MDkzMDFk
Mjk2Y2ZmNWUwMTk3NDJkNDA1YTFiMTBmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVRpbGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuaApAQCAtNDIsNyArNDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAg
ICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBv
dmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRo
aXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJp
bmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgzZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRh
NGQuLjEyOTRiZjRhNTFhMDUyNGZjMzkyZjE4NDQ2ZGNlZTEzMzVkNDBhMWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKQEAgLTg4LDI0ICs4OCw2
IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRVR1cmJ1
bGVuY2UqIHR1cmJ1bGVuY2UgPSBzdGF0aWNfY2FzdDxGRVR1cmJ1bGVuY2UqPihlZmZlY3QpOwot
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCi0gICAgICAgIHJldHVybiB0
dXJidWxlbmNlLT5zZXRUeXBlKHR5cGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
OjpzdGl0Y2hUaWxlc0F0dHIpCi0gICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5zZXRTdGl0Y2hU
aWxlcyhzdGl0Y2hUaWxlcygpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VG
cmVxdWVuY3lBdHRyKQotICAgICAgICByZXR1cm4gKHR1cmJ1bGVuY2UtPnNldEJhc2VGcmVxdWVu
Y3lYKGJhc2VGcmVxdWVuY3lYKCkpIHx8IHR1cmJ1bGVuY2UtPnNldEJhc2VGcmVxdWVuY3lZKGJh
c2VGcmVxdWVuY3lZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNlZWRBdHRy
KQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0U2VlZChzZWVkKCkpOwotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpCi0gICAgICAgIHJldHVybiB0dXJi
dWxlbmNlLT5zZXROdW1PY3RhdmVzKG51bU9jdGF2ZXMoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
IHsKICAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkp
IHsKQEAgLTExNywxMSArOTksMzMgQEAgdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit7CisgICAgYXV0
byYgdHVyYnVsZW5jZSA9IGRvd25jYXN0PEZFVHVyYnVsZW5jZT4oZWZmZWN0KTsKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQorICAgICAgICB0dXJidWxlbmNlLnNldFR1
cmJ1bGVuY2VUeXBlKHR5cGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnN0aXRjaFRpbGVzQXR0cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRTdGl0Y2hUaWxlcyhzdGl0
Y2hUaWxlcygpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1
ZW5jeUF0dHIpIHsKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRCYXNlRnJlcXVlbmN5WChiYXNlRnJl
cXVlbmN5WCgpKTsKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRCYXNlRnJlcXVlbmN5WShiYXNlRnJl
cXVlbmN5WSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzZWVkQXR0
cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRTZWVkKHNlZWQoKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRyKQorICAgICAgICB0dXJidWxlbmNlLnNl
dE51bU9jdGF2ZXMobnVtT2N0YXZlcygpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikKIHsKICAgICBpZiAoYmFzZUZyZXF1ZW5jeVgoKSA8IDAgfHwgYmFzZUZyZXF1
ZW5jeVkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBGRVR1cmJ1
bGVuY2U6OmNyZWF0ZShmaWx0ZXIsIHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1
ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRD
SFRZUEVfU1RJVENIKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVy
RWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRVR1cmJ1bGVuY2U6OmNyZWF0ZSh0
eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMoKSwg
c2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCkpOworCisgICAg
cmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAppbmRleCBiZjlkYTIyYWQ0MmU0MTBhMTA0MzVl
MGE0MGUzNDI2Nzc2OWUxOThhLi4zOTllYjhhNTJmNjQ3ZmY2ZTVhMzFiNTc4OGEwMmY5YzJmY2Q0
YWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKQEAg
LTExOCw4ICsxMTgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRl
ckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVgg
eyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyRWxlbWVudC5jcHAKaW5kZXggNTU3OGI1MTlhMzYyMmJkNzA2YWQyN2JmZTRjNjAwMzkx
NDg1OGNhMC4uOWM0MzExMzRhODc3MDRmMDY0OWQ5MjJiYTk3MTYzNmRkMjVlMWM5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
SW5saW5lcy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcApp
bmRleCBmZjUyMjMwOTQ2NmIwNDBiZWYwODlkMTU3YjM4NmRmZmJiMDVjNjE5Li4zODY2ZDg5Y2Q3
ZTNmMDg0NWQ0YTU3YjM2ZmI5Zjk5ODdhMzJkNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcApA
QCAtMjUsOSArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NiwxMSAr
NjQsMTUgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG4KICAgICBTVkdFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpCit2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGUpCiB7Ci0gICAgLy8gV2hlbiBhbGwgZmlsdGVycyBzdXBwb3J0IHRoaXMgbWV0aG9kLCBp
dCB3aWxsIGJlIGNoYW5nZWQgdG8gYSBwdXJlIHZpcnR1YWwgbWV0aG9kLgotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fZWZmZWN0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKCptX2VmZmVj
dCwgYXR0cmlidXRlKTsKKworICAgIGlmIChhdXRvKiBwcmltaXRpdmVSZW5kZXJlciA9IHJlbmRl
cmVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlKj4ocHJpbWl0aXZlUmVuZGVyZXIpLT5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJp
YnV0ZSk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtOTMs
MjIgKzk1LDYgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNo
aWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2gKICAgICBpbnZhbGlkYXRlKCk7CiB9
CiAKLXZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKGZpbHRlckVmZmVjdCk7Ci0gICAgaWYgKCFmaWx0ZXJFZmZlY3QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKLSAgICAgICAgZmls
dGVyRWZmZWN0LT5zZXRIYXNYKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnlBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNZKHRydWUpOwotICAgIGlmICho
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+
c2V0SGFzV2lkdGgodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0
QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzSGVpZ2h0KHRydWUpOwotfQotCiBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsZSwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikKIHsKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgKaW5kZXggYzk4YjEzZWQ5NjI3NmFmOWUxNGY2NDI4MTFhNmZkNzQ2NzcyYWNhNy4u
ZDdmZmRkYWQyNGIyYzM2YTc5N2RmMjIwYjg5ZTEyMjAxZmVkMmE4YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaApAQCAtMzYsMTIgKzM2LDYgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50IHsK
ICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVy
RWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7Ci0gICAgLy8gUmV0dXJucyB0
cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgotICAg
IHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1By
b3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMs
IFNWR0VsZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHgoKSBjb25zdCB7IHJl
dHVybiBtX3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01Niw2ICs1MCw5IEBAIHB1YmxpYzoKICAg
ICBTVkdBbmltYXRlZExlbmd0aCYgaGVpZ2h0QW5pbWF0ZWQoKSB7IHJldHVybiBtX2hlaWdodDsg
fQogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiByZXN1bHRBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmVz
dWx0OyB9CiAKKyAgICB2b2lkIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSk7CisgICAgdmlydHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCkBAIC02NCw3
ICs2MSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hp
bGRDaGFuZ2UmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIHZvaWQg
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0
ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgeyB9CisKKyAgICBib29sIGhhc0ZpbHRl
ckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0OyB9CisgICAgdm9pZCBzZXRGaWx0ZXJF
ZmZlY3QoUmVmPEZpbHRlckVmZmVjdD4gZWZmZWN0KSB7IG1fZWZmZWN0ID0gV1RGTW92ZShlZmZl
Y3QpOyB9CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZmlsdGVyRWZmZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9lZmZlY3Q7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGlzRmlsdGVyRWZmZWN0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNzMsNiArNzQsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRl
OwogICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1f
ZWZmZWN0OworICAgIAogICAgIC8vIFNwZWM6IElmIHRoZSB4L3kgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lm
aWVkLgogICAgIC8vIFNwZWM6IElmIHRoZSB3aWR0aC9oZWlnaHQgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVj
aWZpZWQuCiAgICAgUmVmPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3ggeyBTVkdBbmltYXRlZExlbmd0
aDo6Y3JlYXRlKHRoaXMsIFNWR0xlbmd0aE1vZGU6OldpZHRoLCAiMCUiKSB9OwpAQCAtOTAsMTIg
KzkzLDYgQEAgaW5saW5lIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjppbnZhbGlkYXRlKCkKICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRB
bmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcHJpbWl0aXZlUmVuZGVyZXIpOwogfQogCi1p
bmxpbmUgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQotewotICAg
IGlmIChhdXRvKiBwcmltaXRpdmVSZW5kZXJlciA9IHJlbmRlcmVyKCkpCi0gICAgICAgIHN0YXRp
Y19jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKj4ocHJpbWl0aXZlUmVuZGVy
ZXIpLT5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZSk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCmluZGV4IDEwYzg4NDI5Yzcy
NDAzZGNlZDNhM2Y3ZWE0MDYwMGI1NzQ3MDNjZTguLjQxODQwMmJiMDFhZDhiMzBmMTAxNzljZDFm
MGNhM2RmZjk4ZDQzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCkBAIC0zMSwxNSArMzEsMTUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSgpCi0gICAgOiBtX2FsaWduKFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZ
TUlEKQotICAgICwgbV9tZWV0T3JTbGljZShTVkdfTUVFVE9SU0xJQ0VfTUVFVCkKK1NWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1Zp
ZXcgdmFsdWUpCiB7CisgICAgcGFyc2UodmFsdWUpOwogfQogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTdHJpbmdWaWV3IHZhbHVlKQor
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUo
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgYWxpZ24sIFNWR01lZXRPclNsaWNlVHlwZSBtZWV0
T3JTbGljZSkKKyAgICA6IG1fYWxpZ24oYWxpZ24pCisgICAgLCBtX21lZXRPclNsaWNlKG1lZXRP
clNsaWNlKQogewotICAgIHBhcnNlKHZhbHVlKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpzZXRBbGlnbih1bnNpZ25lZCBzaG9ydCBhbGlnbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaApp
bmRleCA1MTQwZjY5ZGY4Mjc2YjVlNzQzNmIyOGZkNTRjODMxN2MyOTlhYjMwLi4wOWRjNDQ3ODRk
NzcyNTk5Y2FjYWIwMTdhYzBjZjMwYzI1OWJhMjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCkBAIC01MSw4ICs1MSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgU1ZHX01FRVRPUlNMSUNFX1NMSUNFID0gMgogICAgIH07CiAKLSAgICBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKTsKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUoKSA9IGRlZmF1bHQ7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1Zp
ZXcpOworICAgIFdFQkNPUkVfRVhQT1JUIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSwgU1ZHTWVldE9yU2xpY2VUeXBlKTsKIAogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNob3J0KTsKICAgICB1bnNpZ25lZCBzaG9y
dCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KQEAgLTcwLDEzICs3MSwzOSBAQCBw
dWJsaWM6CiAKICAgICBTdHJpbmcgdmFsdWVBc1N0cmluZygpIGNvbnN0OwogCi1wcml2YXRlOgot
ICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ247Ci0gICAgU1ZHTWVldE9yU2xp
Y2VUeXBlIG1fbWVldE9yU2xpY2U7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gZGVjb2RlKERlY29k
ZXImKTsKIAorcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBi
b29sIHBhcnNlSW50ZXJuYWwoU3RyaW5nUGFyc2luZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYsIGJv
b2wgdmFsaWRhdGUpOworCisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgbV9hbGlnbiB7
IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEIH07CisgICAgU1ZHTWVldE9yU2xpY2VU
eXBlIG1fbWVldE9yU2xpY2UgeyBTVkdfTUVFVE9SU0xJQ0VfTUVFVCB9OwogfTsKIAordGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fYWxpZ247Cisg
ICAgZW5jb2RlciA8PCBtX21lZXRPclNsaWNlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
Pgorc3RkOjpvcHRpb25hbDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpv
cHRpb25hbDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZT4gYWxpZ247CisgICAgZGVjb2RlciA+
PiBhbGlnbjsKKyAgICBpZiAoIWFsaWduKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgc3RkOjpvcHRpb25hbDxTVkdNZWV0T3JTbGljZVR5cGU+IG1lZXRPclNsaWNlOworICAg
IGRlY29kZXIgPj4gbWVldE9yU2xpY2U7CisgICAgaWYgKCFtZWV0T3JTbGljZSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUoKmFsaWduLCAqbWVldE9yU2xpY2UpOworfQorCiB0ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IHsKICAgICBzdGF0aWMg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgpOyB9CiAgICAgc3RhdGljIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoc3RyaW5nKTsgfQpAQCAtODUsMyArMTEyLDM1IEBAIHRl
bXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZT4gewogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSwKKworICAgICAgICBXZWJDb3JlOjpT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1VOS05P
V04sCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fTk9ORSwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTiwKKyAgICAgICAg
V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19YTUlEWU1JTiwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JTiwKKyAgICAgICAgV2ViQ29yZTo6
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlO
WU1JRCwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRCwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRCwKKyAg
ICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19YTUlOWU1BWCwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1BWCwKKyAgICAgICAgV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUFYWU1BWAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHTWVldE9yU2xpY2VUeXBlPiB7
CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdNZWV0T3JTbGljZVR5cGUsCisKKyAgICAgICAgV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfTUVFVE9SU0xJQ0VfVU5LTk9X
TiwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfTUVF
VE9SU0xJQ0VfTUVFVCwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlOjpTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjFh
ZmFkMDg3ZjM1MWNlYzY1ZTliYWZkMDQzNjFmNzAxYTQ2YzM1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zLDYgKzMs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMywxMzAgKzI0LDg4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJG
aWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUg
IlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIs
IFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYg
cHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Oklt
YWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhw
cmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZShTb3VyY2VJ
bWFnZSYmIHNvdXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHBy
ZXNlcnZlQXNwZWN0UmF0aW8pCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShX
VEZNb3ZlKHNvdXJjZUltYWdlKSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1GRUltYWdl
OjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3Ry
aW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAs
IG1fdHJlZVNjb3BlKCZ0cmVlU2NvcGUpCi0gICAgLCBtX2hyZWYoaHJlZikKK0ZFSW1hZ2U6OkZF
SW1hZ2UoU291cmNlSW1hZ2UmJiBzb3VyY2VJbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6
OkZFSW1hZ2UpCisgICAgLCBtX3NvdXJjZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKQogICAg
ICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJl
ZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0
cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2Vy
dmVBc3BlY3RSYXRpbykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRl
ciwgaW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKLX0KLQotUmVmPEZFSW1hZ2U+IEZFSW1h
Z2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJl
ZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0Zsb2F0UmVjdCBGRUltYWdlOjpjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYs
IHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJj
ZUltYWdlLAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAg
ICAgICBhdXRvIGRyYXdpbmdSZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOworICAgICAgICAgICAg
YXV0byBzcmNSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH07CisgICAgICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkcmF3aW5nUmVjdCwgc3Jj
UmVjdCk7CisgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3Vi
cmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgICAgICB9LAorICAg
ICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mKSB7CisgICAgICAgICAgICByZXR1cm4g
Z2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgICAg
IH0sCisgICAgICAgIFsmXSAoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSB7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKyAgICAgICAgfQorICAgICk7CiB9CiAKLXZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQorYm9vbCBGRUltYWdlOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBv
dXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNv
bHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotICAg
IEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIHNyY1JlY3Qu
c2V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8u
dHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwotICAgIH0gZWxzZSBpZiAoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgc3JjUmVj
dCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQot
ICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwotfQorICAgIGF1dG8gb3V0
cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IG91dHB1dC5wcmlt
aXRpdmVTdWJyZWdpb24oKTsKKyAgICBhdXRvJiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2Ut
PmNvbnRleHQoKTsKKworICAgIFdURjo6c3dpdGNoT24obV9zb3VyY2VJbWFnZSwKKyAgICAgICAg
WyZdIChjb25zdCBSZWY8SW1hZ2U+JiBpbWFnZSkgeworICAgICAgICAgICAgYXV0byBzcmNSZWN0
ID0gRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH07CisgICAgICAgICAgICBtX3ByZXNl
cnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChpbWFnZVJlY3QsIHNyY1JlY3QpOworICAgICAg
ICAgICAgaW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlUmVjdCwgb3V0cHV0
LmltYWdlUmVjdCgpKTsKKyAgICAgICAgICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlKGltYWdl
LCBpbWFnZVJlY3QsIHNyY1JlY3QpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJl
ZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBpbWFnZVJlY3QgPSBn
ZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAg
ICAgICAgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGltYWdl
UmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgKTsKIAotUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRl
cmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fdHJlZVNjb3BlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZy
b21JUklTdHJpbmcobV9ocmVmLCAqbV90cmVlU2NvcGUpOwotICAgIGlmICghaXM8U1ZHRWxlbWVu
dD4odGFyZ2V0LmVsZW1lbnQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
dGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK1RleHRTdHJlYW0mIEZFSW1hZ2U6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewotICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdlICYmICFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKLQotICAgIEZsb2F0UmVjdCBzcmNS
ZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8u
dHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgfQotCi0gICAgSW50UG9pbnQg
cGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICBkZXN0
UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKLQotICAg
IGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgaWYgKHJlbmRl
cmVyKSB7Ci0gICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0g
PSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENU
TShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICAgICAgUmVmUHRyIGNvbnRleHROb2RlID0gZG93
bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChjb250
ZXh0Tm9kZS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgIFNWR0xlbmd0aENv
bnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0Tm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBGbG9h
dFNpemUgdmlld3BvcnRTaXplOwotCi0gICAgICAgICAgICAvLyBJZiB3ZSdyZSByZWZlcmVuY2lu
ZyBhbiBlbGVtZW50IHdpdGggcGVyY2VudGFnZSB1bml0cywgZWcuIDxyZWN0IHdpdGg9IjMwJSI+
IHRob3NlIHZhbHVlcyB3ZXJlIHJlc29sdmVkIGFnYWluc3QgdGhlIHZpZXdwb3J0LgotICAgICAg
ICAgICAgLy8gQnVpbGQgdXAgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IG1hcHMgZnJvbSB0aGUgdmll
d3BvcnQgc3BhY2UgdG8gdGhlIGZpbHRlciBwcmltaXRpdmUgc3VicmVnaW9uLgotICAgICAgICAg
ICAgaWYgKGxlbmd0aENvbnRleHQuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKSkKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LmNvbmNhdENUTShtYWtlTWFwQmV0d2VlblJlY3RzKEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHZpZXdwb3J0U2l6ZSksIGRlc3RSZWN0KSk7CisgICAgYXV0byBp
bWFnZVNpemUgPSBXVEY6OnN3aXRjaE9uKG1fc291cmNlSW1hZ2UsCisgICAgICAgIFsmXSAoY29u
c3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBpbWFnZS0+c2l6ZSgp
OworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdl
QnVmZmVyKSB7CisgICAgICAgICAgICByZXR1cm4gRmxvYXRTaXplKGltYWdlQnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwogICAgICAgICB9CisgICAgKTsKIAotICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gY29udGVudFRyYW5zZm9ybWF0aW9uOwotICAgICAgICBTVkdSZW5kZXJpbmdD
b250ZXh0OjpyZW5kZXJTdWJ0cmVlVG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgY29udGVu
dFRyYW5zZm9ybWF0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQu
ZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci19Ci0KLVRleHRTdHJlYW0m
IEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2Vu
dGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKLXsKLSAgICBGbG9hdFNpemUgaW1hZ2VT
aXplOwotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBpbWFnZVNpemUgPSBtX2ltYWdlLT5zaXpl
KCk7Ci0gICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5k
ZXJlcigpKQotICAgICAgICBpbWFnZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KHJlbmRlcmVyLT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKS5zaXplKCk7CiAgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBpbWFnZS1zaXplPVwiIiA8PCBpbWFn
ZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1hZ2VTaXplLmhlaWdodCgpIDw8ICJcIl1cbiI7CiAg
ICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1bXAgYWxzbyBvYmplY3QgcmV0dXJuZWQgYnkgU1ZH
RkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRjZTdjMGUwYTA2
N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmY4NzY3Y2ZmYzVmZjlhMzI5NzFjMWVjMjMxN2ZiNjNh
NDdlM2ZhNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDQxICsyNCw4MSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3MgSW1hZ2U7Ci1jbGFz
cyBSZW5kZXJFbGVtZW50OwotY2xhc3MgVHJlZVNjb3BlOwogCiBjbGFzcyBGRUltYWdlIGZpbmFs
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUltYWdl
PiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRo
SVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHVzaW5nIFNvdXJjZUltYWdlID0gc3Rk
Ojp2YXJpYW50PAorICAgICAgICBSZWY8SW1hZ2U+LAorICAgICAgICBSZWY8SW1hZ2VCdWZmZXI+
LAorICAgICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIKKyAgICA+OwogCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXIm
LCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAg
ICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8
RkVJbWFnZT4gY3JlYXRlKFNvdXJjZUltYWdlJiYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYpOworCisgICAgU291cmNlSW1hZ2UmIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9z
b3VyY2VJbWFnZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VTb3VyY2UoU291cmNlSW1hZ2UmJiBzb3Vy
Y2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KIAotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVJbWFnZSI7
IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVm
PEZFSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0
ZXJFZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdl
OyB9Citwcml2YXRlOgorICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAgICBSZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVu
ZGVyZXIoKSBjb25zdDsKKyAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KIAotICAgIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIGZpbmFsOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFs
OworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1h
Z2U7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICAvLyBtX3RyZWVTY29wZSB3aWxsIG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVm
ZXJlbmNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjQz
Ci0gICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9o
cmVmOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CisKKyAgICBTb3Vy
Y2VJbWFnZSBtX3NvdXJjZUltYWdlOwogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBt
X3ByZXNlcnZlQXNwZWN0UmF0aW87CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9p
ZCBGRUltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBhdXRvIHNv
dXJjZUltYWdlRW5jb2RlID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgWyZdKGNvbnN0IFJl
ZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZSgpKQorICAgICAgICAgICAgICAgIGVuY29kZXIgPDwgbmF0aXZlSW1h
Z2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgICAgICB9LAorICAgICAgICBb
Jl0oY29uc3QgUmVmPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgaW1hZ2VCdWZmZXItPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAg
ICAgICB9LAorICAgICAgICBbJl0oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAgICAgZW5jb2RlciA8PCByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgIH0KKyAgICApOworCisgICAgc3RkOjp2aXNpdChz
b3VyY2VJbWFnZUVuY29kZSwgbV9zb3VyY2VJbWFnZSk7CisgICAgZW5jb2RlciA8PCBtX3ByZXNl
cnZlQXNwZWN0UmF0aW87Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlv
bmFsPFJlZjxGRUltYWdlPj4gRkVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRp
ZmllcjsKKyAgICBkZWNvZGVyID4+IGltYWdlSWRlbnRpZmllcjsKKyAgICBpZiAoIWltYWdlSWRl
bnRpZmllcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAg
IGRlY29kZXIgPj4gcHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICBpZiAoIXByZXNlcnZlQXNwZWN0
UmF0aW8pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVJbWFn
ZTo6Y3JlYXRlKCppbWFnZUlkZW50aWZpZXIsICpwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9F
RkZFQ1QoRkVJbWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJi
N2JjZTcuLjUwZTVmOTZkZjk3NzYyYmRiZmJiZjY4ZWY0NzI5MWEwNTI3NjE0MzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywx
MzIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2lu
Y2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNp
bmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNl
RHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0
ZXIoYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lv
bihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94
KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQot
ICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+
IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7Cisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIGJ1aWx0aW5FZmZlY3RzID0geworICAgICAgICBTb3VyY2VH
cmFwaGljOjpjcmVhdGUoKSwKKyAgICAgICAgU291cmNlQWxwaGE6OmNyZWF0ZSgpCisgICAgfTsK
KworICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICBhdXRvIFtmaWx0ZXJFZmZlY3Rz
LCBleHByZXNzaW9uXSA9IGJ1aWxkZXIuYnVpbGRFZmZlY3RzKGZpbHRlckVsZW1lbnQsIGJ1aWx0
aW5FZmZlY3RzKTsKKyAgICBpZiAoZmlsdGVyRWZmZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGJ1aWx0aW5FZmZlY3Rz
KSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSk7Cit9CisKK1Jl
ZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZp
bHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uKQoreworICAgIEZp
bHRlckVmZmVjdFZlY3RvciBidWlsdGluRWZmZWN0cyA9IHsgU291cmNlR3JhcGhpYzo6Y3JlYXRl
KCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZShi
dWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lv
bikpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShGaWx0ZXJFZmZl
Y3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZm
ZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdGaWx0ZXIoV1RGTW92ZShidWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmls
dGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbikpKTsKK30KKworU1ZHRmlsdGVyOjpTVkdG
aWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVjdFZl
Y3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uKQor
ICAgIDogRmlsdGVyKFR5cGU6OlNWR0ZpbHRlcikKKyAgICAsIG1fYnVpbHRpbkVmZmVjdHMoV1RG
TW92ZShidWlsdGluRWZmZWN0cykpCisgICAgLCBtX2ZpbHRlckVmZmVjdHMoV1RGTW92ZShmaWx0
ZXJFZmZlY3RzKSkKKyAgICAsIG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQorewor
ICAgIEFTU0VSVChtX2J1aWx0aW5FZmZlY3RzLnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoIW1f
ZmlsdGVyRWZmZWN0cy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9leHByZXNzaW9uLmlzRW1w
dHkoKSk7Cit9CisKK1JlZjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6aW5kZXhlZEVmZmVjdChG
aWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYg
KHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQorICAgICAgICByZXR1
cm4gbV9idWlsdGluRWZmZWN0c1swXTsKKworICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6
VHlwZTo6U291cmNlQWxwaGEpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzWzFdOwor
CisgICAgQVNTRVJUKGluZGV4IDwgbV9maWx0ZXJFZmZlY3RzLnNpemUoKSk7CisgICAgcmV0dXJu
IG1fZmlsdGVyRWZmZWN0c1tpbmRleF07Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0Zp
bHRlcjo6bGFzdEVmZmVjdCgpIGNvbnN0CiB7Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbiA9
IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyUmVnaW9uKTsKKyAgICBpZiAobV9leHBy
ZXNzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBbdHlw
ZSwgaW5kZXgsIGxldmVsXSA9IG1fZXhwcmVzc2lvbi5sYXN0KCk7CisgICAgcmV0dXJuIGluZGV4
ZWRFZmZlY3QodHlwZSwgaW5kZXgpOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGaWx0ZXJFZmZlY3RWZWN0
b3IgU1ZHRmlsdGVyOjplZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlKSBjb25z
dAogewotICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAqIG1f
dGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3Rz
OworCisgICAgZm9yIChhdXRvIGVmZmVjdCA6IG1fZmlsdGVyRWZmZWN0cykgeworICAgICAgICBp
ZiAoZWZmZWN0LT50eXBlKCkgPT0gdHlwZSkKKyAgICAgICAgICAgIGVmZmVjdHMuYXBwZW5kKFdU
Rk1vdmUoZWZmZWN0KSk7CisgICAgfQorCisgICAgcmV0dXJuIGVmZmVjdHM7CisKK30KKworYm9v
bCBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlclJlc3VsdCYgcmVzdWx0LCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBp
ZiAoIWxhc3RFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEZp
bHRlckltYWdlPiBzb3VyY2VJbWFnZTsKKyAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkKKyAgICAg
ICAgc291cmNlSW1hZ2UgPSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgcmV0dXJuIEZpbHRlcjo6
c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5z
aXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHko
KSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHJlc3VsdC5pbWFnZXMoKS5nZXQoeyAqdGhpcyB9
KSkgeworICAgICAgICBzdGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgICAgIHJldHVybiBp
bWFnZTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBtX2V4
cHJlc3Npb24pIHsKKyAgICAgICAgYXV0byBlZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5cGUsIGlu
ZGV4KTsKKyAgICAgICAgYXV0byBib3VuZGFyeVNldCA9IGdlb21ldHJ5LmJvdW5kYXJ5U2V0KHR5
cGUsIGluZGV4KTsKKworICAgICAgICBpZiAoZWZmZWN0LT50eXBlKCkgPT0gRmlsdGVyRWZmZWN0
OjpUeXBlOjpTb3VyY2VHcmFwaGljKSB7CisgICAgICAgICAgICBpZiAoIXNvdXJjZUltYWdlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgc3RhY2suYXBwZW5k
KHsgKnNvdXJjZUltYWdlIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFlZmZlY3QtPmFw
cGx5KHJlc3VsdCwgc3RhY2ssIGdlb21ldHJ5LCBib3VuZGFyeVNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxTVkdGaWx0
ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1RleHRTdHJlYW0mIFNWR0ZpbHRlcjo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVw
cmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVy
KGFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIHRhcmdldEJv
dW5kaW5nQm94LCBmaWx0ZXJSZWdpb24sIGVmZmVjdEJCb3hNb2RlKSk7CisgICAgYXV0byBlbmQg
PSBtX2V4cHJlc3Npb24ucmVuZCgpOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9leHByZXNzaW9u
LnJiZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byBbdHlwZSwgaW5kZXgs
IGxldmVsXSA9ICppdDsKKyAgICAgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VBbHBoYSkKKyAgICAgICAgICAgICsraXQ7CisKKyAgICAgICAgYXV0byBlZmZlY3QgPSBp
bmRleGVkRWZmZWN0KHR5cGUsIGluZGV4KTsKKyAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMsIGxldmVsKTsKKyAgICAgICAgZWZmZWN0LT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIHRzOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAy
ZjVhZWEwZmIxNzAwY2YuLmMwNzljYTdjNzg3OTQwMDRjNDE5OWM4NWUyYjkwNmJlNjZjNzQ3YWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5o
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDQxICsyMSw0NiBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+Cisj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVz
c2lvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7
CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVn
aW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQot
ICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29s
dXRlRmlsdGVyUmVnaW9uOyB9CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+
IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3Rz
LCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVy
UmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGxhc3RFZmZlY3QoKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3Qo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQot
ICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
Qm91bmRpbmdCb3g7IH0KKyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGZpbHRlckVmZmVj
dHMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdHM7IH0KKyAgICBjb25zdCBTVkdGaWx0
ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9
CiAKLSAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgc3Rh
dGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGlu
RWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhw
cmVzc2lvbiYmKTsKKworICAgIFNWR0ZpbHRlcihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGlu
RWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhw
cmVzc2lvbiYmKTsKKworICAgIFJlZjxGaWx0ZXJFZmZlY3Q+IGluZGV4ZWRFZmZlY3QoRmlsdGVy
RWZmZWN0OjpUeXBlLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICBib29sIGFwcGx5KEZp
bHRlclJlc3VsdCYsIEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBmaW5hbDsKKworICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAg
IEZsb2F0UmVjdCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3Qg
bV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Ci0gICAgYm9vbCBtX2VmZmVjdEJCb3hN
b2RlOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2J1aWx0aW5FZmZlY3RzOworICAgIEZpbHRl
ckVmZmVjdFZlY3RvciBtX2ZpbHRlckVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBt
X2V4cHJlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQogICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZH
RmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc1NWR0ZpbHRlcigpOyB9CiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDk2ZjNhODA1
MDQyOTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdiOTQuLjE3ZDQzODk5NTMyZTliZGMxMTI4N2Mx
YzU4YTliZTU5ZjU4MTg4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDg3ICsyMSwxODQgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0
ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGlj
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisKKyNp
ZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAi
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWVNYXBwaW5ncy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVy
QnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFw
aGljKQorVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIGF1dG8gcHJpbWl0aXZl
VW5pdHMgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCk7CisgICAgVmVjdG9yPEZpbHRl
ckJvdW5kYXJ5U2V0PiBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisKKyAgICBmb3IgKGF1dG8m
IGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gYm91bmRhcmllcyA9
IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgcHJpbWl0aXZlVW5pdHMsIHRhcmdldEJv
dW5kaW5nQm94KTsKKyAgICAgICAgCisgICAgICAgIE9wdGlvblNldDxGaWx0ZXJCb3VuZGFyeVNl
dDo6RmxhZ3M+IGZsYWdzOworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNl
dDo6RmxhZ3M6Okhhc1gpOworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5
U2V0OjpGbGFnczo6SGFzWSk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmli
dXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJv
dW5kYXJ5U2V0OjpGbGFnczo6SGFzV2lkdGgpOworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50
Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCisgICAgICAgICAgICBmbGFncy5h
ZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNIZWlnaHQpOworCisgICAgICAgIGZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0cy5hcHBlbmQoeyBib3VuZGFyaWVzLCBmbGFncyB9KTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzOworfQorCitzdGQ6OnR1cGxl
PEZpbHRlckVmZmVjdFZlY3RvciwgU1ZHRmlsdGVyRXhwcmVzc2lvbj4gU1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpCit7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5j
b3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIHNldHVwQnVpbHRpbkVmZmVjdHMoYnVpbHRpbkVmZmVjdHMpOworCisgICAgRmls
dGVyRWZmZWN0c0lucHV0cyBlZmZlY3RzSW5wdXRzOworICAgIGlmICghYnVpbGRFZmZlY3RzKGZp
bHRlckVsZW1lbnQsIGVmZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
aWYgKCFidWlsZEV4cHJlc3Npb24oZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKG1fZmlsdGVyRWZmZWN0cyksIFdURk1vdmUobV9leHBy
ZXNzaW9uKSB9OworfQorCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVj
dHMoY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cykKK3sKKyAgICBtX2J1
aWx0aW5FZmZlY3RzLmFkZChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1lKCksIGJ1aWx0
aW5FZmZlY3RzWzBdKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChGaWx0ZXJFZmZlY3Q6OnNv
dXJjZUFscGhhTmFtZSgpLCBidWlsdGluRWZmZWN0c1sxXSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUdyYXBoaWMoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1l
KCkpOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VB
bHBoYSgpIGNvbnN0CiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6
ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFw
aGljKSk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKyAgICByZXR1cm4gbV9idWlsdGluRWZm
ZWN0cy5nZXQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKSk7CiB9CiAKLXZvaWQgU1ZH
RmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBlZmZlY3QpCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KGNvbnN0
IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKIHsKLSAgICBpZiAo
aWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdDsKKyAgICBpZiAo
bmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0LnB0cigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFp
bnMoaWQpKQorICAgIGlmIChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKG5hbWUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3Q7Ci0gICAgbV9uYW1lZEVmZmVj
dHMuc2V0KGlkLCBtX2xhc3RFZmZlY3QpOworICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIo
KTsKKyAgICBtX25hbWVkRWZmZWN0cy5zZXQobmFtZSwgV1RGTW92ZShlZmZlY3QpKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6Z2V0RWZmZWN0QnlJZChjb25z
dCBBdG9tU3RyaW5nJiBpZCkgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1
aWxkZXI6Om5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAg
aWYgKGlkLmlzRW1wdHkoKSkgeworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBp
ZiAobV9sYXN0RWZmZWN0KQogICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVjdDsKIAotICAg
ICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUdyYXBoaWMoKTsKICAgICB9CiAKLSAgICBpZiAo
bV9idWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5F
ZmZlY3RzLmdldChpZCk7CisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMobmFtZSkp
CisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChuYW1lKTsKIAotICAgIHJldHVy
biBtX25hbWVkRWZmZWN0cy5nZXQoaWQpOworICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQo
bmFtZSk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RS
ZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgZWZmZWN0LCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCitz
dGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZH
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXdseSBj
cmVhdGVkIGZpbHRlciBlZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMuY29u
dGFpbnMoZWZmZWN0KSk7Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZmZWN0UmVuZGVyZXIu
Y29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZp
bHRlckVmZmVjdFNldCgpKTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0g
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBpcyBub3QgcG9zc2li
bGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAgICAgICBlZmZlY3RS
ZWZlcmVuY2VzKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3QuZ2V0KCkpOwotCi0g
ICAgLy8gSWYgb2JqZWN0IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgYXR0
YWNoZWQgZm9yIHNvbWUKLSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4gbWVhbiB0aGF0IGNl
cnRhaW4gdHlwZXMgb2YgaW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8gd29yayAodGhlIExh
eW91dE9iamVjdCAtPiBGaWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBiZSBkZWZpbmVkKS4K
LSAgICBpZiAob2JqZWN0KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChvYmplY3QsIGVm
ZmVjdC5nZXQoKSk7CisgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkp
CisgICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJw
b2xhdGlvbkZpbHRlcnMoKTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5
IHZhbHVlIGZyb20gdGhlIGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29t
cHV0ZWRTdHlsZUV4dHJhY3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNv
bG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1
dG87CiB9CisjZW5kaWYKIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQor
Ym9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmls
dGVyRWxlbWVudCwgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cykKIHsKLSAgICBt
X2xhc3RFZmZlY3QgPSBudWxscHRyOwotICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFyKCk7Ci0gICAg
bV9lZmZlY3RSZWZlcmVuY2VzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZW5kZXJlci5jbGVhcigp
OwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CisgICAgZWZmZWN0c0lucHV0cy5zZXQoKnNvdXJj
ZUFscGhhKCksIEZpbHRlckVmZmVjdFZlY3RvciB7ICpzb3VyY2VHcmFwaGljKCkgfSk7CisKKyAg
ICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8g
W2VmZmVjdCwgaW5wdXRzXSA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBp
ZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJw
b2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpM
aW5lYXJSR0IpCisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCisgICAgCisgICAgICAg
IGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVjdCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAgICAg
ICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3QgfSk7CisK
KyAgICAgICAgbV9maWx0ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQorYm9vbCBTVkdGaWx0
ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mIGVmZmVj
dCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmlsdGVyRWZmZWN0
VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpCiB7Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jl
c3VsdCgpKQotICAgICAgICByZXR1cm47CisgICAgLy8gQSBjeWNsZSBpcyBkZXRlY3RlZC4KKyAg
ICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGVmZmVjdC5wdHIoKSA9PSBzb3VyY2VHcmFwaGljKCkpCisgICAgICAgIG1fZXhwcmVz
c2lvbi5pbnNlcnQoMCwgeyBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMsIDAsIGxl
dmVsIH0pOworICAgIGVsc2UgaWYgKGVmZmVjdC5wdHIoKSA9PSBzb3VyY2VBbHBoYSgpKQorICAg
ICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VB
bHBoYSwgMSwgbGV2ZWwgfSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2ZpbHRlckVm
ZmVjdHMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwg
eyBlZmZlY3QtPnR5cGUoKSwgbV9maWx0ZXJFZmZlY3RzLmZpbmQoZWZmZWN0KSwgbGV2ZWwgfSk7
CisgICAgfQorCisgICAgc3RhY2suYXBwZW5kKGVmZmVjdCk7CisKKyAgICBmb3IgKGF1dG8mIGlu
cHV0RWZmZWN0IDogZWZmZWN0c0lucHV0cy5nZXQoZWZmZWN0KSkgeworICAgICAgICBpZiAoIWJ1
aWxkRXhwcmVzc2lvbihpbnB1dEVmZmVjdCwgZWZmZWN0c0lucHV0cywgc3RhY2ssIGxldmVsICsg
MSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgZWZmZWN0LT5jbGVh
clJlc3VsdCgpOworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoc3Rh
Y2subGFzdCgpLnB0cigpID09IGVmZmVjdC5wdHIoKSk7CisKKyAgICBzdGFjay5yZW1vdmVMYXN0
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRF
eHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1dHMpCit7Cisg
ICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAo
YXV0byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpKQotICAgICAgICBjbGVh
clJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3Rh
Y2s7CisgICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0
c0lucHV0cywgc3RhY2ssIDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uZWVlOGRk
NWE4ZDcwYjc1NjkwYzE4YzZlM2E2NjAzNjBmZTk5ODRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNz
ZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDY4ICsy
MSw0NSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgor
I2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKIAogY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEZp
bHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyKCkgPSBk
ZWZhdWx0OwogCi0gICAgU1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3Vy
Y2VHcmFwaGljKTsKKyAgICBzdGF0aWMgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBidWlsZEZp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhTVkdGaWx0ZXJFbGVtZW50JiwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRCb3VuZGluZ0JveCk7CiAKLSAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNv
bnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQotICAgIEZsb2F0
UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdC
b3g7IH0KLSAgICAKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRz
KCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0czsgfQotICAgIHZvaWQgc2V0UHJpbWl0
aXZlVW5pdHMoU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB1bml0cykgeyBtX3ByaW1pdGl2ZVVu
aXRzID0gdW5pdHM7IH0KKyAgICBzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdFZlY3RvciwgU1ZHRmls
dGVyRXhwcmVzc2lvbj4gYnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsKIAotICAgIHZvaWQgYWRkKGNvbnN0IEF0
b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pik7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3Q7CiAKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmKSBjb25z
dDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RF
ZmZlY3QuZ2V0KCk7IH0KLQotICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2Vz
KFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYsIFJlbmRlck9iamVjdCopOworcHJpdmF0ZToKKyAgICB1
c2luZyBGaWx0ZXJFZmZlY3RzSW5wdXRzID0gSGFzaE1hcDxSZWY8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj47CiAKLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0U2V0JiBl
ZmZlY3RSZWZlcmVuY2VzKEZpbHRlckVmZmVjdCogZWZmZWN0KQotICAgIHsKLSAgICAgICAgLy8g
T25seSBhbGxvd2VkIGZvciBlZmZlY3RzIGJlbG9uZ3MgdG8gdGhpcyBidWlsZGVyLgotICAgICAg
ICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOwotICAgICAgICBy
ZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+dmFsdWU7Ci0gICAgfQorICAg
IHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0
aW5FZmZlY3RzKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKCkgY29u
c3Q7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlQWxwaGEoKSBjb25zdDsKIAotICAg
IC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcg
YW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RC
eVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVy
LmdldChvYmplY3QpOyB9CisgICAgdm9pZCBhZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5n
JiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7CisgICAgYm9vbCBidWlsZEVmZmVjdHMoU1ZHRmls
dGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdHNJbnB1dHMmKTsKIAotICAgIHZvaWQgY2xlYXJFZmZl
Y3RzKCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7Cisg
ICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBG
aWx0ZXJFZmZlY3RzSW5wdXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaywgdW5zaWduZWQg
bGV2ZWwpOworICAgIGJvb2wgYnVpbGRFeHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1
dHMmKTsKIAotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCi0g
ICAgewotICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVz
KCkpCi0gICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZm
ZWN0U2V0KCkpOwotICAgIH0KLQotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRl
ckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQ
dHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7Ci0gICAgLy8gVGhlIHZhbHVlIGlzIGEg
bGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVyIGVmZmVjdHMsCi0gICAgLy8gd2hpY2gg
ZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBlZmZlY3QuCi0gICAgSGFzaE1hcDxSZWZQdHI8Rmls
dGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0PiBtX2VmZmVjdFJlZmVyZW5jZXM7Ci0gICAgSGFz
aE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJFZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOworICAg
IEZpbHRlckVmZmVjdFZlY3RvciBtX2ZpbHRlckVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRXhwcmVz
c2lvbiBtX2V4cHJlc3Npb247CiAKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJF
ZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZp
bHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1f
bGFzdEVmZmVjdDsKLSAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBTVkdV
bml0VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZlVW5pdHMgeyBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UgfTsKIH07Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjUwMmFkYTk2MjcwZTUwMTkz
MmM2YzA3YjVmNDc5NTYyNDAzYjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgU1ZHRmlsdGVyRXhwcmVzc2lvbiA9
IFZlY3RvcjxzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdDo6VHlwZSwgdW5zaWduZWQsIHVuc2lnbmVk
Pj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cAppbmRleCA3ZjYzZjk2YzE1ZDNlNDJjZjk0OGI4ZGZiYTkxZjViMWY0MWQxYzE4Li41ZTM4YmI4
OTlmNDg2Y2UwNjU0YzFjNjM3MjY0ZmY0Y2ZiYzEyOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAj
aW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwpAQCAtMzAzLDYgKzMwNCw0MyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OmRyYXdQYXR0ZXJuV2l0aFF1YWxpZmllZElkZW50aWZpZXIoUXVhbGlmaWVkUmVu
ZAogICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShpbWFnZUlkZW50aWZpZXIp
OwogfQogCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0
ZXJSZWZlcmVuY2UgZmlsdGVyUmVmZXJlbmNlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnkpCit7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICBpZiAoaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKSB7CisgICAgICAgIGltYWdlQnVmZmVyID0gcmVzb3VyY2VDYWNo
ZSgpLmNhY2hlZEltYWdlQnVmZmVyKHsgKmltYWdlQnVmZmVySWRlbnRpZmllciwgbV93ZWJQcm9j
ZXNzSWRlbnRpZmllciB9KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBhdXRvIGZpbHRlciA9IGZpbHRlclJlZmVyZW5jZS50YWtlRmlsdGVyKCk7
CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlci0+ZWZmZWN0c09mVHlwZShGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpKSB7CisgICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2Fz
dDxGRUltYWdlPihlZmZlY3QuZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgY29uc3QgYXV0byog
cmVzb3VyY2VJZGVudGlmaWVyID0gc3RkOjpnZXRfaWY8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyPigmZmVJbWFnZS5zb3VyY2VJbWFnZSgpKTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZUlkZW50
aWZpZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSByZXNv
dXJjZUNhY2hlKCkuY2FjaGVkTmF0aXZlSW1hZ2UoeyAqcmVzb3VyY2VJZGVudGlmaWVyLCBtX3dl
YlByb2Nlc3NJZGVudGlmaWVyIH0pKSB7CisgICAgICAgICAgICBSZWY8SW1hZ2U+IGltYWdlID0g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8TmF0aXZlSW1hZ2U+IHsgbmF0aXZlSW1hZ2UgfSk7
CisgICAgICAgICAgICBmZUltYWdlLnNldEltYWdlU291cmNlKFdURk1vdmUoaW1hZ2UpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSByZXNvdXJjZUNhY2hlKCkuY2FjaGVkSW1hZ2VCdWZmZXIoeyAqcmVzb3VyY2VJZGVu
dGlmaWVyLCBtX3dlYlByb2Nlc3NJZGVudGlmaWVyIH0pKSB7CisgICAgICAgICAgICBmZUltYWdl
LnNldEltYWdlU291cmNlKHsgKmltYWdlQnVmZmVyIH0pOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpEcmF3Rmls
dGVySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzb3VyY2VJbWFnZVJlY3QsIFdU
Rk1vdmUoZmlsdGVyKSwgZ2VvbWV0cnkpLCBpbWFnZUJ1ZmZlci5nZXQoKSk7Cit9CisKIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewogICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIob3BhY2l0eSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggNjJhNDk3MDZl
MjhiMDFlMGE2Yjg2OWJkMzNlNjI0ZWM3ZDhiMzY5MS4uMjJiNjM5Yzk0OTMyZjcxOTFiYTYyY2Zk
NzkyNmIwNzY0N2RkOTFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0zNyw2ICsz
NywxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7Cit9CisKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwpAQCAtODAs
NiArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKICAgICB2
b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogICAgIHZv
aWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNv
cmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZm
ZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlt
YWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IElQQzo6RmlsdGVyUmVmZXJlbmNlLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYpOwog
ICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKICAgICB2b2lk
IGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgppbmRleCA1YzE0MDkzYTNiOWFiYTBhMWJlNzIwNjg3
ZWZiNDY2OGI1OTVhMzYxLi5hNmU2YTFjYmY0NzMyYjVmMDAzODg1OWE2MzhjMWU4MzE1YjI3MGZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgpAQCAtNDYs
NiArNDYsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNv
dW50ZWQgU3RyZWFtIHsKICAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06dWlu
dDhfdCBXZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKICAgICBCZWdpbkNsaXBUb0RyYXdpbmdD
b21tYW5kcyhXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24sIFdlYkNvcmU6OkRlc3RpbmF0
aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyhX
ZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisgICAgRHJhd0ZpbHRlckltYWdlQnVmZmVy
KHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFn
ZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6Rmls
dGVyUmVmZXJlbmNlIGZpbHRlciwgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkgZ2VvbWV0cnkpCiAg
ICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyBpdGVtKQogICAg
IERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBX
ZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zIG9wdGlvbnMpCiAgICAgRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFn
ZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNy
Y1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IGY1OGMzNjk2ZjUzZWZkMTUwYjFkYjkwZTMxYjM5ZWI1
NjZiNWRjZmMuLjZjNTEzN2JlZThkYjE3MjIzYmFmZjY2NjU3OTlmMmJjNWMzNDViMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKIAorI2luY2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oIgpAQCAtMzAzLDYgKzMwNCwzNCBAQCB2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyV2l0
aFF1YWxpZmllZElkZW50aQogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7
CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJbWFnZUZvcklt
YWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBJUEM6OkZp
bHRlclJlZmVyZW5jZSYmIGZpbHRlclJlZmVyZW5jZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdl
b21ldHJ5LAorICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIGZpbHRlciA9IGZpbHRlclJlZmVyZW5jZS50YWtlRmlsdGVyKCk7
CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIFsmXSgpIHsK
KyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJ
bWFnZUJ1ZmZlcih7IGlkZW50aWZpZXIsIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+d2Vi
UHJvY2Vzc0lkZW50aWZpZXIoKSB9KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdlQnVmZmVyLT5maWx0ZXJl
ZEltYWdlKGZpbHRlciwgZ2VvbWV0cnkpOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKCk7CisgICAg
ICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6
ZShpbWFnZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xvclNwYWNlKCkgfSk7CisgICAgICAgIGlm
ICghYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGNvbnRleHQgPSBi
aXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICBpZiAoIWNvbnRleHQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSgqaW1hZ2UsIEZs
b2F0UG9pbnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAg
fSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7Cit9CisKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbmF0aXZl
SW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgLy8gSW1tZWRpYXRlbHkgdHVybiB0aGUg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyICh3aGljaCBpcyBlcnJvci1wcm9uZSkgdG8gYSBR
dWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApp
bmRleCAzMWFkOTI5ODk5YmRjZmI4MDBlYWViZGNhOWIzMWY4YWE5MzBhYzQ5Li4xM2Y5N2JjY2Qx
ZTVhMGM3ZTdjNDY4YWM5NjlhMWMxNzRiODI1YTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAg
LTU5LDYgKzU5LDEwIEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIH0KIAor
bmFtZXNwYWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7Cit9CisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwpAQCAtMTA5LDYgKzEx
Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRh
Rm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0U2hh
cmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgZ2V0RmlsdGVyZWRJ
bWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
SVBDOjpGaWx0ZXJSZWZlcmVuY2UmJiwgY29uc3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAg
ICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250
KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDk0OTg4NjMwOGEzNTQ2NWRj
ZTVmZmFjYmNjN2JjMWM2YzQ1N2I0MGEuLjcxMzU0ZWRkMDc2NjJjOTdmNjEzMmRiNDcxNzMxMWU1
N2ViODVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0z
MSw2ICszMSw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291
bnRlZCBTdHJlYW0gewogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5
cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmlu
ZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmlu
ZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChW
ZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBG
b3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VC
dWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5
bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CisgICAgR2V0RmlsdGVyZWRJbWFnZUZv
ckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1
ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyLCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eSBnZW9tZXRyeSkgLT4gKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBT
eW5jaHJvbm91cyBOb3RTdHJlYW1FbmNvZGFibGVSZXBseQogICAgIENhY2hlTmF0aXZlSW1hZ2Uo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIE5vdFN0cmVh
bUVuY29kYWJsZQogICAgIENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkgTm90U3Ry
ZWFtRW5jb2RhYmxlCiAgICAgRGVsZXRlQWxsRm9udHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDUzN2RjMmVkZDM0YWNhZTQz
NjI4NmVlZTJjZWY1YjkxZjg5ZWJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmgKQEAgLTAsMCArMSw0MzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTRmlsdGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9GRUJsZW5kLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbG9yTWF0cml4
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbXBvbmVudFRyYW5zZmVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GRUNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVDb252b2x2ZU1hdHJp
eC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVEaWZmdXNlTGlnaHRpbmcuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZFRGlzcGxhY2VtZW50TWFwLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRURyb3BTaGFk
b3cuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFRmxvb2QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZF
R2F1c3NpYW5CbHVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU1lcmdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GRU1vcnBob2xvZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFT2Zmc2V0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GRVNwZWN1bGFyTGlnaHRpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZFVGlsZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVUdXJidWxlbmNlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlckVmZmVjdFZlY3Rvci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZHRkVJbWFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZH
RmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXJFeHByZXNzaW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Tb3VyY2VHcmFwaGljLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFz
cyBGaWx0ZXJSZWZlcmVuY2UgeworcHVibGljOgorICAgIEZpbHRlclJlZmVyZW5jZShSZWY8V2Vi
Q29yZTo6RmlsdGVyPiYmIGZpbHRlcikKKyAgICAgICAgOiBtX2ZpbHRlcihXVEZNb3ZlKGZpbHRl
cikpCisgICAgeworICAgIH0KKworICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IHRha2VGaWx0ZXIo
KSB7IHJldHVybiBXVEZNb3ZlKG1fZmlsdGVyKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gZGVjb2RlKERlY29k
ZXImKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBzdGF0aWMgdm9p
ZCBlbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiwgRW5jb2Rl
ciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6
RmlsdGVyRWZmZWN0PiBkZWNvZGVGaWx0ZXJFZmZlY3QoRGVjb2RlciYsIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlKTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHN0YXRpYyB2
b2lkIGVuY29kZVNWR0ZpbHRlcihjb25zdCBXZWJDb3JlOjpTVkdGaWx0ZXImLCBFbmNvZGVyJik7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTVkdG
aWx0ZXI+IGRlY29kZVNWR0ZpbHRlcihEZWNvZGVyJik7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGVDU1NGaWx0ZXIoY29uc3QgV2ViQ29yZTo6Q1NTRmls
dGVyJiwgRW5jb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBSZWZQ
dHI8V2ViQ29yZTo6Q1NTRmlsdGVyPiBkZWNvZGVDU1NGaWx0ZXIoRGVjb2RlciYpOworICAgIAor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZUZpbHRlcihjb25z
dCBXZWJDb3JlOjpGaWx0ZXImLCBFbmNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXI+IGRlY29kZUZpbHRlcihEZWNvZGVyJik7
CisKKyAgICBSZWY8V2ViQ29yZTo6RmlsdGVyPiBtX2ZpbHRlcjsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlRmlsdGVyRWZmZWN0KGNv
bnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0LCBFbmNvZGVyJiBlbmNvZGVyKQorewor
ICAgIEFTU0VSVChlZmZlY3QudHlwZSgpID49IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6
RkVNaW5pbXVtICYmIGVmZmVjdC50eXBlKCkgPD0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpGRU1heGltdW0pOworCisgICAgZW5jb2RlciA8PCBlZmZlY3QudHlwZSgpOworICAgIGVuY29k
ZXIgPDwgZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKTsKKworICAgIHN3aXRjaCAoZWZmZWN0
LnR5cGUoKSkgeworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5k
OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUJsZW5kPihlZmZlY3QpLmVuY29kZShlbmNv
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6RkVDb2xvck1hdHJpeDoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVDb2xvck1h
dHJpeD4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAg
ICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkuZW5jb2Rl
KGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRUNvbXBvc2l0ZToKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVDb21w
b3NpdGU+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgICAg
ICBkb3duY2FzdDxXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4PihlZmZlY3QpLmVuY29kZShlbmNv
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmc6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXA6
CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwPihlZmZlY3QpLmVu
Y29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpG
RURyb3BTaGFkb3c+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUZsb29kOgorICAgICAgICBk
b3duY2FzdDxXZWJDb3JlOjpGRUZsb29kPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVz
c2lhbkJsdXI6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyPihlZmZl
Y3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZToKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6
RkVJbWFnZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWVyZ2U6CisgICAgICAgIGRvd25j
YXN0PFdlYkNvcmU6OkZFTWVyZ2U+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpGRU1vcnBob2xvZ3k6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFTW9ycGhvbG9neT4o
ZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBkb3duY2FzdDxXZWJD
b3JlOjpGRU9mZnNldD4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGlu
ZzoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nPihlZmZlY3Qp
LmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGRvd25jYXN0
PFdlYkNvcmU6OkZFVHVyYnVsZW5jZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdy
YXBoaWM6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlRmlsdGVyRWZmZWN0KERl
Y29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlIHR5cGUpCit7Cisg
ICAgaWYgKCEodHlwZSA+PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVt
ICYmIHR5cGUgPD0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWF4aW11bSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IG9wZXJhdGluZ0NvbG9yU3BhY2U7CisgICAgZGVjb2RlciA+PiBv
cGVyYXRpbmdDb2xvclNwYWNlOworICAgIGlmICghb3BlcmF0aW5nQ29sb3JTcGFjZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q+PiBlZmZlY3Q7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQmxlbmQ6CisgICAgICAgIGVmZmVjdCA9IFdl
YkNvcmU6OkZFQmxlbmQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJp
eDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNv
bXBvbmVudFRyYW5zZmVyOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9zaXRlOgorICAgICAgICBl
ZmZlY3QgPSBXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZl
TWF0cml4OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpkZWNv
ZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAgICAgICBlZmZl
Y3QgPSBXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6ZGVjb2RlKGRlY29kZXIpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3Bs
YWNlbWVudE1hcDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVGbG9vZDoKKyAgICAgICAgZWZmZWN0
ID0gV2ViQ29yZTo6RkVGbG9vZDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAg
ICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6
RkVJbWFnZToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpGRU1lcmdlOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU1lcmdlOjpkZWNvZGUo
ZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFTW9ycGhvbG9neToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBlZmZlY3QgPSBXZWJD
b3JlOjpGRU9mZnNldDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmc6CisgICAg
ICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZGVjb2RlKGRlY29kZXIp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpGRVRpbGU6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFVGlsZTo6Y3JlYXRlKCk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
VHVyYnVsZW5jZToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpkZWNv
ZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoZWZmZWN0KSB7CisgICAg
ICAgICgqZWZmZWN0KS0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZSgqb3BlcmF0aW5nQ29sb3JTcGFj
ZSk7CisgICAgICAgIHJldHVybiB7ICgqZWZmZWN0KS5wdHIoKSB9OworICAgIH0KKworICAgIHJl
dHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJS
ZWZlcmVuY2U6OmVuY29kZVNWR0ZpbHRlcihjb25zdCBXZWJDb3JlOjpTVkdGaWx0ZXImIGZpbHRl
ciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNvZGVyIDw8IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7CisKKyAgICBhdXRvJiBmaWx0ZXJFZmZlY3RzID0gZmls
dGVyLmZpbHRlckVmZmVjdHMoKTsKKyAgICBlbmNvZGVyIDw8IGZpbHRlckVmZmVjdHMuc2l6ZSgp
OworCisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXJFZmZlY3RzKQorICAgICAgICBlbmNv
ZGVGaWx0ZXJFZmZlY3QoZWZmZWN0LCBlbmNvZGVyKTsKKyAgICAKKyAgICBhdXRvJiBleHByZXNz
aW9uID0gZmlsdGVyLmV4cHJlc3Npb24oKTsKKyAgICBlbmNvZGVyIDw8IGV4cHJlc3Npb24uc2l6
ZSgpOworCisgICAgZm9yIChhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdIDogZXhwcmVzc2lvbikg
eworICAgICAgICBlbmNvZGVyIDw8IHR5cGU7CisgICAgICAgIGVuY29kZXIgPDwgaW5kZXg7Cisg
ICAgICAgIGVuY29kZXIgPDwgbGV2ZWw7CisgICAgfQorfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorUmVmUHRyPFdlYkNvcmU6OlNWR0ZpbHRlcj4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVT
VkdGaWx0ZXIoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4g
c2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBXZWJDb3JlOjpGaWx0ZXJFZmZlY3RWZWN0b3Ig
ZmlsdGVyRWZmZWN0czsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyAr
K2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAgICAgYXV0byBlZmZlY3QgPSBk
ZWNvZGVGaWx0ZXJFZmZlY3QoZGVjb2RlciwgKnR5cGUpOworICAgICAgICBpZiAoIWVmZmVjdCkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgICAgICBmaWx0ZXJFZmZlY3Rz
LmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgZGVjb2RlciA+
PiBzaXplOworICAgIGlmICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgV2ViQ29yZTo6U1ZHRmlsdGVyRXhwcmVzc2lvbiBleHByZXNzaW9uOworICAgIAor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7ICsraSkgeworICAgICAgICBzdGQ6Om9w
dGlvbmFsPFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVjb2Rl
ciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4OworICAg
ICAgICBkZWNvZGVyID4+IGluZGV4OworICAgICAgICBpZiAoIWluZGV4KQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbGV2ZWw7
CisgICAgICAgIGRlY29kZXIgPj4gbGV2ZWw7CisgICAgICAgIGlmICghbGV2ZWwpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBleHByZXNzaW9uLmFwcGVuZCh7ICp0eXBl
LCAqaW5kZXgsICpsZXZlbCB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gV2ViQ29yZTo6U1ZHRmls
dGVyOjpjcmVhdGUoV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSk7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5j
b2RlQ1NTRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkNTU0ZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBl
bmNvZGVyKQoreworICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkNTU0ZpbHRlcjsKKyAgICBlbmNvZGVyIDw8IGZpbHRlci5mdW5jdGlvbnMoKS5zaXplKCk7Cisg
ICAgCisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZpbHRlci5mdW5jdGlvbnMoKSkgeworICAg
ICAgICBpZiAoaXM8V2ViQ29yZTo6U1ZHRmlsdGVyPihmdW5jdGlvbikpCisgICAgICAgICAgICBl
bmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVyPihmdW5jdGlvbi5nZXQo
KSksIGVuY29kZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNvZGVGaWx0ZXJFZmZl
Y3QoZG93bmNhc3Q8V2ViQ29yZTo6RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5nZXQoKSksIGVuY29k
ZXIpOworICAgIH0KKyAgICAKKyAgICBlbmNvZGVyIDw8IGZpbHRlci5yZW5kZXJpbmdNb2RlKCk7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitSZWZQdHI8V2ViQ29yZTo6Q1NTRmlsdGVy
PiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUNTU0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAg
ICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZl
Y3RvcjxSZWY8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24+PiBmdW5jdGlvbnM7CisgICAgCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+
PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNW
R0ZpbHRlcikgeworICAgICAgICAgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2RlU1ZHRmlsdGVy
KGRlY29kZXIpKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
ZWZmZWN0ID0gZGVjb2RlRmlsdGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAgICAgICAgaWYg
KCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAg
IGZ1bmN0aW9ucy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKyAgICAK
KyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGU7
CisgICAgZGVjb2RlciA+PiByZW5kZXJpbmdNb2RlOworICAgIGlmICghcmVuZGVyaW5nTW9kZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6Q1NTRmlsdGVy
OjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbnMpLCAqcmVuZGVyaW5nTW9kZSk7Cit9CisKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlRmlsdGVyKGNv
bnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGlm
IChpczxXZWJDb3JlOjpDU1NGaWx0ZXI+KGZpbHRlcikpCisgICAgICAgIGVuY29kZUNTU0ZpbHRl
cihkb3duY2FzdDxXZWJDb3JlOjpDU1NGaWx0ZXI+KGZpbHRlciksIGVuY29kZXIpOworICAgIGVs
c2UKKyAgICAgICAgZW5jb2RlU1ZHRmlsdGVyKGRvd25jYXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4o
ZmlsdGVyKSwgZW5jb2Rlcik7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitSZWZQdHI8
V2ViQ29yZTo6RmlsdGVyPiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlcihEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOworICAgIGlmICghdHlwZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkNTU0ZpbHRlcikKKyAgICAgICAgcmV0dXJuIGRlY29kZUNTU0ZpbHRlcihkZWNv
ZGVyKTsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U1ZHRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlU1ZHRmlsdGVyKGRlY29kZXIpOworICAg
IAorICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9p
ZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZUZpbHRlcihtX2ZpbHRlciwgZW5jb2Rlcik7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gRmlsdGVyUmVmZXJlbmNlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVG
aWx0ZXIoZGVjb2RlcikpCisgICAgICAgIHJldHVybiB7IGZpbHRlci5yZWxlYXNlTm9uTnVsbCgp
IH07CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSVBDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA2NTg0ZDFhZDdlMTU0
ZWIwOTIwMjMxMGRkZmE2YjVlMTIxYWQyYzM5Li5lYjZjMmI3MDE5ODI5MmYxYWRlZmMzNTg0MDMw
ODkwODI1NWRmNmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkK
QEAgLTI2Niw2ICsyNjYsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNs
YXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnQ1ZQaXhlbEJ1ZmZlclJl
ZicsCiAgICAgICAgICdJUEM6OkRhdGFSZWZlcmVuY2UnLAorICAgICAgICAnSVBDOjpGaWx0ZXJS
ZWZlcmVuY2UnLAogICAgICAgICAnSVBDOjpGb250UmVmZXJlbmNlJywKICAgICAgICAgJ0lQQzo6
U2VtYXBob3JlJywKICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLApAQCAtMjkwLDcgKzI5MSw2IEBA
IGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdX
ZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRpYVNlc3Np
b25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUltYWdlUmVmZXJlbmNlJywK
ICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBs
YXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NDZlZTY0NjE3NmRjZGUxNzRmZDQ3Zjk1NjgwOTY0
NzhmNDk0YjIzLi45OWNjZTU0YWNhOTJmZGQ0YjgwNGMxMTM3YjdjYTAyMDE0OWMyZDM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEz
NDgsNiArMTM0OCw3IEBACiAJCTcxQkFBNzMzMjVGRkQwOTgwMEQ3Q0Q1RCAvKiBXS01vZGVsVmll
dy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFCQUE3
MzEyNUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3LmggKi87IH07CiAJCTcxRkI4MTBCMjI2
MDYyN0UwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGlj
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQjgx
MEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNo
UG9saWN5LmggKi87IH07CiAJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CisJ
CTcyRUU3OUJEMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRUU3OUJBMjcwRTVBQjkwMDRD
RTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLzsgfTsKIAkJNzVBOEQyQzgxODdDQ0ZBQjAwQzM5
QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURh
dGFTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsK
IAkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJE
NDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLzsgfTsK
IAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEy
MEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDc2OCw2ICs0NzY5LDcgQEAK
IAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjUzMTU3MjUzQzFFNEQwMDQ5Mjk1QSAv
KiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
NTMxNTgyNTNDMUU0RDAwNDkyOTVBIC8qIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZWZlcmVuY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdL
V2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dl
YnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUx
ODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0
ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
V2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03NDE4LDYgKzc0MjAsNyBAQAogCQkJCUJDMDMyRDlFMTBGNDM3RDEwMDU4QzE1QSAvKiBEZWNv
ZGVyLmggKi8sCiAJCQkJQkMwMzJEOUYxMEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuY3BwICov
LAogCQkJCUJDMDMyREEwMTBGNDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmggKi8sCisJCQkJNzJF
RTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oICovLAogCQkJCTlCRDhB
QjQ5MjU4MjBFNTIwMDUzODZGOCAvKiBGb250UmVmZXJlbmNlLmggKi8sCiAJCQkJNDE1MUU1QzMx
RkJCOTBBOTAwRTQ3RTJEIC8qIEZvcm1EYXRhUmVmZXJlbmNlLmggKi8sCiAJCQkJQzBDRTcyQUMx
MjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3NhZ2UuaCAqLywKQEAgLTEyNDM2LDYgKzEyNDM5
LDcgQEAKIAkJCQk5MzEyQkFENjI2RjMzQzI5MDBGRERGNUYgLyogRmlsZVN5c3RlbVN0b3JhZ2VI
YW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUI1NzlBMjZGNTE5MzMwMDhCNDhBQyAvKiBG
aWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzEy
QkFENTI2RjMzQzI2MDBGRERGNUYgLyogRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MkVFNzlCRDI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFGODggLyogRmluZENs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZp
bmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTlDNEE1OTE4QjgxMTc0MDA3QkRD
QjYgLyogRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKaW5kZXggOTQyMWRkMjM4Y2I2
ZWM2M2ZlMWMwN2Q0NzM2MWNiMGI2NWZmNDBjYi4uMjVlNGVmMDU3YWM4YThhZDViNGJlZjQxNTYy
NWEwYTY3NGM5OWUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisj
aW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgpAQCAtMjE0LDYgKzIxNSwxMSBAQCB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdQYXR0ZXJuKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKIH0KIAor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXIoaW1hZ2VJ
ZGVudGlmaWVyLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0
ZXI+IHsgZmlsdGVyIH0pLCBnZW9tZXRyeSkpOworfQorCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5LmgKaW5kZXggNzFmZGI2M2RmNGFjODQ5NzQ3MjMyNjliN2YwM2Q5OTdiODEz
OTg5ZC4uZjc5MGYzNzA1NTYwMjEyZGU4YzY5MmYwOTllMDFhZmZkOGJlMzA5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCkBAIC05NCw2ICs5NCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBp
bWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyPiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIFdlYkNvcmU6OkZpbHRlciYsIGNvbnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5JikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDY5MzRiYjQ2MTZjZTAwYmVhYjE0MGJhYTk0
MTA5YjZiYTk1ZjNjMjQuLjJmNTZhY2U0MGRmMGI5MDIwYjJkMzU2OTQyOTBkZTljMWIyZmYzOTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0xOTcsNiArMTk3LDE0IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9CiAKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgV2ViQ29yZTo6Rmls
dGVyJiBmaWx0ZXIsIGNvbnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkt
PmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgfQorCiAgICAgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZm
ZXJGb3JtYXQmIGRlc3RpbmF0aW9uRm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAKaW5kZXggNDEzNTE3MmZhYmZjMTYxMWRkNTYzZGIwOTI2OTJmZGVhMjA3NjgyMC4uODU3
N2E3MzcxOWZlMGZkMDllZjJmYjIwMjExODAzNmI1ZTllNTI5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAi
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKQEAgLTIyNSw2ICsyMjYsMjIg
QEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4KICAgICByZXR1cm4gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaGFuZGxlKTsKIH0KIAorUmVmUHRyPEltYWdlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnkpCit7CisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
OworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIElQ
Qzo6RmlsdGVyUmVmZXJlbmNlIHsgUmVmPEZpbHRlcj4geyBjb25zdF9jYXN0PEZpbHRlciY+KGZp
bHRlcikgfSB9LCBnZW9tZXRyeSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpH
ZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgQVNTRVJUX1VOVVNFRChzZW5kUmVzdWx0LCBz
ZW5kUmVzdWx0KTsKKworICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7
IH07CisgICAgCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5k
bGUpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJl
dHVybiBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCiB7CiAgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpDYWNoZU5hdGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA2NGJiOTI2
N2ZlNmIzMzQ5NmIzM2ZlNTcwZDlhNzFlYWNhNTU0Y2NmLi5lMGRmNjM2Y2UwZDgzZTAzMjQ3MmY1
YjQ0M2YxNmVmN2NhYTA0MTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1
ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNsdWRl
ICJJUENTZW1hcGhvcmUuaCIKQEAgLTkzLDYgKzk0LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBn
ZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0
RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXImLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYpOwogICAgIHZvaWQgY2FjaGVO
YXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6
OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442351</attachid>
            <date>2021-10-25 02:44:09 -0700</date>
            <delta_ts>2021-10-25 03:08:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211025024407.patch</filename>
            <type>text/plain</type>
            <size>1006569</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIxNTA4ZWVkN2ExM2Rm
OWU0M2NiMDIwZDg0MzVkY2FmMGQ0YjY0Yi4uYzE5OWIwMWZlYzU4ZGQxMWU2YWQ0NTA0NWNhOThl
NTlhN2IyNTIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjEtMTAtMjUgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5Q29yZUltYWdlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRU
cmFuc2ZlckNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUltYWdlOjpp
bWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzaGFyZWRDSUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VD
b3JlSW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUlt
YWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OkRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRl
ckltYWdlQnVmZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmltYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjpzb3VyY2VJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnNldEJsZW5kTW9kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQmxlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YmxlbmRNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9y
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0
YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzZXRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6c2V0Q29sb3JNYXRyaXhUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6dmFsdWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cmVkRnVuY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6Z3JlZW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpibHVlRnVuY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YWxwaGFGdW5jdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
RkVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlOjpzZXRLMik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZTo6c2V0SzMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNl
dEs0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmsxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjprMiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6azMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6Oms0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0UHJl
c2VydmVBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpmYXN0U2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6a2VybmVs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjprZXJuZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZGl2aXNvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpiaWFzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxwaGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRp
bmc6OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFu
bmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFlDaGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRY
Q2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5u
ZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNo
YW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnlDaGFubmVsU2VsZWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZF
RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojp0YWtlSW5w
dXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRHJvcFNoYWRvdzo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNldER5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0U2hhZG93Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpz
dGREZXZpYXRpb25YIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6c3RkRGV2aWF0aW9uWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmR4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6ZHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNoYWRvd09wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnNldEZsb29kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRv
S2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChnYXVzc2lhbktlcm5l
bEZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9u
WCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnN0YW5kYXJkQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91
dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRT
dGREZXZpYXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdl
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmVkZ2VNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnRha2VJbnB1dHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExl
bmd0aFgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVs
VW5pdExlbmd0aFkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldEtlcm5lbFVuaXRMZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNl
dEtlcm5lbFVuaXRMZW5ndGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNvdXJj
ZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6c3VyZmFjZVNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRTb3VyY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93
OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6
OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZSk6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGl4ZWxB
cnJheUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUGl4ZWxW
YWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWlu
T3JNYXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0cmVtdW0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZ
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cmFkaXVzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnJhZGl1c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpzZXREeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6c2V0RHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkeCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6OkZFU3BlY3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJD
b25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VGlsZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRC
YXNlRnJlcXVlbmN5WSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldEJhc2VGcmVxdWVuY3lYKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6c2V0U2VlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNt
b290aEN1cnZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0UGFpbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNo
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9p
c2UyRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OnNldFNlZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2VlZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5n
RGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
Qm91bmRhcnlTZXQ6OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5
U2V0Ojp5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmRlY29kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1
dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xl
YXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5w
dXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFz
UmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZ
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hl
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJz
b2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1h
bGl6ZWRGbG9hdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjp0
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0NTU0ZpbHRl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNTVkdGaWx0ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlckVmZmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlQWxwaGFOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VHcmFwaGljTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNhbGN1bGF0ZU91dHNl
dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpGaWx0
ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRl
RmlsdGVyU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJ
bWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1hcElt
YWdlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6bWFwUmVz
b2x2ZWRJbWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6
Om1hcEltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNs
aXBUb0ZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZmlsdGVyUmVnaW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpmaWx0ZXJTY2FsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRl
ckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6Y3JlYXRlRmlsdGVySW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
aW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OmVmZmVjdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291
cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5U29mdHdhcmUgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om1hdHJp
eCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBS
R0JBVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW50ZXJpb3JQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRPdXRlclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFk
b3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oLgorICAg
ICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpwaXhlbEFycmF5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjptaW5Pck1heCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRy
ZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlR1
cmJ1bGVuY2VQYWludGluZ0RhdGE6OlR1cmJ1bGVuY2VQYWludGluZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VHVyYnVsZW5jZVBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OnNtb290aEN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6aW5pdFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdh
cmU6OkZpbHRlckltYWdlU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VT
b2Z0d2FyZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgor
ICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0xpZ2h0aW5nRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2lu
ZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpsZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWxwaGFXaW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdp
bmRvdzo6c2V0UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0
aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmguCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjph
cHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRG
dW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0
ZU91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0
aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1p
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9w
ZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJRExFbnVtTGltaXRz
PENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6dG9TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
SW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
ZXJnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50
OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmhpZ2hlc3RFbnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
aGFzRmlsdGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6ZmlsdGVyRWZmZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpkZWNvZGUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVm
ZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpj
bGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmlt
aXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorCiAyMDIxLTEwLTI1ICBaaXJhbiBTdW4gIDx6c3VuQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW2Nzcy13cml0aW5nLW1vZGVzXSBGaXggc2l6aW5nIG9mIG9ydGhv
Z29uYWwgZWxlbWVudHMgd2l0aCBwZXJjZW50YWdlIG1hcmdpbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZTJiNTBi
NzBhZGYyNWFmN2E0Mzk2MzJmMmFjZGNhYTQ1YjAxOGViZS4uNmVmNjBkYzM3ZGFkZmY1ZDNmZWQ5
NWNiODhjZWJlOTdmN2RhNDJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAyMS0xMC0y
NSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFBy
b2Nlc3NdIEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VG
b3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6RmlsdGVy
UmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVyKToK
KyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGVGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlckVmZmVjdCk6CisgICAgICAg
IChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlU1ZHRmlsdGVyKToKKyAgICAgICAgKElQQzo6
RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJS
ZWZlcmVuY2U6OmVuY29kZUNTU0ZpbHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5j
ZTo6ZGVjb2RlQ1NTRmlsdGVyKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNv
ZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlcik6
CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KElQQzo6RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNs
YXJlZCk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RmlsdGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRl
cmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMTAtMjQgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCBzaG91bGQgbm90IHNlbmQgSVBDIGluIHRoZSBtaWRkbGUgb2YgZGVzdHJ1Y3Rpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDY1ZThlODVkMDQyMmNkNDMyNWEwNjNkMGNhMzM0N2I0MjFk
MzcxYzcuLjI3Nzk0NzhiMzFhZmM4YzgwYzc4MzgzM2QwMGZlYjE5Njg4OWZiNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtMTQxOSw4ICsxNDE5LDMwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyQm91bmRhcnlTZXQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0VmVjdG9yLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9u
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJl
cHJlc2VudGF0aW9uLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmgKQEAgLTE1OTAsNiArMTYxMiw3IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbHVnaW5zL25wdHlw
ZXMuaAogCiAgICAgcmVuZGVyaW5nL0JyZWFrTGluZXMuaAorICAgIHJlbmRlcmluZy9DU1NGaWx0
ZXIuaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCiAgICAgcmVuZGVyaW5nL0V2ZW50UmVnaW9u
LmgKICAgICByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKQEAgLTE3MzAsMTIgKzE3NTMsMTcg
QEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHN2Zy9TVkdMZW5n
dGhWYWx1ZS5oCiAgICAgc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCiAgICAgc3ZnL1NWR1BhcnNp
bmdFcnJvci5oCisgICAgc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCiAgICAgc3Zn
L1NWR1N0cmluZ0xpc3QuaAogICAgIHN2Zy9TVkdUZXN0cy5oCiAgICAgc3ZnL1NWR1VuaXRUeXBl
cy5oCiAKICAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5oCiAKKyAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaAorICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaAorCiAg
ICAgc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJpbWl0
aXZlTGlzdC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHkuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA0YmVhMTRmNDRmYmY1MjExOTBmNjMzYWI2NzMwNjkxMjMzYTU1YmY0Li43NTQ5MDI1ZDU5
MWNkNGQ3YTYyM2JiOGEwODY1YmY4MGE1YTlhYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA0NSw3
ICsyMDQ1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9Jbk1lbW9yeURpc3Bs
YXlMaXN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2Uu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0yMDYzLDE0ICsyMDYzLDM3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Qb2ludExpZ2h0U291cmNlRGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
Ci1wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVGbG9vZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09PcmlnaW5h
bEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90ZWN0aW9uU2NoZW1l
SW5mb0JveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDdlZWVhYmJhZDM1OGFiZmJj
OGM3N2MzMjRkMWU4ZTViNTg3OTY5ZGIuLjEzYTJlY2Q3NWQ4ZjBkNDQ5NTgzZTI2OGJhYTQyY2Mz
YTlhYTE1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNDAxLDcgKzQwMSwxMCBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZm
ZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29sb3JNYXRy
aXhDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRy
YW5zZmVyQ29yZUltYWdlLm1tCitwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1h
Z2VDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGlj
Q29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmI2NGI5YWIwODE0ZmJlM2YzNzk0
ZTQ5YWEyNzdiMTAzYTk0OTM0MS4uZjFjZmZlOTY0NDUwNTZkMWZmMGQ2YjAzMjI0MzkxZGNhODlj
ZWU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjM4LDcgKzIzOCw2IEBACiAJCTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAv
KiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVp
bGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91
dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsK
IAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3
RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0
RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9u
dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODEsOCArNzgwLDYgQEAKIAkJ
MkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZE
MDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsKIAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdC
IC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNl
LmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQ
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJC
RThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsK
LQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBG
NzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0Ey
NEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3
MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQw
NjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURB
NjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJ
CTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMx
REE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJ
CTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAw
QTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgKi87IH07CkBAIC0xMjQ0LDcgKzEyNDEsNyBA
QAogCQk0MzEwN0JFMjE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzEwN0JFMTE4
Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggKi87IH07CiAJCTQzMkQz
RkU4MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzJEM0ZFNzE4QTg2
NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oICovOyB9OwogCQk0
MzU4RTg3RDEzNjBBMkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg3QjEzNjBB
MkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggKi87IH07Ci0JCTQzNThF
ODgxMTM2MEEzMTcwMEU0NzQ4QyAvKiBGRURyb3BTaGFkb3cuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNThFODdGMTM2MEEzMTcwMEU0NzQ4QyAvKiBG
RURyb3BTaGFkb3cuaCAqLzsgfTsKKwkJNDM1OEU4ODExMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJv
cFNoYWRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM1OEU4N0YxMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQzNThFODg2MTM2MEEzM0IwMEU0
NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg4MzEzNjBBMzNCMDBFNDc0OEMgLyogU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oICovOyB9OwogCQk0MzY3MDhDMTEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzNjcwODgyMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oICovOyB9
OwogCQk0MzY3MDhDMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4NDEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi87IH07CkBAIC0yMzA2LDExICsy
MzAzLDI1IEBACiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1
M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBO
YXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI3QTdGM0EyNDA3OEI4NDAw
NEQyOTMxIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOTU5MTZGMjcyMEVCODcwMDM2OTk5MyAvKiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDOEYyMjQ2MUREM0QxQzUwMEU5MkRBMyAvKiBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5
OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZB
NTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmlu
Z01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjlEMDUzMDI1MzE0MjQzMDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlEMDUy
RTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJBNzNCRUYyNDVB
M0Y5MDAwMUM5RDAzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFu
aW1hdGlvbkZyYW1lUmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQUE0NkMzMjcxNDM0NDcwMDNFODhDNCAvKiBGaWx0ZXJHZW9tZXRyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNEODMy
NzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0IC8q
IEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkFBNDZDNDI3MTQzNTA1MDAzRTg4QzQgLyogRmlsdGVyQm91bmRhcnlTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZDNjI3MTQzNUZEMDAzRTg4QzQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAv
KiBGaWx0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQUE0NkM3MjcxNDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJB
QTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzgyNzE0Mzcz
MzAwM0U4OEM0IC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZDOTI3MTQzN0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJB
QTQ2Q0EyNzE0MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENT
U0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTcyQUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMw
QjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyog
U1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4
OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJF
eHByZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzJBQTQ2RDQyNzE0RjE4RTAwM0U4OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCNDI3MTQy
Q0VCMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJD
NTc0ODYyNzIzRUM1RTAwMUVDOTVDIC8qIExpZ2h0U291cmNlRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDNTc0ODUyNzIzQzU1NjAwMUVDOTVD
IC8qIExpZ2h0U291cmNlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERpYWdub3N0
aWNMb2dnaW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dpbmdEb21h
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQw
Q0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuaCAqLzsgfTsKQEAgLTI3MTMsMzYgKzI3MjQsMzQgQEAKIAkJODQyMjQxOTQxMDdFNzhB
NzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MjI0MTkxMTA3RTc4QTcwMDc2NkE4NyAvKiBT
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi87IH07CiAJCTg0MzAwQkQ2MTIwQzlBQUMwMDIxOTU0
QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDMwMEJENTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oICovOyB9OwogCQk4NDMwMEJEODEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNv
dXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQz
MDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAqLzsgfTsKLQkJODQ1RTcy
RjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5o
ICovOyB9OwotCQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGQTBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi87IH07CiAJCTg0NjUwRTdFMjM4N0FEN0QwMDYyNjZF
MiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxp
c3RFdmVudC5oICovOyB9OwotCQk4NDczMEQ3NzEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExp
Z2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi87IH07
Ci0JCTg0NzMwRDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIz
MDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oICovOyB9OwotCQk4NDczMEQ3QjEyNDhGMEIz
MDBEM0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1
c2VMaWdodGluZy5oICovOyB9OwotCQk4NDczMEQ3RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNw
bGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDYwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5oICovOyB9
OwotCQk4NDczMEQ3RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRmxvb2QuaCAqLzsgfTsKLQkJODQ3MzBEODExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGln
aHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDY0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggKi87IH07Ci0JCTg0NzMwRDgz
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5o
ICovOyB9OwotCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2ODEyNDhG
MEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IH07Ci0JCTg0NzMwRDg3MTI0OEYwQjMw
MEQzQTlDOSAvKiBGRU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODQ3MzBENkExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggKi87IH07
Ci0JCTg0NzMwRDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsgfTsKLQkJODQ3MzBEOEIxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9
OwotCQk4NDczMEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi87IH07Ci0JCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlD
OSAvKiBMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENzQxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi87IH07
Ci0JCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NTEyNDhGMEIz
MDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oICovOyB9OwotCQk4NDczMEQ5MzEyNDhGMEIz
MDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NjEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0
U291cmNlLmggKi87IH07CisJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGln
aHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMw
RDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVDb252b2x2ZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTg0NzMwRDdCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdo
dGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3
MzBENUUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEN0QxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFRGlzcGxhY2VtZW50TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFj
ZW1lbnRNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk4NDczMEQ3RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRmxvb2QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk4NDczMEQ4MTEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjQxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFTGlnaHRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjYxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9s
b2d5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDcz
MEQ2ODEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEODcxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDczMEQ2QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4OTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxh
ckxpZ2h0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFVGlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTg0NzMwRDhEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDcwMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ5MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMw
RDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAv
KiBQb2ludExpZ2h0U291cmNlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3Vy
Y2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc2MTI0OEYw
QjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODQ3NkM5RTYxMURGNkEwQjAwNTU1QjAyIC8q
IFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3NkM5RTQxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0
QnVpbGRlci5oICovOyB9OwogCQk4NDc2QzlFQjExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzZDOUU4MTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRoQnVpbGRlci5oICovOyB9OwogCQk4NDc2
QzlFQzExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aENvbnN1bWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDc2QzlFOTExREY2QTI5MDA1NTVCMDIg
LyogU1ZHUGF0aENvbnN1bWVyLmggKi87IH07CiAJCTg0NzZDOUYwMTFERjZBNTgwMDU1NUIwMiAv
KiBTVkdQYXRoUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDc2QzlFRTExREY2QTU4MDA1NTVCMDIgLyogU1ZHUGF0aFBhcnNlci5oICovOyB9
OwotCQk4NDgwMTk1NTEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUzMTA4QkFGQjMw
MENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1ci5oICovOyB9OworCQk4NDgwMTk1NTEwOEJBRkIzMDBD
QjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUzMTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0
ODJCNzQ2MTE5OEMzNTQwMEJGQjAwNSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2
OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1
IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDgyQjc1MDExOThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZl
bnQuaCAqLzsgfTsKIAkJODQ4NTIyN0MxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1
MjI3ODExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdIS2VybkVsZW1lbnQuaCAqLzsgfTsKIAkJODQ4
NTIyN0UxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHVktlcm5FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1MjI3QTExOTAxNjJDMDA2RURD
N0YgLyogSlNTVkdWS2VybkVsZW1lbnQuaCAqLzsgfTsKIAkJODQ4NTIyOEIxMTkwMTczQzAwNkVE
QzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVu
dC5oICovOyB9OwogCQk4NEE4MUYzRTBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNDMEZD
N0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICovOyB9OwotCQk4NEE4MUY0MjBGQzdFMDI3
MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODRBODFGNDAwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBo
aWMuaCAqLzsgfTsKKwkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQw
MEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODRCMzQ5QTIyMkY4NkU3NTAwRDQ3QkNGIC8q
IEV2ZW50VGFyZ2V0Q29uY3JldGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0QjM0OUEwMjJGODZFNzQwMEQ0N0JDRiAvKiBFdmVudFRhcmdldENvbmNy
ZXRlLmggKi87IH07CiAJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlz
dFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi87IH07
CiAJCTg0QzVCMkZCMTIxNkRDODEwMDg4QjUzQSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEM1
QjJGOTEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oICov
OyB9OwpAQCAtMzUwMywxMCArMzUxMiwxMCBAQAogCQlBNzQwQjVBNTE0QzkzNUFCMDBBNzdGQTQg
LyogSlNJbnRlcm5hbFNldHRpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0I0RUE3OTE0QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRp
bmdzLmggKi87IH07CiAJCUE3NDBCNUE3MTRDOTM1QUYwMEE3N0ZBNCAvKiBKU0ludGVybmFsU2V0
dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdCNEVBNzgxNEM5MzQ4NDAwQzhGNUJGIC8qIEpTSW50ZXJuYWxTZXR0aW5ncy5jcHAgKi87IH07
CiAJCUE3NUU0OTc2MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU0OTc0MTA3
NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzVFOEI4OTBFMURFMkQ2MDA3RjI0
ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgfTsKLQkJQTc1
RThCOEIwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4QjgzMEUxREUyRDYwMDdGMjQ4MSAv
KiBGRUNvbG9yTWF0cml4LmggKi87IH07Ci0JCUE3NUU4QjhEMEUxREUyRDYwMDdGMjQ4MSAvKiBG
RUNvbXBvbmVudFRyYW5zZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzVFOEI4NTBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zl
ci5oICovOyB9OwotCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg3MEUx
REUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyB9OworCQlBNzVFOEI4OTBFMURFMkQ2
MDA3RjI0ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4QjBFMURF
MkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODMwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JN
YXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODUwRTFERTJE
NjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NUU4Qjg3MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkU1RjdGMTM1RTBEQ0Yw
MEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZFNUY3RTEzNUUwRENGMDBBNjk4MzcgLyogUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTE0MEQ2
QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFn
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
Nzk3OTI1MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oICovOyB9OwpAQCAtMzg2MCw3
ICszODY5LDcgQEAKIAkJQjIyMkY2OUQwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OUIw
QUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5oICovOyB9OwogCQlCMjIzNjIyOTBDM0FG
MDRBMDAwOENBOUIgLyogSlNTVkdUZXh0UGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjM2MjI3MEMzQUYwNEEwMDA4Q0E5QiAvKiBK
U1NWR1RleHRQYXRoRWxlbWVudC5oICovOyB9OwogCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEg
LyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjI1NTk5
ODUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RUltYWdlLmggKi87IH07CisJCUIyNTU5OTg1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThF
QjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNTU5OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI1NTk5QTUwRDAwRDhCQTAwQkI4MjVD
IC8qIEVtcHR5Q2xpZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTY1MEIw
NTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERG
RG9jdW1lbnRJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC02MTIxLDggKzYxMzAsNiBAQAogCQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUg
LyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyog
U1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYz
ODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3
NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3MSw4
ICs2Mjc4LDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFk
T25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50
UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQw
QzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3
ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzgxLDEwICs3Mzg2LDYgQEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8q
IFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEy
QTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2
NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRB
MzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1l
c3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYz
QTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTgwLDkgKzEwNTgxLDUzIEBACiAJCTcy
N0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5
NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOUMwOUVE
MjcyMjhBMjEwMEJFODgzOCAvKiBGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQw
NTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFF
IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1
QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIw
MDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNv
dXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIw
MDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
Q29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8q
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdD
MjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIw
MDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZF
QmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUg
LyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZp
bHRlckltYWdlVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBG
aWx0ZXJJbWFnZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlU29m
dHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCNzI3MTQyRjM4
MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VTb2Z0d2FyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJ
bWFnZVNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI4Mjcx
NDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbHRlckltYWdlQ29yZUltYWdlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNl
R3JhcGhpY0NvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCQjI3MTQzMEIwMDAzRTg4QzQgLyog
RmlsdGVyRWZmZWN0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZp
bHRlckVmZmVjdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZC
QzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQUE0NkJEMjcxNDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4
QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0
NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVy
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkM0MjcxNDM1
MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkFBNDZENzI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJpeENvcmVJbWFnZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkQ5MjcxNThBNTcwMDNFODhDNCAvKiBGRUNv
bXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRkVDb21w
b25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCMUI3NTEyNzE3RUEyRTAwMUIyRTA4IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCMUI3NTQyNzE5MTE0MzAwMUIyRTA4IC8qIExpZ2h0aW5nRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMaWdodGluZ0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMz
QTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3
MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDU5NCw2ICsxMDYzOSwxMCBAQAogCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRp
bmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzU3NDgzMjcyM0Mz
QTQwMDFFQzk1QyAvKiBMaWdodFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWdodFNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzU3NDg1MjcyM0M1NTYw
MDFFQzk1QyAvKiBMaWdodFNvdXJjZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlnaHRTb3VyY2VE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3
RjBFOCAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBF
OCAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRz
UkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYy
QSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRz
UkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1
MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNTI3LDEz
ICsxMTU3NiwxMCBAQAogCQk4NDMwMEJENTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU3RyaW5n
U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MzAwQkQ3MTIwQzlBRDQw
MDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1BhdGhTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBC
RDkxMjBDOUFFRDAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5
IC8qIFNWR0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFN0MyMzg3QUQ3QzAwNjI2
NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NDY1MEU3RjIzODdBRDhBMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFODAyMzg3QUQ4QjAwNjI2NkUy
IC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlh
UXVlcnlMaXN0RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDczMEQ1
QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291
cmNlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXN0YW50TGlnaHRT
b3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzMwRDVCMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NDczMEQ1QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzMwRDVEMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RURpZmZ1c2VMaWdodGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGRURpZmZ1c2VMaWdodGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTU1Nyw4ICsxMTYwMyw4IEBACiAJCTg0NzMwRDZGMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1
bGVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxl
bmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzAxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGRVR1cmJ1bGVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzQx
MjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpZ2h0U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0
NzMwRDc1MTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcG90TGlnaHRTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8q
IFBvaW50TGlnaHRTb3VyY2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvaW50TGlnaHRTb3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0
NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2VEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwb3RMaWdodFNvdXJjZURhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NDVCOEQyNEEzRjA5RjAwMjlBOEI1IC8qIEN1c3RvbVhQ
YXRoTlNSZXNvbHZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NDVCOEUyNEEzRjBB
MDAwMjlBOEI1IC8qIEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ3NkM5RTMxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVp
bGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU2Vn
TGlzdEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4ODYsOSAr
MTI5MzIsOSBAQAogCQlBMUUwODY2RTI0OEFBQzg1MDBFNDk2RDkgLyogZ2VuZXJhdGUtdW5pZmll
ZC1zb3VyY2VzLnNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQuc2g7IG5hbWUgPSAiZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNo
IjsgcGF0aCA9ICJTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRTA4NjZGMjQ4QUFDODUwMEU0OTZEOSAvKiBjaGVjay14
Y2ZpbGVsaXN0cy5zaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuc2NyaXB0LnNoOyBuYW1lID0gImNoZWNrLXhjZmlsZWxpc3RzLnNoIjsgcGF0
aCA9ICJTY3JpcHRzL2NoZWNrLXhjZmlsZWxpc3RzLnNoIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTFFMDg2NzAyNDhBQUM4NTAwRTQ5NkQ5IC8qIGdlbmVyYXRlLWRlcml2ZWQtc291
cmNlcy5zaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnNoOyBuYW1lID0gImdlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaCI7IHBh
dGggPSAiU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2giOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3RhbnRM
aWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExRTExNTQ1MTMw
MTVDNEUwMDU0QUM4QyAvKiBQb2ludExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMUUxMTU0NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwb3RMaWdodFNvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExRTExNTQzMTMwMTVDM0QwMDU0
QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNv
dXJjZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRM
aWdodFNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUUxMTU0
NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcG90TGlnaHRTb3VyY2VEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFFRDc3OEExQkUzMjkzRjAwREMxNzkxIC8qIERldmlj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUVENzc4QjFCRTMyOTQwMDBEQzE3OTEgLyog
RGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUY1NURCRjFGNTREMkQ2MDBFREI3NUYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnlJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0RW5jb2Rp
bmdSZWdpc3RyeUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTcyLDgg
KzE5NjE4LDExIEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRC
RTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJ
CTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZS5tbSAqLywKKwkJCQk3MkFBNDZENzI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJpeENv
cmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZEOTI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb21wb25l
bnRUcmFuc2ZlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQyRjdBMDAzRTg4QzQg
LyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4
QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2QjkyNzE0MkY3OTAw
M0U4OEM0IC8qIFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGNvcmVpbWFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzIwMiw2ICsyMzI1
MSwzMyBAQAogCQkJcGF0aCA9ICJtb2RlbC1lbGVtZW50IjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTcyQTgzRDZGMjcwNTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNEODIyNzA2
NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzUyNzA1
ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
N0EyNzA1QURGQTAwM0M1QUFFIC8qIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzYyNzA1ODkwMjAwM0M1QUFFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmUuY3Bw
ICovLAorCQkJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyog
RkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc4MjcwNThDMDMwMDNDNUFB
RSAvKiBGRUZsb29kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdCMjcwNUIyQzkwMDNDNUFB
RSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MTI3MDY0NkUy
MDAzQzVBQUUgLyogRkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NDI3MDU4
MzdEMDAzQzVBQUUgLyogRkVNZXJnZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MzI3MDU3
Q0JFMDAzQzVBQUUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDcy
MjcwNTc5QzcwMDNDNUFBRSAvKiBGRU9mZnNldFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3
RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDgw
MjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJB
QTQ2QjYyNzE0MkYzNzAwM0U4OEM0IC8qIEZpbHRlckltYWdlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmggKi8sCisJ
CQkJNzJCMUI3NTQyNzE5MTE0MzAwMUIyRTA4IC8qIExpZ2h0aW5nRGF0YS5oICovLAorCQkJCTcy
QTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAq
LywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NUZW1wbGF0ZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjUyNTgsOCAr
MjUzMzQsOSBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTFFMTE1NDMxMzAxNUMz
RDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAgKi8sCi0JCQkJODQ3MzBENUExMjQ4
RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAorCQkJCTcyQTgzRDZGMjcw
NTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLywKKwkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFD
OEMgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5jcHAgKi8sCisJCQkJODQ3MzBENUExMjQ4RjBC
MzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZURhdGEuaCAqLywKIAkJCQlBNzVFOEI4MDBF
MURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCiAJCQkJQTc1RThCODEwRTFERTJENjAw
N0YyNDgxIC8qIEZFQmxlbmQuaCAqLywKIAkJCQlBNzVFOEI4MjBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb2xvck1hdHJpeC5jcHAgKi8sCkBAIC0yNTI5NCwyNCArMjUzNzEsMzcgQEAKIAkJCQk4NDcz
MEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBENkYxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3
OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUgLyogRmlsdGVy
LmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8sCisJ
CQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8sCiAJ
CQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJ
MDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAotCQkJCTJDODU2
NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCi0JCQkJ
MkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJ
CQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLAor
CQkJCTcyQjFCNzUxMjcxN0VBMkUwMDFCMkUwOCAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJ
CQkJNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJ
NzI5QzA5RUQyNzIyOEEyMTAwQkU4ODM4IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLywKKwkJCQk3
MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywKKwkJCQk3MkM5
MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcyQzkwQTNB
MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovLAorCQkJCTcyQUE0NkI0MjcxNDJD
RUIwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCRDI3MTQzMEIx
MDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQz
MEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3
MDBGRDJDNTYgLyogRmlsdGVyUmVzdWx0LmggKi8sCisJCQkJNzJDNTc0ODMyNzIzQzNBNDAwMUVD
OTVDIC8qIExpZ2h0U291cmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5Qzkg
LyogTGlnaHRTb3VyY2UuaCAqLywKLQkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9p
bnRMaWdodFNvdXJjZS5jcHAgKi8sCi0JCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBv
aW50TGlnaHRTb3VyY2UuaCAqLywKKwkJCQk3MkM1NzQ4NTI3MjNDNTU2MDAxRUM5NUMgLyogTGln
aHRTb3VyY2VEYXRhLmggKi8sCisJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRBQzhDIC8qIFBvaW50
TGlnaHRTb3VyY2VEYXRhLmNwcCAqLywKKwkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyog
UG9pbnRMaWdodFNvdXJjZURhdGEuaCAqLywKIAkJCQk4NEE4MUYzQjBGQzdERkYwMDA5NTUzMDAg
LyogU291cmNlQWxwaGEuY3BwICovLAogCQkJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBT
b3VyY2VBbHBoYS5oICovLAogCQkJCTg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VH
cmFwaGljLmNwcCAqLywKIAkJCQk4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3Jh
cGhpYy5oICovLAotCQkJCUExRTExNTQ3MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGlnaHRTb3Vy
Y2UuY3BwICovLAotCQkJCTg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3Vy
Y2UuaCAqLywKKwkJCQlBMUUxMTU0NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNl
RGF0YS5jcHAgKi8sCisJCQkJODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNv
dXJjZURhdGEuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yNzA2NSwxMCArMjcxNTUsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUIyNTU5OEVBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCAqLywKIAkJCQlC
MjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovLAotCQkJCTg0NUU3MkY5
MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovLAotCQkJCTg0NUU3MkZBMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLywKLQkJCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1
NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCi0JCQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3
NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyog
U1ZHRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRl
ckJ1aWxkZXIuY3BwICovLAorCQkJCTcyQUE0NkJFMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBQTQ2QkYyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRl
ckV4cHJlc3Npb24uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDIwMSw4ICszMDI5Miw4IEBACiAJCQkJQ0E3RTlCNDcyNDM2
MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAqLywKIAkJCQk5MzkyRjE0
RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLAogCQkJCTkzOTJGMTRCMEFE
MTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJCTBGNTNGQjgxMjEzQjFCQjgw
MEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQz
NCAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NT
RmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVy
LmggKi8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8s
CiAJCQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJ
CQlFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMxNjI3
LDYgKzMxNzE4LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTcyRUJDN0REMjcxMTNE
MzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgy
MDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJC
RjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2
Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMjI4NCw2ICszMjM3Niw3IEBACiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRD
IC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzc5RTE0MUJC
MjE1QkIwMENBQThCRiAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NDQ3NkJEQjFERkNBQzAzMDA2OTBFMjMgLyogQ1NTRGVmZXJyZWRQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkNBMjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUZCQjBDNUI4MTdCQkQ2MjkwMDNEMzY3NyAvKiBDU1NGaWx0ZXJJ
bWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY0QjRENjBDQjQyOThBMDA1RjJCNjIg
LyogQ1NTRm9udEZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0ZEMEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzI1NTAsNyArMzI2
NDMsNyBAQAogCQkJCTBGNzkwRjQzMjUxN0NFNkUwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOTExMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4MzA0MDI4MzI0OUE3QTYyMDBBOTBEOEQgLyogRGlzdGFuY2VN
b2RlbFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAv
KiBEaXN0YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDc3MTI0OEYw
QjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkYzNEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
RUU2ODQ2RjEyRDI2RTM4MDBFNzMyMTUgLyogRE5TUmVzb2x2ZVF1ZXVlQ0ZOZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MTg1RjQwMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMjc5MSwxMiArMzI4ODQsMTcgQEAKIAkJCQk5MzBFNDQ4NjI3MEMzNzIy
MDBERTdBQjcgLyogRmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM5MjcxNDM3RDEwMDNFODhDNCAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8q
IEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3
NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyQ0FBNEEz
QTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RW
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBG
aWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4
OEM0IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDODI3MTQz
NzMzMDAzRTg4QzQgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkQ0
MjcxNEYxOEUwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM3MjcxNDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJS
ZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5
NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5
MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0Qy
REQyNTBGRDgyODAwMDIwN0FBIC8qIEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNDMyNyw2ICszNDQyNSw3IEBACiAJCQkJNDEwRTQ0NjEyMzQzNzNFOTAwMDE3M0Q0
IC8qIExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQzE0
QkM3MjZERTg1ODQwMDY4NUJGNSAvKiBMaWJXZWJSVENVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODQ3MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkM1NzQ4NjI3MjNFQzVFMDAxRUM5NUMgLyogTGlnaHRTb3VyY2VEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NTBEMDBCRjIyMDA3MUI3ODIgLyogTGluZWFyR3JhZGll
bnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjMxQzkxRTEwQUUxQjhFMDAwQzdC
OTIgLyogTGluZUNsYW1wVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGRUZBQjJBMTgzODBE
QTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ4NzIs
NyArMzQ5NzEsNyBAQAogCQkJCUY0MjBGMDBBMjVFNDc3OTEwMDkyNTFFRiAvKiBQb2ludGVyRXZl
bnRUeXBlTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1QTQ1
RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTNGRjgxM0E3MURCQTg2NDAwMDlC
RjAwMSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NzMw
RDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3MDU5OTdBMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVj
a2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjZDMkRBRDI2QzczQUZDMDA2NTE5MzEgLyogUG9s
aWN5Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFF
QzggLyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NTE3LDcgKzM1NjE2LDcg
QEAKIAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNv
dXJjZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDODNERTg2MUQwNENDNUQwMEZFQkNGMyAv
KiBTcHJpbmdTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTNCMTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTND
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTcwNCw5
ICszNTgwMyw5IEBACiAJCQkJQjIyMjdBMDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDYwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZFVGlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA5MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0MyNzE0MzlEOTAwM0U4OEM0IC8qIFNWR0ZpbHRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNEMjcxNDM5RTUwMDNFODhDNCAvKiBT
VkdGaWx0ZXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwRjBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyN0ExMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9u
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzU3NzQsNiArMzU4NzMsNyBAQAogCQkJCUIy
MjI3QTkxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2x5Z29uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBOTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlsaW5lRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOTU5MTZGMjcyMEVCODcwMDM2
OTk5MyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU1RENDNTI4MjI0MDdCMjAwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcAppbmRleCA4Y2Y5MDlhZTllNTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li41
ZWRmYmY1M2UzYWFmYmE5NzAyNjBkZDgzMzQ1OGMwMGI2YjNhODhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJFbGVtZW50LmgiCkBAIC0xMTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENT
U0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBG
bG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAg
Ly8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0
ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRl
cjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1
cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAg
IGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVnaW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0
ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpG
aWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5k
ZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRl
cikKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5h
cHBseSgpOwogCi0gICAgYXV0byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBp
ZiAoIW91dHB1dCkKLSAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgRmls
dGVyR2VvbWV0cnkgZ2VvbWV0cnkoaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0byBmaWx0ZXJlZElt
YWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSkp
CisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJuIG91dHB1dC0+Y29w
eUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9CiAKIHZvaWQgQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2YWIyMjIxODEuLjdj
N2ViNDJlNTNjNjRkZmRjZWM4MjNiYjRiM2U4YTljOTg2YTQ0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKQEAg
LTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKQEAgLTEz
OCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpOworICAgICAgICBpZiAoIWJh
Y2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIGNv
bnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0
KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAg
c3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3JlKSA9IGZpbHRlci5hcHBseSh0aGlzLCB7
IHsgfSwgbG9naWNhbFNpemUoKSB9LCBnZW9tZXRyeSk7CisgICAgICAgIHJldHVybiBpbWFnZUJ1
ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAgfQorCiAgICAg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDRjMWM1ZjkwODdhOTNh
N2QxMjViODkzNjQ0OGYwNGVmZWQwZjcwYzAuLjYxOTAzOTM5NWMxODE0MDliZDc2NGVlOTA5NTIx
MDRiYWZkODg3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiQmlk
aVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXIu
aCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBA
IC02MjksNiArNjMxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1h
Z2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkp
Cit7CisgICAgYXV0byBbZmlsdGVyZEltYWdlLCBpbWFnZVJlY3RdID0gZmlsdGVyLmFwcGx5KHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGdlb21ldHJ5KTsKKyAgICBpZiAoZmlsdGVyZElt
YWdlKQorICAgICAgICBkcmF3SW1hZ2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsK
K30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0KQogewogICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMDZiNzEzMzhlZjhk
OTFhZGU0NmM5MjA5YTU5Yzc3MDk1MmRjYTk5MC4uNDRkZWJiNWU2ZDQ2ODIyMjk2OThlMDgzMTAx
MWFlMTQ3ZGY3Y2MxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIFVJbnQ4OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CitjbGFzcyBGaWx0ZXI7CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRl
ZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTsKQEAgLTQ1MCw2ICs0NTIsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBhMDU5MmI5OWI4OGRiZTAx
OGZhOTVjNWEzMDVkMjk4MmMwMjRmNmQ4Li4zNmU0NTRjYTAyZmI5M2Y0YTI5MGI4Njc1NmRhMGQ3
OTMzYmIxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKQEAgLTQyLDYgKzQyLDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQ7CiBzdHJ1Y3Qg
SXRlbUJ1ZmZlckhhbmRsZTsKIH0KIAorY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0
cnk7CisKIGNsYXNzIEltYWdlQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElt
YWdlQnVmZmVyLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPEltYWdlQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxs
IHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtMTA2LDYgKzEwOSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSA9IDA7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2Ug
YnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhp
cyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBjb3B5
UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAppbmRleCAxNDNiYTAzYWNmZjlj
NmE2ZmM1NzkxMTU3OGNjM2I4MTljMjNiZGRkLi4wYWQyOTcwODhiNWY2N2RjMzJkZWJmOGJhNmE0
NGJhMjQ3ZWY1ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMJiwg
R0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzSW5Vc2UoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlR3JhcGhp
Y3NDb250ZXh0KCkgeyB9CiAgICAgdmlydHVhbCBWb2xhdGlsaXR5U3RhdGUgc2V0Vm9sYXRpbGUo
Ym9vbCkgeyByZXR1cm4gVm9sYXRpbGl0eVN0YXRlOjpWYWxpZDsgfQogICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlQnVmZmVyVG9Qb29sKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVy
c0NvY29hLm1tCmluZGV4IDJkMDIwMTZiYjhlZTYzZWI3ZTNmM2E3M2YzY2E2NjliYjA5ZTBlNTIu
LmFmYTQ5M2M4MzI1MWUxZWRlOGUxYWI0ODYwZmUzYTJiZDg0MzEzODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJz
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NT
RmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzYwMDgpLgorLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6
OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCku
CiBzdGF0aWMgY29uc3QgZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7
IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNv
bG9yTWF0cml4Q29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NmYTlmMTc5
NjdiOTNmYjg3ZWM4NDNiNzlhNjU0ZGYyOTU0ODcwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUlt
YWdlLm1tCkBAIC0wLDAgKzEsMTA2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgorCisjaWYgVVNFKENPUkVfSU1B
R0UpCisKKyNpbXBvcnQgIkZpbHRlckltYWdlQ29yZUltYWdlLmgiCisjaW1wb3J0IDxDb3JlSW1h
Z2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KKyNpbXBvcnQg
PENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
Q29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFCisg
ICAgICAgIHx8IG1fY29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEUKKyAgICAgICAgfHwgbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBk
b3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJbWFnZT4oaW5wdXQpLmltYWdlKCk7CisgICAgaWYgKCFp
bnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHZhbHVlcyA9IEZF
Q29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGZsb2F0IGNvbXBv
bmVudHNbOV07CisgICAgCisgICAgc3dpdGNoIChtX2NvbG9yTWF0cml4VHlwZSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CisgICAgICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TFVNSU5BTkNFVE9BTFBIQTogLy8gRklYTUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVt
ZW50YXRpb24KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGF1dG8g
KmNvbG9yTWF0cml4RmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1h
dHJpeCJdOworICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgp
IGZvcktleTprQ0lJbnB1dEltYWdlS2V5XTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29sb3JNYXRy
aXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CisgICAgICAgIFtjb2xvck1hdHJpeEZp
bHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1swXSBZOmNvbXBv
bmVudHNbMV0gWjpjb21wb25lbnRzWzJdIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Cisg
ICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
Y29tcG9uZW50c1szXSBZOmNvbXBvbmVudHNbNF0gWjpjb21wb25lbnRzWzVdIFc6MF0gZm9yS2V5
OkAiaW5wdXRHVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpb
Q0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1s2XSBZOmNvbXBvbmVudHNbN10gWjpjb21w
b25lbnRzWzhdIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1h
dHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAgICBZ
OjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9y
Il07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MF0g
Zm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6dmFsdWVzWzFd
ICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNbM11dICBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAg
ICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2
YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBaOnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1dICBmb3JLZXk6
QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltD
SVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZhbHVlc1sxMl0g
Vzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0
cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTVdIFk6dmFs
dWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3Ii
XTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVzWzldICBaOnZhbHVlc1sxNF0gVzp2YWx1ZXNbMTldXSBm
b3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgZG93bmNhc3Q8RmlsdGVySW1hZ2VDb3JlSW1hZ2U+KG91dHB1dCkuc2V0SW1hZ2UoY29sb3JN
YXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRy
YW5zZmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjYwNjMy
NTgyM2Q0ZTVkODU1ZGI0NmZiYjk4Mzk2YmU4OTYyNzUzOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5z
ZmVyQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCisKKyNp
ZiBVU0UoQ09SRV9JTUFHRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBh
dXRvIGlzTnVsbE9yTGluZWFyID0gW10gKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGZ1bmN0aW9uKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9VTktOT1dOCisgICAgICAgICAgICB8fCBmdW5jdGlvbi50eXBlID09IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgfTsKKworICAgIHJldHVybiBpc051
bGxPckxpbmVhcihtX3JlZEZ1bmN0aW9uKQorICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2dy
ZWVuRnVuY3Rpb24pCisgICAgICAgICYmIGlzTnVsbE9yTGluZWFyKG1fYmx1ZUZ1bmN0aW9uKQor
ICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2FscGhhRnVuY3Rpb24pOworfQorCitib29sIEZF
Q29tcG9uZW50VHJhbnNmZXI6OmFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJh
bnNmZXIgZnVuY3Rpb25zCisgICAgQVNTRVJUKHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkp
OworCisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBp
bnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBkb3duY2FzdDxGaWx0ZXJJ
bWFnZUNvcmVJbWFnZT4oaW5wdXQpLmltYWdlKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmls
dGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6
aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07CisgICAgCisgICAgYXV0
byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi50eXBlID09
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCisgICAgICAgICAgICBbZmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5jdGlv
bi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKKyAgICB9OworICAgIHNldENvZWZmaWNpZW50
cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgbV9yZWRGdW5jdGlvbik7CisgICAgc2V0Q29lZmZp
Y2llbnRzKEAiaW5wdXRHcmVlbkNvZWZmaWNpZW50cyIsIG1fZ3JlZW5GdW5jdGlvbik7CisgICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgbV9ibHVlRnVuY3Rpb24p
OworICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBtX2FscGhh
RnVuY3Rpb24pOworICAgIAorICAgIGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXRw
dXQpLnNldEltYWdlKGZpbHRlci5vdXRwdXRJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0
NGFmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0qIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9y
dCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KLQotT0JKQ19DTEFTUyBDSUltYWdlOwotT0JKQ19D
TEFTUyBDSUZpbHRlcjsKLU9CSkNfQ0xBU1MgQ0lDb250ZXh0OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZFQ29sb3JNYXRyaXg7Ci1jbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOwot
Y2xhc3MgU291cmNlR3JhcGhpYzsKLQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLSAgICBS
ZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKLSAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkg
Y29uc3QgZmluYWw7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKLSAgICBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpOwotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKLSAgICB2b2lkIHJlbmRl
clRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wg
Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgCi0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7Ci0gICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0
cml4JiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJh
bnNmZXImLCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwotICAgIAotICAgIFJlZlB0cjxJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1ZmZlcjsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9vdXRwdXRJbWFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2Uu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZTExMzdiMjlkNzFjMmI1NDQxNTcz
MDY3MjQwMGI4MjQyOGIzNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAg
QEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFH
RSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2ltcG9ydCAiRkVDb21wb25lbnRUcmFu
c2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCi0j
aW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbXBvcnQgPENv
cmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJbWFnZS9DSUZpbHRlci5oPgotI2lt
cG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6QHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNl
OiBicmlkZ2VfaWRfY2FzdChhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VTUkdCKSkpLmdldCgpIH1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0
YXRpYyBib29sIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBG
RUNvbXBvbmVudFRyYW5zZmVyJiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9
IFtdIChjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAg
ICByZXR1cm4gZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9X
TgotICAgICAgICAgICAgfHwgZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOwotICAgIH07Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAg
ICAgICAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9y
TGluZWFyKGVmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkKLXsKLSAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9u
Y2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RD
bGFzc1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGlj
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29s
b3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEU6Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5l
YXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+
KGVmZmVjdCkpOwotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZm
dXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1h
cDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Okdh
dXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpU
aWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAg
bV9vdXRwdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFt
X291dHB1dEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihs
YXN0RWZmZWN0KTsKLX0KLQotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAg
IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAo
YXV0byBpbiA6IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1h
Z2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5w
dXRJbWFnZSk7Ci0gICAgfQotICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIGVmZmVjdC5zZXRSZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwotICAgIAotICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5
KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRj
aCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdy
YXBoaWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9y
TWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJl
dHVybiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFu
c2Zlcj4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMg
YSB2YWxpZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpE
aWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVu
dE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3Vy
Y2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJj
ZUltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJm
YWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBp
bWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJ
bWFnZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGlt
YWdlV2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCldOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBl
ZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsK
LSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFs
dWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwot
ICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgp
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNb
MF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBv
bmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAg
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBB
bHBoYSBJbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAg
Ci0gICAgYXV0byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJDSUNvbG9yTWF0cml4Il07Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0
SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAo
ZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JN
YXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0g
WTpjb21wb25lbnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3Rv
ciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOmNvbXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBd
IGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzdd
IFo6Y29tcG9uZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAg
ICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0
QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAg
ICBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1h
dHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZh
bHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9y
Il07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6dmFsdWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAg
Zm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1
ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtj
b2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1
XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRB
VmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVz
WzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICByZXR1cm4gY29sb3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNv
bXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9y
PFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhlIHJlc3Qgb2YgRkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NF
UlQoaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0g
ICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAot
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFn
ZUtleV07Ci0gICAgCi0gICAgYXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICpr
ZXksIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAg
IGlmIChmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0g
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlv
bi5pbnRlcmNlcHQgWTpmdW5jdGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9
OwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJl
ZEZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVu
dHMiLCBlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1
dEJsdWVDb2VmZmljaWVudHMiLCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZm
aWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigp
KTsKLSAgICAKLSAgICByZXR1cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVm
ZmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBl
ZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygqaW4pIHx8ICFjYW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZm
ZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMg
PDwgIiB1c2luZyBDb3JlSW1hZ2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVy
LmdldCgpOwotfQotICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVu
ZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1
cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigp
LmZpbHRlclNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVh
clJlc3VsdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4
dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRw
dXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVm
ZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNv
bG9yU3BhY2UoKV07Ci19Ci0gICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsK
LSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxl
KCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRl
c3RTaXplKTsKLSAgICByZXR1cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICBtX291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAg
ICA6IEZpbHRlckVmZmVjdFJlbmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3NGM1OGFiNjZhMjgxMDUwMzA2Y2Y5Njc4YmI3NThkYTlhMjBkM2MKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
SW1hZ2VDb3JlSW1hZ2UuaApAQCAtMCwwICsxLDU4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlcklt
YWdlLmgiCisKK09CSkNfQ0xBU1MgQ0lJbWFnZTsKK09CSkNfQ0xBU1MgQ0lDb250ZXh0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckltYWdlQ29yZUltYWdlIDogcHVibGlj
IEZpbHRlckltYWdlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJJbWFnZTo6RmlsdGVySW1h
Z2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlOyB9CisgICAgdm9pZCBzZXRJbWFnZShSZXRhaW5QdHI8Q0lJbWFnZT4mJik7CisgICAgCitw
cml2YXRlOgorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBv
dmVycmlkZTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAg
IFJldGFpblB0cjxDSUltYWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJJbWFnZUNvcmVJbWFnZSkKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1
cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8gVVNF
KENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzE5ZmUwNTg4ZmYwNTU0ZTliMjEyMmM4YzYxZTU2MzM2NjRjNzE0OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJ
bWFnZUNvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDczIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCIKKwor
I2lmIFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisj
aW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUlt
YWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9UeXBlQ2FzdHNDb2NvYS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRh
aW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250
ZXh0V2l0aE9wdGlvbnM6QHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNlOiBicmlkZ2VfaWRf
Y2FzdChhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdC
KSkpLmdldCgpIH1dOworICAgIHJldHVybiBjaUNvbnRleHQ7Cit9CisKK3ZvaWQgRmlsdGVySW1h
Z2VDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQoreworICAg
IEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQorCitSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJJbWFnZUNvcmVJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0
cygpCit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXI7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0
ZXJJbWFnZUNvcmVJbWFnZTo6aW1hZ2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVy
KQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZm
ZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fbG9naWNhbFNpemUsIG1fcmVzb2x1
dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFt
X2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZGVzdFJl
Y3QgPSBGbG9hdFJlY3QgeyBGbG9hdFBvaW50KCksIG1fbG9naWNhbFNpemUgfTsKKyAgICBbc2hh
cmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX2ltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBk
b3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKm1faW1hZ2VCdWZmZXIpLnN1cmZhY2UoKS5z
dXJmYWNlKCkgYm91bmRzOmRlc3RSZWN0IGNvbG9yU3BhY2U6bV9jb2xvclNwYWNlLnBsYXRmb3Jt
Q29sb3JTcGFjZSgpXTsKKyAgICAKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291
cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwOWQ2ZWFk
MWJmMjU0ODg1YmI1M2U3MjY4ZTgwYWIzM2I2YmQxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJ
bWFnZS5tbQpAQCAtMCwwICsxLDYxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1B
R0UpCisKKyNpbXBvcnQgIkZpbHRlckltYWdlLmgiCisjaW1wb3J0ICJGaWx0ZXJJbWFnZVZlY3Rv
ci5oIgorI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91
cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYg
aW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlOworICAgIGlmIChpczxJT1N1cmZhY2VJ
bWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2UpKQorICAgICAgICBpbWFnZSA9IFtDSUltYWdlIGltYWdl
V2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2Up
LnN1cmZhY2UoKS5zdXJmYWNlKCldOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFn
ZSBpbWFnZVdpdGhDR0ltYWdlOmlucHV0SW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCldOworCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXB1dCkuc2V0SW1h
Z2UoV1RGTW92ZShpbWFnZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxl
bmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4u
MTE4MTllNTc5Y2VjOTJhN2NlNzFmNTA2NWFiNjk4MzA4NDBhMGYxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9O
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
L0ZFQmxlbmRORU9OLmgKQEAgLTI1LDggKzI1LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBGRUJsZW5kTkVPTl9oCi0jZGVmaW5lIEZFQmxlbmRORU9OX2gKKyNwcmFnbWEgb25j
ZQogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogCkBAIC0xMDcsMTUgKzEwNiwxOCBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorRmlsdGVyUmVzdWx0KiBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoRmlsdGVy
UmVzdWx0cyYgcmVzdWx0cywgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAg
YXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFz
dCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsgKnRoaXMgfSkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIoKS5j
cmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzEsNyBAQCB2b2lkIEZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0
aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5k
YXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5k
YXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJZiB0aGVyZSBpcyBqdXN0
IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VSVChzb3VyY2VQaXhlbEFy
cmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQyLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOwogICAgIHBsYXRmb3Jt
QXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07CisK
KyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciog
c3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCkBAIC0yMDUsNSAr
MjA5LDMgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3IKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEZFQmxl
bmRORU9OX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2
L0NWVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZV
dGlsaXRpZXMubW0KaW5kZXggNDA3MjcwNDNmZDEyZDYyYTRjYmQ3ZGJiNTllNDExNjBhMjhkZGYy
Mi4uYWNmOTZmZDBkNTQwYWI4NmU3NzBkNDYxM2MxOTBhMjI4M2I3MDVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KQEAgLTI2
LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIK
IAorI2ltcG9ydCAiQ29sb3JTcGFjZUNHLmgiCiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cAppbmRleCBkZmY0MTQ0MjYxOTY3YmZlOGRlMmRlYzkyYzZmOTM5ODMyZGUxN2U4Li4zODVlZWU5
ZjZmYjQ4MDFmN2JmOTMxNmEwM2MwYjVlMjcxZjVjMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAKQEAgLTI1MSw2ICsyNTEsOCBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhh
bmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaXRlbS5n
ZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UGF0dGVybj4oaXRlbS5nZXQ8RHJhd1BhdHRlcm4+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PERyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RHJhd1JlY3Q+KGl0ZW0uZ2V0PERyYXdSZWN0PigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5jcHAKaW5kZXggYzEzOWU1MDk0ODUxODBiOWViZDkwMTcyNzJiZTk2YWE1MjI2NzVmZS4uYWEy
ZDU3YWYwZGRjNTE0YWFiZjAyM2M1YTQ3ZjA5ZjFjNTMwOGYzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTEyNiw2ICsxMjYsOSBAQCB2b2lkIEl0
ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3UGF0dGVybjoKICAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLmFwcGx5KGNvbnRl
eHQpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdl
QnVmZmVyOgorICAgICAgICBnZXQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAg
ICAgIGdldDxEcmF3UmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjU5LDYgKzI2Miw5IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcFBhdGg6CiAgICAgICAgIGdldDxDbGlwUGF0aD4oKS5+Q2xpcFBhdGgoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoK
KyAgICAgICAgZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKS5+RHJhd0ZpbHRlckltYWdlQnVm
ZmVyKCk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDoKICAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9jdXNSaW5nUGF0
aCgpOwogICAgICAgICByZXR1cm47CkBAIC01MDAsNiArNTA2LDggQEAgYm9vbCBJdGVtSGFuZGxl
OjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29u
c3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBPdXRUb1BhdGg+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPENsaXBQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZpbHRlckltYWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88RHJhd0ZpbHRlcklt
YWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1BhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3Rm9jdXNSaW5nUGF0aD4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCAyNDRlMGUz
NWMxMjc1NjIwOTY5YzVhYmE1ODY0MjA1MThhZTRlZDQwLi4wYWU5MDc1OGRjYTIyMGJiMGRiNmRh
YjhhMjJmZjY5YjgzNTU0ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5
cGUuY3BwCkBAIC04OCw2ICs4OCw4IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMo
SXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3TmF0aXZlSW1hZ2UpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERy
YXdQYXR0ZXJuKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ZpbHRlckltYWdlQnVmZmVyKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3UmVjdCk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CkBAIC0yMjIsNiArMjI0LDcgQEAgYm9vbCBpc0RyYXdp
bmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVm
ZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhz
OgpAQCAtMjk2LDYgKzI5OSw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuaAppbmRleCA5OTE5NDU4ZDIzNjU5Y2VlY2I3NTg1Mzg3ZjEyOGVmYWYw
ZDQ3YTI1Li4yYjMyMDQ0M2NiZGM0ZTU2MDY2YjY5NDdlMTBiOGViZWExYjQ3NjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBj
bGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIENsaXBQYXRoLAogICAgIEJlZ2luQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzLAogICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcywKKyAgICBEcmF3
RmlsdGVySW1hZ2VCdWZmZXIsCiAgICAgRHJhd0dseXBocywKICAgICBEcmF3SW1hZ2VCdWZmZXIs
CiAgICAgRHJhd05hdGl2ZUltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CmluZGV4IGU3MjZkOTRmMzAwNTAwMjMxMmJjNjQyYjMwMTVlY2JhZTMxNDg0OGMuLmMzYWE2NTIz
ZDY2Y2U0YzZiNTU5MzMyNDA3M2JjMTMxMGNhY2I5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKQEAgLTQyNSw2ICs0MjUsMzEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAorRHJhd0ZpbHRlckltYWdlQnVmZmVyOjpEcmF3RmlsdGVySW1hZ2VCdWZm
ZXIoc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCisgICAgOiBtX2ltYWdlSWRlbnRpZmllcihp
bWFnZUlkZW50aWZpZXIpCisgICAgLCBtX3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3Qp
CisgICAgLCBtX2ZpbHRlcihmaWx0ZXIpCisgICAgLCBtX2dlb21ldHJ5KGdlb21ldHJ5KQorewor
fQorCitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKQoreworICAgIGNv
bnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBtX3NvdXJjZUltYWdlUmVj
dCwgbV9maWx0ZXIsIG1fZ2VvbWV0cnkpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZpbHRlckltYWdlQnVmZmVyJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UtaWRlbnRpZmllciIsIGl0ZW0uaW1hZ2VJZGVu
dGlmaWVyKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLWltYWdlLXJlY3QiLCBpdGVt
LnNvdXJjZUltYWdlUmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKIHZvaWQgRHJhd1JlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRy
YXdSZWN0KG1fcmVjdCwgbV9ib3JkZXJUaGlja25lc3MpOwpAQCAtMTA3NSw2ICsxMTAwLDcgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5
cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB0cyA8PCAiZHJhdy1pbWFn
ZS1idWZmZXIiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRz
IDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXR0ZXJuOiB0cyA8PCAiZHJhdy1wYXR0ZXJuIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZpbHRlckltYWdlQnVmZmVyOiB0cyA8PCAiZHJhdy1maWx0ZXItaW1hZ2UtYnVmZmVyIjsg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHRzIDw8ICJkcmF3LXJlY3QiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogdHMgPDwgImRyYXctbGluZSI7IGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHRzIDw8ICJkcmF3LWxp
bmVzLWZvci10ZXh0IjsgYnJlYWs7CkBAIC0xMjA0LDYgKzEyMzAsOSBAQCBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdHRlcm46CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigp
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZm
ZXI6CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdSZWN0PigpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCmluZGV4IGNlYmYzNjliZmEyZWYwZjY3ZjEzMWZiODUyMzZlOWFhODk3ZDQ0
ODAuLmI3MmE3YTRhYmI4YjBkNWU0ZTZiMDFiYzI4ODQ4NmZkYmI5ODU4ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXJJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpA
QCAtMTEwMCw2ICsxMTAyLDMwIEBAIHByaXZhdGU6CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMg
bV9vcHRpb25zOwogfTsKIAorY2xhc3MgRHJhd0ZpbHRlckltYWdlQnVmZmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdG
aWx0ZXJJbWFnZUJ1ZmZlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
OworCisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdl
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJZGVudGlmaWVyOyB9CisgICAgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0
OyB9CisKKyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JiwgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxv
cHQ7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKworcHJp
dmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9p
bWFnZUlkZW50aWZpZXI7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworICAgIFJl
ZjxGaWx0ZXI+IG1fZmlsdGVyOworICAgIEZpbHRlckdlb21ldHJ5IG1fZ2VvbWV0cnk7Cit9Owor
CiBjbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI7CkBAIC0yNDQzLDYgKzI0NjksNyBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZh
cmlhbnQKICAgICAsIENvbmNhdGVuYXRlQ1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyCiAgICAgLCBEcmF3RWxsaXBzZQorICAgICwgRHJhd0ZpbHRlckltYWdlQnVmZmVyCiAgICAg
LCBEcmF3Rm9jdXNSaW5nUGF0aAogICAgICwgRHJhd0ZvY3VzUmluZ1JlY3RzCiAgICAgLCBEcmF3
R2x5cGhzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggNDc3
OTQyMWY0M2Q2Y2E5MDkzZmJjNWY1ZjMzMmZmNDA5OWE1M2E2MS4uOGE1OTZjZWYwOTIzZjg2NmMx
MzVlOTJjMmI2Yjg5YjZkZTMwZTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiU1ZHRkVJbWFnZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0xODIsNiArMTgzLDUxIEBAIHZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0CiAgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdGaWx0ZXJJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisKKyAgICBpZiAoIXNvdXJjZUltYWdlKSB7CisgICAgICAgIHJlY29yZERyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcih7IH0sIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFjYW5EcmF3SW1hZ2VCdWZmZXIoKnNvdXJj
ZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVj
dHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAgICAgICBib29sIGlz
UmVtb3RlSW1hZ2UgPSBXVEY6OnN3aXRjaE9uKGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQo
KSkuc291cmNlSW1hZ2UoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1h
Z2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRp
dmVJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKCpuYXRp
dmVJbWFnZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgWyZdIChjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeworICAg
ICAgICAgICAgICAgIGlmIChjYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICApOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc1JlbW90
ZUltYWdlKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlY29yZFJlc291cmNl
VXNlKCpzb3VyY2VJbWFnZSk7CisgICAgcmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJj
ZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2VSZWN0LCBm
aWx0ZXIsIGdlb21ldHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVj
b3JkU2F2ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggMDYw
NWQ2ZjI0YmY0NTMyNDdhNGE4ZTg4ZmUzYmRjMjYwNzc2MDc0NC4uZjk2YmI4ZjMzM2JhYzA0MDlk
MzM5NTE5ZjExYWVkYjc0NjQ0MzE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCkBAIC05Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcj4sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKQEAgLTIyOSw2ICsyMzAs
OCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
ZmluYWw7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKaW5kZXggZjQ3NDMyNGZkNzMxYjJjNzk1
ZmZjMTY4M2VhZmUxOGMxNjhmYjdhNS4uNzhjMGM0NzNjNDM2YTk4MGRhZmUxYjlkNThlYzNhMGEw
ZTA0OTYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwu
Y3BwCkBAIC0yMjgsNiArMjI4LDExIEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0
dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyCiAgICAgYXBw
ZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkKK3sKKyAgICBhcHBlbmQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPihpbWFnZUlk
ZW50aWZpZXIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
CiB7CiAgICAgYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCBiZWQ3MWY2NDg1MWQ3
YmUxMzAxOThkYTIwZDQ4YWEzZGI2YjM5NDE5Li4xMTYzMGExYWRlYjFhOTIzMWMxZWUwZmMzZTVj
MDczNGFhY2UzMDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlcklt
cGwuaApAQCAtOTAsNiArOTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdl
QnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdOYXRp
dmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTVmYjFmZjY2NWQzZWIwN2Y0OGVlMWQwMmJiZmZjYzZiMDQ0MWY4OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAy
MDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKLQotI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIERpc3Rh
bnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZCht
X2F6aW11dGgpOwotICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwot
ICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yID0gewotICAg
ICAgICBzdGQ6OmNvcyhhemltdXRoKSAqIHN0ZDo6Y29zKGVsZXZhdGlvbiksCi0gICAgICAgIHN0
ZDo6c2luKGF6aW11dGgpICogc3RkOjpjb3MoZWxldmF0aW9uKSwKLSAgICAgICAgc3RkOjpzaW4o
ZWxldmF0aW9uKQotICAgIH07Ci0gICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGggPSAxOwotfQotCi1MaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGlu
Z0RhdGEgRGlzdGFudExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3Qg
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCwgaW50LCBmbG9hdCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGE7Ci19Ci0KLWJvb2wgRGlz
dGFudExpZ2h0U291cmNlOjpzZXRBemltdXRoKGZsb2F0IGF6aW11dGgpCi17Ci0gICAgaWYgKG1f
YXppbXV0aCA9PSBhemltdXRoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9hemltdXRo
ID0gYXppbXV0aDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEaXN0YW50TGlnaHRTb3Vy
Y2U6OnNldEVsZXZhdGlvbihmbG9hdCBlbGV2YXRpb24pCi17Ci0gICAgaWYgKG1fZWxldmF0aW9u
ID09IGVsZXZhdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZWxldmF0aW9uID0g
ZWxldmF0aW9uOwotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0U3RyZWFtJiBEaXN0YW50TGln
aHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17
Ci0gICAgdHMgPDwgIlt0eXBlPURJU1RBTlQtTElHSFRdICI7Ci0gICAgdHMgPDwgIlthemltdXRo
PVwiIiA8PCBhemltdXRoKCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwgIltlbGV2YXRpb249XCIiIDw8
IGVsZXZhdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGMxZTMwZWRlNzU5ODM3MjhhNjMyYmNjZmZiMDk5NzNhM2E0ZTcyZmQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRo
ZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGlzdGFudExpZ2h0U291cmNlIDogcHVi
bGljIExpZ2h0U291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERpc3RhbnRMaWdodFNv
dXJjZT4gY3JlYXRlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpc3RhbnRMaWdodFNvdXJjZShhemltdXRoLCBlbGV2
YXRpb24pKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVzZSBhcmUgaW4gZGVncmVlcy4KLSAgICBmbG9h
dCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoOyB9Ci0gICAgZmxvYXQgZWxldmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbGV2YXRpb247IH0KLQotICAgIGJvb2wgc2V0QXppbXV0
aChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpIG92ZXJyaWRlOwotICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0IGZpbmFsOwotCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIERp
c3RhbnRMaWdodFNvdXJjZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCi0gICAgICAg
IDogTGlnaHRTb3VyY2UoTFNfRElTVEFOVCkKLSAgICAgICAgLCBtX2F6aW11dGgoYXppbXV0aCkK
LSAgICAgICAgLCBtX2VsZXZhdGlvbihlbGV2YXRpb24pCi0gICAgewotICAgIH0KLQotICAgIGZs
b2F0IG1fYXppbXV0aDsKLSAgICBmbG9hdCBtX2VsZXZhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MSUdIVFNPVVJDRShEaXN0YW50
TGlnaHRTb3VyY2UsIExTX0RJU1RBTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2VEYXRh
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZGNiM2FiZmU3NTI5YzEzZTBjNGUzN2FiODViMmY2NDM2ODU2OGM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2VEYXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2VE
YXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRGlzdGFudExpZ2h0U291cmNlRGF0YTo6RGlzdGFudExpZ2h0U291cmNlRGF0
YShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCisgICAgOiBtX2F6aW11dGgoYXppbXV0
aCkKKyAgICAsIG1fZWxldmF0aW9uKGVsZXZhdGlvbikKK3sKK30KKworTGlnaHRTb3VyY2VQYWlu
dERhdGEgRGlzdGFudExpZ2h0U291cmNlRGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRh
KGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3IpIGNvbnN0Cit7CisgICAgZmxvYXQgYXpp
bXV0aCA9IGRlZzJyYWQobV9hemltdXRoKTsKKyAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFk
KG1fZWxldmF0aW9uKTsKKworICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvciA9IHsKKyAgICAg
ICAgc3RkOjpjb3MoYXppbXV0aCkgKiBzdGQ6OmNvcyhlbGV2YXRpb24pLAorICAgICAgICBzdGQ6
OnNpbihhemltdXRoKSAqIHN0ZDo6Y29zKGVsZXZhdGlvbiksCisgICAgICAgIHN0ZDo6c2luKGVs
ZXZhdGlvbikKKyAgICB9OworCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgcGFpbnREYXRhID0g
eyB9OworICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhID0geyBjb2xvclZlY3Rvciwg
bGlnaHRWZWN0b3IsIDEgfTsKKyAgICByZXR1cm4gcGFpbnREYXRhOworfQorCitMaWdodFNvdXJj
ZVBpeGVsRGF0YSBEaXN0YW50TGlnaHRTb3VyY2VEYXRhOjpjb21wdXRlTGlnaHRTb3VyY2VQaXhl
bERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmIHBhaW50RGF0YSwgaW50LCBpbnQsIGZs
b2F0KSBjb25zdAoreworICAgIHJldHVybiBwYWludERhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YTsK
K30KKworVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9RElTVEFO
VC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW2F6aW11dGg9XCIiIDw8IG1fYXppbXV0aCA8PCAiXCJd
IjsKKyAgICB0cyA8PCAiW2VsZXZhdGlvbj1cIiIgPDwgbV9lbGV2YXRpb24gPDwgIlwiXSI7Cisg
ICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiYWI5MzI3MWIyNjZkOWM1ZDhiZDM1ZGYy
Zjg5M2E0NjEzODIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJMaWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXN0
YW50TGlnaHRTb3VyY2VEYXRhIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXN0YW50
TGlnaHRTb3VyY2VEYXRhKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbik7CisKKyAgICB2
b2lkIHNldEF6aW11dGgoZmxvYXQgYXppbXV0aCkgeyBtX2F6aW11dGggPSBhemltdXRoOyB9Cisg
ICAgdm9pZCBzZXRFbGV2YXRpb24oZmxvYXQgZWxldmF0aW9uKSB7IG1fZWxldmF0aW9uID0gZWxl
dmF0aW9uOyB9CisKKyAgICBMaWdodFNvdXJjZVBhaW50RGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQ
YWludERhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBjb2xvclZlY3RvcikgY29uc3Q7CisgICAgTGln
aHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0
U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdDsKKworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxEaXN0YW50TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgor
ICAgIC8vIFRoZXNlIGFyZSBpbiBkZWdyZWVzLgorICAgIGZsb2F0IG1fYXppbXV0aDsKKyAgICBm
bG9hdCBtX2VsZXZhdGlvbjsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERp
c3RhbnRMaWdodFNvdXJjZURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9hemltdXRoOworICAgIGVuY29kZXIgPDwgbV9lbGV2YXRpb247Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERpc3RhbnRMaWdodFNv
dXJjZURhdGE+IERpc3RhbnRMaWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGF6aW11dGg7CisgICAgZGVjb2RlciA+PiBh
emltdXRoOworICAgIGlmICghYXppbXV0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGVsZXZhdGlvbjsKKyAgICBkZWNvZGVyID4+IGVs
ZXZhdGlvbjsKKyAgICBpZiAoIWVsZXZhdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhKCphemltdXRoLCAqZWxldmF0
aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2
NzA0Y2Q2N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uOGI4MDIzY2YzNjJjZDYwYTY3NDczODMy
Y2JhODhkZjgyOGNiZTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICog
Q29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiwzMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRO
RU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0
ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVu
ZE1vZGUgbW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQotICAg
ICwgbV9tb2RlKG1vZGUpCitSZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBt
b2RlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCi1S
ZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9k
ZSkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVCbGVuZCkKKyAgICAsIG1fbW9kZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2RlKSk7CiB9CiAKLWJvb2wgRkVCbGVuZDo6c2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZSBtb2RlKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVCbGVuZDo6dGFrZUlu
cHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgaWYgKG1fbW9kZSA9
PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7
IHN0YWNrLnRha2VMYXN0KCksIHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAotI2lmICFIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
Ci17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4t
PmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGlu
Mi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlcjIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKLX0KLSNlbmRpZgotCi1UZXh0
U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJs
ZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICB0cyA8PCAiIG1vZGU9XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAi
bm9ybWFsIiA6IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
T3ZlciwgbV9tb2RlKSkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3Bl
IGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
CmluZGV4IDcwZTg0MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjJkYjY1YjJk
MmE4YzljMDM4NWQ1YTA5OTJjZTU2MTNkMmI0MTRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMyArMjQsNDggQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKKworICAgIHZvaWQgc2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZSBtb2RlKSB7IG1fbW9kZSA9IG1vZGU7IH0KIAotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIHNldEJsZW5k
TW9kZShCbGVuZE1vZGUpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSZWY8RkVCbGVuZD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5k
IjsgfQorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVu
c2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5
QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRh
a2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChG
aWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2RlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRkVCbGVuZDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX21vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6
Om9wdGlvbmFsPFJlZjxGRUJsZW5kPj4gRkVCbGVuZDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit7CisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBt
b2RlOworICAgIGlmICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHJldHVybiBGRUJsZW5kOjpjcmVhdGUoKm1vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUJsZW5kKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2
OGE1NC4uNTZmMDJlOWM0MzI2YjJhYzBmYjVkNDY2ZDAxODA5MDQzYjM3ZjQ4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMDMgKzI0LDY1IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYm
IHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQot
ICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCi17Ci19
Ci0KLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3Zl
KHZhbHVlcykpKTsKLX0KLQotYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRUeXBlKENvbG9yTWF0cml4
VHlwZSB0eXBlKQotewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVD
b2xvck1hdHJpeDo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKK1JlZjxG
RUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUs
IFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7Ci0gICAgaWYgKG1fdmFsdWVzID09IHZhbHVlcykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmFsdWVzID0gdmFsdWVzOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RG
TW92ZSh2YWx1ZXMpKSk7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9h
dCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcykKLXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAg
ICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxwaGE7Ci0KLSAgICByZWQgICAgID0g
dmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVz
WyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICog
ciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZh
bHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzEx
XSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1
NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVl
c1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxp
bmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZs
b2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykKK0ZFQ29sb3JNYXRyaXg6OkZFQ29s
b3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlIGNvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYm
IHZhbHVlcykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbG9yTWF0cml4KQorICAgICwg
bV9jb2xvck1hdHJpeFR5cGUoY29sb3JNYXRyaXhUeXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwot
ICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsg
ZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAq
IGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwot
ICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAq
IGNvbXBvbmVudHNbOF07CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWlu
YW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
KQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsg
MC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4g
PSAwOwotICAgIGJsdWUgPSAwOworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAq
IHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7Cisg
ICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVu
dHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAu
NzE1ICsgMC4yODUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcy
ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsK
KyAgICBjb21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9u
ZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBw
bHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0
aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhN
dWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUg
bGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBp
cyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZh
bHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1
ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29u
c3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5
LmRhdGEoKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZl
clNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAg
ICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0g
ZGF0YTsKLSAgICAKLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1
ZmZlclNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7
Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5k
YXRhID0gZGF0YTsKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICog
NF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAw
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
Nl0gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgN10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sxM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0
cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0
ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRd
ID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
MF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9u
ZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzddICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29y
KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzhdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwK
LSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywg
JmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3Mp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0g
ICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAg
ICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAm
ZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQg
c2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9
IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRz
WzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBv
bmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAg
Y29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsK
KyAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAu
MTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVl
ICogMC4yODM7CisgICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBz
aW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcx
NSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAq
IDAuOTI4ICsgc2luSHVlICogMC4wNzI7CiB9Ci0jZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRy
aXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXpl
KQorYm9vbCBGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImKSBjb25zdAogewotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVy
VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRy
aXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwot
ICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkK
LSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21w
b25lbnRzLCB2YWx1ZXNbMF0pOwotCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBp
eGVsQXJyYXkubGVuZ3RoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoZWZmZWN0
QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVu
dHMsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShidWZmZXJTaXplKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0
IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAg
ICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1ZXMpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAg
ICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKLSAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQToKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhl
bEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewot
ICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7
Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAx
LCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAy
LCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMs
IGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1f
Y29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJ
bWFnZVZlY3RvciBGRUNvbG9yTWF0cml4Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEltYWdlQnVm
ZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmIChpbkJ1ZmZl
cikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgp
IH07Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
ICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwotCi0g
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKLSAg
ICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VO
S05PV046Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFy
cmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IAotICAgICAgICBlZmZlY3RUeXBlPEZF
Q09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5
RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9U
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIHNldElzQWxw
aGFJbWFnZSh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0SW1hZ2Ut
PnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JN
YXRyaXhUeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgY29sb3JNYXRyaXhUeXBlKQogewotICAgIHN3
aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29sb3JNYXRyaXhUeXBlKSB7CiAgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAg
ICAgICBicmVhazsKQEAgLTMzOSwxMSArMTAyLDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiAgICAg
cmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZUNvbG9yTWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHR5cGU9
XCIiIDw8IG1fdHlwZSA8PCAiXCIiOworICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgbV9jb2xvck1h
dHJpeFR5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAg
ICB0cyA8PCAiIHZhbHVlcz1cIiI7CiAgICAgICAgIFZlY3RvcjxmbG9hdD46OmNvbnN0X2l0ZXJh
dG9yIHB0ciA9IG1fdmFsdWVzLmJlZ2luKCk7CkBAIC0zNTcsOSArMTE5LDYgQEAgVGV4dFN0cmVh
bSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1c
biI7Ci0gICAgCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwot
ICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRh
dGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThh
ZWQxZTRmMGI1Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLjlhNDQ2NDZhM2JiNDQ1YzMxOWU0NjM1
MDY4ZDk5Y2U3ZDRlZDc2ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2
MiArMzcsNzcgQEAgZW51bSBDb2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9y
TWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3JlYXRlKENv
bG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKIAotICAgIENvbG9yTWF0cml4VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0
cml4VHlwZSk7CisgICAgdm9pZCBzZXRDb2xvck1hdHJpeFR5cGUoQ29sb3JNYXRyaXhUeXBlIGNv
bG9yTWF0cml4VHlwZSkgeyBtX2NvbG9yTWF0cml4VHlwZSA9IGNvbG9yTWF0cml4VHlwZTsgfQor
ICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykgeyBtX3ZhbHVl
cyA9IHZhbHVlczsgfQogCi0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KLSAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0
KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVl
Um90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0
YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYg
dmFsdWVzKTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBv
bmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5l
IHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZWY8RkVDb2xvck1hdHJpeD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb2xvck1hdHJpeChGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4m
Jik7CisgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7
CisKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
KSBjb25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmls
dGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb2xvck1hdHJpeCI7IH0KKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisjaWYgVVNFKENP
UkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKKyNlbmRpZgogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IENvbG9yTWF0cml4VHlwZSBtX3R5cGU7CisgICAgQ29sb3JNYXRyaXhUeXBlIG1fY29sb3JNYXRy
aXhUeXBlOwogICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7CiB9OwogCi1pbmxpbmUgdm9pZCBG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVu
dHMsIGZsb2F0IHZhbHVlKQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVDb2xvck1h
dHJpeDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgY29tcG9uZW50c1sw
XSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUg
LSAwLjcxNSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2
YWx1ZSk7Ci0gICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAg
IGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIx
MyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbG9yTWF0cml4VHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fdmFsdWVz
OwogfQogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUNvbG9yTWF0cml4Pj4gRkVDb2xvck1hdHJpeDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9h
dCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBz
aW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcx
NSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAq
IDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29z
SHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUg
KyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAw
LjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2
XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25l
bnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNv
bXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19
CisgICAgc3RkOjpvcHRpb25hbDxDb2xvck1hdHJpeFR5cGU+IGNvbG9yTWF0cml4VHlwZTsKKyAg
ICBkZWNvZGVyID4+IGNvbG9yTWF0cml4VHlwZTsKKyAgICBpZiAoIWNvbG9yTWF0cml4VHlwZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PGZsb2F0Pj4gdmFsdWVzOworICAgIGRlY29kZXIgPj4gdmFsdWVzOworICAgIGlmICghdmFsdWVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCisgICAgcmV0dXJuIEZFQ29sb3JNYXRy
aXg6OmNyZWF0ZSgqY29sb3JNYXRyaXhUeXBlLCBXVEZNb3ZlKCp2YWx1ZXMpKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NU
eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JNYXRyaXhUeXBlPiB7CisgICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q29sb3JNYXRyaXhUeXBlLAor
CisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOLAorICAgICAgICBX
ZWJDb3JlOjpGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLAorICAgICAgICBXZWJDb3JlOjpGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUsCisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUsCisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9MVU1J
TkFOQ0VUT0FMUEhBCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IDg0N2VhNThmNWY5YjAzODY2ZDllYWM1N2YxMGNjZjU3
NDAyZjllNjMuLjU4NGVkOTBmZjg5OTg4YmY5NTlkMTZlZTFlNWIzYmVkODllNmE4MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitS
ZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFs
cGhhRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFu
c2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0
aW9uKSk7Cit9CisKK0ZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5j
dGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpA
QCAtNDMsMTE5ICs0NCwxMCBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlcgogewogfQogCi1SZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAg
ICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb21wb25lbnRUcmFuc2ZlcihmaWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9u
LCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsKLX0KLQotdm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVDb21wb25lbnRUcmFuc2Zl
cjo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci19Ci0KLXZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYg
dmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9u
KQotewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5j
dGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwot
ICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMg
PSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVW
YWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsg
MSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAo
biAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0
ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWdu
ZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4w
KTsKLSAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9
IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6
bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5j
dGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAg
ICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZh
bHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRv
ZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90
ZSB0aGlzIHRvIGRvdWJsZQotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJG
dW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVy
RnVuY3Rpb24ub2Zmc2V0KTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigy
NTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZh
bCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBU
YWJsZSBncmVlblRhYmxlOwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBU
YWJsZSBhbHBoYVRhYmxlOwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVu
VGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJy
YXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgo
KTsKLSAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlv
blBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhl
bE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAg
ICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAy
XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhl
bE9mZnNldCArIDNdXTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVl
blRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHJlZFRhYmxlW2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhh
VGFibGVbaV0gPSBpOwotCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJU
eXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5
VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNv
bXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQot
ICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAv
LyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9u
LnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24u
dHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5
cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlw
ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9y
ZWRGdW5jdGlvbi50eXBlXShyZWRUYWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVj
dFttX2dyZWVuRnVuY3Rpb24udHlwZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAg
ICBjYWxsRWZmZWN0W21fYmx1ZUZ1bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rp
b24pOwotICAgIGNhbGxFZmZlY3RbbV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1f
YWxwaGFGdW5jdGlvbik7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVy
biB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVudFRyYW5zZmVyVHlwZSB0eXBlKQpAQCAtMjA5LDEw
ICsxMDEsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZgogICAgIHJldHVybiB0czsKIH0KIAot
VGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbZmVDb21wb25lbnRUcmFuc2ZlciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIlxuIjsK
ICAgICB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzLCAy
KTsKQEAgLTIyMSw5ICsxMTIsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbgogICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIntibHVlOiAiIDw8IG1fYmx1ZUZ1bmN0aW9uIDw8ICJ9XG4iOwogICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgInthbHBoYTogIiA8PCBtX2FscGhhRnVuY3Rpb24gPDwgIn1d
XG4iOwogICAgIH0KLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRz
KTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aAppbmRleCAyYjU4NmRlZjdmYjQyYTM3YjJlMTIzZWRhODcxMTljNGViMzQ4YTUxLi40NjM2ZTkz
YjBhMDQ3ZWRmY2FkZDAxYmFhMTRiNDIxMjYwYzQ3NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksMzcgKzQ4LDMxIEBAIHN0cnVjdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHsKICAgICBmbG9hdCBvZmZzZXQgeyAwIH07CiAKICAgICBWZWN0b3I8
ZmxvYXQ+IHRhYmxlVmFsdWVzOworICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBkZWNvZGUoRGVj
b2RlciYpOwogfTsKIAogY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3Jl
YXRlKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNy
ZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
cmVkRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmVl
bkZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBibHVlRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2JsdWVGdW5jdGlvbjsgfQotICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5jdGlvbjsg
fQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAg
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsK
LQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29tcG9uZW50VHJhbnNmZXIiOyB9Ci0KLSAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PjsKKyAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBi
bHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rp
b24pOwogCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUm
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29t
cHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJs
ZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBj
b21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUm
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgRmlsdGVySW1hZ2VWZWN0
b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9yZWRGdW5jdGlv
bjsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fZ3JlZW5GdW5jdGlvbjsKQEAgLTg3
LDggKzgwLDExMSBAQCBwcml2YXRlOgogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9h
bHBoYUZ1bmN0aW9uOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCB0eXBlOworICAgIGVuY29kZXIgPDwgc2xvcGU7CisgICAgZW5jb2RlciA8
PCBpbnRlcmNlcHQ7CisgICAgZW5jb2RlciA8PCBhbXBsaXR1ZGU7CisgICAgZW5jb2RlciA8PCBl
eHBvbmVudDsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IHRhYmxlVmFs
dWVzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uPiBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyVHlw
ZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2xvcGU7Cisg
ICAgZGVjb2RlciA+PiBzbG9wZTsKKyAgICBpZiAoIXNsb3BlKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gaW50ZXJjZXB0OworICAgIGRl
Y29kZXIgPj4gaW50ZXJjZXB0OworICAgIGlmICghaW50ZXJjZXB0KQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYW1wbGl0dWRlOworICAg
IGRlY29kZXIgPj4gYW1wbGl0dWRlOworICAgIGlmICghYW1wbGl0dWRlKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZXhwb25lbnQ7Cisg
ICAgZGVjb2RlciA+PiBleHBvbmVudDsKKyAgICBpZiAoIWV4cG9uZW50KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAg
IGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8ZmxvYXQ+PiB0YWJsZVZhbHVl
czsKKyAgICBkZWNvZGVyID4+IHRhYmxlVmFsdWVzOworICAgIGlmICghdGFibGVWYWx1ZXMpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgcmV0dXJuIHsgeyAqdHlwZSwg
KnNsb3BlLCAqaW50ZXJjZXB0LCAqYW1wbGl0dWRlLCAqZXhwb25lbnQsICpvZmZzZXQsIFdURk1v
dmUoKnRhYmxlVmFsdWVzKSB9IH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9yZWRGdW5jdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fZ3JlZW5GdW5j
dGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fYmx1ZUZ1bmN0aW9uOworICAgIGVuY29kZXIgPDwgbV9h
bHBoYUZ1bmN0aW9uOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25h
bDxSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbj4gcmVkRnVuY3Rpb247CisgICAgZGVjb2RlciA+PiByZWRGdW5jdGlvbjsKKyAgICBp
ZiAoIXJlZEZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3Rk
OjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBncmVlbkZ1bmN0aW9uOworICAg
IGRlY29kZXIgPj4gZ3JlZW5GdW5jdGlvbjsKKyAgICBpZiAoIWdyZWVuRnVuY3Rpb24pCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24+IGJsdWVGdW5jdGlvbjsKKyAgICBkZWNvZGVyID4+IGJsdWVGdW5jdGlv
bjsKKyAgICBpZiAoIWJsdWVGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gYWxwaGFGdW5j
dGlvbjsKKyAgICBkZWNvZGVyID4+IGFscGhhRnVuY3Rpb247CisgICAgaWYgKCFhbHBoYUZ1bmN0
aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNyZWF0ZSgqcmVkRnVuY3Rpb24sICpncmVlbkZ1bmN0aW9uLCAqYmx1ZUZ1
bmN0aW9uLCAqYWxwaGFGdW5jdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI7IH0KLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkNvbXBvbmVudFRyYW5zZmVyVHlwZT4geworICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkNvbXBvbmVudFRyYW5zZmVyVHlwZSwK
KworICAgICAgICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTiwKKyAg
ICAgICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZLAorICAgICAg
ICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUsCisgICAgICAgIFdlYkNv
cmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURSwKKyAgICAgICAgV2ViQ29yZTo6
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUiwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFu
c2ZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggOGI1OWU2NmRlOWZlOGQ2MzkxNmNiZTVjZTZkZDQw
MzhmYTRjYjJhOC4uMjg1ZDRiMmM3MmU1NWFmZjQ0MGFlMjFhN2IxNzg1MzJiNWI0MTc3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCwxNyArMjUsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNv
bXBvc2l0ZS5oIgogCi0jaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9z
aXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAg
OiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlw
ZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVP
cGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRl
KEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBr
MiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9z
aXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAs
IG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDcs
MzAgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21w
b3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBG
RUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBr
MiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHR5cGUpCitGbG9hdFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dAogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgLy8gRm9yIEluIGFuZCBB
dG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAv
LyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qg
b2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRvciA9
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQ
cmltaXRpdmVTdWJyZWdpb24oaW5wdXRzWzFdLT5pbWFnZVJlY3QoKSwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzEoZmxvYXQgazEpCi17Ci0gICAgaWYgKG1f
azEgPT0gazEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2sxID0gazE7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUg
ZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0CisgICAgLy8gb3B0aW1pemUgdGhl
IHBhaW50IHJlZ2lvbiBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlw
VG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0ZTo6
c2V0SzIoZmxvYXQgazIpCi17Ci0gICAgaWYgKG1fazIgPT0gazIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2syID0gazI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZpbHRl
ckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGlucHV0cywgZ2VvbWV0cnksIHByaW1pdGl2ZVN1
YnJlZ2lvbik7CiB9CiAKLWJvb2wgRkVDb21wb3NpdGU6OnNldEszKGZsb2F0IGszKQotewotICAg
IGlmIChtX2szID09IGszKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMyA9IGszOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkK
LXsKLSAgICBpZiAobV9rNCA9PSBrNCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazQg
PSBrNDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZp
bHRlclJlc3VsdElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVN
dWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5
dGUoaW50IGMpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbXBvc2l0ZTo6dGFrZUlucHV0cyhGaWx0
ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10g
PSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25l
ZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAm
IH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwg
aW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAg
ICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAg
ICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRL
NCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsg
azMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsx
ICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAg
ICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8g
aXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6
YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50
IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
LXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEp
Ci0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBz
Y2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+
PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNp
Z25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAq
IGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9
IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytz
b3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUo
dW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBp
eGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQot
ewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgw
LjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0
ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4w
ZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBl
ckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAw
LjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAg
ICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNs
YW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsy
LCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJy
YXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGsz
LCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxl
bmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJp
dGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3Ro
LCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAg
ICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBw
aXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQorICAgIEFTU0VSVChzdGFj
ay5zaXplKCkgPj0gMik7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSwgc3RhY2sudGFr
ZUxhc3QoKSB9OwogfQotI2VuZGlmCiAKLWlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9y
bUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMs
IGZsb2F0IGs0KQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGlu
dCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBo
ZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseS4KLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0gICAgQVNTRVJUKCEobGVuZ3RoICYgMHgzKSk7Ci0gICAgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotI2Vsc2UKLSAgICBhcml0aG1ldGljU29mdHdhcmUoc291cmNl
LmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNl
bmRpZgotfQotCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKLSAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0
ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29s
dXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAg
ICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAgICAgIC8vIEFyaXRobWV0aWMgbWF5
IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4n
dAotICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCi0gICAgICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBv
ZiBib3RoIGlucHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgx
KTsKLQotICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykg
ewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgICAgICBJ
bnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxB
cnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0KLSAgICAg
ICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBH
cmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewotICAgICAgICAv
LyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KLSAgICAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgZGVz
dGluYXRpb25SZWN0LmludGVyc2VjdChpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAg
ICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAg
ICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBJbnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0g
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigp
OwotICAgICAgICBJbnRSZWN0IHNvdXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2UyUmVjdCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2VSZWN0KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
SW4gfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlhPUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfTElHSFRFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSks
IENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5
cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRv
cikgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMg
PDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTMyOCwxOCArOTksMTMgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29t
cG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb21wb3NpdGUiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwot
ICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX3R5cGUgPDwgIlwiIjsKLSAgICBpZiAobV90
eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgdHMgPDwgIiBvcGVy
YXRpb249XCIiIDw8IG1fY29tcG9zaXRlT3BlcmF0b3IgPDwgIlwiIjsKKyAgICBpZiAobV9jb21w
b3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQogICAgICAg
ICB0cyA8PCAiIGsxPVwiIiA8PCBtX2sxIDw8ICJcIiBrMj1cIiIgPDwgbV9rMiA8PCAiXCIgazM9
XCIiIDw8IG1fazMgPDwgIlwiIGs0PVwiIiA8PCBtX2s0IDw8ICJcIiI7CiAgICAgdHMgPDwgIl1c
biI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3
MTA3YjRiOTY4YzU4ZTNhMzdjMzJhZTJmNzZhZWEwYzMuLmMzYzk2MGY3YzNmZGViMTM0M2EwNjMx
NmI2Y2I1OWJmYzM3MzEyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEyICsyNCw5IEBACiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSB7CitlbnVtIEZFQ29tcG9zaXRlT3BlcmF0b3IgewogICAgIEZFQ09NUE9T
SVRFX09QRVJBVE9SX1VOS05PV04gICAgPSAwLCAKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9P
VkVSICAgICAgID0gMSwKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiAgICAgICAgID0gMiwK
QEAgLTQxLDUyICszOSw5OCBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFz
cyBGRUNvbXBvc2l0ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29s
IHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsKLQotICAgIGZsb2F0IGsxKCkg
Y29uc3QgeyByZXR1cm4gbV9rMTsgfQotICAgIGJvb2wgc2V0SzEoZmxvYXQpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJh
dG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICBmbG9h
dCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazI7IH0KLSAgICBib29sIHNldEsyKGZsb2F0KTsKKyAg
ICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IpIHsgbV9jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdG9yOyB9Cisg
ICAgdm9pZCBzZXRLMShmbG9hdCBrMSkgeyBtX2sxID0gazE7IH0KKyAgICB2b2lkIHNldEsyKGZs
b2F0IGsyKSB7IG1fazIgPSBrMjsgfQorICAgIHZvaWQgc2V0SzMoZmxvYXQgazMpIHsgbV9rMyA9
IGszOyB9CisgICAgdm9pZCBzZXRLNChmbG9hdCBrNCkgeyBtX2s0ID0gazQ7IH0KIAotICAgIGZs
b2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMzsgfQotICAgIGJvb2wgc2V0SzMoZmxvYXQpOwot
Ci0gICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9Ci0gICAgYm9vbCBzZXRLNChm
bG9hdCk7Ci0KLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUM7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmVmPEZFQ29tcG9zaXRlPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToK
LSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBvc2l0
ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CiAKLSAgICB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0
d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAg
ICBib29sIGFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICBi
b29sIGFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICAK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICB0ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
TmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZs
b2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKLSNlbmRpZgotCi0gICAgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSBtX3R5cGU7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBtX2Nv
bXBvc2l0ZU9wZXJhdG9yOwogICAgIGZsb2F0IG1fazE7CiAgICAgZmxvYXQgbV9rMjsKICAgICBm
bG9hdCBtX2szOwogICAgIGZsb2F0IG1fazQ7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBGRUNvbXBvc2l0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbXBvc2l0ZU9wZXJhdG9yOworICAgIGVuY29kZXIgPDwgbV9rMTsK
KyAgICBlbmNvZGVyIDw8IG1fazI7CisgICAgZW5jb2RlciA8PCBtX2szOworICAgIGVuY29kZXIg
PDwgbV9rNDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVm
PEZFQ29tcG9zaXRlPj4gRkVDb21wb3NpdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIHN0ZDo6b3B0aW9uYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3BlcmF0b3I7
CisgICAgZGVjb2RlciA+PiBjb21wb3NpdGVPcGVyYXRvcjsKKyAgICBpZiAoIWNvbXBvc2l0ZU9w
ZXJhdG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxmbG9hdD4gazE7CisgICAgZGVjb2RlciA+PiBrMTsKKyAgICBpZiAoIWsxKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazI7CisgICAg
ZGVjb2RlciA+PiBrMjsKKyAgICBpZiAoIWsyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazM7CisgICAgZGVjb2RlciA+PiBrMzsKKyAg
ICBpZiAoIWszKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4gazQ7CisgICAgZGVjb2RlciA+PiBrNDsKKyAgICBpZiAoIWs0KQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFQ29tcG9zaXRlOjpjcmVhdGUo
KmNvbXBvc2l0ZU9wZXJhdG9yLCAqazEsICprMiwgKmszLCAqazQpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkZFQ29tcG9zaXRlT3BlcmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGRUNvbXBvc2l0ZU9wZXJhdG9yLAorCisg
ICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV04sCisgICAgICAgIFdl
YkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIsCisgICAgICAgIFdlYkNvcmU6OkZFQ09N
UE9TSVRFX09QRVJBVE9SX0lOLAorICAgICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVVQsCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1AsCisgICAg
ICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUiwKKyAgICAgICAgV2ViQ29yZTo6
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQywKKyAgICAgICAgV2ViQ29yZTo6RkVDT01Q
T1NJVEVfT1BFUkFUT1JfTElHSFRFUgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9zaXRlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5OGQ3MDkzNWE5NWM2ZjE1NmVjMjkz
M2MwZTk5ZjA1MC4uYmE4MjYxOTJkZTU0NjdiNDE3ZThhZmM0YTFjM2VkYjdlNzEwZWFlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjQsMTggKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252
b2x2ZU1hdHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXIm
IGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVz
ZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi0gICAgOiBGaWx0
ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb252b2x2ZU1hdHJpeCkKK1JlZjxGRUNvbnZvbHZlTWF0
cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUs
IGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgs
IHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQorCitGRUNvbnZvbHZlTWF0cml4OjpG
RUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3Is
IGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2
ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVDb252b2x2ZU1hdHJpeCkKICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxT
aXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBtX2JpYXMoYmlhcykKQEAgLTQ5
LDM4OSArNTEsMTUgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXIm
IGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxT
aXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZl
TWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
Ci0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9m
ZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5l
bFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2Vy
bmVsTWF0cml4KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgo
ZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2Rl
LCBrZXJuZWxVbml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgp
KTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNp
emUmIGtlcm5lbFNpemUpCi17Ci0gICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwot
ICAgIEFTU0VSVChrZXJuZWxTaXplLmhlaWdodCgpID4gMCk7Ci0gICAgbV9rZXJuZWxTaXplID0g
a2VybmVsU2l6ZTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWwoY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsKQotewotICAgIG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyAK
LX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpCi17
Ci0gICAgQVNTRVJUKGRpdmlzb3IpOwotICAgIGlmIChtX2Rpdmlzb3IgPT0gZGl2aXNvcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGl2aXNvciA9IGRpdmlzb3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0QmlhcyhmbG9hdCBiaWFzKQot
ewotICAgIGlmIChtX2JpYXMgPT0gYmlhcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
YmlhcyA9IGJpYXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJp
eDo6c2V0VGFyZ2V0T2Zmc2V0KGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQpCi17Ci0gICAg
aWYgKG1fdGFyZ2V0T2Zmc2V0ID09IHRhcmdldE9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0OwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKLXsKLSAgICBpZiAobV9lZGdlTW9kZSA9PSBlZGdlTW9kZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEZsb2F0
UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6Y2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLSAgICBBU1NFUlQoa2VybmVsVW5pdExlbmd0aC54KCkgPiAwKTsKLSAgICBBU1NFUlQo
a2VybmVsVW5pdExlbmd0aC55KCkgPiAwKTsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoID09
IGtlcm5lbFVuaXRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2tlcm5lbFVu
aXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
Ym9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBo
YSkKK0ZpbHRlckltYWdlVmVjdG9yIEZFQ29udm9sdmVNYXRyaXg6OnRha2VJbnB1dHMoRmlsdGVy
SW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEgPT0g
cHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcHJlc2VydmVBbHBo
YSA9IHByZXNlcnZlQWxwaGE7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVt
ZW50YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRo
ZSBpbWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwg
ICB8Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAg
ICAgfCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAg
IEUgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUg
cmVnaW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBj
YWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQot
ICAgRXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0g
ICAgICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAg
ICBUYXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRo
ZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAg
ICAuLi4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlz
IGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBh
bmQgKHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4
MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9u
bHkgdGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwg
eTIKLQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAg
UmVnaW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgx
OiAxLCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywg
eDI6IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHky
OiAxMCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5z
IG1vc3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0
byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgot
ICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBj
YWxscyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBp
bWFnZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmln
Z2VyIHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAg
IGZ1bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGlu
IGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3Ig
dGhlbSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdv
dWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5z
aWduZWQgY2hhciBtYXggPSAyNTUpCi17Ci0gICAgaWYgKGNoYW5uZWwgPD0gMCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5uZWwgPj0gbWF4KQotICAgICAgICByZXR1cm4gbWF4Owot
ICAgIHJldHVybiBjaGFubmVsOwotfQotCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMs
IGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMpCi17
Ci0gICAgdW5zaWduZWQgY2hhciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUg
OiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNs
YW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0g
ICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4
ZWwsIHNvdXJjZVBpeGVscy5pdGVtKHBpeGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKLX0KLQotI2lm
IENPTVBJTEVSKE1TVkMpCi0vLyBJbmNvcnJlY3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBvZiBz
dGFjayBpbiB8dG90YWxzfCBkdWUgdG8gfHByZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdtYSB3
YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgotCi0v
LyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgot
QUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0
b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBh
ZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAgaW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIG1fdGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwotICAgIGludCBr
ZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tl
cm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJn
YihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVl
cyA/IDAgOiAxKV07Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0g
ICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCknIGxpbmVzCi0gICAgcGl4
ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkg
KiA0KTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAo
eEluY3JlYXNlICsgKGNsaXBSaWdodCArIDEpICogNCk7Ci0KLSAgICBmb3IgKGludCB5ID0geUVu
ZCArIDE7IHkgPiB5U3RhcnQ7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0
ICsgMTsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRp
bmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBp
eGVsID0gc3RhcnRLZXJuZWxQaXhlbDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVs
U2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAg
dG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBp
ZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsK
LQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAg
ICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQ
aXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFs
c1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKysp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKLSAgICAgICAg
ICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAg
ICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxz
PHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0Rh
dGEuYmlhcyk7Ci0gICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9
IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRy
aXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQg
eSkKLXsKLSAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeSA+PSAw
ICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICByZXR1cm4gKHkgKiBwYWludGlu
Z0RhdGEud2lkdGggKyB4KSA8PCAyOwotCi0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Ci0gICAg
ZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY2FzZSBF
REdFTU9ERV9EVVBMSUNBVEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgIHggPSAw
OwotICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKLSAgICAgICAgICAg
IHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOwotICAgICAgICBpZiAoeSA8IDApCi0gICAgICAg
ICAgICB5ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQot
ICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwotICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNhc2UgRURHRU1PREVfV1JB
UDoKLSAgICAgICAgd2hpbGUgKHggPCAwKQotICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEu
d2lkdGg7Ci0gICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB3aGlsZSAo
eSA8IDApCi0gICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHkg
JT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRh
LndpZHRoICsgeCkgPDwgMjsKLSAgICB9Ci19Ci0KLS8vIEZvciBvdGhlciByZWdpb25zIHRoYW4g
QwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwotICAg
IGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBt
X3RhcmdldE9mZnNldC54KCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJu
ZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3RhcmdldE9mZnNl
dC55KCk7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkg
KiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBm
bG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8v
IG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJl
cyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gaGVpZ2h0
OyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkg
ewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVs
UGl4ZWxYOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZ
OwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAg
ICAgICAgIHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAg
ICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVl
cykKLSAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0
UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKLSAg
ICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAg
dG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRl
eCArIDIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2
ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgdG90
YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCAr
IDMpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgICAgICAt
LWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAg
ICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAg
ICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVs
LCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOwotICAgICAgICAgICAgKytz
dGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7
Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgICAg
ICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgfQotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNw
cmFnbWEgd2FybmluZyhwb3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3Rh
cnQsIGludCB5RW5kKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2Ug
aXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBk
ZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgZWxzZQotICAgICAg
ICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBj
bGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1
bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJl
Ci0gICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhl
cmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8
dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBm
YXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwot
fQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQot
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBzb3VyY2VQaXhlbEFycmF5OwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0g
ICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERy
YXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGVsc2UKLSAgICAgICAgc291
cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewotICAgICAgICAqc291cmNlUGl4
ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAotICAgICAgICBwYWludFNp
emUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2JpYXMg
KiAyNTUsCi0gICAgICAgIG5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCi0gICAgfTsK
LQotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0
ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xp
cEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKLQot
ICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJh
cmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnQgaXRlcmF0aW9u
cyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhl
aWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKLSAgICAgICAgaW50IHN0cmlkZSA9
IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlw
Qm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0KLSAgICAgICAgQ29uY3VycmVudFdvcmtR
dWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAg
aW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0gICAgICAgICAgICBpbnQgeUVuZCA9IHN0
ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0b20pOwotCi0gICAgICAg
ICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldElu
dGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBjbGlw
Qm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwotICAg
IGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAgICBpZiAobV90YXJnZXRP
ZmZzZXQueSgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICBpZiAoY2xpcEJv
dHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRp
bmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdo
dCgpKTsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0
LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNsaXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgp
KQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJn
ZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRvbSk7CisgICAgQVNTRVJU
KCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVk
Z2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCArODEsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7
CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMg
PDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5l
bE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJcIiAiCiAgICAgICAgPDwgImRpdmlz
b3I9XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgpAQCAtNDY1LDkgKzkyLDYgQEAgVGV4dFN0cmVh
bSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1vZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVu
Z3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZlQWxwaGE9XCIiIDw8IG1fcHJlc2VydmVB
bHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2Nv
cGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjEzMzliYTdh
NmI2ZmVkMTFiZTE0YThiYzIyNjBhOWQxNjlkM2ZlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNSw2IEBACiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOCw3MCArMzgsMzAgQEAgZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZv
bHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAg
ICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25z
dCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShj
b25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25z
dCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQm
IGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYga2VybmVsTWF0cml4KTsKIAotICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2VybmVsU2l6ZTsgfQotICAgIHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpIHsg
bV9rZXJuZWxTaXplID0ga2VybmVsU2l6ZTsgfQorICAgIHZvaWQgc2V0RGl2aXNvcihmbG9hdCBk
aXZpc29yKSB7IG1fZGl2aXNvciA9IGRpdmlzb3I7IH0KKyAgICB2b2lkIHNldEJpYXMoZmxvYXQg
YmlhcykgeyBtX2JpYXMgPSBiaWFzOyB9CisgICAgdm9pZCBzZXRUYXJnZXRPZmZzZXQoY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCkgeyBtX3RhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldDsg
fQorICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1v
ZGUgPSBlZGdlTW9kZTsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoKSB7IG1fa2VybmVsVW5pdExlbmd0aCA9IGtlcm5lbFVu
aXRMZW5ndGg7IH0KKyAgICB2b2lkIHNldFByZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhh
KSB7IG1fcHJlc2VydmVBbHBoYSA9IHByZXNlcnZlQWxwaGE7IH0KKyAgICB2b2lkIHNldEtlcm5l
bE1hdHJpeChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpIHsgbV9rZXJuZWxNYXRy
aXggPSBrZXJuZWxNYXRyaXg7IH0KIAotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsTWF0cml4OyB9Ci0gICAgdm9pZCBzZXRLZXJuZWwoY29u
c3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgZmxvYXQgZGl2aXNvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZGl2aXNvcjsgfQotICAgIGJvb2wgc2V0RGl2aXNvcihmbG9hdCk7Ci0KLSAgICBmbG9hdCBi
aWFzKCkgY29uc3QgeyByZXR1cm4gbV9iaWFzOyB9Ci0gICAgYm9vbCBzZXRCaWFzKGZsb2F0KTsK
LQotICAgIEludFBvaW50IHRhcmdldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0T2Zm
c2V0OyB9Ci0gICAgYm9vbCBzZXRUYXJnZXRPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKLQotICAg
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KLSAg
ICBib29sIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBGbG9hdFBvaW50IGtlcm5l
bFVuaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IH0KLSAgICBi
b29sIHNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgYm9vbCBw
cmVzZXJ2ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyB9Ci0gICAgYm9v
bCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVDb252b2x2ZU1hdHJpeD4+IGRlY29kZShEZWNvZGVy
Jik7CiAKIHByaXZhdGU6CisgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJu
ZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0
T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsK
IAotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAg
ZmxvYXQgYmlhczsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsK
LQotICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBm
bG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4Ijsg
fQotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhh
VmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFp
bnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGlu
dCB5RW5kKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRp
bmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTMsNSArNzMsODAgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8ZmxvYXQ+IG1fa2VybmVsTWF0cml4OwogfTsKIAordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbFNpemU7CisgICAgZW5jb2RlciA8PCBt
X2Rpdmlzb3I7CisgICAgZW5jb2RlciA8PCBtX2JpYXM7CisgICAgZW5jb2RlciA8PCBtX3Rhcmdl
dE9mZnNldDsKKyAgICBlbmNvZGVyIDw8IG1fZWRnZU1vZGU7CisgICAgZW5jb2RlciA8PCBtX2tl
cm5lbFVuaXRMZW5ndGg7CisgICAgZW5jb2RlciA8PCBtX3ByZXNlcnZlQWxwaGE7CisgICAgZW5j
b2RlciA8PCBtX2tlcm5lbE1hdHJpeDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8UmVmPEZFQ29udm9sdmVNYXRyaXg+PiBGRUNvbnZvbHZlTWF0cml4OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IGtlcm5l
bFNpemU7CisgICAgZGVjb2RlciA+PiBrZXJuZWxTaXplOworICAgIGlmICgha2VybmVsU2l6ZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IGRpdmlzb3I7CisgICAgZGVjb2RlciA+PiBkaXZpc29yOworICAgIGlmICghZGl2aXNvcikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJp
YXM7CisgICAgZGVjb2RlciA+PiBiaWFzOworICAgIGlmICghYmlhcykKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IHRhcmdldE9mZnNl
dDsKKyAgICBkZWNvZGVyID4+IHRhcmdldE9mZnNldDsKKyAgICBpZiAoIXRhcmdldE9mZnNldCkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8RWRnZU1v
ZGVUeXBlPiBlZGdlTW9kZTsKKyAgICBkZWNvZGVyID4+IGVkZ2VNb2RlOworICAgIGlmICghZWRn
ZU1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UG9pbnQ+IGtlcm5lbFVuaXRMZW5ndGg7CisgICAgZGVjb2RlciA+PiBrZXJuZWxVbml0
TGVuZ3RoOworICAgIGlmICgha2VybmVsVW5pdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gcHJlc2VydmVBbHBoYTsKKyAgICBk
ZWNvZGVyID4+IHByZXNlcnZlQWxwaGE7CisgICAgaWYgKCFrZXJuZWxVbml0TGVuZ3RoKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8Zmxv
YXQ+PiBrZXJuZWxNYXRyaXg7CisgICAgZGVjb2RlciA+PiBrZXJuZWxNYXRyaXg7CisgICAgaWYg
KCFrZXJuZWxNYXRyaXgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKCprZXJuZWxTaXplLCAqZGl2aXNvciwgKmJpYXMs
ICp0YXJnZXRPZmZzZXQsICplZGdlTW9kZSwgKmtlcm5lbFVuaXRMZW5ndGgsICpwcmVzZXJ2ZUFs
cGhhLCBXVEZNb3ZlKCprZXJuZWxNYXRyaXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpFZGdlTW9kZVR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
ICAgICBXZWJDb3JlOjpFZGdlTW9kZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVf
VU5LTk9XTiwKKyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVfRFVQTElDQVRFLAorICAgICAgICBX
ZWJDb3JlOjpFREdFTU9ERV9XUkFQLAorICAgICAgICBXZWJDb3JlOjpFREdFTU9ERV9OT05FCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVDb252b2x2ZU1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHAKaW5kZXggZWViMTcyOGRiMzVlOGFjMzAyYjI3ZTRjM2ZmMzRjYjg4NTViOWQwOS4uNWI1M2Qz
NTY2YTlhODY2ZjY0ZDk4OGU4ODcyNWJiZWJjZjE0ZjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjcsMzYgKzI4LDI3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaWZmdXNl
TGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIERpZmZ1
c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQs
IDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdo
dFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKK1JlZjxGRURpZmZ1c2VMaWdodGluZz4g
RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlKQogeworICAgIHJl
dHVybiBjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBr
ZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSk7CiB9
CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxG
RURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlKQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBk
aWZmdXNlQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAK
LUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJv
b2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29u
c3RhbnQpCitGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3Im
IGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmIHNvdXJjZSkK
KyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBz
cGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcp
CiB7Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50
OwotICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAg
ICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwi
ICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8
PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRM
ZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0
dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYz
ZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4uMjBjNzgwYzUyMmZjOTlkZjM4ZmI5MTE1ZDJhMGMw
ZmY2YmY0ZDc2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwyMSArMjYsMjUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMaWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNl
TGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVE
aWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQo
ZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBD
b2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0
ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYp
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFRGlmZnVzZUxpZ2h0
aW5nPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJik7CisgICAgCisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRURpZmZ1c2VMaWdodGluZz4+IEZFRGlmZnVzZUxp
Z2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGlu
Zzo6ZGVjb2RlPERlY29kZXIsIEZFRGlmZnVzZUxpZ2h0aW5nPihkZWNvZGVyKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0
NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNmYTEuLjliMTljNzY5ZDM2MGI2YzRm
ZjI5YmIwYmZlNTFhMzk2ZjFkZjQ2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBA
IC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMzIgKzI1LDQ2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIK
IAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYgZmlsdGVyLCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpEaXNwbGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxT
ZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQotICAg
ICwgbV9zY2FsZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRN
YXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5u
ZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3Bs
YWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhD
aGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCBzY2FsZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVu
dE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7
Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3Qg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3hDaGFu
bmVsU2VsZWN0b3IgPT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29u
c3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3lD
aGFubmVsU2VsZWN0b3IgPT0geUNoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxl
KQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5
cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCBzY2FsZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRURpc3BsYWNlbWVudE1h
cCkKKyAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV95
Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBtX3NjYWxlKHNjYWxlKQog
ewotICAgIGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9zY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
Citjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjppbWFnZUNv
bG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKICAgICAv
LyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycgcHJvcGVydHkgb25seSBh
cHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBw
bHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCBy
ZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4KICAgICAvLyBUaGUgcmVz
dWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2Vt
ZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JT
cGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsKLX0KLQotdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGlu
LCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3Qg
cHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAg
ICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwor
ICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmNv
bG9yU3BhY2UoKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhl
bCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKK0Zsb2F0UmVjdCBG
RURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBp
eGVsID0gNDsKLSAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
OwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQor
RmlsdGVySW1hZ2VWZWN0b3IgRkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMoRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwot
Ci0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2FsY3Vs
YXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1l
ZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFj
ZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7
Ci0gICAgCi0gICAgaWYgKCFpbnB1dEltYWdlIHx8ICFkaXNwbGFjZW1lbnRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNl
bWVudEltYWdlLT5sZW5ndGgoKSk7Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRl
cigpOwotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEZsb2F0
U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3NjYWxlLCBt
X3NjYWxlIH0pOwotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1
NS4wOwotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsK
LSAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKLSAg
ICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7Ci0gICAg
Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOwotICAgIGlu
dCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKLQotICAgIGludCByb3dC
eXRlcyA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
cGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9
IHkgKiByb3dCeXRlczsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53
aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0
YXJ0T2Zmc2V0ICsgeCAqIDQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBzcmNYID0g
eCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zm
c2V0WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRp
c3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwotCi0gICAgICAgICAgICB1bnNp
Z25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwg
MCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvblBpeGVsUHRyID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNy
Y1gsIHNyY1ksIHJvd0J5dGVzKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKHN0YWNr
LnNpemUoKSA+PSAyKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpLCBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpAQCAtMTc0LDE3ICs4OSwxMiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hh
bm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBG
RURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
RmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVE
aXNwbGFjZW1lbnRNYXAiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc2NhbGU9XCIiIDw8IG1fc2NhbGUg
PDwgIlwiICIKICAgICAgICA8PCAieENoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV94Q2hhbm5lbFNl
bGVjdG9yIDw8ICJcIiAiCiAgICAgICAgPDwgInlDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feUNo
YW5uZWxTZWxlY3RvciA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBkZDczMmE4ODEwNzNlMjY2YmM4NDZhZmU2ODE5ZTY3
NTE2MjNhM2EyLi5jZjA0NmVlYjAwOTY4NGIzNWQzZGZmMDU3MjE5YWM4YjA5MGRiY2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIzLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMzggKzM2LDgx
IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNzIEZFRGlzcGxhY2VtZW50TWFw
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpc3Bs
YWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2Fs
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3Jl
YXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0
b3I7IH0KLSAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9y
VHlwZSk7CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvcikgeyBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNl
bGVjdG9yOyB9CisgICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcikgeyBtX3lDaGFubmVsU2VsZWN0b3IgPSB5Q2hhbm5l
bFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSkgeyBtX3NjYWxlID0g
c2NhbGU7IH0KIAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvcjsgfQotICAgIGJvb2wgc2V0WUNoYW5uZWxT
ZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKLQotICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwotCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVEaXNwbGFjZW1lbnRNYXA+PiBkZWNvZGUoRGVjb2Rl
ciYpOwogCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5l
bFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9y
VHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0
b3IsIGZsb2F0IHNjYWxlKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVEaXNwbGFjZW1lbnRNYXAiOyB9CisgICAgaW50IHhDaGFubmVsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlD
aGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rv
ciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5u
ZWxTZWxlY3RvciAtIDE7IH0KKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRl
ckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29m
dHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxl
Y3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feUNoYW5uZWxTZWxlY3RvcjsKICAgICBm
bG9hdCBtX3NjYWxlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yOworICAgIGVuY29kZXIgPDwgbV95Q2hhbm5lbFNlbGVj
dG9yOworICAgIGVuY29kZXIgPDwgbV9zY2FsZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRGlzcGxhY2VtZW50TWFwPj4gRkVEaXNwbGFjZW1lbnRN
YXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhbm5l
bFNlbGVjdG9yVHlwZT4geENoYW5uZWxTZWxlY3RvcjsKKyAgICBkZWNvZGVyID4+IHhDaGFubmVs
U2VsZWN0b3I7CisgICAgaWYgKCF4Q2hhbm5lbFNlbGVjdG9yKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDaGFubmVsU2VsZWN0b3JUeXBlPiB5Q2hh
bm5lbFNlbGVjdG9yOworICAgIGRlY29kZXIgPj4geUNoYW5uZWxTZWxlY3RvcjsKKyAgICBpZiAo
IXlDaGFubmVsU2VsZWN0b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBzY2FsZTsKKyAgICBkZWNvZGVyID4+IHNjYWxlOworICAgIGlm
ICghc2NhbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVE
aXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSgqeENoYW5uZWxTZWxlY3RvciwgKnlDaGFubmVsU2VsZWN0
b3IsICpzY2FsZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q2hhbm5lbFNlbGVj
dG9yVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNv
cmU6OkNoYW5uZWxTZWxlY3RvclR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9VTktO
T1dOLAorICAgICAgICBXZWJDb3JlOjpDSEFOTkVMX1IsCisgICAgICAgIFdlYkNvcmU6OkNIQU5O
RUxfRywKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9CLAorICAgICAgICBXZWJDb3JlOjpDSEFO
TkVMX0EKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURpc3BsYWNlbWVudE1hcCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3ODlmNmJiZGQ4Li5lYmI4YTNi
NmRjNWVmMGExMjdlYjdkMDAxNjNkNDhmYTQ2YmUyOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIy
LDE5ICsyMywyMyBAQAogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJ
bWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0
ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwgbV9z
dGRZKHN0ZFkpCisKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0
IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGREZXZpYXRpb25YLCBzdGREZXZpYXRp
b25ZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNo
YWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlv
blksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBz
aGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRvdykKKyAg
ICAsIG1fc3RkRGV2aWF0aW9uWChzdGREZXZpYXRpb25YKQorICAgICwgbV9zdGREZXZpYXRpb25Z
KHN0ZERldmlhdGlvblkpCiAgICAgLCBtX2R4KGR4KQogICAgICwgbV9keShkeSkKICAgICAsIG1f
c2hhZG93Q29sb3Ioc2hhZG93Q29sb3IpCkBAIC00MiwxMDAgKzQ3LDQ2IEBAIEZFRHJvcFNoYWRv
dzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBm
bG9hdCBkeCwgZmxvCiB7CiB9CiAKLVJlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKK0lu
dE91dHNldHMgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwg
ZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Ci19Ci0KLXZvaWQgRkVEcm9wU2hhZG93
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0
aGlzLT5maWx0ZXIoKTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9m
ZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWlu
dFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9
KSk7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3Qp
OwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtl
cm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgLy8gV2UgdGFrZSB0
aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3
ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0
ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xp
cHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1h
eEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2
aWF0aW9uWSB9KTsKKyAgICByZXR1cm4geworICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNl
dFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRT
aXplLndpZHRoKCkgKyBtX2R4KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXpl
LmhlaWdodCgpICsgbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53
aWR0aCgpIC0gbV9keCkKKyAgICB9OwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEp
OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotICAgIEZp
bHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgaW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0
cnkucmVzb2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIAotICAgIEZsb2F0U2l6
ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fZHgsIG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5n
UmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFk
b3dPcGFjaXR5KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1h
Z2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhh
KDEpOwotCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwg
bV9zaGFkb3dDb2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3Vs
dENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1
bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdElt
YWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBw
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291
cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZl
ci0+c2l6ZSgpLndpZHRoKCkpOworICAgIGltYWdlUmVjdC51bml0ZShpbnB1dHNbMF0tPmltYWdl
UmVjdCgpKTsKICAgICAKLSAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBzaGFkb3dBcmVhKTsKLQotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxs
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSks
IG1fc2hhZG93Q29sb3IpOwotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOworICAgIEludFNpemUga2VybmVs
U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKHsgbV9zdGREZXZpYXRp
b25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgCisgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCisgICAgaW1hZ2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUu
aGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7CisgICAgcmV0dXJuIGdlb21ldHJ5
LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lv
bik7CiB9CiAKLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKK0ZpbHRl
ckltYWdlVmVjdG9yIEZFRHJvcFNoYWRvdzo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICByZXR1cm4gewot
ICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKLSAg
ICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKLSAgICAg
ICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpICsgbV9keSksCi0gICAgICAg
IHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCkKLSAgICB9OworICAg
IEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgp
IH07CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIi
IDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxv
b2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5l
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkRGV2aWF0aW9uWCA8PCAiLCAiIDw8IG1fc3RkRGV2aWF0
aW9uWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBm
bG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFk
b3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmRmOTAxNzQ3OGEwMjBmNGVhMWZhODRj
ZWJjYjM2ODg3NGRmYTBlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw1MyArMjEsOTIgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZp
YXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7
CiAKLSAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9Ci0g
ICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQot
Ci0gICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCBzdGRZKSB7IG1fc3RkWSA9IHN0ZFk7IH0KLQot
ICAgIGZsb2F0IGR4KCkgY29uc3QgeyByZXR1cm4gbV9keDsgfQorICAgIHZvaWQgc2V0U3RkRGV2
aWF0aW9uWChmbG9hdCBzdGREZXZpYXRpb25YKSB7IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlh
dGlvblg7IH0KKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkg
eyBtX3N0ZERldmlhdGlvblkgPSBzdGREZXZpYXRpb25ZOyB9CiAgICAgdm9pZCBzZXREeChmbG9h
dCBkeCkgeyBtX2R4ID0gZHg7IH0KLQotICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9k
eTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9Ci0KLSAgICBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9yOyB9IAog
ICAgIHZvaWQgc2V0U2hhZG93Q29sb3IoY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKSB7IG1fc2hh
ZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsgfQotCi0gICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0
eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7
IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZWY8RkVEcm9wU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBGRURy
b3BTaGFkb3coRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
JiwgZmxvYXQpOworICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBz
dGREZXZpYXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3Bh
Y2l0eSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFRHJvcFNoYWRvdyI7IH0KKyAgICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBmbG9hdCBtX3N0ZFg7Ci0gICAgZmxvYXQgbV9zdGRZOworICAgIGZs
b2F0IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBmbG9hdCBtX3N0ZERldmlhdGlvblk7CiAgICAgZmxv
YXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwogICAgIENvbG9yIG1fc2hhZG93Q29sb3I7CiAgICAg
ZmxvYXQgbV9zaGFkb3dPcGFjaXR5OwogfTsKLSAgICAKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KK3ZvaWQgRkVEcm9wU2hhZG93OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2
aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5OworICAg
IGVuY29kZXIgPDwgbV9zaGFkb3dDb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fc2hhZG93T3BhY2l0
eTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRHJv
cFNoYWRvdz4+IEZFRHJvcFNoYWRvdzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWDsKKyAgICBkZWNvZGVyID4+IHN0ZERl
dmlhdGlvblg7CisgICAgaWYgKCFzdGREZXZpYXRpb25YKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWTsKKyAgICBk
ZWNvZGVyID4+IHN0ZERldmlhdGlvblk7CisgICAgaWYgKCFzdGREZXZpYXRpb25ZKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHg7Cisg
ICAgZGVjb2RlciA+PiBkeDsKKyAgICBpZiAoIWR4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHk7CisgICAgZGVjb2RlciA+PiBkeTsK
KyAgICBpZiAoIWR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxDb2xvcj4gc2hhZG93Q29sb3I7CisgICAgZGVjb2RlciA+PiBzaGFkb3dDb2xvcjsK
KyAgICBpZiAoIXNoYWRvd0NvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hhZG93T3BhY2l0eTsKKyAgICBkZWNvZGVyID4+IHNo
YWRvd09wYWNpdHk7CisgICAgaWYgKCFzaGFkb3dPcGFjaXR5KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCpzdGREZXZpYXRp
b25YLCAqc3RkRGV2aWF0aW9uWSwgKmR4LCAqZHksICpzaGFkb3dDb2xvciwgKnNoYWRvd09wYWNp
dHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBiNDIzNTUzNGMzOGIx
ZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi45MWE4ODU3NmQzMzVlYjFlOTA4YjQ0M2VjMmUx
OWUwZDkzMzUwNTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNTYg
KzI1LDMzIEBACiAjaW5jbHVkZSAiRkVGbG9vZC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxp
emF0aW9uLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkK
LSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENv
bG9yKGZsb29kQ29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCi17Ci19
Ci0KLVJlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVGbG9v
ZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChjb2xvciwgb3BhY2l0eSkpOwog
fQogCi1ib29sIEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX2Zsb29kQ29sb3IgPSBjb2xvcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUZs
b29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQorRkVGbG9vZDo6RkVGbG9v
ZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFRmxvb2QpCisgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikK
KyAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKLSAgICBpZiAobV9mbG9vZE9w
YWNpdHkgPT0gZmxvb2RPcGFjaXR5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9v
ZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUZsb29kOjpjYWxjdWxh
dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAog
ewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBj
b2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNp
dHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1
cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8
PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAg
ICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAg
ICB0cyA8PCAiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChtX2Zsb29kQ29sb3IpIDw8ICJcIiAiIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBtX2Zs
b29kT3BhY2l0eSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0
ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2MTczNDhlLi43YTVkY2JkMzc5MWUxODAxNjQw
NWZlOGI0MWZjODBlM2Q3YjhkYTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0MiArMjMsNjIgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVh
dGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAot
ICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9y
OyB9Ci0gICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRG
bG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2Zsb29kQ29sb3IgPSBjb2xvcjsgfQor
ICAgIHZvaWQgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkgeyBtX2Zsb29kT3Bh
Y2l0eSA9IGZsb29kT3BhY2l0eTsgfQogCi0gICAgZmxvYXQgZmxvb2RPcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mbG9vZE9wYWNpdHk7IH0KLSAgICBib29sIHNldEZsb29kT3BhY2l0eShmbG9h
dCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJl
ZjxGRUZsb29kPj4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBGRUZsb29kKGNv
bnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxv
b2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0
aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJl
Z2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAg
ICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRS
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBv
dmVycmlkZSB7IH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29u
c3QgQ29sb3ImLCBmbG9hdCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIkZFRmxvb2QiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3IgbV9mbG9vZENvbG9yOwogICAgIGZsb2F0
IG1fZmxvb2RPcGFjaXR5OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVG
bG9vZDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBt
X2Zsb29kQ29sb3I7CisgICAgZW5jb2RlciA8PCBtX2Zsb29kT3BhY2l0eTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRmxvb2Q+PiBGRUZsb29kOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmbG9v
ZENvbG9yOworICAgIGRlY29kZXIgPj4gZmxvb2RDb2xvcjsKKyAgICBpZiAoIWZsb29kQ29sb3Ip
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBmbG9vZE9wYWNpdHk7CisgICAgZGVjb2RlciA+PiBmbG9vZE9wYWNpdHk7CisgICAgaWYgKCFm
bG9vZE9wYWNpdHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
RkVGbG9vZDo6Y3JlYXRlKCpmbG9vZENvbG9yLCAqZmxvb2RPcGFjaXR5KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2Yz
NmViYjZiYmI4YWIzNjM5NDM2NS4uYmQzNGMwMmQyMTc5NjU5MGVjY2ZiYzRmNWQ5ZjIzYjczZGRj
YzIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjYsNDUwICsyNiw0MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAg
ICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0
IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxp
bmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1
cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4g
RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZp
YXRpb25ZLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRl
dGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAg
ICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8g
MiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAg
ICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAg
ICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAy
KSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFR2F1c3NpYW5CbHVyKHN0ZERldmlhdGlvblgsIHN0ZERldmlhdGlvblksIGVkZ2VNb2RlKSk7
CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxv
YXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQotICAgICwgbV9zdGRYKHgpCi0gICAgLCBtX3N0
ZFkoeSkKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCBzdGREZXZpYXRpb25Y
LCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0
ZXJFZmZlY3QoVHlwZTo6RkVHYXVzc2lhbkJsdXIpCisgICAgLCBtX3N0ZERldmlhdGlvblgoc3Rk
RGV2aWF0aW9uWCkKKyAgICAsIG1fc3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKQogICAgICwg
bV9lZGdlTW9kZShlZGdlTW9kZSkKIHsKIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNz
aWFuQmx1cjo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJs
dXIoZmlsdGVyLCB4LCB5LCBlZGdlTW9kZSkpOwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpCi17Ci0gICAgbV9zdGRYID0geDsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQotewotICAgIG1fc3RkWSA9
IHk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Ci19Ci0KLS8vIFRoaXMgZnVu
Y3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFubmVsLgotaW5saW5lIHZvaWQgYm94Qmx1
ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhD
bGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0
LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0
V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCi17Ci0g
ICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVp
bnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKLSAgICAvLyBNZW1vcnkgYWxp
Z25tZW50IGlzOiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgotICAgIGNvbnN0IGludCBjaGFubmVs
ID0gMzsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAg
ICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAgICAgICAgaW50IHN1bSA9IDA7Ci0K
LSAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1heEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGlu
ZSArIGkgKiBzdHJpZGU7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgb2Zmc2V0OwotICAgICAgICAgICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IGxpbmUgKyB4ICogc3RyaWRlICsgY2hhbm5lbDsKLSAgICAgICAgICAgIHVpbnQ4X3QqIGRz
dFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0gICAgICAgICAgICAqZHN0UHRyID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtIC8gZHgpOwotCi0gICAgICAgICAgICAvLyBTaGlmdCBr
ZXJuZWwuCi0gICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zm
c2V0OwotICAgICAgICAgICAgICAgIHN1bSAtPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0
cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsg
cmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtICs9ICpzcmNQdHI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhl
bEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0
cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwg
Ym9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgY29uc3QgaW50
IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7Ci0gICAgaWYg
KGFscGhhSW1hZ2UpCi0gICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQXJy
YXksIGRzdFBpeGVsQXJyYXksIGR4LCBkeExlZnQsIGR4UmlnaHQsIHN0cmlkZSwgc3RyaWRlTGlu
ZSwgIGVmZmVjdFdpZHRoLCBlZmZlY3RIZWlnaHQsIG1heEtlcm5lbFNpemUpOwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVpbnQ4X3Qq
IGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIC8vIENvbmNlcm5pbmcgdGhl
IGFycmF5IHdpZHRoL2xlbmd0aDogaXQgaXMgRWxlbWVudCBzaXplICsgTWFyZ2luICsgQm9yZGVy
LiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3aWxsIGJlCi0gICAgLy8gUCA9IHdpZHRoICogaGVpZ2h0
ICogY2hhbm5lbHMuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkg
ewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtUiA9
IDAsIHN1bUcgPSAwLCBzdW1CID0gMCwgc3VtQSA9IDA7Ci0KLSAgICAgICAgaWYgKGVkZ2VNb2Rl
ID09IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAg
ICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1HICs9ICpz
cmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAg
ICAgICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJs
dXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4
KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHgg
KiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBp
eGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIg
PSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8g
U2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhM
ZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIg
PSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQ
dHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAt
PSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHgg
KyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBz
cmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgaGVyZS4KLSAgICAgICAgICAgIC8v
IEdldCBlZGdlIHZhbHVlcyBmb3IgZWRnZU1vZGUgJ2R1cGxpY2F0ZScuCi0gICAgICAgICAgICBj
b25zdCB1aW50OF90KiBlZGdlVmFsdWVMZWZ0ID0gc3JjRGF0YSArIGxpbmU7Ci0gICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVSaWdodCAgPSBzcmNEYXRhICsgKGxpbmUgKyAoZWZm
ZWN0V2lkdGggLSAxKSAqIHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5l
bC4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBkeExlZnQgKiAtMTsgaSA8IGR4UmlnaHQ7ICsr
aSkgewotICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgcmlnaHQgZm9yIG5lZ2F0aXZlIHZhbHVl
cyBvZiAnaSc/Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBz
dHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IG9mZnNldDsKLQotICAgICAgICAgICAgICAgIGlmIChpIDwgMCkgewotICAgICAgICAgICAgICAg
ICAgICBzdW1SICs9IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
Kz0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFs
dWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZUxlZnRbM107
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID49IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIg
Kz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZh
bHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0
cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhl
bEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICB1aW50OF90
KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotCi0gICAgICAgICAgICAgICAg
KmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAg
ICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOwotICAgICAg
ICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0g
ICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYg
KHggPCBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBlZGdlVmFsdWVMZWZ0
WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUIgLT0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQSAtPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZz
ZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1S
IC09IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BIC09IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoeCArIGR4UmlnaHQgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
c3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBl
ZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVS
aWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
aWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNy
Y1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94Qmx1cihVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQp
Ci17Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGVmZmVjdFdpZHRoIDw9IDAgfHwgZWZmZWN0SGVpZ2h0IDw9IDAgfHwgc3RyaWRlIDw9
IDApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBtdXN0IGFsd2F5cyB1c2UgYW4gb2RkIHJhZGl1cy4KLSAgICBpZiAo
a2VybmVsU2l6ZSAlIDIgIT0gMSkKLSAgICAgICAga2VybmVsU2l6ZSArPSAxOwotCi0gICAgdklt
YWdlX0J1ZmZlciBlZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KGlvQnVmZmVyLmRhdGEoKSk7Ci0gICAgZWZmZWN0SW5CdWZmZXIud2lk
dGggPSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWln
aHQ7Ci0gICAgZWZmZWN0SW5CdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsKLSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBC
dWZmZXIuZGF0YSgpOwotICAgIGVmZmVjdE91dEJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwot
ICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0T3V0
QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzaXplIG9m
IGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBmaXJzdCB3aXRoIGEg
c3BlY2lhbCBmbGFnLiB2SW1hZ2Ugd2lsbCByZXR1cm4KLSAgICAvLyB0aGUgc2l6ZSBuZWVkZWQs
IG9yIGFuIGVycm9yICh3aGljaCBhcmUgYWxsIG5lZ2F0aXZlKS4KLSAgICBzaXplX3QgdG1wQnVm
ZmVyU2l6ZSA9IHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVm
ZmVjdE91dEJ1ZmZlciwgMCwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQgfCBrdkltYWdlR2V0VGVtcEJ1ZmZlclNpemUpOwotICAgIGlmICh0bXBCdWZm
ZXJTaXplIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIHRtcEJ1ZmZlciA9IGZh
c3RNYWxsb2ModG1wQnVmZmVyU2l6ZSk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgo
JmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5l
bFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0T3V0QnVmZmVyLCAmZWZmZWN0SW5CdWZmZXIsIHRtcEJ1
ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQp
OwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVj
dE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgV1RGOjpmYXN0RnJlZSh0bXBCdWZmZXIpOwotCi0gICAg
Ly8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIEFT
U0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0aCgpKTsKLSAgICBtZW1j
cHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkp
OwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBh
aW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAg
ICBpbnQgZHhMZWZ0ID0gMDsKLSAgICBpbnQgZHhSaWdodCA9IDA7Ci0gICAgaW50IGR5TGVmdCA9
IDA7Ci0gICAgaW50IGR5UmlnaHQgPSAwOwotICAgIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBm
cm9tQnVmZmVyID0gJmlvQnVmZmVyOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9
ICZ0ZW1wQnVmZmVyOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAg
ICAgaWYgKGtlcm5lbFNpemVYKSB7Ci0gICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJu
ZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
Ci0gICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKLSAgICAgICAgICAgICAgICBib3hCbHVy
TkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0
LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1
ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUu
d2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAg
ICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6
OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtl
cm5lbFNpemVZKSB7Ci0gICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0KTsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgICAg
ICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKLSAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJv
bUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUs
IDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2Vy
bmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCks
IHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAgICAgICAgICAg
Ym94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlz
QWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6OnN3YXAoZnJv
bUJ1ZmZlciwgdG9CdWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGZpbmFs
IHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIGlmICgmaW9CdWZmZXIg
IT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJv
bUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9t
QnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLSAgICB9Ci19Ci0KLWlubGluZSB2
b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKLXsK
LSAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0gICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChtX2VkZ2VNb2Rl
ID09IEVER0VNT0RFX05PTkUgfHwgbV9lZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7
Ci0gICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhbmRhcmRCb3hCbHVyKGlv
QnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwg
cGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7Ci19Ci0KLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCi17Ci0gICAgSW50U2l6ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBh
cmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5
R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxB
cnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBw
YWludFNpemUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBs
eShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhl
bEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNp
emUmIHBhaW50U2l6ZSkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3NpYW5LZXJuZWxGYWN0b3Io
KQogewotI2lmICFVU0UoQUNDRUxFUkFURSkKLSAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRT
aXplLndpZHRoKCk7Ci0gICAgaW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41
ZjsKLSAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBh
aW50U2l6ZS5oZWlnaHQoKSkgLyAoc19taW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0
ICogcGFpbnRTaXplLndpZHRoKCkpOwotCi0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAx
KSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBw
YXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwot
Ci0gICAgICAgIGludCBqb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAg
ICBpZiAoam9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiYmxv
Y2tIZWlnaHQiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJl
IHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8gYmxvY2tIZWlnaHQgKiBqb2Jz
IDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIg
ImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IGJsb2NrSGVpZ2h0ID0gcGFp
bnRTaXplLmhlaWdodCgpIC8gam9iczsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4
dHJhID0gcGFpbnRTaXplLmhlaWdodCgpICUgam9iczsKLQotICAgICAgICAgICAgaW50IGN1cnJl
bnRZID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IDA7IGpvYiA8IGpvYnM7IGpvYisr
KSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVy
ID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGludCBzdGFydFkgPSAham9iID8gMCA6IGN1cnJl
bnRZIC0gZXh0cmFIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9i
c1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotICAgICAgICAgICAg
ICAgIGludCBlbmRZID0gam9iID09IGpvYnMgLSAxID8gY3VycmVudFkgOiBjdXJyZW50WSArIGV4
dHJhSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZSA9IChlbmRZIC0gc3Rh
cnRZKSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGlmICgham9iKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9CdWZmZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBpeGVsQXJyYXk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9
IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVt
Y3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSwgaW9CdWZmZXIuZGF0YSgpICsgc3RhcnRZ
ICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtl
cm5lbFNpemVYID0ga2VybmVsU2l6ZVg7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNp
emVZID0ga2VybmVsU2l6ZVk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIENvcHkgdG9nZXRoZXIgdGhlIHBhcnRz
IG9mIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIGN1cnJlbnRZID0gMDsKLSAgICAgICAgICAgIGZv
ciAoaW50IGpvYiA9IDE7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9i
KTsKLSAgICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0OwotICAgICAgICAgICAgICAgIGlu
dCBkZXN0aW5hdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAg
ICAgICAgICBpbnQgYWRqdXN0ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBi
bG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnRZ
ICs9IGFkanVzdGVkQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0g
ZXh0cmFIZWlnaHQgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNl
dCA9IGN1cnJlbnRZICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVk
QmxvY2tIZWlnaHQgKiBzY2FubGluZTsKLQotICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZl
ci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgp
ICsgc291cmNlT2Zmc2V0LCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9k
ZS4KLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5
IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgcGxhdGZv
cm1BcHBseUdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJu
ZWxTaXplWSwgcGFpbnRTaXplKTsKKyAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZs
b2F0KTsKIH0KIAogc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQog
ewogICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3
b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0CiAgICAg
Ly8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29t
cGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgorICAgIHN0YXRpYyBjb25zdCBpbnQgZ01h
eEtlcm5lbFNpemUgPSA1MDA7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVk
PigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxG
YWN0b3IoKSArIDAuNWYpKSk7CiAgICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXpl
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUpKSk7CiB9Ci0gICAgCi1JbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXpl
IHN0ZERldmlhdGlvbikKKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIEFTU0VS
VChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAw
KTsKICAgICBJbnRTaXplIGtlcm5lbFNpemU7CkBAIC00ODMsMTIgKzc0LDEyIEBAIEludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQogICAgIHJldHVybiBrZXJuZWxTaXplOwogfQogCi1JbnRTaXplIEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVs
U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3Vs
YXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3Rk
RGV2aWF0aW9uKSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24gLypmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikq
Lyk7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgYXV0byBrZXJu
ZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7CiAKQEAg
LTQ5Niw3MiArODcsNDMgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0
U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorSW50T3V0c2V0cyBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9z
dGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgcmV0dXJuIHsgb3V0c2V0U2l6
ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCkgfTsKK30KIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9
IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworRmxvYXRSZWN0IEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+
aW1hZ2VSZWN0KCk7CiAgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3Qg
aW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBF
REdFTU9ERV9OT05FKSB7Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAobV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKQorICAgICAgICByZXR1cm4gaW1hZ2VSZWN0
OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQg
d2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJz
b2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwot
ICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICog
MC41Zik7CisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRy
eS5yZXNvbHZlSW1hZ2VTaXplKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSkp
OwogCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3Qu
aW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBh
aW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgorICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6
ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7CiAKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01h
eFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFR2F1
c3NpYW5CbHVyOjppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykg
Y29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsK
LQotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNp
emUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAga2VybmVsU2l6ZS5zY2FsZShm
aWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRl
clNjYWxlKCkpOwotICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1w
SW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJ
bWFnZSgpOwogfQogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QK
K0ZpbHRlckltYWdlVmVjdG9yIEZFR2F1c3NpYW5CbHVyOjp0YWtlSW5wdXRzKEZpbHRlckltYWdl
VmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxh
dGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsgb3V0c2V0U2l6
ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCkgfTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlR2F1c3NpYW5CbHVyIjsKLSAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
LSAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRYIDw8ICIsICIgPDwgbV9zdGRZ
IDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGREZXZpYXRp
b25YIDw8ICIsICIgPDwgbV9zdGREZXZpYXRpb25ZIDw8ICJcIl1cbiI7CiAgICAgcmV0dXJuIHRz
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFh
YTE3NjQ3Y2JiMmQzZS4uMGU4ZTQ5ZDc4ZGEyNmQzY2ViNWZkZGI4ZWVjOTNjMTc2NGEyN2U3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiw2NCArMjMsNzMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5C
bHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdh
dXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxv
YXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgRWRnZU1vZGVUeXBlKTsKIAot
ICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2
b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChm
bG9hdCBzdGREZXZpYXRpb25YKSB7IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlhdGlvblg7IH0K
KyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkgeyBtX3N0ZERl
dmlhdGlvblkgPSBzdGREZXZpYXRpb25ZOyB9CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyB9CiAKLSAgICBmbG9hdCBz
dGREZXZpYXRpb25ZKCkgY29uc3QgeyByZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGRE
ZXZpYXRpb25ZKGZsb2F0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxj
dWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwor
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBz
dGREZXZpYXRpb24pOwogCi0gICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9lZGdlTW9kZTsgfQotICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKLQot
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxv
YXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXpl
IGNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUdhdXNzaWFuQmx1
cj4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmls
dGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KLQotICAg
IHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8g
RW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBGRUdhdXNzaWFuQmx1
cihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUp
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxs
ZWxKb2JzOworICAgIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVz
c2lhbkJsdXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1Bp
eGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJh
eTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNp
Z25lZCBrZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsK
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLQotICAgIGZsb2F0IG1fc3Rk
WDsKLSAgICBmbG9hdCBtX3N0ZFk7CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25YOworICAgIGZs
b2F0IG1fc3RkRGV2aWF0aW9uWTsKICAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKIH07CiAK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFR2F1c3NpYW5CbHVyOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWDsK
KyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8IG1fZWRnZU1v
ZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUdh
dXNzaWFuQmx1cj4+IEZFR2F1c3NpYW5CbHVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25YOworICAgIGRlY29kZXIgPj4g
c3RkRGV2aWF0aW9uWDsKKyAgICBpZiAoIXN0ZERldmlhdGlvblgpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25ZOwor
ICAgIGRlY29kZXIgPj4gc3RkRGV2aWF0aW9uWTsKKyAgICBpZiAoIXN0ZERldmlhdGlvblkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEVkZ2VNb2Rl
VHlwZT4gZWRnZU1vZGU7CisgICAgZGVjb2RlciA+PiBlZGdlTW9kZTsKKyAgICBpZiAoIWVkZ2VN
b2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFR2F1c3Np
YW5CbHVyOjpjcmVhdGUoKnN0ZERldmlhdGlvblgsICpzdGREZXZpYXRpb25ZLCAqZWRnZU1vZGUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRUdhdXNzaWFuQmx1cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjg4M2Q2YzVmYTJkZjE4N2JlMmFkOTgx
ZGZlNDc4M2VhYmExZTI1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsMzMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYgZmls
dGVyLCBMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291
cmNlLCBUeXBlIHR5cGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCB0eXBlKQotICAgICwg
bV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9saWdodFNvdXJjZShXVEZNb3Zl
KGxpZ2h0U291cmNlKSkKLSAgICAsIG1fbGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQorRkVM
aWdodGluZzo6RkVMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlLCBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkK
KyAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1f
c3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1
c2VDb25zdGFudCkKICAgICAsIG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQog
ICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5l
bFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3Ro
WShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsK
IH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxl
KQorRmxvYXRSZWN0IEZFTGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3VyZmFjZVNjYWxl
ID09IHN1cmZhY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zdXJmYWNl
U2NhbGUgPSBzdXJmYWNlU2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdo
dGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKLXsKLSAg
ICBpZiAobV9saWdodGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2Vy
bmVsVW5pdExlbmd0aFgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5p
dExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSkKLXsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3RleHByIGlu
dCBjUGl4ZWxTaXplID0gNDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZz
ZXQgPSAzOwotc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDB4RkYpOwotCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNv
ZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25z
dGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjQgPSAtMSAvIDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYz
ID0gLTIgLyAzLmY7Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICog
Y2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICog
Y2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
b2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0
b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIgKiBs
ZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9t
UmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0y
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIg
KyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07CisgICAgcmV0dXJuIGdl
b21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBv
ZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9y
IEZFTGlnaHRpbmc6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAog
ewotICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQ7Ci0gICAgCi0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSkpOwotCi0gICAgaW50IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExl
ZnQgPSBhbHBoYVdpbmRvdy50b3BMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRv
cCgpOwotCi0gICAgaW50IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0g
ICAgaW50IGJvdHRvbSA9IGFscGhhV2luZG93LmJvdHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhh
V2luZG93IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNv
bHVtbi4KLSAgICBhbHBoYVdpbmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhh
V2luZG93LmFscGhhWzFdWzJdID0gcmlnaHQ7Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0g
PSBib3R0b21SaWdodDsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBp
cyB3b3JraW5nIHdpdGggc29tZSBzcG90LWNoZWNrcy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cu
dG9wTGVmdCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAg
ICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQot
ICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIg
KiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAy
ICogdG9wIC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpy
aWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9w
IC0gMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAg
LXRvcExlZnQgLSAyICogdG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQot
Ci1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICog
Y2VudGVyICsgMiAqIHJpZ2h0LAotICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNl
bnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQg
cmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdo
dCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNl
bnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGlu
dCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9m
ZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAg
ICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExl
ZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKLSAgICB9OwotfQotCi12b2lkIEZFTGln
aHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17
Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
ZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFs
cGhhKQotewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExp
Z2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291
cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQot
ICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygp
KSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVp
dGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRp
bmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1
c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2lu
dDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgp
LAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGlu
Z0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9h
dCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAg
ICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5
VmVjdG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFs
ZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAg
ICBmYWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAot
ICAgICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJm
YWNlU2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5v
cm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAo
bV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndh
eVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3Vs
YXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAg
IGxpZ2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxp
Z2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5j
b2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+
c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKLX0KLQotLy8gVGhpcyBhcHBlYXJzIHRv
IHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25s
eSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5u
ZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZ
IGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4K
LSAgICBBU1NFUlQoc3RhcnRZKTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBm
b3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFy
dE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBp
bnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0
ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdp
bmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0
aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBj
ZW50ZXIgY29sdW1uLgotICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCBy
b3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cg
YWxwaGFXaW5kb3c7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRl
bShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBo
YVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRv
dy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5p
dGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJv
d1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRC
b3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9m
ZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0
aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAg
ICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQs
IGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNl
bnRlcigpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
aW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVy
cy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCByb3dzVG9Q
cm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7Ci0gICAgdW5zaWduZWQgbWF4
TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJl
YWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUg
LSAxKSAqIHJvd3NUb1Byb2Nlc3MpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhy
ZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIC8vIElu
aXRpYWxpemUgcGFyYWxsZWwgam9icwotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9y
bUFwcGx5R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBh
cmFtZXRlciBhcnJheQotICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9i
cygpOwotICAgICAgICBpZiAoam9iID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpv
YiBpbnRvICJ5U3RlcCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQg
dG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMg
PCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAi
am9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9j
ZXNzIC8gam9iOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Q
cm9jZXNzICUgam9iOwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAgICAgICAgICAg
IGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihq
b2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdE
YXRhID0gcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3Rh
cnQ7Ci0gICAgICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3Rl
cCArIDEgOiB5U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUuCi0gICAgfQotCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRh
LCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUpOwotfQotCi1pbmxp
bmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAg
IC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2Fs
bHkgb24gc29tZSBwbGF0Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJ
VElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVv
bihkYXRhLCBwYWludGluZ0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhk
YXRhLCBwYWludGluZ0RhdGEpOwotI2VuZGlmCi19Ci0KLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
LXsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdo
dGluZ0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3Ig
aGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90
IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAo
d2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNl
U2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdp
ZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAt
IDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29s
b3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFs
TGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwotCi0gICAg
bV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKLQot
ICAgIC8vIFRvcCBsZWZ0LgotICAgIGludCBvZmZzZXQgPSAwOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gVG9wIHJpZ2h0LgotICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFs
KG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAg
c2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3Jt
YWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMs
IGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICBpZiAod2lkdGggPj0gMykg
ewotICAgICAgICAvLyBUb3Agcm93LgotICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBv
ZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BS
b3dOb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gQm90dG9tIHJvdy4KLSAgICAgICAgb2Zm
c2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAg
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dO
b3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7Ci0gICAgICAg
IC8vIExlZnQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUp
Ci0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwg
Y0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQp
KTsKLQotICAgICAgICAvLyBSaWdodCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IDIgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChp
bnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0Zh
Y3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7
Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKLSAgICAgICAg
Ly8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBhaW50aW5n
RGF0YSk7Ci0gICAgfQotCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VM
aWdodGluZykgewotICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8
IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNl
dChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3Qg
YTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRh
LnBpeGVscy0+aXRlbShpICsgMSk7Ci0gICAgICAgICAgICB1aW50OF90IGEzID0gZGF0YS5waXhl
bHMtPml0ZW0oaSArIDIpOwotICAgICAgICAgICAgLy8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgo
YTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEy
ID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7
Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11
bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0
TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwot
ICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93
c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91
cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUu
Ci0gICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1w
bGVtZW50YXRpb24KLQotICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5
LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VM
YXN0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCAwZmZm
Y2QwNjQzOTZkOGY0YjY0MDgyMjY5Y2MyMDc0ZjdjOWRiZGJjLi5hMWZkYzMzMDQwMDYyMGI1YmQy
OTc3ZThlMjg0ZDA2YTA4YjlkYzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3LDE0MiArMjgsMTA0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAi
TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8v
IENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxp
Z2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGlu
Z0RhdGFGb3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQotCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNl
U2NhbGU7IH0KLSAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CisgICAgdm9pZCBzZXRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisgICAgdm9pZCBz
ZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3Vy
ZmFjZVNjYWxlOyB9CisgICAgdm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNv
bnN0YW50KSB7IG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OyB9CiAKLSAgICBj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xv
cjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQg
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3VsYXJD
b25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxh
ckV4cG9uZW50OyB9CiAKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhY
KGZsb2F0KTsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYKSB7IG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsgfQorICAg
IHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpIHsgbV9r
ZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOyB9CiAKLSAgICBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KLSAg
ICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKKyAgICBjb25zdCBMaWdodFNvdXJj
ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KIAotICAgIGNvbnN0IExpZ2h0
U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7
IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2RlciwgY2xhc3MgQ2xhc3NOYW1lPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8Q2xhc3NOYW1lPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVu
dW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVj
dWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAg
ICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBp
bXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFz
aWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQo
KSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4
X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0g
ICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhh
WzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsg
cmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1
ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2Vu
dGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAg
ICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFs
dWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFs
cGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVl
KSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9t
UmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAg
IHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhh
WzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3co
YWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVj
dHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAg
ICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERl
Y3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5k
b3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7
Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlF
bmQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2Vy
KFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAg
ICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5
cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRUxpZ2h0aW5nIjsgfQotCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJy
YXkmLCBpbnQsIGludCk7Ci0KLSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50
IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsK
LSAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQg
ZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhh
KTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSYpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQg
c3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lm
IENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NP
TVBBVElCTEUpCi0gICAgc3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBv
bmVudCk7Ci0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdE
YXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBM
aWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0
U291cmNlOwotCi0gICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOworICAgIEZFTGlnaHRpbmcoY29u
c3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmLCBGaWx0
ZXJFZmZlY3Q6OlR5cGUpOworCisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZp
bHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgQ29sb3IgbV9jb2xvcjsKICAgICBmbG9hdCBtX3N1cmZh
Y2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1
bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1f
a2VybmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBM
aWdodFNvdXJjZSBtX3NvdXJjZTsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFTGlnaHRpbmc6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1f
c3VyZmFjZVNjYWxlOworICAgIGVuY29kZXIgPDwgbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAgZW5j
b2RlciA8PCBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAgZW5jb2RlciA8PCBtX3NwZWN1bGFyRXhw
b25lbnQ7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYOworICAgIGVuY29kZXIg
PDwgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBlbmNvZGVyIDw8IG1fc291cmNlOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyLCBjbGFzcyBDbGFzc05hbWU+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxDbGFzc05hbWU+PiBGRUxpZ2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAg
IGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzdXJmYWNlU2NhbGU7CisgICAgZGVjb2RlciA+PiBzdXJmYWNlU2NhbGU7
CisgICAgaWYgKCFzdXJmYWNlU2NhbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAgZGVjb2RlciA+
PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAgaWYgKCFkaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzcGVjdWxhckNv
bnN0YW50OworICAgIGRlY29kZXIgPj4gc3BlY3VsYXJDb25zdGFudDsKKyAgICBpZiAoIXNwZWN1
bGFyQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzcGVjdWxhckV4cG9uZW50OworICAgIGRlY29kZXIgPj4gc3BlY3VsYXJF
eHBvbmVudDsKKyAgICBpZiAoIXNwZWN1bGFyRXhwb25lbnQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBrZXJuZWxVbml0TGVuZ3RoWDsK
KyAgICBkZWNvZGVyID4+IGtlcm5lbFVuaXRMZW5ndGhYOworICAgIGlmICgha2VybmVsVW5pdExl
bmd0aFgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBrZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBkZWNvZGVyID4+IGtlcm5lbFVuaXRMZW5n
dGhZOworICAgIGlmICgha2VybmVsVW5pdExlbmd0aFkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPExpZ2h0U291cmNlPiBzb3VyY2U7CisgICAgZGVj
b2RlciA+PiBzb3VyY2U7CisgICAgaWYgKCFzb3VyY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4gQ2xhc3NOYW1lOjpjcmVhdGUoKmNvbG9yLCAqc3VyZmFjZVNj
YWxlLCAqZGlmZnVzZUNvbnN0YW50LCAqc3BlY3VsYXJDb25zdGFudCwgKnNwZWN1bGFyRXhwb25l
bnQsICprZXJuZWxVbml0TGVuZ3RoWCwgKmtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKCpzb3Vy
Y2UpKTsKK30KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIx
NzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uNGI0Njk1NTAyNjVlZDI1YTVjMDM3NzNk
Y2RmMTNjOGVlODFmYTkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsMzggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRU1lcmdlOjpGRU1lcmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6TWVyZ2UpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKHVuc2lnbmVk
IG51bWJlck9mRWZmZWN0SW5wdXRzKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVy
Z2UobnVtYmVyT2ZFZmZlY3RJbnB1dHMpKTsKIH0KIAotUmVmPEZFTWVyZ2U+IEZFTWVyZ2U6OmNy
ZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZFTWVyZ2U6OkZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZF
ZmZlY3RJbnB1dHMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVNZXJnZSkKKyAgICAsIG1f
bnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVm
ZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K0ZpbHRlckltYWdlVmVjdG9yIEZFTWVyZ2U6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdAogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSBt
X251bWJlck9mRWZmZWN0SW5wdXRzKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFZlY3RvcjxSZWY8RmlsdGVySW1hZ2U+PiBpbnB1dHM7CisgICAgZm9y
IChhdXRvIGlucHV0c1NpemUgPSBtX251bWJlck9mRWZmZWN0SW5wdXRzOyBpbnB1dHNTaXplLS07
ICkKKyAgICAgICAgaW5wdXRzLmFwcGVuZChzdGFjay50YWtlTGFzdCgpKTsKIAotCi0gICAgR3Jh
cGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgfQorICAgIHJldHVybiBpbnB1dHM7CiB9CiAK
LVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwot
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFT
U0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJc
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZl
Y3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0
cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3
YjAxOTRlYmNmMThmMjYwNy4uYjEwMzFmMDQ5NjQ5YThhMzFlOTU2MTRmOGQ1ZmI2M2ZkODRlYjc0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIyLDIzICsyMyw0NSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU1lcmdlPiBjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU1l
cmdlPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYp
OworICAgIEZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQor
ICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0
IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBGRU1lcmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU1lcmdlPj4gRkVNZXJnZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbnVtYmVyT2ZFZmZl
Y3RJbnB1dHM7CisgICAgZGVjb2RlciA+PiBudW1iZXJPZkVmZmVjdElucHV0czsKKyAgICBpZiAo
IW51bWJlck9mRWZmZWN0SW5wdXRzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgcmV0dXJuIEZFTWVyZ2U6OmNyZWF0ZSgqbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VG
RkVDVChGRU1lcmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5
MGUzODM4NjM5MzU2MmI5ZDhkZjUuLjAwMGY5YzM1M2Y0ZmVmZTRiNGJlNTY5ODRlMGExMjg0ZDFm
ZWFjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjY1ICsyNSw1MCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25l
bnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVN
b3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIFR5cGU6Ok1vcnBob2xvZ3kpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAs
IG1fcmFkaXVzWChyYWRpdXNYKQotICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCi17Ci19Ci0KLVJl
ZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFk
aXVzWCwgcmFkaXVzWSkpOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9w
ZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV90eXBlID09
IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWChmbG9hdCByYWRp
dXNYKQotewotICAgIGlmIChtX3JhZGl1c1ggPT0gcmFkaXVzWCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fcmFkaXVzWCA9IHJhZGl1c1g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgaWYgKG1f
cmFkaXVzWSA9PSByYWRpdXNZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNZ
ID0gcmFkaXVzWTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
aW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIg
PSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlw
c1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3
aWR0aCkKLXsKLSAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKLX0KLQotaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFs
dWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGFzU1JHQkEocGl4ZWwpKTsKLX0KLQotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGNvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFr
ZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OwotfQotCi10ZW1w
bGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYikKLXsKLSAgICBp
ZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBw
ZXJDb21wb25lbnRNaW4oYSwgYik7Ci0KLSAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIp
OwotfQotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5M
SU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5k
LCBpbnQgd2lkdGgpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNm
cm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0
YXJ0LCB3aWR0aCkpIH0pOwotCi0gICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5k
OyArK3kpIHsKLSAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4
ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgp
KSB9KTsKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwp
OwotICAgIH0KLSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0
aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3Jw
aG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKIHsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lk
dGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9E
SUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2lu
ZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+
OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5F
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5F
eHRyZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVt
dW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBl
eHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
a2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAg
Y29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsK
LSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5Owot
Ci0gICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25z
dCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0
aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdE
YXRhLmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0g
aGVpZ2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3Rh
cnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5
ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBz
dGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjpt
aW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDAp
OwotCi0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0
cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11
bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5
cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0
IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAg
ICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEu
YXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVz
U3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHgg
PiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRz
dFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAg
ICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtl
cm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neShtb3JwaG9sb2d5T3BlcmF0b3Is
IHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQorRkVNb3JwaG9sb2d5OjpG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQg
cmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1vcnBo
b2xvZ3kpCisgICAgLCBtX21vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IpCisg
ICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewotICAg
IHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRh
LCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmxvYXRSZWN0
IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRp
bWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3
aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0
KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0
c1swXS0+aW1hZ2VSZWN0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0g
KDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0g
ICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4
OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
KHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3Ip
IC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+
IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQg
am9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2Vy
IHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNl
IGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAg
ICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFk
czsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAl
IG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsK
LSAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXpl
OwotICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAg
fQorICAgIGltYWdlUmVjdC5pbmZsYXRlKGdlb21ldHJ5LnJlc29sdmVJbWFnZVNpemUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGlu
Z0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlw
VG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwog
fQogCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFt
cGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKQorYm9vbCBGRU1vcnBob2xvZ3k6OmlzQWxwaGFJbWFnZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIGlmIChyYWRpdXNYIDwg
MCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU1vcnBob2xv
Z3k6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRT
aXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFw
cGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBy
YWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJl
c29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBz
dGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwot
ICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAx
LCByYWRpdXMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsK
LSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7
Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5
OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRo
KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNl
aWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Cisg
ICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0
KCkgfTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3Jw
aG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChtb3Jw
aG9sb2d5T3BlcmF0b3IpIHsKICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dO
OgogICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk3LDE1ICs4
MiwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4
dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFt
JiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTW9y
cGhvbG9neSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9w
ZXJhdG9yKCkgPDwgIlwiICIKLSAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwg
IiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNj
b3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8
IG1fbW9ycGhvbG9neU9wZXJhdG9yIDw8ICJcIiAiIDw8ICJyYWRpdXM9XCIiIDw8IG1fcmFkaXVz
WCA8PCAiLCAiIDw8IG1fcmFkaXVzWSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWEx
MS4uNzZjOWU2ODE0MjYwNTQ1MTMzNWU2ZWRlMjExZTFjNzA2ZjVhMzVhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwxMSArMjMsMTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKK2VudW0gTW9ycGhvbG9neU9wZXJhdG9yIHsKICAgICBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFID0gMSwKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgpAQCAt
MzQsNTUgKzM0LDc2IEBAIGVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZF
TW9ycGhvbG9neSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwg
ZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9s
b2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICB2b2lkIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKSB7IG1f
bW9ycGhvbG9neU9wZXJhdG9yID0gbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAgdm9pZCBzZXRS
YWRpdXNYKGZsb2F0IHJhZGl1c1gpIHsgbV9yYWRpdXNYID0gcmFkaXVzWDsgfQorICAgIHZvaWQg
c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKSB7IG1fcmFkaXVzWSA9IHJhZGl1c1k7IH0KIAotICAg
IGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KLSAgICBib29sIHNl
dFJhZGl1c1goZmxvYXQpOwotCi0gICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFkaXVzWTsgfQotICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU1vcnBob2xvZ3k+PiBkZWNv
ZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVNb3JwaG9sb2d5IjsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUlt
YWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZpbHRl
ckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJh
ZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkq
IHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5
OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCBy
YWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OworICAgIE1vcnBob2xvZ3lPcGVy
YXRvciBtX21vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBmbG9hdCBtX3JhZGl1c1g7CisgICAgZmxv
YXQgbV9yYWRpdXNZOworfTsKIAotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7
Ci0gICAgICAgIEZFTW9ycGhvbG9neSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAg
ICAgICBpbnQgZW5kWTsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7
Ci0gICAgfTsKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFTW9ycGhvbG9neTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX21vcnBob2xv
Z3lPcGVyYXRvcjsKKyAgICBlbmNvZGVyIDw8IG1fcmFkaXVzWDsKKyAgICBlbmNvZGVyIDw8IG1f
cmFkaXVzWTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVm
PEZFTW9ycGhvbG9neT4+IEZFTW9ycGhvbG9neTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgc3RkOjpvcHRpb25hbDxNb3JwaG9sb2d5T3BlcmF0b3I+IG1vcnBob2xvZ3lPcGVyYXRv
cjsKKyAgICBkZWNvZGVyID4+IG1vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBpZiAoIW1vcnBob2xv
Z3lPcGVyYXRvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IHJhZGl1c1g7CisgICAgZGVjb2RlciA+PiByYWRpdXNYOworICAgIGlmICgh
cmFkaXVzWCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IHJhZGl1c1k7CisgICAgZGVjb2RlciA+PiByYWRpdXNZOworICAgIGlmICghcmFk
aXVzWSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRU1vcnBo
b2xvZ3k6OmNyZWF0ZSgqbW9ycGhvbG9neU9wZXJhdG9yLCAqcmFkaXVzWCwgKnJhZGl1c1kpOwor
fQogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFy
YW1ldGVycyopOworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworbmFtZXNwYWNlIFdU
RiB7CiAKLSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKLSAgICBmbG9hdCBtX3Jh
ZGl1c1g7Ci0gICAgZmxvYXQgbV9yYWRpdXNZOwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpNb3JwaG9sb2d5T3BlcmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpNb3JwaG9sb2d5T3BlcmF0b3IsCisKKyAgICAgICAg
V2ViQ29yZTo6RkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6
OkZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSwKKyAgICAgICAgV2ViQ29yZTo6RkVNT1JQSE9M
T0dZX09QRVJBVE9SX0RJTEFURQorICAgID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cit9IC8vIG5hbWVzcGFjZSBXVEYKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFTW9ycGhvbG9neSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5
MTdjMmQ2NWFhNDE0MGY2OS4uNjEyMjE4MmI4M2E2MWFhY2I5NmViYTg2MTU3ZjMzNjdmOTM2MTU3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCw3MSArMjUsNTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU9m
ZnNldC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFT2Zmc2V0OjpGRU9mZnNldChG
aWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBk
eSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAg
ICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6
OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9m
ZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9h
dFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIG1fZHggPSBkeDsKLX0KKyAgICBB
U1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1sw
XS0+aW1hZ2VSZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQotewotICAg
IG1fZHkgPSBkeTsKKyAgICBpbWFnZVJlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlSW1hZ2VTaXpl
KHsgbV9keCwgbV9keSB9KSk7CisKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0
aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBG
RU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorYm9vbCBGRU9mZnNldDo6aXNB
bHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1v
dmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAg
IGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RS
ZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKLXZvaWQg
RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU9m
ZnNldDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciog
aW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
IHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGlu
LT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24p
OworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CitUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVPZmZzZXQiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwi
IGR5PVwiIiA8PCBkeSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIGR4PVwiIiA8PCBtX2R4IDw8
ICJcIiBkeT1cIiIgPDwgbV9keSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLjFhYWFlZGJj
OGFjMGI5ZmJjZmUwOTVhZTUxNmMzMGY3NWZhMjA1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw1OSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgZmxvYXQgZHgo
KSBjb25zdCB7IHJldHVybiBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9p
ZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KKyAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9
Ci0gICAgdm9pZCBzZXREeShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHBy
aXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBG
RU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFj
aykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2Um
IG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9OwogCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwgbV9k
eTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zm
c2V0Pj4gRkVPZmZzZXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5Owor
ICAgIGRlY29kZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggNTk5NzIzMDY4
ODZhNjNmYTQxMmI1YjcxNDFmNzRmOWM0ODdhMTQ0Yy4uNDI0OWEzN2E0N2RiZTUzZmUwNWQwZDI1
ZWQxOTBjY2U3OTZmZjk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDkgKzIz
LDMxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVTcGVjdWxhckxpZ2h0aW5n
LmgiCiAKLSNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZF
U3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5n
KGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAw
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxp
Z2h0aW5nKQorUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7CisgICAg
cmV0dXJuIGNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBz
cGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUoc291cmNlKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJM
aWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGln
aHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbG9yLCBzdXJm
YWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBv
bmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJj
ZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBk
ZWZhdWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChm
bG9hdCBzcGVjdWxhckNvbnN0YW50KQorRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGln
aHRpbmcoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdo
dFNvdXJjZSYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwg
ZGlmZnVzZUNvbnN0YW50LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6
RkVTcGVjdWxhckxpZ2h0aW5nKQogewotICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3Bl
Y3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJF
eHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxh
ckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1f
c3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNi
MjQ5NThhLi40ZGJhYjQ0YjliMmFmMWFlNTQzYThjZjk0MzM1NWQ1ZDNlODQ3ZmE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3Vy
Y2UmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291
cmNlJiYpOwogCi0gICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3BlY3VsYXJDb25zdGFudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7
Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxh
ckV4cG9uZW50OyB9Ci0gICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKLQotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0
ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmKTsKKworICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPj4gRkVTcGVjdWxhckxp
Z2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGlu
Zzo6ZGVjb2RlPERlY29kZXIsIEZFU3BlY3VsYXJMaWdodGluZz4oZGVjb2Rlcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFl
N2RjYTBjNWRiMmZjYWMyMGFkLi4yNzNhZTE3YzI3ODQ2Zjk5MjkzZTNmZjlmOWZjNTNmOGRlNTcw
NzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBB
bGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIxLDgwICsyMiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
VGlsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgot
I2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZp
bHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK1Jl
ZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RVRpbGUoKSk7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
KQorRkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVGlsZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVU
aWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFVGlsZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsK
LS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBh
IGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdl
KGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBh
dHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0
aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBw
YXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0
IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZm
ZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZm
ZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZp
bHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAg
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBm
aWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0
ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQo
KSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRl
eHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0
ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0g
ICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7Ci0gICAg
aWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1h
eEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOwotCi0gICAgYXV0byBwYXR0ZXJu
ID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVl
LCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmaWx0ZXJDb250ZXh0LnNl
dEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KyAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3MgZHJhd2luZ1JlY3QgZm9yIDxmZVRpbGU+Lgor
ICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKIH0KIAotVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0Citib29s
IEZFVGlsZTo6aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNv
bnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
XVxuIjsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKK30KIAotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworRmlsdGVySW1h
Z2VWZWN0b3IgRkVUaWxlOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29u
c3QKK3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2su
dGFrZUxhc3QoKSB9OworfQogCitUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAoreworICAg
IHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZV1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRl
eCA0OWJkOTlmMDk0NDdkYWUxY2YwOWFmMTIzNThjNmRlODQwNjg3NzE0Li43YmUyNWUyODFkNTM0
Y2FhYTNmOGJlYmU1YTMwZDU2NDFiYjk0MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI3ICsyMywyNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXImKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAKIHByaXZh
dGU6Ci0gICAgRkVUaWxlKEZpbHRlciYpOworICAgIEZFVGlsZSgpOwogCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CisgICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9Cisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRl
OworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0
YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4
RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVS
X0VGRkVDVChGRVRpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYWMyMzQ2ZThhNGJhNThhYWE5
MjRhNmQ2N2JkNWU0Yjc3ZGQyMjY4Zi4uN2EzYmQ4ZjFmZTk3NGY4NmI2NDFkMjU3NDY0OWM2MmNh
OGM5ZGViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwzMSArMjYsMTkgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnku
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAy
XS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1w
bGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0
NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMx
IG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNo
b3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBn
ZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNv
bnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1h
eGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5k
QW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBj
b25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19y
YW5kUiA9IDI4MzY7IC8vIG0gJSBhCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNy
ZWF0ZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJl
cXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7
Cit9CiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKLSAgICAsIG1fdHlwZSh0eXBlKQor
RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUs
IGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2
ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVUdXJidWxlbmNlKQorICAgICwgbV90dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkK
ICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVx
dWVuY3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBA
IC01OSw0MDUgKzQ3LDkgQEAgRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0
ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWUKIHsKIH0KIAotUmVmPEZF
VHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVu
Y2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwg
aW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwotfQot
Ci1ib29sIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxlbmNlVHlwZSB0eXBlKQotewotICAg
IGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9
IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNl
RnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKLXsKLSAgICBpZiAobV9iYXNlRnJlcXVl
bmN5WSA9PSBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFz
ZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQot
ewotICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYID09IGJhc2VGcmVxdWVuY3lYKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVk
KQotewotICAgIGlmIChtX3NlZWQgPT0gc2VlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fc2VlZCA9IHNlZWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNl
OjpzZXROdW1PY3RhdmVzKGludCBudW1PY3RhdmVzKQotewotICAgIGlmIChtX251bU9jdGF2ZXMg
PT0gbnVtT2N0YXZlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbnVtT2N0YXZlcyA9
IG51bU9jdGF2ZXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKLXsKLSAgICBpZiAobV9zdGl0Y2hUaWxlcyA9PSBz
dGl0Y2gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0aXRjaFRpbGVzID0gc3RpdGNo
OwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBj
b2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEg
c3BlY2lmaWNhdGlvbjoKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRt
bCNmZVR1cmJ1bGVuY2UKLQotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGlu
ZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcg
cmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAo
c2VlZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9
IHNfcmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gdCAq
IHQgKiAoMyAtIDIgKiB0KTsKLX0KLQotaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24o
ZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEp
OwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQotewotICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0KLSAgICAvLyBUaGUg
c2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KLSAg
ICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQg
PSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlm
IChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQotICAgICAgICBwYWludGlu
Z0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOwotCi0gICAgZmxvYXQqIGdyYWRpZW50Owot
ICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgewotICAgICAgICAgICAg
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7Ci0gICAgICAgICAgICBncmFkaWVu
dCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRp
bmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19i
bG9ja1NpemU7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tT
aXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYm
ICFncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpo
eXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgZ3JhZGllbnRbMF0g
Lz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1h
bGl6YXRpb25GYWN0b3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gc19i
bG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9t
KCkgJSBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VS
VChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwotICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV07Ci0gICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsg
KytjaGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
c19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsw
XTsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6
ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1GRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpj
b21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdAotewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGZsb2F0IHRpbGVXaWR0aCA9IHRpbGVTaXplLndp
ZHRoKCk7Ci0gICAgZmxvYXQgdGlsZUhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpOwotICAgIEFT
U0VSVCh0aWxlV2lkdGggPiAwICYmIHRpbGVIZWlnaHQgPiAwKTsKLQotICAgIC8vIFdoZW4gc3Rp
dGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVk
Ci0gICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KLSAg
ICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxv
b3JmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgZmxv
YXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRp
bGVXaWR0aDsKLSAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZl
IGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WCAv
IGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAg
ICAgIGJhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBiYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotICAgIGlmIChiYXNl
RnJlcXVlbmN5WSkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGhpZ2hG
cmVxdWVuY3kgPSBjZWlsZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdo
dDsKLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1
ZW5jeSAvIGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBsb3dG
cmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gaGln
aEZyZXF1ZW5jeTsKLSAgICB9Ci0KLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgc3Rp
dGNoRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAg
c3RpdGNoRGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwotICAg
IHN0aXRjaERhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7
Ci0gICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdo
dDsKLQotICAgIHJldHVybiBzdGl0Y2hEYXRhOwotfQotCi0vLyBUaGlzIGlzIHRha2VuIDE6MSBm
cm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVU
dXJidWxlbmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNl
Ojpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hE
YXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKLXsK
LSAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7Ci0gICAgICAgIGludCBpbmRleDsgLy8gYngwLCBi
eTAgaW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgaW50IG5leHRJbmRleDsgLy8gYngxLCBieTEg
aW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgZmxvYXQgZnJhY3Rpb247IC8vIHJ4MCwgcnkwIGlu
IHRoZSBzcGVjIHRleHQuCi0KLSAgICAgICAgTm9pc2VQb3NpdGlvbihmbG9hdCBjb21wb25lbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vICB0ID0gdmVjWzBdICsgUGVybGluTjsKLSAgICAg
ICAgICAgIC8vICBieDAgPSAoaW50KXQ7Ci0gICAgICAgICAgICAvLyAgYngxID0gYngwKzE7Ci0g
ICAgICAgICAgICAvLyAgcngwID0gdCAtIChpbnQpdDsKLSAgICAgICAgICAgIGZsb2F0IHBvc2l0
aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIGluZGV4ID0gc3Rh
dGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleCAr
IDE7Ci0gICAgICAgICAgICBmcmFjdGlvbiA9IHBvc2l0aW9uIC0gaW5kZXg7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc3RpdGNoKGludCBzaXplLCBpbnQgd3JhcFNpemUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIChieDAgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkK
LSAgICAgICAgICAgIC8vICAgYngwIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAg
ICBpZiAoaW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgaW5kZXggLT0gc2l6ZTsK
LQotICAgICAgICAgICAgLy8gaWYgKGJ4MSA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAg
ICAgICAgLy8gICBieDEgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChu
ZXh0SW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgbmV4dEluZGV4IC09IHNpemU7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVgobm9pc2VWZWN0
b3IueCgpKTsKLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lzZVZlY3Rvci55KCkpOwotCi0g
ICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0g
ICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRh
LndpZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hE
YXRhLmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJN
OwotICAgIC8vIGJ4MSAmPSBCTTsKLSAgICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJN
OwotICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4
ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2Vs
ZWN0b3JbYngwXTsKLSAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBs
YXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07
Ci0gICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9y
W25vaXNlWC5uZXh0SW5kZXhdOwotCi0gICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsK
LSAgICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3Ro
Q3VydmUobm9pc2VYLmZyYWN0aW9uKTsKLSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNl
WS5mcmFjdGlvbik7Ci0KLSAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5l
bCkgewotICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAg
IGludCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5v
aXNlWS5pbmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAw
XTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0g
bm9pc2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAg
ICAgLy8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5p
bmRleF07Ci0gICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3Jh
ZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwot
ICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAg
IGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9u
ICogcVsxXTsKLSAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBh
ID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxh
dHRpY2VTZWxlY3RvcltpICsgYnkxXTsKLSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAg
IC8vIHJ5MSA9IHJ5MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hh
bm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJh
Y3Rpb24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAv
LyBiMTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJ
bmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9
IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW2IxMV07Ci0gICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBx
WzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAo
c3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwg
dik7Ci0KLSAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4g
bGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0g
ICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAot
ICAgICAgICBub2lzZUZvckNoYW5uZWwoMiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQot
ICAgIH07Ci19Ci0KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
VHVyYnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21w
b25lbnRzLgotLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWlu
dDg+PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KLXN0YXRpYyBpbmxp
bmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQorRmxvYXRS
ZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6OmNs
YW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwg
MCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZs
b2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUp
LAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21w
b25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OwotfQotCi1Db2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBDb2xvckNvbXBvbmVudHM8
ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKLSAgICBGbG9hdFBvaW50IG5vaXNl
VmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgp
ICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0g
ICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkg
ewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0g
ICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0Rh
dGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwotCi0gICAgICAgIG5vaXNl
VmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNl
dFkobm9pc2VWZWN0b3IueSgpICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0KLSAgICAgICAg
aWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVz
LiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5k
Ci0gICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJh
Y3RpbmcgaXQgb25jZS4KLSAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKLSAgICAg
ICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGlu
Tm9pc2U7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOwotICAgICAgICAgICAg
c3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAy
NTUpIC8gMiBieSBmcmFjdGFsTm9pc2UKLSAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4KLSAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VU
eXBlOjpGcmFjdGFsTm9pc2UpCi0gICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwotCi0gICAgcmV0dXJuIHRvSW50
QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKLX0KLQotdm9p
ZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXks
IGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEs
IGludCBzdGFydFksIGludCBlbmRZKSBjb25zdAotewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZ
KTsKLQotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAg
ICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQ
b2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhP
ZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJh
bnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZv
ciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShw
b2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0g
ICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQ
b2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAg
ICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBh
aW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFy
cmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hh
bm5lbCk7Ci0gICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdp
b25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+Zmls
bFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0
YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJz
LT5lbmRZKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
Ci17Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVy
U2NhbGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVz
dGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJl
cXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFz
ZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsK
LSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNp
emUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9u
LCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFk
TnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAg
YXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAo
bnVtSm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFki
LXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAi
am9ic1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0
IC8gbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQg
JSBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAg
ICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdo
dCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAg
ICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21h
bGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVy
UmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpAQCAtNDc2LDE1ICs2
OCwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVy
YnVsZW5jZVR5cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFVHVy
YnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNl
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImJh
c2VGcmVxdWVuY3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVl
bmN5WSgpIDw8ICJcIiAiCi0gICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgot
ICAgICAgIDw8ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKLSAgICAg
ICA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxuIjsKKyAgICB0
cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHVyYnVsZW5jZVR5cGUgPDwgIlwiICIgPDwgImJhc2VGcmVx
dWVuY3k9XCIiIDw8IG1fYmFzZUZyZXF1ZW5jeVggPDwgIiwgIiA8PCBtX2Jhc2VGcmVxdWVuY3lZ
IDw8ICJcIiAiIDw8ICJzZWVkPVwiIiA8PCBtX3NlZWQgPDwgIlwiICIgPDwgIm51bU9jdGF2ZXM9
XCIiIDw8IG1fbnVtT2N0YXZlcyA8PCAiXCIgIiA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IG1fc3Rp
dGNoVGlsZXMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmlu
ZGV4IDRkNTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjdlMDM4NzQyMjY3
N2NiNjVkZTBjNjBmYWI0NTcwYzhlNTczODE1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI0LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zOCw5MSArMzYsMjggQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAK
IGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUs
IGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2Vl
ZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKKyAg
ICB2b2lkIHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlKSB7
IG1fdHVyYnVsZW5jZVR5cGUgPSB0dXJidWxlbmNlVHlwZTsgfQorICAgIHZvaWQgc2V0QmFzZUZy
ZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpIHsgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VG
cmVxdWVuY3lYOyB9CisgICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVl
bmN5WSkgeyBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7IH0KKyAgICB2b2lkIHNl
dE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpIHsgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsg
fQorICAgIHZvaWQgc2V0U2VlZChmbG9hdCBzZWVkKSB7IG1fc2VlZCA9IHNlZWQ7IH0KKyAgICB2
b2lkIHNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoVGlsZXMpIHsgbV9zdGl0Y2hUaWxlcyA9IHN0
aXRjaFRpbGVzOyB9CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFzZUZyZXF1ZW5jeVg7IH0KLSAgICBib29sIHNldEJhc2VGcmVxdWVuY3lYKGZsb2F0KTsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZF
VHVyYnVsZW5jZT4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVk7IH0KLSAgICBib29sIHNldEJhc2VG
cmVxdWVuY3lZKGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VU
eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1P
Y3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIGZsb2F0IHNlZWQo
KSBjb25zdCB7IHJldHVybiBtX3NlZWQ7IH0KLSAgICBib29sIHNldFNlZWQoZmxvYXQpOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtT2N0YXZlczsgfQotICAgIGJvb2wgc2V0TnVtT2N0YXZlcyhpbnQpOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBzdGl0Y2hUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RpdGNoVGlsZXM7IH0K
LSAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3Qgb3ZlcnJpZGU7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Js
b2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9j
a1NpemUgLSAxOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9u
ID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2Jz
LgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25n
IHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRp
bmdTZWVkKQotICAgICAgICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAg
ICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VG
cmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBsb25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXpl
ICsgMl07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJd
OwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9u
ZyByYW5kb20oKTsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBT
dGl0Y2hEYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93
IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3Jh
cFggeyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7
IDAgfTsKLSAgICAgICAgaW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5n
RGF0YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAg
ICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
dm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KLSAgICBGRVR1
cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9h
dCwgYm9vbCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
dm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3Rp
dGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJh
c2VGcmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNl
MkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRB
cnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBl
bmRZKSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwot
Ci0gICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOworICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHVyYnVs
ZW5jZVR5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBtX2Jhc2VG
cmVxdWVuY3lZOwogICAgIGludCBtX251bU9jdGF2ZXM7CkBAIC0xMzAsNSArNjUsNjcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fc3RpdGNoVGlsZXM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgordm9pZCBGRVR1cmJ1bGVuY2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV90dXJidWxlbmNlVHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fYmFz
ZUZyZXF1ZW5jeVg7CisgICAgZW5jb2RlciA8PCBtX2Jhc2VGcmVxdWVuY3lZOworICAgIGVuY29k
ZXIgPDwgbV9udW1PY3RhdmVzOworICAgIGVuY29kZXIgPDwgbV9zZWVkOworICAgIGVuY29kZXIg
PDwgbV9zdGl0Y2hUaWxlczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8UmVmPEZFVHVyYnVsZW5jZT4+IEZFVHVyYnVsZW5jZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxUdXJidWxlbmNlVHlwZT4gdHVyYnVsZW5jZVR5
cGU7CisgICAgZGVjb2RlciA+PiB0dXJidWxlbmNlVHlwZTsKKyAgICBpZiAoIXR1cmJ1bGVuY2VU
eXBlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IGJhc2VGcmVxdWVuY3lYOworICAgIGRlY29kZXIgPj4gYmFzZUZyZXF1ZW5jeVg7
CisgICAgaWYgKCFiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBiYXNlRnJlcXVlbmN5WTsKKyAgICBkZWNv
ZGVyID4+IGJhc2VGcmVxdWVuY3lZOworICAgIGlmICghYmFzZUZyZXF1ZW5jeVkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gbnVtT2N0YXZl
czsKKyAgICBkZWNvZGVyID4+IG51bU9jdGF2ZXM7CisgICAgaWYgKCFudW1PY3RhdmVzKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2Vl
ZDsKKyAgICBkZWNvZGVyID4+IHNlZWQ7CisgICAgaWYgKCFzZWVkKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzdGl0Y2hUaWxlczsKKyAg
ICBkZWNvZGVyID4+IHN0aXRjaFRpbGVzOworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUo
KnR1cmJ1bGVuY2VUeXBlLCAqYmFzZUZyZXF1ZW5jeVgsICpiYXNlRnJlcXVlbmN5WSwgKm51bU9j
dGF2ZXMsICpzZWVkLCAqc3RpdGNoVGlsZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlR1cmJ1bGVuY2VUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICAgICAgV2ViQ29yZTo6VHVyYnVsZW5jZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6VHVyYnVs
ZW5jZVR5cGU6OlVua25vd24sCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpGcmFj
dGFsTm9pc2UsCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpUdXJidWxlbmNlCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVUdXJidWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNzY5NjUwMjg5
NDYyMGIwMjdhODI0YzY0MmY2NGMwNDNhMDFhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVy
OjphcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAg
RmlsdGVySW1hZ2VWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyUmVzdWx0IHJlc3VsdChyZW5kZXJp
bmdNb2RlKCkpOworCisgICAgaWYgKHNvdXJjZUltYWdlKSB7CisgICAgICAgIGF1dG8gaW1hZ2Ug
PSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGdlb21ldHJ5LmZpbHRlclJlZ2lvbigpLCBzb3VyY2VJbWFn
ZVJlY3QsIHsgKnNvdXJjZUltYWdlIH0pOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgc3RhY2suYXBwZW5kKGltYWdlLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIH0KKworICAgIGlmICghYXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAg
ICBhdXRvIGltYWdlID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBpbWFnZS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4geyBp
bWFnZS0+aW1hZ2VCdWZmZXIoKSwgZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlLT5pbWFnZVJl
Y3QoKSkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRi
MjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uYmQ5ZDBlODNjOWUwNTZkYTg4MzJkOTljNWE2
MDAzMmVjZTY2YmZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIwLDU5ICsyMSwyNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01v
ZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0
aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7
CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIHZpcnR1
YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VmVjdG9yIGVm
ZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNl
dFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJj
ZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9Ci0KLSAgICBGbG9hdFNpemUg
ZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQot
ICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29s
dXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQotCi0gICAg
ZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9Ci0gICAg
dm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gc2NhbGU7
IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Ci0KLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KLSAgICB2b2lk
IHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVy
aW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVy
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAq
IG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJj
ZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdp
b24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2Vy
U3BhY2UoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBsZTxSZWZQdHI8
SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJS
ZXNvbHV0aW9uKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBtX3NvdXJjZUltYWdlOwotICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07Ci0gICAg
ZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6Rmls
dGVyRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5k
YXJ5U2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJlNzdkZWNkMzFmMjhlNWUyNTgwMmRlM2ZjY2Y4ZDQxM2Q0
MzY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldCB7CitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBGbGFncyB7CisgICAgICAgIEhhc1ggICAgICA9IDEgPDwgMCwKKyAgICAgICAg
SGFzWSAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNXaWR0aCAgPSAxIDw8IDIsCisgICAgICAg
IEhhc0hlaWdodCA9IDEgPDwgMworICAgIH07CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCgpID0g
ZGVmYXVsdDsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRh
cmllcywgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICAgICAgOiBtX2JvdW5kYXJpZXMoYm91
bmRhcmllcykKKyAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgIHsKKyAgICB9CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiB4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdz
LmNvbnRhaW5zKEZsYWdzOjpIYXNYKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMu
eCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFp
bnMoRmxhZ3M6Okhhc1kpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy55KCk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gd2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMo
RmxhZ3M6Okhhc1dpZHRoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMud2lkdGgo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlv
bmFsPGZsb2F0PiBoZWlnaHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29u
dGFpbnMoRmxhZ3M6Okhhc0hlaWdodCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVz
LmhlaWdodCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJCb3VuZGFy
eVNldD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3Vu
ZGFyaWVzOworICAgIE9wdGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fYm91bmRhcmllczsKKyAgICBlbmNvZGVy
IDw8IG1fZmxhZ3M7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PEZpbHRlckJvdW5kYXJ5U2V0PiBGaWx0ZXJCb3VuZGFyeVNldDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGJvdW5kYXJpZXM7CisgICAg
ZGVjb2RlciA+PiBib3VuZGFyaWVzOworICAgIGlmICghYm91bmRhcmllcykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8T3B0aW9uU2V0PEZsYWdzPj4g
ZmxhZ3M7CisgICAgZGVjb2RlciA+PiBmbGFnczsKKyAgICBpZiAoIWZsYWdzKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZpbHRlckJvdW5kYXJ5U2V0KCpib3Vu
ZGFyaWVzLCAqZmxhZ3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckJv
dW5kYXJ5U2V0OjpGbGFncz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncywKKworICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRh
cnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlT
ZXQ6OkZsYWdzOjpIYXNIZWlnaHQKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKaW5kZXggZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5Mjdk
YjEwOC4uNDc5MWM5YTNmNWE0NWJiZDdkZmM5M2IyMzU4ZmNkYjdhMWRmZjZlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcApAQCAtMjQsNjYwICsyNCwxMDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJS
ZXN1bHQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25l
b24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXJF
ZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRlciwgVHlwZSB0eXBlKQotICAgIDogbV9m
aWx0ZXIoZmlsdGVyKQotICAgICwgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGUodHlwZSkKLXsKLX0K
LQotRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkgPSBkZWZhdWx0OwotCi12b2lkIEZpbHRl
ckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIG1fYWJzb2x1dGVQYWludFJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKLSAg
ICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotfQorICAgIC8vIFRoaXMgZnVuY3Rp
b24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMtMS8jRmls
dGVyUHJpbWl0aXZlU3ViUmVnaW9uLgorICAgIEZsb2F0UmVjdCBkZWZhdWx0UHJpbWl0aXZlU3Vi
cmVnaW9uOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxl
IENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1
dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0lu
dFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBj
b25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFj
ZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7Ci19Ci0KLUludFJlY3QgRmls
dGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVj
dCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1
dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFTU0VS
VChoYXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0KLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJh
bnNsYXRlKC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFu
c2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVy
YnVsZW5jZSwgRkVGbG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRl
ciByZWdpb24gYXMgdW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlm
ICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkg
ewotICAgICAgICBzdWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1i
ZXJPZklucHV0RWZmZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZl
U3VicmVnaW9uID0gaW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotICAgICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVn
aW9uKTsKLSAgICAgICAgfQorICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24g
Zm9yIDxmZVRpbGU+LgorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkgIT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlu
cHV0cykKKyAgICAgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXQt
PnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0g
bV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxp
bmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0
LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVy
RWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24g
PSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFy
aWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJl
Z2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJy
ZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWln
aHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsK
LQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwotCi0gICAgYXV0
byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVj
dChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0
aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQg
dG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5h
dGVzLgotICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9u
KTsKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRlclJl
Z2lvbigpOwogCi0gICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIg
cmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2ZpbHRlci5m
aWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0
ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVT
Y2FsZWRGaWx0ZXJSZWdpb24pOworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb247CiAK
LSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3Vi
cmVnaW9uOwotfQorICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJ5U2V0LngoKS52
YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLngoKSkpOworICAgIHByaW1pdGl2ZVN1
YnJlZ2lvbi5zZXRZKGJvdW5kYXJ5U2V0LnkoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3Vi
cmVnaW9uLnkoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyeVNl
dC53aWR0aCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ud2lkdGgoKSkpOwor
ICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcnlTZXQuaGVpZ2h0KCkudmFs
dWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi5oZWlnaHQoKSkpOwogCi1GaWx0ZXJFZmZl
Y3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewot
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZl
Y3RzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7
Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3Qq
ZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAg
IGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVt
YmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkp
OwotICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJl
dHVybiBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRl
ckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFs
bEVmZmVjdHMpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
IHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBz
aXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3Rz
LmF0KGkpLmdldCgpOwotICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVu
aXRlKGlucHV0LT5pbWFnZVJlY3QoKSk7CiAKLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1
bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKLSAgICB9Ci0KLSAgICBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNw
YWNlKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVm
ZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8
ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFi
c29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lv
biA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAi
XG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2Nh
bGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpIDw8ICJcbiAgZmlsdGVyIHJlc29sdXRpb24g
IiA8PCBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQ
YWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVj
dEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0Zm9y
bSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFBy
aW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK2Jvb2wg
RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25zdAogewotICAgIC8vIE11c3Qgb3BlcmF0
ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGlu
dmFsaWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0
YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQot
ICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBp
eGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAg
ICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGgg
JiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxE
YXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0
cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsx
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
Ml0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAg
ICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFz
dFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisjaWYgVVNF
KENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhcHBseUNvcmVJbWFnZShvdXRwdXQsIGlucHV0cywg
Z2VvbWV0cnkpOwogI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0
aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEg
YW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgt
LW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBh
IHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8v
IENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBs
b2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwot
ICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50
IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5
U29mdHdhcmUob3V0cHV0LCBpbnB1dHMsIGdlb21ldHJ5KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseShGaWx0ZXJSZXN1bHQm
IHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gYXBwbHkocmVz
dWx0LCBzdGFjaywgZ2VvbWV0cnksIEZpbHRlckJvdW5kYXJ5U2V0KCkpOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKK2Jvb2wgRmlsdGVyRWZmZWN0Ojph
cHBseShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3Vu
ZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0
aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQg
aWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0
KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNp
dmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQo
KQotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVj
dCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0
KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkg
PDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8gaW5wdXRzID0gdGFrZUlucHV0cyhzdGFjayk7CiAKLSAgICBpZiAo
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAq
IDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxB
cnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0
KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwot
ICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBj
aGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAg
aWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJl
Y3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
LSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAg
IGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICBpZiAoYXV0byBpbWFnZSA9IHJlc3VsdC5pbWFnZXMoKS5nZXQoeyAq
dGhpcyB9KSkgeworICAgICAgICBzdGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAg
IGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKTsKIAotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7
Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURl
c3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5k
ID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisgICAgYXV0
byBwcmltaXRpdmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRz
LCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0g
eE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53
aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lk
dGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRh
dGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBz
Y2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisgICAgYXV0byBpbWFnZVJl
Y3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKKyAgICBhdXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0
KGltYWdlUmVjdCk7CiAKLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCAr
PSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KKyAgICBpZiAo
YWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6
ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRl
cyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMt
PmlzQWxwaGFJbWFnZShpbnB1dHMpOworICAgIGF1dG8gaW1hZ2VDb2xvclNwYWNlID0gdGhpcy0+
aW1hZ2VDb2xvclNwYWNlKGlucHV0cyk7CiAKLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBz
cmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisgICAgYXV0byBpbWFnZSA9
IHJlc3VsdC5jcmVhdGVGaWx0ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwg
aXNBbHBoYUltYWdlLCBhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCksIGltYWdlQ29sb3JTcGFjZSk7
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdkltYWdlX0J1
ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0
LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0
ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24u
ZGF0YSgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBs
eSgpOiIKKyAgICAgICAgPDwgIlxuICBwcmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVT
dWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBtYXhQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBnZW9t
ZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICAgICA8PCAi
XG4gIGltYWdlUmVjdCAiIDw8IGltYWdlUmVjdAorICAgICAgICA8PCAiXG4gIGFic29sdXRlSW1h
Z2VnUmVjdCAiIDw8IGFic29sdXRlSW1hZ2VSZWN0KTsKIAotICAgIHZJbWFnZVByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCku
dmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9u
LmRhdGEoKTsKKyAgICBpZiAoIWFwcGx5UGxhdGZvcm0oKmltYWdlLCBpbnB1dHMsIGdlb21ldHJ5
LCByZXN1bHQucmVuZGVyaW5nTW9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MV0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRp
ZgotfQotCi1zdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVf
dCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAg
c3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRl
c3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAg
ICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNv
dXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBd
KSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAg
ICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZp
bHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
KQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0
bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZl
ci5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1
ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0
KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9y
U3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxw
aGFGb3JtYXQpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVs
QnVmZmVyQ29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VC
dWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5k
bGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIHN0YWNrLmFwcGVuZCh7ICppbWFnZSB9KTsKKyAgICByZXN1bHQuaW1hZ2VzKCku
YWRkKHsgKnRoaXMgfSwgUmVmPEZpbHRlckltYWdlPigqaW1hZ2UpKTsKIAotICAgIC8vIENvbG9y
IHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9u
ZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
dGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgcmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCitUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBj
b25zdAogewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVy
UmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBz
YXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29s
b3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0K
LQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQot
ewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1i
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0
aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgot
ICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Ig
c3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVy
IGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRp
b25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNw
YWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25D
b2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgotfQotCi1UZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVu
dCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRh
cmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgeworICAgIGlmIChyZXByZXNlbnRhdGlvbiA9PSBGaWx0
ZXJSZXByZXNlbnRhdGlvbjo6RGVidWdnaW5nKSB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBp
bWFnZSIsIG1fYWxwaGFJbWFnZSk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5n
IGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICAgICAg
dHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXIpCi17Ci0gICAgLy8gVXNlIGEgbmV3IHN0cmVhbSBiZWNhdXNlIHdlIHdhbnQgbXVsdGlsaW5l
IG1vZGUgZm9yIGxvZ2dpbmcgZmlsdGVycy4KLSAgICBUZXh0U3RyZWFtIGZpbHRlclN0cmVhbTsK
LSAgICBmaWx0ZXIuZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihmaWx0ZXJTdHJlYW0sIEZpbHRlckVm
ZmVjdDo6UmVwcmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpOwotICAgIAotICAgIHJldHVybiB0
cyA8PCBmaWx0ZXJTdHJlYW0ucmVsZWFzZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAppbmRleCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0
NzFjLi4yYWQ2YzYyNmQwYTZkODc4ZThiZGQ2ZWE5MzY1NTIwN2ExNjE3ZDlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKQEAgLTIyLDIzNyArMjIsNTggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19CisjaW5jbHVkZSAiUmVuZGVyaW5nTW9k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgRmlsdGVyOwotY2xhc3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci0K
LXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7
Ci0KLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24s
Ci0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAot
ICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dAotfTsKK2NsYXNzIEZpbHRlckJvdW5kYXJ5
U2V0OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZl
Y3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJs
aWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAg
ICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENv
bXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGlu
ZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAg
ICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAg
TGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBP
ZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAg
IFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGlj
Ci0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJS
ZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0gICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVu
bXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxv
cHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBp
bnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNp
Z25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGltYWdlQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIAot
ICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBt
YW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCi0g
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAg
RmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgLy8g
U29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgotICAgIGJvb2wg
aXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0gICAgdm9pZCBz
ZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1h
Z2U7IH0KLQotICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2Fic29sdXRlUGFpbnRSZWN0OyB9Ci0gICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJz
b2x1dGVQYWludFJlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZl
Y3RSZWN0OyB9IAotCi0gICAgdm9pZCBhcHBseSgpOwotCi0gICAgLy8gQ29ycmVjdCBhbnkgaW52
YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZpbHRlciBvcGVy
YXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFsaWQgcGl4ZWwg
dmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCi0gICAgLy8gT25s
eSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBj
b3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwot
Ci0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCB7
IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmlydHVhbCBJbnRPdXRz
ZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0KLQotICAgIGVudW0g
Y2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07Ci0gICAg
dmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0
cHV0KSBjb25zdDsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcgc3Bl
Y2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4K
LSAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NTYxNC4KLSAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hhc1g7IH0KLSAgICB2b2lk
IHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNZ
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJvb2wgdmFsdWUp
IHsgbV9oYXNZID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2hhc1dpZHRoOyB9Ci0gICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZhbHVlKSB7IG1faGFz
V2lkdGggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2hhc0hlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNI
ZWlnaHQgPSB2YWx1ZTsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0gICAgdm9p
ZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29u
c3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3Vu
ZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5k
YXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRB
YnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBl
ZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJT
cGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVyRWZm
ZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0K
LQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBG
aWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29sIGNs
aXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lk
IHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsg
fQotCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1
bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7
Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1h
bGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9
IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZh
bHVlczsKLSAgICB9CisgICAgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQmLCBGaWx0ZXJJbWFnZVZl
Y3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlT
ZXQmKSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKIHByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwgVHlwZSk7CisgICAgdXNp
bmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogICAgIAotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25z
dDsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUg
Y29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEgaW4gWzAs
MjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGll
ZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5l
Y2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAg
dmlydHVhbCBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwor
ICAgIHZpcnR1YWwgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3Rv
ciYpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdl
QnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVk
QXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252
ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwg
UGl4ZWxCdWZmZXImKTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0ID0gMDsKICAgICAKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmLCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNl
bmRpZgogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9p
bnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAv
LyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMg
dGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAg
ICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4g
bV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0g
ICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRo
ZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8g
VGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOworICAgIGJvb2wgYXBwbHlQbGF0Zm9ybShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIFJlbmRlcmlu
Z01vZGUpIGNvbnN0OwogCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0
dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBv
ZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0Jiwg
RmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZp
bmFsOwogICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBtYXBwZWQgdG8gYWJz
b2x1dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgotICAgIEZsb2F0UmVjdCBtX2Fic29s
dXRlVW5jbGlwcGVkU3VicmVnaW9uOwotCi0gICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9oYXNYIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc1dpZHRoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzSGVpZ2h0IHsg
ZmFsc2UgfTsKLQotICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2
ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5w
dXRzLgotICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwotCi0jaWYgRU5BQkxFKERF
U1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVh
clNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdD
b2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RD
bGFzc1R5cGU7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0
ZXJFZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3QoKTsgfQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QudHlwZSgpID09
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1lOyB9IFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUzNTY3ZmMzMWU1Yjll
OWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNy
ZWF0ZShib29sIGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwgRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlmIChhY2NlbGVyYXRl
ZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAgICBVTlVTRURfUEFS
QU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotCi19IC8v
IG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcxMzIyYjc1YTc1NzNl
OWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVy
RWZmZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAg
ICAKLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSA9IDA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NWY0YzgzMmNlM2FlMTZkOWVhOTIwOWNmODcyZWRiNzhjMGNiNzkzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RWZWN0b3IuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKwor
dXNpbmcgRmlsdGVyRWZmZWN0VmVjdG9yID0gVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OGMzMDAzYmUyNzdhNTdiMmM5MzRlM2Q1YzFiOTExMWQ2ZDY4NDgxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlv
bi5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSB0eXBl
KQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgYXV0byYgZmlsdGVy
TmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRlck5hbWVNYXAgPSBIYXNoTWFwPEZpbHRlckZ1bmN0
aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6OkludEhhc2g8RmlsdGVyRnVuY3Rpb246OlR5cGU+
LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1bmN0aW9uOjpUeXBlPj47CisKKyAg
ICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CisgICAg
ICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFtZXMgPSB7CisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAgICAgICAgICAiQ1NTRmlsdGVyIl9zICAgICAgICAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyLCAgICAg
ICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwgICAgICAgICAgICAgIkZFQmxlbmQi
X3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9yTWF0cml4Il9zICAgICAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyLCAiRkVDb21wb25l
bnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVD
b21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9zaXRlIl9zICAgICAgICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgsICAgICJGRUNvbnZvbHZl
TWF0cml4Il9zICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNlTGlnaHRpbmciX3MgICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsICAgIkZFRGlzcGxhY2Vt
ZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJv
cFNoYWRvdywgICAgICAgICJGRURyb3BTaGFkb3ciX3MgICAgICAgIH0sCisgICAgICAgICAgICB7
IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLCAgICAgICAgICAgICAiRkVGbG9vZCJfcyAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVz
c2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5CbHVyIl9zICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsICAgICAgICAgICAgICJGRUltYWdlIl9zICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdl
LCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAgICAgICAgIkZFTW9ycGhvbG9neSJf
cyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0
LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsICAiRkVTcGVjdWxhckxpZ2h0
aW5nIl9zICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLCAg
ICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAgICAgICJGRVR1cmJ1bGVuY2UiX3Mg
ICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFs
cGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJfcyAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljLCAgICAgICAiU291cmNlR3JhcGhpYyJf
cyAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGZpbHRlck5hbWVzOworICAg
IH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZpbHRlck5hbWVzLmdldCgpOworfQorCitBdG9tU3Ry
aW5nIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4g
ZmlsdGVyTmFtZXMoKS5nZXQodHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTBlMWMyYTQ0ZjI3ODQwMTQxYzFlNDUwNTM1MTE2
MTc1NzU3NWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXByZXNlbnRh
dGlvbi5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdU
RiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyUmVzdWx0OworY2xhc3MgSW1hZ2VCdWZmZXI7
CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rp
b24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAg
Q1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAgRkVNaW5pbXVtLAorCisg
ICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29sb3JNYXRyaXgsCisgICAg
ICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9zaXRlLAorICAgICAgICBG
RUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGluZywKKyAgICAgICAgRkVE
aXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAgICAgICAgRkVGbG9vZCwK
KyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2UsCisgICAgICAgIEZFTWVy
Z2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZzZXQsCisgICAgICAgIEZF
U3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAgICBGRVR1cmJ1bGVuY2Us
CisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFwaGljLAorCisgICAgICAg
IEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAgRmlsdGVyRnVuY3Rpb24o
VHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGJvb2wgaXNDU1NGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9v
bCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7
IH0KKyAgICBib29sIGlzRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkNT
U0ZpbHRlciB8fCBtX3R5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRl
ckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV90
eXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIEF0b21TdHJpbmcgZmlsdGVy
TmFtZShUeXBlKTsKKyAgICBzdGF0aWMgQXRvbVN0cmluZyBzb3VyY2VBbHBoYU5hbWUoKSB7IHJl
dHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUFscGhhKTsgfQorICAgIHN0YXRpYyBBdG9tU3Ry
aW5nIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VH
cmFwaGljKTsgfQorICAgIEF0b21TdHJpbmcgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZp
bHRlck5hbWUobV90eXBlKTsgfQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyNlbmRpZgorCisgICAgdmlydHVhbCBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25z
dCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQm
LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24gPSBGaWx0ZXJSZXByZXNl
bnRhdGlvbjo6VGVzdE91dHB1dCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIFR5cGUgbV90
eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpT
VkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxl
bmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFu
c2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRl
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJp
eCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0
aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFk
b3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21l
dHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTc4ZDM2MzZhZjk3Nzk4MDdmNTZlZGNhYWMyMmM3N2E3Nzll
MzMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmls
dGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBmbG9hdCBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDog
bV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICwgbV9maWx0ZXJTY2FsZShGbG9hdFNp
emUoZmlsdGVyU2NhbGUsIGZpbHRlclNjYWxlKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlw
T3BlcmF0aW9uKQoreworfQorCitGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYgdGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8
RmlsdGVyQm91bmRhcnlTZXQ+JiYgZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKQorICAgIDogRmls
dGVyR2VvbWV0cnkoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgdGFyZ2V0Qm91bmRpbmdTaXpl
LCBXVEZNb3ZlKGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyksIENsaXBPcGVyYXRpb246OkludGVy
c2VjdCkKK3sKK30KKworRmlsdGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0
UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4mIHRhcmdldEJvdW5kaW5nU2l6ZSwgVmVjdG9yPEZpbHRl
ckJvdW5kYXJ5U2V0PiYmIGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cywgQ2xpcE9wZXJhdGlvbiBj
bGlwT3BlcmF0aW9uKQorICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICwg
bV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAsIG1fdGFyZ2V0Qm91bmRpbmdTaXplKHRh
cmdldEJvdW5kaW5nU2l6ZSkKKyAgICAsIG1fZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFdURk1v
dmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlw
T3BlcmF0aW9uKQoreworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6OmNhbGN1bGF0ZUZp
bHRlclNjYWxlKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFNp
emUmIGFic29sdXRlU2NhbGUpCit7CisgICAgYXV0byBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdCA9
IHNvdXJjZUltYWdlUmVjdDsKKyAgICBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdC5zY2FsZShhYnNv
bHV0ZVNjYWxlKTsKKyAgICBhdXRvIGNsYW1waW5nU2NhbGUgPSBGbG9hdFNpemUgeyAxLCAxIH07
CisgICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlU291cmNlSW1hZ2VS
ZWN0LnNpemUoKSwgY2xhbXBpbmdTY2FsZSk7CisgICAgcmV0dXJuIGFic29sdXRlU2NhbGUgKiBj
bGFtcGluZ1NjYWxlOworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJbWFn
ZVNpemUoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlt
YWdlU2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdTaXplLnZhbHVlX29yKEZsb2F0U2l6ZSgxLCAxKSk7
Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXJHZW9tZXRyeTo6bWFwSW1hZ2VTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBpbWFnZVNpemUgKiBtX2ZpbHRl
clNjYWxlOworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6Om1hcFJlc29sdmVkSW1hZ2VT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBtYXBJ
bWFnZVNpemUocmVzb2x2ZUltYWdlU2l6ZShpbWFnZVNpemUpKTsKK30KKworCitGbG9hdFJlY3Qg
RmlsdGVyR2VvbWV0cnk6Om1hcEltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkg
Y29uc3QKK3sKKyAgICBhdXRvIHNjYWxlZEltYWdlUmVjdCA9IGltYWdlUmVjdDsKKyAgICBzY2Fs
ZWRJbWFnZVJlY3Quc2NhbGUobV9maWx0ZXJTY2FsZSk7CisgICAgcmV0dXJuIHNjYWxlZEltYWdl
UmVjdDsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXBJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0SW1hZ2VSZWN0KSBj
b25zdAoreworICAgIGF1dG8gbW92ZWRJbWFnZVJlY3QgPSBpbWFnZVJlY3Q7CisgICAgbW92ZWRJ
bWFnZVJlY3QubW92ZUJ5KC10YXJnZXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJu
IG1hcEltYWdlUmVjdChtb3ZlZEltYWdlUmVjdCk7Cit9CisKK0ZpbHRlckJvdW5kYXJ5U2V0IEZp
bHRlckdlb21ldHJ5Ojpib3VuZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSwgdW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VHcmFwaGljIHx8IHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaW5kZXggPj0gbV9m
aWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMuc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBtX2ZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0c1tpbmRleF07Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvRmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdAoreworICAgIHJldHVybiBpbnRlcnNlY3Rpb24ocHJpbWl0aXZlU3VicmVnaW9uLCBt
X2ZpbHRlclJlZ2lvbik7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGlwT3BlcmF0
aW9uID09IENsaXBPcGVyYXRpb246OkludGVyc2VjdCA/IGludGVyc2VjdGlvbihpbWFnZVJlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbikgOiB1bmlvblJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6OmNsaXBUb01heFByaW1pdGl2
ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGNsaXBUb1ByaW1pdGl2ZVN1
YnJlZ2lvbihpbWFnZVJlY3QsIGNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU3NzNkNWZhODc4MzYzNGYzZjM0NDg0NDJmNGViOGYxYzNlOTA0NGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdl
b21ldHJ5LmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJCb3VuZGFy
eVNldC5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXJHZW9tZXRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZW51bSBjbGFzcyBDbGlwT3BlcmF0aW9uIHsgSW50ZXJzZWN0LCBVbml0ZSB9OworCisg
ICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGZsb2F0IGZp
bHRlclNjYWxlID0gMSwgQ2xpcE9wZXJhdGlvbiA9IENsaXBPcGVyYXRpb246OkludGVyc2VjdCk7
CisgICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYg
dGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+JiYpOworCisgICAg
c3RhdGljIEZsb2F0U2l6ZSBjYWxjdWxhdGVGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRTaXplJiBhYnNvbHV0ZVNjYWxlKTsKKworICAgIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQor
ICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7
IH0KKworICAgIEZsb2F0U2l6ZSByZXNvbHZlSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplKSBjb25zdDsKKworICAgIEZsb2F0U2l6ZSBtYXBJbWFnZVNpemUoY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBtYXBSZXNvbHZlZEltYWdlU2l6
ZShjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbWFw
SW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0KSBjb25zdDsKKyAgICBGbG9hdFJl
Y3QgbWFwSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmVndEltYWdlUmVjdCkgY29uc3Q7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCBib3Vu
ZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUsIHVuc2lnbmVkKSBjb25zdDsKKworICAgIEZsb2F0
UmVjdCBjbGlwVG9GaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworCisgICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworICAgIEZsb2F0UmVjdCBjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxGaWx0ZXJHZW9tZXRyeT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxG
bG9hdFNpemU+JiB0YXJnZXRCb3VuZGluZ1NpemUsIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4m
JiwgQ2xpcE9wZXJhdGlvbik7CisKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAg
RmxvYXRTaXplIG1fZmlsdGVyU2NhbGU7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4g
bV90YXJnZXRCb3VuZGluZ1NpemU7CisgICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBtX2Zp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKworICAgIENsaXBPcGVyYXRpb24gbV9jbGlwT3BlcmF0
aW9uIHsgQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0IH07Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBlbmNvZGVyIDw8IG1f
ZmlsdGVyU2NhbGU7CisKKyAgICBlbmNvZGVyIDw8IG1fdGFyZ2V0Qm91bmRpbmdTaXplOworICAg
IGVuY29kZXIgPDwgbV9maWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisKKyAgICBlbmNvZGVyIDw8
IG1fY2xpcE9wZXJhdGlvbjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8RmlsdGVyR2VvbWV0cnk+IEZpbHRlckdlb21ldHJ5OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZmlsdGVyUmVnaW9uOworICAg
IGRlY29kZXIgPj4gZmlsdGVyUmVnaW9uOworICAgIGlmICghZmlsdGVyUmVnaW9uKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IGZp
bHRlclNjYWxlOworICAgIGRlY29kZXIgPj4gZmlsdGVyU2NhbGU7CisgICAgaWYgKCFmaWx0ZXJT
Y2FsZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjpvcHRpb25hbDxGbG9hdFNpemU+PiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgZGVjb2Rl
ciA+PiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgaWYgKCF0YXJnZXRCb3VuZGluZ1NpemUpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxG
aWx0ZXJCb3VuZGFyeVNldD4+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKyAgICBkZWNvZGVy
ID4+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKyAgICBpZiAoIWZpbHRlckVmZmVjdEJvdW5k
YXJ5U2V0cykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Q2xpcE9wZXJhdGlvbj4gY2xpcE9wZXJhdGlvbjsKKyAgICBkZWNvZGVyID4+IGNsaXBPcGVy
YXRpb247CisgICAgaWYgKCFjbGlwT3BlcmF0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIEZpbHRlckdlb21ldHJ5KCpmaWx0ZXJSZWdpb24sICpmaWx0ZXJT
Y2FsZSwgKnRhcmdldEJvdW5kaW5nU2l6ZSwgV1RGTW92ZSgqZmlsdGVyRWZmZWN0Qm91bmRhcnlT
ZXRzKSwgKmNsaXBPcGVyYXRpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24sCisK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2Vj
dCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OlVuaXRl
CisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jYmE1MTAwMjQ2Y2Y5OTc2NTAwZmU5NGNlODY1MWQ5ODFmNjQwMjkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVNvZnR3YXJlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VD
b3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2lu
Y2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9v
bCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5p
c0VtcHR5KCkgfHwgaW1hZ2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6
ZSkpOworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0
ZXJJbWFnZUNvcmVJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgaXNBbHBoYUlt
YWdlLCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZVNvZnR3
YXJlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGxvZ2ljYWxT
aXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKwor
UmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgUmVmPEltYWdl
QnVmZmVyPiYmIGltYWdlQnVmZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRl
ckltYWdlU29mdHdhcmUocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIFdURk1vdmUoaW1h
Z2VCdWZmZXIpKSk7Cit9CisKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wg
aXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0
aXZlU3VicmVnaW9uKQorICAgICwgbV9pbWFnZVJlY3QoaW1hZ2VSZWN0KQorICAgICwgbV9pc0Fs
cGhhSW1hZ2UoaXNBbHBoYUltYWdlKQorICAgICwgbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkK
KyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9u
U2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7
Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCBy
b3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3Jj
OworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBp
bnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3Jj
LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Cisg
ICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9
IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3Rp
bmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291
cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBz
b3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAg
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisg
ICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBz
b3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBv
bmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNl
bmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNp
emVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Cisg
ICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKwor
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRo
KCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3Qq
IGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRh
KCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxw
aGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7
CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
Ml0gPSAwOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxw
aGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiYgRmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlciA6IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmls
dGVySW1hZ2U6OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQp
Cit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9y
bWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIu
dmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBp
bWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUo
bV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOwor
ICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAg
IHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIg
PSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAocGl4ZWxCdWZm
ZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAg
ICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRh
dGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgY29weVVucHJlbXVs
dGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUp
OworCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZs
b3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rp
b24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Ig
c3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJz
aW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8v
IEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJu
IGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAv
LyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24t
Q0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Cisg
ICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRTaXplIHNj
YWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBzY2FsZWRQYWludFNpemUuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24g
dG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3Vy
Y2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwg
c2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0
Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3Rp
bmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkg
cmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisg
ICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8
fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0
LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBp
ZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9y
aWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAg
aWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsK
KyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVz
dCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQg
PSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGlu
dCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2Nhbmxp
bmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVs
ID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4
RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEo
KSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsK
KworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRp
b25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9
IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5s
aW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sK
KyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVj
dC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0
IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJz
aW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVydGVk
SW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29sb3Ig
c3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25l
IGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3Bh
Y2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdl
OjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlKSBjb25zdAoreworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZl
ci5zaXplKCkpOworICAgIHJlY3Quc2NhbGUoMSAvIG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXpl
KCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBp
eGVsQnVmZmVyCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxl
LCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOwor
fQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK3sKKyAgICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMo
YWxwaGFGb3JtYXQpID8gJnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkg
OiBudWxscHRyOworCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWly
ZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAg
ICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7
CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZShtX2xvZ2ljYWxTaXplKSB9OworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZv
cm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VC
eXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAg
fQorCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAg
ICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAg
IGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9u
LCBzcmNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVz
KHBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBG
aWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8g
TXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fu
bm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJy
YXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBp
eGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0g
aW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBl
ciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5n
dGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVs
QXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxE
YXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4
NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4
dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVl
blBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsy
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRh
LCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAg
fSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVu
Z3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5
TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBh
bHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hp
bGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRl
IGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAg
ICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBp
eGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9
IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNy
ZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBG
aWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNl
IGFkanVzdG1lbnRzIGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOwor
I2Vsc2UKKyAgICBpZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vz
c2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNl
IHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAg
ICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGlt
YWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNwYWNlKG1fY29sb3JTcGFjZSwgY29sb3JTcGFjZSk7
CisKKyAgICBtX2NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVk
UGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXIgPSBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0ZmE4N2MwNzJiYjc2YzVjYjY4OTA5MzAwYThmMGNiZjA1
ZWJkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Rmls
dGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1h
Z2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxv
YXRSZWN0JiBpbWFnZVJlY3QsIFJlZjxJbWFnZUJ1ZmZlcj4mJik7CisKKyAgICB2aXJ0dWFsIH5G
aWx0ZXJJbWFnZSgpID0gZGVmYXVsdDsKKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlUmVjdDsgfQorICAgIGJvb2wgaXNB
bHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KKworICAgIEZsb2F0
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlQnVmZmVy
KiBpbWFnZUJ1ZmZlcigpID0gMDsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIFBpeGVsQnVm
ZmVyKiBwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0
ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICAK
KyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAgICB2b2lkIHRy
YW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcm90ZWN0ZWQ6
CisgICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQ
aXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKworICAgIEZs
b2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFJlY3QgbV9pbWFnZVJlY3Q7
CisgICAgYm9vbCBtX2lzQWxwaGFJbWFnZSB7IGZhbHNlIH07CisKKyAgICBGbG9hdFNpemUgbV9s
b2dpY2FsU2l6ZTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9h
dCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNw
YWNlOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2VWZWN0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1h
Z2VWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTc1MzU5MmE3YzZhOWQyZjZmYzU0OWU0ZDdlZjk0Y2Y3
MjAwOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZVZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVySW1hZ2U7CisKK3VzaW5nIEZpbHRlckltYWdlVmVjdG9yID0gVmVjdG9yPFJlZjxGaWx0ZXJJ
bWFnZT4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGRiZmY3ZDgwNDdjZWY5ZWY2M2EzNmVjYzM1ZTVlOWIyMDExY2Vl
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBGaWx0ZXJSZXByZXNlbnRhdGlvbiA6IHVpbnQ4
X3QgeworICAgIFRlc3RPdXRwdXQsCisgICAgRGVidWdnaW5nCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQyODdkMTUzYzA0MWIyOTk4
MWE2OWRhZmUzYTY0OWU5NzU0YzMyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdChSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKK3sKK30KKwor
UmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUZpbHRlckltYWdlKGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdS
ZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBGaWx0
ZXJJbWFnZTo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGlzQWxwaGFJ
bWFnZSwgbG9naWNhbFNpemUsIG1fcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkYzg4MzRm
NzdmZjlkM2VkY2NmMGFiMjgxZjgyMTIzM2U4OGM3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJGdW5j
dGlvbjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVySW1hZ2U7CisKK2NsYXNz
IEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAgdXNpbmcgSW1hZ2VzID0gSGFzaE1hcDxSZWY8
Y29uc3QgRmlsdGVyRnVuY3Rpb24+LCBSZWY8RmlsdGVySW1hZ2U+PjsKKworICAgIEZpbHRlclJl
c3VsdChSZW5kZXJpbmdNb2RlKTsKKworICAgIEltYWdlcyYgaW1hZ2VzKCkgeyByZXR1cm4gbV9p
bWFnZXM7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmluZ01vZGU7IH0KKworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlRmls
dGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgZHJhd2luZ1JlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworcHJpdmF0ZToKKyAg
ICBJbWFnZXMgbV9pbWFnZXM7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUy
ZjBlYjk0ODJjNjEwZjU1ZGJiMzIzNGZhNjJlY2RlZTdhMjc4OTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNw
cApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5h
dGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMaWdodFNvdXJjZTo6TGlnaHRTb3VyY2UoRGF0
YSYmIGRhdGEpCisgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKK3sKK30KKwordm9pZCBMaWdo
dFNvdXJjZTo6c2V0QXppbXV0aChmbG9hdCBhemltdXRoKQoreworICAgIGlmIChhdXRvKiBkYXRh
ID0gc3RkOjpnZXRfaWY8RGlzdGFudExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpCisgICAgICAg
IGRhdGEtPnNldEF6aW11dGgoYXppbXV0aCk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldEVs
ZXZhdGlvbihmbG9hdCBlbGV2YXRpb24pCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6Omdl
dF9pZjxEaXN0YW50TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0
RWxldmF0aW9uKGVsZXZhdGlvbik7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFgoZmxvYXQg
eCkKK3sKKyAgICBpZiAoYXV0byogZGF0YSA9IHN0ZDo6Z2V0X2lmPFBvaW50TGlnaHRTb3VyY2VE
YXRhPigmbV9kYXRhKSkgeworICAgICAgICBkYXRhLT5zZXRYKHgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3Vy
Y2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0WCh4KTsKK30KKwordm9pZCBMaWdo
dFNvdXJjZTo6c2V0WShmbG9hdCB5KQoreworICAgIGlmIChhdXRvKiBkYXRhID0gc3RkOjpnZXRf
aWY8UG9pbnRMaWdodFNvdXJjZURhdGE+KCZtX2RhdGEpKSB7CisgICAgICAgIGRhdGEtPnNldFko
eSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXV0byogZGF0YSA9IHN0ZDo6
Z2V0X2lmPFNwb3RMaWdodFNvdXJjZURhdGE+KCZtX2RhdGEpKQorICAgICAgICBkYXRhLT5zZXRZ
KHkpOworfQorCit2b2lkIExpZ2h0U291cmNlOjpzZXRaKGZsb2F0IHopCit7CisgICAgaWYgKGF1
dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxQb2ludExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpIHsK
KyAgICAgICAgZGF0YS0+c2V0Wih6KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdXRvKiBkYXRhID0gc3RkOjpnZXRfaWY8U3BvdExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkp
CisgICAgICAgIGRhdGEtPnNldFooeik7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50
c0F0WChmbG9hdCBwb2ludHNBdFgpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9p
ZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRz
QXRYKHBvaW50c0F0WCk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WShmbG9h
dCBwb2ludHNBdFkpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGln
aHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRZKHBvaW50
c0F0WSk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WihmbG9hdCBwb2ludHNB
dFopCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VE
YXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRaKHBvaW50c0F0Wik7Cit9
CisgICAgCit2b2lkIExpZ2h0U291cmNlOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGln
aHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0U3BlY3VsYXJFeHBvbmVu
dChzcGVjdWxhckV4cG9uZW50KTsKK30KKwordm9pZCBMaWdodFNvdXJjZTo6c2V0TGltaXRpbmdD
b25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCit7CisgICAgaWYgKGF1dG8qIGRhdGEg
PSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0
YS0+c2V0TGltaXRpbmdDb25lQW5nbGUobGltaXRpbmdDb25lQW5nbGUpOworfQorCitMaWdodFNv
dXJjZVBhaW50RGF0YSBMaWdodFNvdXJjZTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNv
bnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9kYXRhLAorICAgICAgICBbJl0gKGNvbnN0IERpc3RhbnRMaWdodFNvdXJjZURh
dGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXB1dGVMaWdodFNvdXJjZVBh
aW50RGF0YShjb2xvclZlY3Rvcik7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUG9p
bnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXB1
dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb2xvclZlY3Rvcik7CisgICAgICAgIH0sCisgICAgICAg
IFsmXSAoY29uc3QgU3BvdExpZ2h0U291cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0
dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbG9yVmVjdG9yKTsKKyAgICAg
ICAgfQorICAgICk7Cit9CisKK0xpZ2h0U291cmNlUGl4ZWxEYXRhIExpZ2h0U291cmNlOjpjb21w
dXRlTGlnaHRTb3VyY2VQaXhlbERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdAoreworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25zdCBEaXN0YW50TGlnaHRTb3VyY2VE
YXRhJiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5jb21wdXRlTGlnaHRTb3VyY2VQ
aXhlbERhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZd
IChjb25zdCBQb2ludExpZ2h0U291cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJu
IGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7
CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgU3BvdExpZ2h0U291cmNlRGF0YSYgZGF0
YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRh
KHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CisgICAgICAgIH0KKyAgICApOworfQorCitUZXh0U3Ry
ZWFtJiBMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykg
Y29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAo
Y29uc3QgRGlzdGFudExpZ2h0U291cmNlRGF0YSYgZGF0YSkgLT4gVGV4dFN0cmVhbSYgeworICAg
ICAgICAgICAgcmV0dXJuIGRhdGEuZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgICAg
IH0sCisgICAgICAgIFsmXSAoY29uc3QgUG9pbnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIC0+IFRl
eHRTdHJlYW0mIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFNwb3RMaWdodFNvdXJjZURh
dGEmIGRhdGEpIC0+IFRleHRTdHJlYW0mIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICB9CisgICAgKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1
NWQyMzVhNzM4OWY1ZDUuLmQ1ZTYxYjkzMDBjMDhjMmIxZjNhZTAyN2RkMjhiNjViNmY3ZTVkYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmgKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOCArMjQs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRGlzdGFudExpZ2h0U291cmNlRGF0YS5o
IgorI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiU3BvdExpZ2h0
U291cmNlRGF0YS5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CkBAIC0z
Miw2NiArMzQsNjEgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1lbnVtIExpZ2h0VHlwZSB7Ci0gICAgTFNfRElTVEFOVCwKLSAgICBMU19QT0lOVCwKLSAgICBM
U19TUE9UCi19OworY2xhc3MgTGlnaHRTb3VyY2UgeworcHVibGljOgorICAgIHVzaW5nIERhdGEg
PSBzdGQ6OnZhcmlhbnQ8CisgICAgICAgIERpc3RhbnRMaWdodFNvdXJjZURhdGEsCisgICAgICAg
IFBvaW50TGlnaHRTb3VyY2VEYXRhLAorICAgICAgICBTcG90TGlnaHRTb3VyY2VEYXRhCisgICAg
PjsKIAotY2xhc3MgRmlsdGVyRWZmZWN0OworICAgIFdFQkNPUkVfRVhQT1JUIExpZ2h0U291cmNl
KERhdGEmJik7CisKKyAgICB2b2lkIHNldEF6aW11dGgoZmxvYXQpOworICAgIHZvaWQgc2V0RWxl
dmF0aW9uKGZsb2F0KTsKKyAgICAKKyAgICAvLyBUaGVzZSBhcmUgaW4gdXNlciBzcGFjZSBjb29y
ZGluYXRlcy4KKyAgICB2b2lkIHNldFgoZmxvYXQpOworICAgIHZvaWQgc2V0WShmbG9hdCk7Cisg
ICAgdm9pZCBzZXRaKGZsb2F0KTsKKyAgICB2b2lkIHNldFBvaW50c0F0WChmbG9hdCk7CisgICAg
dm9pZCBzZXRQb2ludHNBdFkoZmxvYXQpOworICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZsb2F0KTsK
KyAgICAKKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworICAgIHZvaWQgc2V0
TGltaXRpbmdDb25lQW5nbGUoZmxvYXQpOworCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgY29t
cHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3Ip
IGNvbnN0OwogCi1jbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291
cmNlPiB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IENvbXB1dGVkTGlnaHRpbmdEYXRhIHsKLSAgICAg
ICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yOwotICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JW
ZWN0b3I7Ci0gICAgICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgaW5pdGlh
bExpZ2h0aW5nRGF0YTsKLSAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKLSAg
ICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OwotICAgICAgICBmbG9hdCBjb25lRnVsbExpZ2h0
OwotICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKLSAgICB9OwotCi0gICAgTGlnaHRTb3Vy
Y2UoTGlnaHRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgeyB9Ci0KLSAg
ICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgpID0gZGVmYXVsdDsKLQotICAgIExpZ2h0VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFp
bnRpbmdEYXRhJikgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlz
IHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJm
YWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3Rh
bmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0
ZXJFZmZlY3QncyBidWZmZXIuCi0gICAgdmlydHVhbCBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21w
dXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCB6KSBjb25zdCA9IDA7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0
U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5
LCBmbG9hdCB6KSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzZXRBemltdXRoKGZsb2F0KSB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgLy8gVGhlc2UgYXJlIGluIHVzZXIgc3BhY2UgY29v
cmRpbmF0ZXMuCi0gICAgdmlydHVhbCBib29sIHNldFgoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIHNldFkoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNldFooZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IHNldFBvaW50c0F0WChmbG9hdCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2V0UG9pbnRzQXRZKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
ZXRQb2ludHNBdFooZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgdmlydHVhbCBi
b29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxMaWdodFNvdXJjZT4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBM
aWdodFR5cGUgbV90eXBlOworICAgIERhdGEgbV9kYXRhOwogfTsKIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgTGlnaHRTb3VyY2U6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9kYXRhOworfQog
Ci0jZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElHSFRTT1VSQ0UoQ2xhc3NOYW1lLCBU
eXBlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNsYXNzTmFtZSkg
XAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpMaWdodFNvdXJjZSYgc291
cmNlKSB7IHJldHVybiBzb3VyY2UudHlwZSgpID09IFdlYkNvcmU6OlR5cGU7IH0gXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8TGlnaHRTb3VyY2U+IExpZ2h0U291cmNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOwor
ICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBMaWdodFNvdXJjZShXVEZNb3ZlKCpkYXRhKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
TGlnaHRTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0xpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjOGMwYTc2ZWZjODE4ZDdmYzc5MTQ0
ZDcyYWMwNDFiZjVkY2E1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlRGF0YS5oCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWlu
Ym9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZsb2F0UG9pbnQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBMaWdodFNv
dXJjZVBpeGVsRGF0YSB7CisgICAgRmxvYXRQb2ludDNEIGNvbG9yVmVjdG9yOworICAgIEZsb2F0
UG9pbnQzRCBsaWdodFZlY3RvcjsKKyAgICBmbG9hdCBsaWdodFZlY3Rvckxlbmd0aDsKK307CisK
K3N0cnVjdCBMaWdodFNvdXJjZVBhaW50RGF0YSB7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEg
aW5pdGlhbExpZ2h0aW5nRGF0YTsKKyAgICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uVmVjdG9yOwor
ICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKKyAgICBmbG9hdCBjb25lRnVsbExpZ2h0OworICAg
IGludCBzcGVjdWxhckV4cG9uZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYjVl
MTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBI
ZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJl
bmlAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBv
aW50TGlnaHRTb3VyY2UuaCIKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFBv
aW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCi17Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3Np
dGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20g
bV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBv
aW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
eyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVk
Wi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci19Ci0KLUxpZ2h0U291cmNlOjpDb21wdXRl
ZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikg
Y29uc3QKLXsKLSAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7Ci0gICAgICAgIG1fYnVm
ZmVyUG9zaXRpb24ueCgpIC0geCwKLSAgICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAot
ICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKLSAgICB9OwotCi0gICAgcmV0dXJuIHsg
bGlnaHRWZWN0b3IsIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9y
LCBsaWdodFZlY3Rvci5sZW5ndGgoKSB9OwotfQotCi1ib29sIFBvaW50TGlnaHRTb3VyY2U6OnNl
dFgoZmxvYXQgeCkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi54KCkgPT0geCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WCh4KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQb2ludExpZ2h0U291cmNlOjpzZXRZKGZsb2F0IHkp
Ci17Ci0gICAgaWYgKG1fdXNlclNwYWNlUG9zaXRpb24ueSgpID09IHkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFkoeSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUG9pbnRMaWdodFNvdXJjZTo6c2V0WihmbG9hdCB6KQotewotICAgIGlm
IChtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSA9PSB6KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV91c2VyU3BhY2VQb3NpdGlvbi5zZXRaKHopOwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBQb2ludExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKLSAg
ICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVy
biB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5ODU5
NmQ3MTE1ZjRiYjk1YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBvaW50
TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb2ludExpZ2h0U291cmNlKHBv
c2l0aW9uKSk7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlclNwYWNlUG9zaXRpb247IH0KLSAgICBib29sIHNldFgoZmxvYXQp
IG92ZXJyaWRlOwotICAgIGJvb2wgc2V0WShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRa
KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKLSAgICBDb21wdXRlZExpZ2h0aW5n
RGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgs
IGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQot
cHJpdmF0ZToKLSAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRp
b24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQpCi0gICAgICAgICwgbV91c2VyU3Bh
Y2VQb3NpdGlvbihwb3NpdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1f
dXNlclNwYWNlUG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElH
SFRTT1VSQ0UoUG9pbnRMaWdodFNvdXJjZSwgTFNfUE9JTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxNDhlZWNjZDNjNjkzM2I5ZTIyNDI4OGI4MjQ5ZGQ3
ZGViZTEyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8
emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2ludExpZ2h0U291
cmNlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BvaW50TGlnaHRTb3VyY2VEYXRhOjpQb2ludExpZ2h0U291cmNlRGF0
YShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQorICAgIDogbV9wb3NpdGlvbihwb3NpdGlv
bikKK3sKK30KKworTGlnaHRTb3VyY2VQYWludERhdGEgUG9pbnRMaWdodFNvdXJjZURhdGE6OmNv
bXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9y
KSBjb25zdAoreworICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkobV9wb3NpdGlvbi54eSgpKTsK
KyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBv
c2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9
IHsgbV9wb3NpdGlvbi54KCkgKyBtX3Bvc2l0aW9uLnooKSwgbV9wb3NpdGlvbi55KCkgfTsKKyAg
ICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngo
KSk7CisgICAgCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgcGFpbnREYXRhID0geyB9OworICAg
IHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gY29sb3JWZWN0b3I7
CisgICAgcmV0dXJuIHBhaW50RGF0YTsKK30KKworTGlnaHRTb3VyY2VQaXhlbERhdGEgUG9pbnRM
aWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdodFNvdXJjZVBpeGVsRGF0YShjb25zdCBMaWdodFNv
dXJjZVBhaW50RGF0YSYgcGFpbnREYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0Cit7
CisgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yID0geworICAgICAgICBtX2J1ZmZlclBvc2l0
aW9uLngoKSAtIHgsCisgICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueSgpIC0geSwKKyAgICAgICAg
bV9idWZmZXJQb3NpdGlvbi56KCkgLSB6CisgICAgfTsKKworICAgIHJldHVybiB7IHBhaW50RGF0
YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLCBsaWdodFZlY3RvciwgbGlnaHRWZWN0
b3IubGVuZ3RoKCkgfTsKK30KKworVGV4dFN0cmVhbSYgUG9pbnRMaWdodFNvdXJjZURhdGE6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwg
Ilt0eXBlPVBPSU5ULUxJR0hUXSAiOworICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IG1fcG9z
aXRpb24gPDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNDFmMWNmZTI4
YWNmMWQwMjA2MThhMTc2NTZmNzhhOWFjNTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZURhdGEuaApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8
cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJMaWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQb2ludExpZ2h0U291cmNlRGF0YSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgUG9pbnRMaWdodFNvdXJjZURhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbik7CisK
KyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3Bvc2l0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lk
IHNldFkoZmxvYXQgeSkgeyBtX3Bvc2l0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFooZmxv
YXQgeikgeyBtX3Bvc2l0aW9uLnNldFkoeik7IH0KKworICAgIExpZ2h0U291cmNlUGFpbnREYXRh
IGNvbXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVj
dG9yKSBjb25zdDsKKyAgICBMaWdodFNvdXJjZVBpeGVsRGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQ
aXhlbERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0
IHopIGNvbnN0OworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBvaW50TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2Rl
ciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIG11dGFi
bGUgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBQb2ludExpZ2h0U291cmNlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3Bvc2l0aW9uOworfQorCit0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxQb2ludExpZ2h0U291cmNlRGF0YT4gUG9pbnRM
aWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRQb2ludDNEPiBwb3NpdGlvbjsKKyAgICBkZWNvZGVyID4+IHBvc2l0aW9uOwor
ICAgIGlmICghcG9zaXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gUG9pbnRMaWdodFNvdXJjZURhdGEoKnBvc2l0aW9uKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3
ZmZmOTA5MGFkNmNmM2EzLi4xZDM3MzEwN2QzYmQzZGFmZGNhMzViMmVlOGQzYzk5ODU0ZDMxNzVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsNjAgKzIxLDMyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNl
QWxwaGEuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgi
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVm
ZmVjdCYgc291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRl
KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3Qp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYSgpKTsKIH0KIAotY29uc3Qg
QXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJj
ZUFscGhhKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0
TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQorRmlsdGVySW1hZ2VWZWN0b3IgU291cmNlQWxwaGE6OnRha2VJ
bnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0
KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi12
b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVy
Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIGZpbHRlckNv
bnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwotICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OkRlc3RpbmF0aW9uSW4pOwotfQotCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFs
cGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRl
ckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAg
IHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFh
ZGU2NGM1NjFlODY0YTM5NDkwZi4uZmI2NmRiOGRjZGM5N2ZiMTQwMGVjMjY0NjNlYjZlZjVmZWVl
N2Y3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUo
RmlsdGVyRWZmZWN0Jik7Ci0KLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFt
ZSgpOworICAgIHN0YXRpYyBSZWY8U291cmNlQWxwaGE+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIFNvdXJjZUFscGhhKCk7CisKKyAgICBGaWx0ZXJJ
bWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIlNvdXJjZUFscGhhIjsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYg
b3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXgg
ODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzExMDdkNzgzOTJlOS4uZTYyMmVhOWQzNzliNWU2
MDkwYzYyNzJiZWJiYjAyNTI2Y2M5MzRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0NyArMjEsMzQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNv
dXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxT
b3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhp
Yzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpTb3VyY2VHcmFwaGljKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFk
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VHcmFw
aGljIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2Vm
ZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwot
ICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQg
U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlckltYWdlVmVjdG9y
IFNvdXJjZUdyYXBoaWM6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghcmVz
dWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkp
OworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRT
dHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W1NvdXJjZUdyYXBoaWNdXG4iOwogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXgg
MzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uOGRkY2JkZTAyNzQ2YjQx
NzcyYzY3ZDY0NTk5M2Q3NmRjYjMyNjQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVu
Z3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOCw0MSArMTksMzEgQEAKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlR3JhcGhp
Y19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsK
LQotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxTb3VyY2VHcmFwaGljPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToK
LSAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQotICAgICAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCi0gICAgewotICAgICAgICBzZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdy
YXBoaWMiOyB9CisgICAgU291cmNlR3JhcGhpYygpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVy
RWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3Vy
Y2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlcklt
YWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29y
ZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBo
aWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYg
ZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJ
bWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29s
IGFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5k
aWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0j
ZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjA3YWIwMGZm
OWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYzNDhkMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWlu
Ym9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
VW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3Zh
biA8cmVuaUB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU3BvdExpZ2h0U291cmNlLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
c3BvdC1saWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFuIGFic29sdXRlIHRyZXNob2xk
Ci0vLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwot
c3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwotCi12b2lkIFNw
b3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
ckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgbV9idWZmZXJQb3Np
dGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91
c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQg
b2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4K
LSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRp
b24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFp
bnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJT
cGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXpl
KCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxp
bWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0g
LWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4w
ZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdD
b25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGlu
Z0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAg
Ly8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBp
ZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAg
ICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBp
cyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAyOwotfQotCi1MaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgU3BvdExp
Z2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKLXsKLSAgICBGbG9hdFBv
aW50M0QgbGlnaHRWZWN0b3IgPSB7Ci0gICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwK
LSAgICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAotICAgICAgICBtX2J1ZmZlclBvc2l0
aW9uLnooKSAtIHoKLSAgICB9OwotICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRW
ZWN0b3IubGVuZ3RoKCk7Ci0KLSAgICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9y
ICogcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKLSAg
ICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKLSAg
ICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQK
LSAgICAgICAgcmV0dXJuIHsgbGlnaHRWZWN0b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5ndGggfTsK
LSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbAotICAgIGZsb2F0IGxp
Z2h0U3RyZW5ndGg7Ci0gICAgc3dpdGNoIChwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCkg
ewotICAgIGNhc2UgMDoKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVP
ZkFuZ2xlIF4gMCA9PSAxCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICAgbGln
aHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNv
c2luZU9mQW5nbGUKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRh
LmNvbmVGdWxsTGlnaHQpCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50aW5nRGF0YS5j
b25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0IC0gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpOwotCi0gICAgaWYgKGxpZ2h0U3Ry
ZW5ndGggPiAxLjBmKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKLQotICAgIHJldHVy
biB7Ci0gICAgICAgIGxpZ2h0VmVjdG9yLAotICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExp
Z2h0aW5nRGF0YS5jb2xvclZlY3RvciAqIGxpZ2h0U3RyZW5ndGgsCi0gICAgICAgIGxpZ2h0VmVj
dG9yTGVuZ3RoCi0gICAgfTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFgoZmxvYXQg
eCkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi54KCkgPT0geCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WCh4KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFkoZmxvYXQgeSkKLXsKLSAgICBp
ZiAobV91c2VyU3BhY2VQb3NpdGlvbi55KCkgPT0geSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WSh5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFooZmxvYXQgeikKLXsKLSAgICBpZiAobV91c2VyU3Bh
Y2VQb3NpdGlvbi56KCkgPT0geikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNw
YWNlUG9zaXRpb24uc2V0Wih6KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90TGln
aHRTb3VyY2U6OnNldFBvaW50c0F0WChmbG9hdCBwb2ludHNBdFgpCi17Ci0gICAgaWYgKG1fdXNl
clNwYWNlUG9pbnRzQXQueCgpID09IHBvaW50c0F0WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdXNlclNwYWNlUG9pbnRzQXQuc2V0WChwb2ludHNBdFgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0UG9pbnRzQXRZKGZsb2F0IHBvaW50c0F0
WSkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb2ludHNBdC55KCkgPT0gcG9pbnRzQXRZKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV91c2VyU3BhY2VQb2ludHNBdC5zZXRZKHBvaW50c0F0
WSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3BvdExpZ2h0U291cmNlOjpzZXRQb2lu
dHNBdFooZmxvYXQgcG9pbnRzQXRaKQotewotICAgIGlmIChtX3VzZXJTcGFjZVBvaW50c0F0Lnoo
KSA9PSBwb2ludHNBdFopCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3VzZXJTcGFjZVBv
aW50c0F0LnNldFoocG9pbnRzQXRaKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90
TGlnaHRTb3VyY2U6OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkK
LXsKLSAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9u
ZW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0TGlt
aXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCi17Ci0gICAgaWYgKG1fbGlt
aXRpbmdDb25lQW5nbGUgPT0gbGltaXRpbmdDb25lQW5nbGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX2xpbWl0aW5nQ29uZUFuZ2xlID0gbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9U1BP
VC1MSUdIVF0gIjsKLSAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJc
Il0iOwotICAgIHRzIDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsK
LSAgICB0cyA8PCAiW3NwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8
PCAiXCJdIjsKLSAgICB0cyA8PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0Nv
bmVBbmdsZSgpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZhZTQ0MmE1ZWE1MzRmZDFmM2JmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vz
c2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJj
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uLAotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRp
cmVjdGlvbiwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTcG90TGlnaHRTb3VyY2UocG9z
aXRpb24sIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBvbmVudCwgbGltaXRpbmdDb25lQW5nbGUpKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV91c2VyU3BhY2VQb3NpdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3BhY2VQb2ludHNBdDsgfQotICAgIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAg
ICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25l
QW5nbGU7IH0KLQotICAgIGJvb2wgc2V0WChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRZ
KGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwotICAgIGJv
b2wgc2V0UG9pbnRzQXRYKGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29sIHNldFBvaW50c0F0WShm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRQb2ludHNBdFooZmxvYXQpIG92ZXJyaWRlOwot
Ci0gICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29s
IHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5pdFBh
aW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsK
LSAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKLQotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBTcG90TGlnaHRTb3VyY2UoY29uc3Qg
RmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgICAgICA6
IExpZ2h0U291cmNlKExTX1NQT1QpCi0gICAgICAgICwgbV91c2VyU3BhY2VQb3NpdGlvbihwb3Np
dGlvbikKLSAgICAgICAgLCBtX3VzZXJTcGFjZVBvaW50c0F0KGRpcmVjdGlvbikKLSAgICAgICAg
LCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgLCBtX2xpbWl0
aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9h
dFBvaW50M0QgbV91c2VyU3BhY2VQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV91c2VyU3Bh
Y2VQb2ludHNBdDsKLQotICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOwotCi0gICAg
ZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwotICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TElHSFRTT1VSQ0UoU3BvdExpZ2h0U291cmNlLCBMU19TUE9UKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2VEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVlNzlmODc2YmVmMmU0NjFmMzFjZjU2NmNmNDIwMTk4
NmQ3MWM5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9i
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8
cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Bv
dExpZ2h0U291cmNlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nwb3RMaWdodFNvdXJjZURhdGE6OlNwb3RMaWdodFNv
dXJjZURhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNE
JiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFu
Z2xlKQorICAgIDogbV91c2VyU3BhY2VQb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fdXNlclNw
YWNlUG9pbnRzQXQoZGlyZWN0aW9uKQorICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFy
RXhwb25lbnQpCisgICAgLCBtX2xpbWl0aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQor
eworfQorCisvLyBzcG90LWxpZ2h0IGVkZ2UgZGFya2VuaW5nIGRlcGVuZHMgb24gYW4gYWJzb2x1
dGUgdHJlc2hvbGQKKy8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNz
aW9uIHRlc3RzCitzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7
CisKK0xpZ2h0U291cmNlUGFpbnREYXRhIFNwb3RMaWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdo
dFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9yKSBjb25zdAor
eworICAgIExpZ2h0U291cmNlUGFpbnREYXRhIHBhaW50RGF0YTsKKyAgICAKKyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSk7CisgICAgLy8gVG8gc2Nh
bGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUg
eCBkaXJlY3Rpb24gYnkgei4KKyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSB7IG1fdXNlclNwYWNl
UG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRp
b24ueSgpIH07CisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZm
ZXJQb3NpdGlvbi54KCkpOworICAgIAorICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRh
LmNvbG9yVmVjdG9yID0gY29sb3JWZWN0b3I7CisKKyAgICBwYWludERhdGEuZGlyZWN0aW9uVmVj
dG9yID0gbV91c2VyU3BhY2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRpb247CisgICAgcGFp
bnREYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKworICAgIGlmICghbV9saW1pdGlu
Z0NvbmVBbmdsZSkgeworICAgICAgICBwYWludERhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsK
KyAgICAgICAgcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5n
Q29uZUFuZ2xlOworICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQorICAgICAg
ICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAgIGlm
IChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorICAgICAgICAgICAgbGltaXRpbmdDb25lQW5n
bGUgPSA5MC4wZjsKKyAgICAgICAgcGFpbnREYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVn
MnJhZCgxODAuMGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOworICAgICAgICBwYWludERhdGEuY29u
ZUZ1bGxMaWdodCA9IHBhaW50RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9s
ZDsKKyAgICB9CisKKyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9u
ZW50IHZhbHVlcworICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQorICAgICAgICBwYWludERh
dGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7CisgICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50
ID09IDEuMGYpCisgICAgICAgIHBhaW50RGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKKyAgICBl
bHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgorICAgICAgICBwYWludERhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9IDI7CisgICAgCisgICAgcmV0dXJuIHBhaW50RGF0YTsKK30KKworTGln
aHRTb3VyY2VQaXhlbERhdGEgU3BvdExpZ2h0U291cmNlRGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNl
UGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCB4LCBp
bnQgeSwgZmxvYXQgeikgY29uc3QKK3sKKyAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7
CisgICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwKKyAgICAgICAgbV9idWZmZXJQb3Np
dGlvbi55KCkgLSB5LAorICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKKyAgICB9Owor
ICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRWZWN0b3IubGVuZ3RoKCk7CisKKyAg
ICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9yICogcGFpbnREYXRhLmRpcmVjdGlv
blZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKKyAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBh
aW50RGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKKyAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVj
ZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKKyAgICAgICAgcmV0dXJuIHsgbGlnaHRWZWN0
b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5ndGggfTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNv
bG9yIG9mIHRoZSBwaXhlbAorICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgc3dpdGNoIChw
YWludERhdGEuc3BlY3VsYXJFeHBvbmVudCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVPZkFuZ2xlIF4gMCA9PSAxCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMToKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAv
LyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNvc2luZU9mQW5nbGUKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUs
IG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChj
b3NpbmVPZkFuZ2xlID4gcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQpCisgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggKj0gKHBhaW50RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChw
YWludERhdGEuY29uZUN1dE9mZkxpbWl0IC0gcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQpOworCisg
ICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxLjBmKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4w
ZjsKKworICAgIHJldHVybiB7CisgICAgICAgIGxpZ2h0VmVjdG9yLAorICAgICAgICBwYWludERh
dGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciAqIGxpZ2h0U3RyZW5ndGgsCisgICAg
ICAgIGxpZ2h0VmVjdG9yTGVuZ3RoCisgICAgfTsKK30KKworVGV4dFN0cmVhbSYgU3BvdExpZ2h0
U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QK
K3sKKyAgICB0cyA8PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9u
PVwiIiA8PCBtX3VzZXJTcGFjZVBvc2l0aW9uIDw8ICJcIl0iOworICAgIHRzIDw8ICJbZGlyZWN0
aW9uPVwiIiA8PCBtX3VzZXJTcGFjZVBvaW50c0F0IDw8ICJcIl0iOworICAgIHRzIDw8ICJbc3Bl
Y3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJcIl0iOworICAgIHRz
IDw8ICJbbGltaXRpbmdDb25lQW5nbGU9XCIiIDw8IG1fbGltaXRpbmdDb25lQW5nbGUgPDwgIlwi
XSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZmRiOTM0MmI2ZDUwOGE5YjA4YzljMzhm
NDg2NzAzMTA2YmJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3Vp
bmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJM
aWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTcG90TGln
aHRTb3VyY2VEYXRhIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBTcG90TGlnaHRTb3Vy
Y2VEYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQzRCYg
ZGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmds
ZSk7CisKKyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFgo
eCk7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFko
eSk7IH0KKyAgICB2b2lkIHNldFooZmxvYXQgeikgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFoo
eik7IH0KKworICAgIHZvaWQgc2V0UG9pbnRzQXRYKGZsb2F0IHBvaW50c0F0WCkgeyBtX3VzZXJT
cGFjZVBvaW50c0F0LnNldFgocG9pbnRzQXRYKTsgfQorICAgIHZvaWQgc2V0UG9pbnRzQXRZKGZs
b2F0IHBvaW50c0F0WSkgeyBtX3VzZXJTcGFjZVBvaW50c0F0LnNldFkocG9pbnRzQXRZKTsgfQor
ICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZsb2F0IHBvaW50c0F0WikgeyBtX3VzZXJTcGFjZVBvaW50
c0F0LnNldFoocG9pbnRzQXRaKTsgfQorCisgICAgdm9pZCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQpIHsgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBv
bmVudDsgfQorICAgIHZvaWQgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25l
QW5nbGUpIHsgbV9saW1pdGluZ0NvbmVBbmdsZSA9IGxpbWl0aW5nQ29uZUFuZ2xlOyB9CisKKyAg
ICBMaWdodFNvdXJjZVBhaW50RGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoY29uc3Qg
RmxvYXRQb2ludDNEJiBjb2xvclZlY3RvcikgY29uc3Q7CisgICAgTGlnaHRTb3VyY2VQaXhlbERh
dGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTcG90TGlnaHRTb3Vy
Y2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQzRCBt
X3VzZXJTcGFjZVBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvaW50c0F0
OworCisgICAgbXV0YWJsZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKworICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOwor
fTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU3BvdExpZ2h0U291cmNlRGF0YTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3VzZXJT
cGFjZVBvc2l0aW9uOworICAgIGVuY29kZXIgPDwgbV91c2VyU3BhY2VQb2ludHNBdDsKKyAgICBl
bmNvZGVyIDw8IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBlbmNvZGVyIDw8IG1fbGltaXRpbmdD
b25lQW5nbGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNw
b3RMaWdodFNvdXJjZURhdGE+IFNwb3RMaWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludDNEPiB1c2VyU3BhY2VQb3Np
dGlvbjsKKyAgICBkZWNvZGVyID4+IHVzZXJTcGFjZVBvc2l0aW9uOworICAgIGlmICghdXNlclNw
YWNlUG9zaXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UG9pbnQzRD4gdXNlclNwYWNlUG9pbnRzQXQ7CisgICAgZGVjb2RlciA+PiB1
c2VyU3BhY2VQb2ludHNBdDsKKyAgICBpZiAoIXVzZXJTcGFjZVBvaW50c0F0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3BlY3VsYXJF
eHBvbmVudDsKKyAgICBkZWNvZGVyID4+IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgaWYgKCFzcGVj
dWxhckV4cG9uZW50KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gbGltaXRpbmdDb25lQW5nbGU7CisgICAgZGVjb2RlciA+PiBsaW1pdGlu
Z0NvbmVBbmdsZTsKKyAgICBpZiAoIWxpbWl0aW5nQ29uZUFuZ2xlKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNwb3RMaWdodFNvdXJjZURhdGEoKnVzZXJTcGFj
ZVBvc2l0aW9uLCAqdXNlclNwYWNlUG9pbnRzQXQsICpzcGVjdWxhckV4cG9uZW50LCAqbGltaXRp
bmdDb25lQW5nbGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRT
b2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVlYjA3MmQ1ZjZiNzIwZDE3
NDFmOGU1MzRjZDE2MjgzNTM2YTMwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVCbGVuZC5oIgorCisjaW5jbHVkZSAi
RmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKK2Jvb2wgRkVCbGVuZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0g
Mik7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW5wdXQy
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBhdXRvIGlucHV0MkltYWdlID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFpbnB1dEltYWdlIHx8ICFpbnB1dDJJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VS
ZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1h
Z2VSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VSZWN0MiA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChp
bnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIAorICAg
IG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW1hZ2VSZWN0Mik7
CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGltYWdlUmVj
dCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjMzZGRiYjI2ZGUxZTdkOTZkMWY1Njgx
YmU0MDc3ZWM5MzkwYzI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYg
Ymx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAg
ZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7
CisgICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsg
dmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVz
WyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICog
ZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1Owor
ICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEy
XSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9
IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVl
c1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVB
bmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3Qg
ZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0g
Z3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVu
dHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVu
ICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVu
dHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNb
N10gKyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0
aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2
b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiAr
IDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9
IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBm
aWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVu
dHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5n
dGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBl
ID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4
TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhl
IGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8g
aXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2
YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3Ig
PSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdklt
YWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAg
IHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1
ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwor
ICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVz
ID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAg
c3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
OiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKwor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2
aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTog
eworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10g
KiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Cisg
ICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAg
IHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlz
b3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0
ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXpl
IGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
KQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNv
bXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZl
Y3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9u
ZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsg
cGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVl
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxv
YXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAg
ICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBw
aXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBw
aXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJh
eS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUg
PSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9h
dCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAg
ICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBp
eGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7
CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MywgYWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworVmVjdG9y
PGZsb2F0PiBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcykKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVz
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ld
KTsKKyAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4
OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1sw
XS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIp
IHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQu
aW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisgICAgICAgIG91dHB1dEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICB9
CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2Uo
KSB9OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIG91dHB1dEltYWdlLT5sb2dp
Y2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRh
dGEoKTsKKyAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUo
KTsKKworICAgIGF1dG8gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisKKyAg
ICBzd2l0Y2ggKG1fY29sb3JNYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBp
eGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6
CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBpbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThmN2VmYWEyM2NkNjNiODU5MjhhNzQ2M2Q2ZTc5NWJh
YzZiYjFkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApAQCAt
MCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgorCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgTG9va3VwVGFi
bGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
Cit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZh
bHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikK
K3sKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rp
b24udGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAg
ICBpZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOwor
ICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsK
KyAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107CisgICAgICAgIGRvdWJsZSB2MiA9
IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKKyAgICAgICAgZG91Ymxl
IHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOworICAg
ICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAg
dmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVz
OworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQor
ICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChp
ICogbikgLyAyNTUuMCk7CisgICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21wdXRlTGlu
ZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0
aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OworICAgICAg
ICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFs
dWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgZXhwb25l
bnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNz
aW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJs
ZQorICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1
ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0
KTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Cisg
ICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQor
CitzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAg
ICAgdGFibGVbaV0gPSBpOworCisgICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgVHJhbnNm
ZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisg
ICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLAorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxl
LAorICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwKKyAgICAgICAgY29tcHV0ZUxpbmVhclRh
YmxlLAorICAgICAgICBjb21wdXRlR2FtbWFUYWJsZQorICAgIH07CisKKyAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVm
ZmVjdCkpOworICAgIGNhbGxFZmZlY3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsK
KworICAgIHJldHVybiB0YWJsZTsKK30KKworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQo
KTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dFBp
eGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVm
ZmVyLT5kYXRhKCk7CisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFn
ZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1
dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KG91dHB1dEltYWdlUmVjdCksIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisKKyAgICBMb29rdXBUYWJsZSByZWRUYWJsZSA9IGNvbXB1dGVMb29rdXBU
YWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlID0gY29tcHV0
ZUxvb2t1cFRhYmxlKG1fZ3JlZW5GdW5jdGlvbik7CisgICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
ID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1ZUZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBh
bHBoYVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYWxwaGFGdW5jdGlvbik7CisKKyAgICB1
bnNpZ25lZCBvdXRwdXRQaXhlbEFycmF5TGVuZ3RoID0gb3V0cHV0UGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICB1aW50OF90KiBkYXRhID0gb3V0cHV0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBvdXRwdXRQaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRd
ID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0
ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CisgICAgICAgIGRhdGFb
cGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOworICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQg
KyAzXV07CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMGQ2ZjNhZTk0ZTdjN2Q4MDhiNTdjMWZjYzQ0MjRjYjg4MTBiMTAwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
RUNvbXBvc2l0ZS5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2ln
bmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0g
eyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQg
dWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+
MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGlu
dCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25l
ZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAg
ZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAg
ICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQg
PSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgewor
ICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hh
ciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGsz
ICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAq
IGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRL
NDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSBjbGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAg
Kytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRpb247CisgICAgfQorfQorCisvLyBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlz
IG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0
aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlvbi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBi
ND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7
CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQor
ICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2Nh
bGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0g
MCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBp
MSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2Fs
ZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBz
Y2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSByZXN1bHQ7CisgICAgICAgICsrc291
cmNlOworICAgICAgICArK2Rlc3RpbmF0aW9uOworICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVu
c2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhl
bEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sK
KyAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3RkOjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4w
ZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMpICsgazQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9
IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYs
IGszKSArIGs0OworICAgIGlmICgoazQgPj0gMC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJM
aW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQgPD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4w
ZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7CisgICAgICAgIGlmIChrNCkgeworICAgICAgICAg
ICAgaWYgKGsxKQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoazEpCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8
MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGs0KSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgs
IGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAg
ICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4
ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0KK30KKyNlbmRpZgorCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291
cmNlLmxlbmd0aCgpOworICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0
aW5hdGlvbi5sZW5ndGgoKSkpOworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5
IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQorICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4MykpOworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05l
b24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKKyNlbHNlCisgICAgYXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3Rp
bmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisjZW5kaWYKK30KKworYm9v
bCBGRUNvbXBvc2l0ZTo6YXBwbHlBcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAg
IGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0
c1sxXS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0
cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIG91
dHB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCks
IGlucHV0LmltYWdlUmVjdCgpKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0Lmdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJl
Y3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIWlu
cHV0UGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXQy
SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5w
dXQyLmltYWdlUmVjdCgpKTsKKyAgICBpbnB1dDIuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0
cHV0MkltYWdlUmVjdCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBwbGF0Zm9ybUFy
aXRobWV0aWNTb2Z0d2FyZSgqaW5wdXRQaXhlbEFycmF5LCBvdXRwdXRQaXhlbEFycmF5LCBtX2sx
LCBtX2syLCBtX2szLCBtX2s0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBv
c2l0ZTo6YXBwbHlOb25Bcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8m
IGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0c1sxXS5n
ZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAg
YXV0byBpbnB1dDJJbWFnZSA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJ
bWFnZSB8fCAhaW5wdXQySW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
b3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVj
dCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdl
UmVjdCgpKTsKKyAgICBhdXRvIGlucHV0MkltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBzd2l0Y2gg
KG1fY29tcG9zaXRlT3BlcmF0b3IpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VO
S05PV046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewor
ICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAg
ICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICAgICAgYXV0byBpbWFn
ZVJlY3QyID0gaW5wdXQyLmltYWdlUmVjdCgpOworICAgICAgICBhdXRvIG91dHB1dFJlY3QgPSBv
dXRwdXQuaW1hZ2VSZWN0KCk7CisKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbWFn
ZVJlY3Q7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0Mik7Cisg
ICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qob3V0cHV0UmVjdCk7CisgICAgICAgIGlm
IChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgYXV0byBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAg
ICAgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5KC1vdXRwdXRSZWN0LmxvY2F0aW9uKCkp
OworICAgICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCk7CisKKyAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0g
ZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2VSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0Lmxv
Y2F0aW9uKCkpOworICAgICAgICBzb3VyY2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KHNv
dXJjZVJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7
CisgICAgICAgIHNvdXJjZTJSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0Mi5sb2NhdGlvbigpKTsKKyAg
ICAgICAgc291cmNlMlJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qoc291cmNlMlJlY3QpOwor
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgYWRq
dXN0ZWREZXN0aW5hdGlvblJlY3QsIHNvdXJjZTJSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBz
b3VyY2VSZWN0LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3Qp
OworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlu
cHV0MkltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dDJJbWFnZS0+bG9naWNhbFNp
emUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0MkltYWdlLCBpbnB1dDJJbWFnZVJlY3QpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFn
ZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW5wdXRJbWFnZS0+bG9naWNhbFNpemUoKSksIENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0LCBJbnRSZWN0
KEludFBvaW50KCksIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRv
cjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgorICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dElt
YWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0
ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJl
dHVybiBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOwor
ICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2Vv
bWV0cnkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdkNDJk
MTcwZmYyMTU2MDlkMjgzZjY5YzY2YWZmMGNmNmIxZDg3MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKKworI2lu
Y2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVu
dGF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUg
aW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwKKyAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAg
fAorICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAgICAg
IHwgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBF
ICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIHJl
Z2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUgY2Fs
Y3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisKKyAg
IEV4YW1wbGU6CisgICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKworICAg
ICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAgICAg
VGFyZ2V0OiB4OjEsIHk6MworCisgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUg
dGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAgICAg
Li4uCisgICAgICAgIC4uLgorICAgICAgICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhpcyBj
YXNlIGFyZSB0aGUgZm9sbG93aW5nOgorICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQgYW5k
ICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cgeDIg
YW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBvbmx5
IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8IHky
CisKKyAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAgIFJl
Z2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4MTog
MSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKKyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMsIHgy
OiAxMCwgeTI6IDEwCisgICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5Mjog
MTAgKGVtcHR5IHJlZ2lvbikKKworICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlucyBt
b3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0gdG8g
Y2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4KKyAg
IEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2ggY2Fs
bHMgZ2V0UGl4ZWxWYWx1ZSwKKyAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUgaW1h
Z2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJpZ2dl
ciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisgICBm
dW5jdGlvbi4KKworICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBpbiBj
b21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9yIHRo
ZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3b3Vs
ZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCisqLworCisvLyBQYXJhbGxlbGl6
YXRpb24gcGFydHMKK3N0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMK
Kworc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNy
Y1BpeGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAg
aW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXpl
OworICAgIGZsb2F0IGRpdmlzb3I7CisgICAgZmxvYXQgYmlhczsKKyAgICBJbnRQb2ludCB0YXJn
ZXRPZmZzZXQ7CisgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgIGJvb2wgcHJlc2VydmVB
bHBoYTsKKyAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKK307CisKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5z
aWduZWQgY2hhciBtYXggPSAyNTUpCit7CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKGNoYW5uZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4gbWF4Owor
ICAgIHJldHVybiBjaGFubmVsOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldERl
c3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCB0b3RhbHNbNF0s
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcykKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6
IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xh
bXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CisKKyAg
ICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgeworICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhl
bCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKKyAgICAgICAgKytwaXhlbDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOworfQorCitzdGF0
aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50
IHlFbmQpCit7CisgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMK
KyAgICBpbnQgcGl4ZWwgPSAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGlu
Z0RhdGEud2lkdGggKyBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGlu
dCBrZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChw
YWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAgIC8vIENvbnRhaW5z
IHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAgICBmbG9hdCB0b3RhbHNbNF07CisKKyAg
ICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVu
c3VyZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICAvLyBT
a2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKKyAgICBwaXhlbCArPSAo
Y2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwor
ICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVh
c2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKKworICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsg
eSA+IHlTdGFydDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4
ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBz
dGFydEtlcm5lbFBpeGVsOworICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAg
ICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAg
ICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDAp
IHsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOworICAg
ICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5w
cmVzZXJ2ZUFscGhhKQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWw7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwg
Kz0ga2VybmVsSW5jcmVhc2U7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdE
YXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRp
bmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVB
bHBoYSk7CisgICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAg
ICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZh
bHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYg
KHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRp
bmdEYXRhLmhlaWdodCkKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsg
eCkgPDwgMjsKKworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7CisgICAgZGVm
YXVsdDogLy8gRURHRU1PREVfTk9ORQorICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBFREdF
TU9ERV9EVVBMSUNBVEU6CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHggPSAwOwor
ICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgICAgIHgg
PSBwYWludGluZ0RhdGEud2lkdGggLSAxOworICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAg
ICB5ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAg
ICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOworICAgICAgICByZXR1cm4gKHkg
KiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIGNhc2UgRURHRU1PREVfV1JBUDoK
KyAgICAgICAgd2hpbGUgKHggPCAwKQorICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lk
dGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB3aGlsZSAoeSA8
IDApCisgICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHkgJT0g
cGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndp
ZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CisKKy8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwor
c3RhdGljIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwor
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhl
bFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAt
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFp
bnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9m
IHJnYihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gbV9kaXZp
c29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMK
KyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOworCisgICAgZm9yIChpbnQgeSA9IGhl
aWdodDsgeSA+IDA7IC0teSkgeworICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAt
LXgpIHsKKyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxN
YXRyaXguc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtl
cm5lbFBpeGVsWDsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBp
eGVsWTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndp
ZHRoKCk7CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNb
MV0gPSAwOworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sz
XSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2Vy
bmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOworICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4
ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVs
SW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAg
ICArK2tlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAg
ICAgICAgICAgIGlmICghLS13aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhl
bFggPSBzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhl
bFk7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUu
d2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAg
ICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsK
KyAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKKyAgICB9Cit9CisKK2Jvb2wgRkVDb252b2x2
ZU1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBp
bnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBp
eGVsQnVmZmVyKG1fcHJlc2VydmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
IGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1
dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAg
YXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdl
UmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGlucHV0UGl4ZWxBcnJheTsKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICBp
bnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0
LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIElu
dFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIGlm
ICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRTaXpl
IHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworCisgICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKKyAgICAgICAgKmlucHV0UGl4ZWxBcnJheSwKKyAgICAg
ICAgb3V0cHV0UGl4ZWxBcnJheSwKKyAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCisgICAgICAg
IHBhaW50U2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rp
dmlzb3IsCisgICAgICAgIG1fYmlhcyAqIDI1NSwKKyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisg
ICAgICAgIG1fZWRnZU1vZGUsCisgICAgICAgIG1fcHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVD
b2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICB9OworCisg
ICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBw
YWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90
dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworCisgICAg
aWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8gUmFyZSBz
aXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaW50IGl0ZXJhdGlv
bnMgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbikgeworICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJh
dGlvbnM7CisgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAx
KSAvIHN0cmlkZTsKKworICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0Nv
dW50LCBbJl0oc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlk
ZSAqIGluZGV4KTsKKyAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUg
KiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRp
bmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xp
cFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBtX3Rh
cmdldE9mZnNldC55KCkgKyAxOworICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgp
LCBtX3RhcmdldE9mZnNldC55KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0
b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX3Rh
cmdldE9mZnNldC54KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsK
KyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9OyAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM5MDMyOWQ2N2JiMTkxOTA0N2Ni
MjBiOWRhNGFhYWZhMjU5MGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHks
IHVuc2lnbmVkIHJvd0J5dGVzKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwg
PSA0OworICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKK30KKwor
Ym9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFO
TkVMX1VOS05PV04pOworICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9V
TktOT1dOKTsKKyAgICAKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRv
JiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0u
Z2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0
UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBp
eGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJ
bWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1
dC5pbWFnZVJlY3QoKSk7CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5jbG9zaW5n
SW50UmVjdChvdXRwdXRJbWFnZVJlY3QpKTsKKyAgICAKKyAgICBhdXRvIG91dHB1dDJJbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dDIuaW1h
Z2VSZWN0KCkpOworICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVl
cyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNv
bG9yIHZhbHVlcy4KKyAgICBhdXRvIGlucHV0MlBpeGVsQnVmZmVyID0gaW5wdXQyLmdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5n
SW50UmVjdChvdXRwdXQySW1hZ2VSZWN0KSk7CisKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIg
fHwgIWlucHV0MlBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NF
UlQoaW5wdXRQaXhlbEJ1ZmZlci0+bGVuZ3RoKCkgPT0gaW5wdXQyUGl4ZWxCdWZmZXItPmxlbmd0
aCgpKTsKKworICAgIGF1dG8gcGFpbnRTaXplID0gZXhwYW5kZWRJbnRTaXplKG91dHB1dC5sb2dp
Y2FsU2l6ZSgpKTsKKworICAgIGF1dG8gc2NhbGUgPSBnZW9tZXRyeS5tYXBJbWFnZVNpemUoeyBt
X3NjYWxlLCBtX3NjYWxlIH0pOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lk
dGgoKSAvIDI1NS4wOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkg
LyAyNTUuMDsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAq
IDAuNTsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAw
LjU7CisgICAgCisgICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgp
OworICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKworICAg
IGludCByb3dCeXRlcyA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKKworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgaW50IGxpbmVTdGFy
dE9mZnNldCA9IHkgKiByb3dCeXRlczsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBh
aW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4
ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlu
dCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBpbnB1dDJQaXhl
bEJ1ZmZlci0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsg
c2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JZICogaW5wdXQyUGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25J
bmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOworCisgICAgICAg
ICAgICB1bnNpZ25lZCogb3V0cHV0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAw
IHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgKm91dHB1
dFBpeGVsUHRyID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBz
cmNZLCByb3dCeXRlcykpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURy
b3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA0ZTllZWEyZjlmMWZjYjcwMTI0N2Jj
ZGYzZGI5N2FiZjU2NWZkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBibHVyUmFkaXVzID0gMiAqIGdlb21ldHJ5Lm1hcFJlc29sdmVkSW1hZ2VTaXpl
KHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgYXV0byBvZmZzZXQg
PSBnZW9tZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSk7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW5wdXRJbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXRJbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJl
Y3QoKSk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCA9IGlucHV0SW1hZ2VS
ZWN0OworICAgIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBh
dXRvJiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRD
b250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCk7CisgICAg
b3V0cHV0Q29udGV4dC5zZXRBbHBoYSgxKTsKKworICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRv
dyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOworCisgICAgYXV0byBmb3JtYXQg
PSBQaXhlbEJ1ZmZlckZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIGF1dG8g
c2hhZG93QXJlYSA9IEludFJlY3QgeyBJbnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+bG9naWNhbFNp
emUoKSB9OworICAgIGF1dG8gc2hhZG93UGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXNoYWRvd1BpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJyYXkg
PSBzaGFkb3dQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVy
SW1hZ2Uoc2hhZG93UGl4ZWxBcnJheS5kYXRhKCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCks
IDQgKiBzaGFkb3dQaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworCisgICAgb3V0cHV0SW1h
Z2UtPnB1dFBpeGVsQnVmZmVyKCpzaGFkb3dQaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAg
ICBvdXRwdXRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlSW4pOworICAgIG91dHB1dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgb3V0cHV0LmxvZ2ljYWxTaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICBvdXRwdXRD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRp
b25PdmVyKTsKKworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdl
LCBpbnB1dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MmJlYWUxMGJlNTBlZWNmMTk5NGI3ZWY1Yzk0YWQ1MWY2MDk1ODk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgRkVGbG9vZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICBhdXRv
IG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fZmxvb2RDb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShtX2Zsb29kT3BhY2l0eSk7CisgICAgb3V0cHV0
SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRJ
bWFnZS0+bG9naWNhbFNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU1MTQ2MGY3OGQ1ZDZiNDJiNmU2MWE5MDg4
NTM2NWNmNDc1NGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAg
LTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSwgUy5MLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB2b2lkIGtlcm5l
bFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRh
TGVmdCwgaW50JiBkZWx0YVJpZ2h0KQoreworICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgor
ICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgeworICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCEo
cmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOwor
ICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDI7CisgICAgICAgICAgICBk
ZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAg
IGRlbHRhTGVmdCsrOworICAgICAgICAgICAgZGVsdGFSaWdodC0tOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAg
ICAgICAgICAgIGRlbHRhUmlnaHQrKzsKKyAgICAgICAgICAgIHJhZGl1cysrOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCitzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25s
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJy
YXkmIGRzdFBpeGVsQXJyYXksCisgICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4
UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGlu
dCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCit7CisgICAgY29uc3Qg
dWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOworICAgIHVpbnQ4X3QqIGRz
dERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKKyAgICAvLyBNZW1vcnkgYWxpZ25tZW50IGlz
OiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgorICAgIGNvbnN0IGludCBjaGFubmVsID0gMzsKKwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50
IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bSA9IDA7CisKKyAgICAgICAg
Ly8gRmlsbCB0aGUga2VybmVsLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5l
bFNpemU7ICsraSkgeworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBz
dHJpZGU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zm
c2V0OworICAgICAgICAgICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEJsdXJyaW5nLgorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdp
ZHRoOyArK3gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUg
KyB4ICogc3RyaWRlICsgY2hhbm5lbDsKKyAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRz
dERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7CisgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4oc3VtIC8gZHgpOworCisgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisg
ICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
ZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAg
ICAgICAgICAgICAgIHN1bSAtPSAqc3JjUHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAg
ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgc3VtICs9ICpzcmNQdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheSwKKyAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJp
ZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJv
b2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIGNvbnN0IGludCBt
YXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOworICAgIGlmIChh
bHBoYUltYWdlKQorICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5
LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUs
ICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKKworICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBk
c3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICAvLyBDb25jZXJuaW5nIHRoZSBh
cnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4g
VGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQorICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAq
IGNoYW5uZWxzLgorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsK
KyAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bVIgPSAw
LCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOworCisgICAgICAgIGlmIChlZGdlTW9kZSA9
PSBFREdFTU9ERV9OT05FKSB7CisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgc3VtRyArPSAqc3Jj
UHRyKys7CisgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAg
ICAgc3VtQSArPSAqc3JjUHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCbHVy
cmluZy4KKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkg
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICog
c3RyaWRlOworICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhl
bEJ5dGVPZmZzZXQ7CisKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1SIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKKworICAgICAgICAgICAgICAgIC8vIFNo
aWZ0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVm
dCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0g
c3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRy
WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0g
c3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh4ICsg
ZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJp
Z2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0
OworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtRyArPSBzcmNQdHJbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3Jj
UHRyWzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUuCisgICAgICAgICAgICAvLyBH
ZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUnLgorICAgICAgICAgICAgY29u
c3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOworICAgICAgICAgICAg
Y29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVj
dFdpZHRoIC0gMSkgKiBzdHJpZGUpOworCisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwu
CisgICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMg
b2YgJ2knPworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3Ry
aWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBv
ZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9
IGVkZ2VWYWx1ZUxlZnRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVl
TGVmdFsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgeworICAgICAgICAg
ICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOworICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9
IGVkZ2VWYWx1ZVJpZ2h0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1
ZVJpZ2h0WzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHN1bVIgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIr
KzsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAg
ICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIEJsdXJyaW5nLgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgdWludDhfdCog
ZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKKworICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7CisgICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKKyAgICAgICAg
ICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOworICAg
ICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwor
CisgICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAgICAgIGlmICh4
IDwgZHhMZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFsw
XTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOworICAgICAg
ICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0
IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBz
cmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAt
PSBzcmNQdHJbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOworICAg
ICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAg
c3VtQSAtPSBzcmNQdHJbM107CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRn
ZVZhbHVlUmlnaHRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmln
aHRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmln
aHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAg
ICAgICBzdW1HICs9IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQ
dHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIFVTRShB
Q0NFTEVSQVRFKQorc3RhdGljIGlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhl
aWdodCkKK3sKKyAgICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJp
ZGUgPD0gMCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgorICAg
IGlmIChrZXJuZWxTaXplICUgMiAhPSAxKQorICAgICAgICBrZXJuZWxTaXplICs9IDE7CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVmZmVyOworICAgIGVmZmVjdEluQnVmZmVyLmRhdGEg
PSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKKyAgICBlZmZlY3RJbkJ1ZmZl
ci53aWR0aCA9IGVmZmVjdFdpZHRoOworICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVj
dEhlaWdodDsKKyAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIHZJ
bWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVyOworICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0g
dGVtcEJ1ZmZlci5kYXRhKCk7CisgICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lk
dGg7CisgICAgZWZmZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZl
Y3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHNp
emUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdp
dGggYSBzcGVjaWFsIGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgorICAgIC8vIHRoZSBzaXplIG5l
ZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgorICAgIHNpemVfdCB0
bXBCdWZmZXJTaXplID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVy
LCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7CisgICAgaWYgKHRt
cEJ1ZmZlclNpemUgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogdG1wQnVmZmVy
ID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJTaXplKTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdC
ODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwg
a2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFn
ZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwg
dG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCk7CisgICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAm
ZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUs
IDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7CisK
KyAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisg
ICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOworICAg
IG1lbWNweShpb0J1ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5n
dGgoKSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUs
IEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKK3sKKyAgICBpbnQgZHhMZWZ0ID0gMDsKKyAgICBpbnQgZHhSaWdodCA9IDA7CisgICAg
aW50IGR5TGVmdCA9IDA7CisgICAgaW50IGR5UmlnaHQgPSAwOworICAgIAorICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKKyAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CisgICAgICAgICAgICBrZXJuZWxQb3Np
dGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAg
ICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21C
dWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRl
LCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7
CisjZWxzZQorICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJu
ZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBw
YWludFNpemUuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAg
ICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGtlcm5lbFNpemVZKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBr
ZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJ
Q1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hC
bHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0
b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNp
emUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQor
ICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
LndpZHRoKCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBz
dGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIGlm
ICgmaW9CdWZmZXIgIT0gZnJvbUJ1ZmZlcikgeworICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVu
Z3RoKCkgPT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICBtZW1jcHkoaW9CdWZmZXIu
ZGF0YSgpLCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwg
Ym9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgc3Ry
aWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAg
aWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9O
T05FIHx8IGVkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKKyAgICAgICAgYWNjZWxl
cmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUs
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKKyAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVs
QXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxw
aGFJbWFnZSwgZWRnZU1vZGUpOworfQorCisjaWYgIVVTRShBQ0NFTEVSQVRFKQorc3RhdGljIHZv
aWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKK3sKKyAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVy
cy0+aGVpZ2h0KTsKKyAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWlu
dFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisjaWYg
IVVTRShBQ0NFTEVSQVRFKQorICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgo
KTsKKyAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworICAgIGlu
dCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhl
aWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNp
emUud2lkdGgoKSk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAg
aW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChqb2Jz
ID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCIt
c2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkg
bGFyZ2VyIHNpbmNlCisgICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBz
aXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhF
eHRyYSIuCisgICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVp
Z2h0KCkgLyBqb2JzOworICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWlu
dFNpemUuaGVpZ2h0KCkgJSBqb2JzOworCisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwor
ICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAg
ICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2Jz
LnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwor
CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRy
YUhlaWdodDsKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJh
ID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7CisgICAgICAgICAgICAgICAgaW50IGVu
ZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7
CisKKyAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICogc2Nh
bmxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFt
cGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5p
bml0aWFsaXplZChibG9ja1NpemUpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1z
LmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGlu
ZSwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYXJh
bXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuaGVp
Z2h0ID0gZW5kWSAtIHN0YXJ0WTsKKyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVgg
PSBrZXJuZWxTaXplWDsKKyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJu
ZWxTaXplWTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1
dGUoKTsKKworICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGlt
YWdlLgorICAgICAgICAgICAgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9i
ID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAg
ICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0
aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgICAgIGlu
dCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0
ICsgMSA6IGJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0
ZWRCbG9ja0hlaWdodDsKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdo
dCAqIHNjYW5saW5lOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVu
dFkgKiBzY2FubGluZTsKKyAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdo
dCAqIHNjYW5saW5lOworCisgICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSAr
IGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VP
ZmZzZXQsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0K
KyNlbmRpZgorCisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhh
cHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBw
YWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworfQorCitib29sIEZFR2F1c3NpYW5C
bHVyOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0
cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgCisgICAgYXV0
byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVj
dCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0
cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
UmVjdChvdXRwdXRJbWFnZVJlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICgh
bV9zdGREZXZpYXRpb25YICYmICFtX3N0ZERldmlhdGlvblkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRyeS5t
YXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25ZIH0p
KTsKKyAgICBhdXRvIHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOwor
CisgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7CisgICAgaWYgKCF0bXBJbWFnZURhdGEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBsYXRmb3JtQXBwbHkob3V0cHV0UGl4ZWxB
cnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdo
dCgpLCBwYWludFNpemUsIG91dHB1dC5pc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGlu
Z1NvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjZlMDM1YTU2ODc5
NTc5YTRkNWViNTNiMTllZTIwMmJkZjk3ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKwor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkxpZ2h0aW5nRGF0YS5oIgor
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKKyAgICBMaWdodGluZ0RhdGEg
ZGF0YTsKKyAgICBMaWdodFNvdXJjZVBhaW50RGF0YSBwYWludERhdGE7CisgICAgaW50IHlTdGFy
dDsKKyAgICBpbnQgeUVuZDsKK307CisKKy8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3JtYWwg
Y29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lgorc3RhdGljIGNv
bnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKK3N0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGNG
YWN0b3IxZGl2NCA9IC0xIC8gNC5mOworc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRp
djMgPSAtMiAvIDMuZjsKKworc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50
RGF0YSYgcGFpbnREYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rv
clksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQoreworICAgIGZsb2F0IHog
PSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOworICAgIExpZ2h0U291cmNlUGl4ZWxEYXRhIHBp
eGVsRGF0YSA9IGRhdGEuc291cmNlLT5jb21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEocGFpbnRE
YXRhLCB4LCB5LCB6KTsKKworICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgaWYgKG5vcm1h
bDJEVmVjdG9yLmlzWmVybygpKSB7CisgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAs
IDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KKyAgICAgICAgaWYgKGRhdGEudHlw
ZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogcGl4ZWxEYXRhLmxpZ2h0VmVj
dG9yLnooKSAvIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKKyAgICAgICAgICAgICAg
ICBwaXhlbERhdGEubGlnaHRWZWN0b3IueCgpLAorICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5s
aWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLnoo
KSArIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aAorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwor
ICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9y
LnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndh
eVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZl
Y3RvciA9IHsKKyAgICAgICAgICAgIGZhY3RvclggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICog
ZGF0YS5zdXJmYWNlU2NhbGUsCisgICAgICAgICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3Iu
aGVpZ2h0KCkgKiBkYXRhLnN1cmZhY2VTY2FsZSwKKyAgICAgICAgICAgIDEuMGYKKyAgICAgICAg
fTsKKyAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0
aCgpOworCisgICAgICAgIGlmIChkYXRhLnR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VD
b25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBwaXhlbERhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CisgICAgICAg
ICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLngoKSwKKyAgICAgICAgICAgICAgICBwaXhl
bERhdGEubGlnaHRWZWN0b3IueSgpLAorICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5saWdodFZl
Y3Rvci56KCkgKyBwaXhlbERhdGEubGlnaHRWZWN0b3JMZW5ndGgKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5n
dGgoKTsKKyAgICAgICAgICAgIGlmIChkYXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAg
ICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogKG5vcm1h
bFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlW
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxm
d2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwg
ZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7CisgICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKKworICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIHBpeGVsRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAorICAgICAgICBzdGF0
aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogcGl4ZWxEYXRhLmNvbG9yVmVjdG9yLnko
KSAqIDI1NS4wZiksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGgg
KiBwaXhlbERhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQorICAgIH07CisgICAgCisgICAg
ZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCB4LCBpbnQgeSwg
ZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK3sK
KyAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCB4LCB5LCBmYWN0
b3JYLCBmYWN0b3JZLCBub3JtYWwyRFZlY3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCisvLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9t
IGFuZCB3cml0ZSB0byB0aGUgc2FtZSBwaXhlbCBidWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRo
ZSBhbHBoYSBjaGFubmVsLCBhbmQgd3JpdGVzIHRoZSBub24tYWxwaGEgY2hhbm5lbHMuCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCBzdGFy
dFksIGludCBlbmRZKQoreworICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdl
IHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgorICAgIEFTU0VSVChzdGFy
dFkpOworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIGZvciAoaW50IHkgPSBzdGFy
dFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgaW50IHJvd1N0YXJ0T2Zmc2V0ID0geSAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBwcmV2aW91c1Jvd1N0
YXJ0ID0gcm93U3RhcnRPZmZzZXQgLSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgICAgICBpbnQgbmV4dFJvd1N0YXJ0ID0gcm93U3RhcnRPZmZzZXQgKyBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOworCisgICAgICAgIC8vIGFscGhhV2luZG93IGlzIGEgbG9jYWwg
Y2FjaGUgb2YgYWxwaGEgdmFsdWVzLgorICAgICAgICAvLyBGaWxsIHRoZSB0d28gcmlnaHQgY29s
dW1ucyBwdXR0aW5nIHRoZSBsZWZ0IGVkZ2UgdmFsdWUgaW4gdGhlIGNlbnRlciBjb2x1bW4uCisg
ICAgICAgIC8vIEZvciBlYWNoIHBpeGVsLCB3ZSBzaGlmdCBlYWNoIHJvdyBsZWZ0IHRoZW4gZmls
bCB0aGUgcmlnaHQgY29sdW1uLgorICAgICAgICBBbHBoYVdpbmRvdyBhbHBoYVdpbmRvdzsKKyAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0VG9wKGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3Rh
cnQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldFRvcFJp
Z2h0KGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGFscGhhV2luZG93LnNldENlbnRlcihkYXRh
LnBpeGVscy0+aXRlbShyb3dTdGFydE9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGFscGhh
V2luZG93LnNldEJvdHRvbShkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldEJvdHRvbVJpZ2h0KGRhdGEu
cGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisKKyAgICAgICAgaW50IG9mZnNldCA9IHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6
ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7
ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIGFscGhhV2luZG93LnNo
aWZ0KCk7CisgICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRE
YXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1h
bChvZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOworICAgICAgICB9
CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAgIHBs
YXRmb3JtQXBwbHlHZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFp
bnREYXRhLCBwYXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBk
YXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSBwYWludERhdGEpCit7CisgICAgdW5zaWdu
ZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOworICAgIHVu
c2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKKyAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24s
IG1heE51bVRocmVhZHMpOworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAg
ICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3Jt
QXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKworICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKKyAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKKyAgICAgICAgaWYgKGpvYiA+IDEpIHsKKyAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMg
dGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQorICAgICAgICAgICAgLy8geVN0
ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSBy
ZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0g
cm93c1RvUHJvY2VzcyAvIGpvYjsKKyAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJh
ID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKKworICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Cisg
ICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKKyAgICAgICAgICAgICAg
ICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnBhaW50RGF0YSA9IHBhaW50RGF0YTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OworICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2Ig
PCBqb2JzV2l0aEV4dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7CisgICAgICAgICAgICAgICAgcGFy
YW1zLnlFbmQgPSB5U3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0KKworICAgIHBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnREYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSYgcGFpbnREYXRhKQor
eworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHlu
YW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCisjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJN
X1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyAgICBwbGF0Zm9ybUFw
cGx5TmVvbihkYXRhLCBwYWludERhdGEpOworI2Vsc2UKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJp
YyhkYXRhLCBwYWludERhdGEpOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIGRyYXdMaWdodGlu
Zyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBk
YXRhLmNvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0Nv
bG9yU3BhY2UpOworICAgIExpZ2h0U291cmNlUGFpbnREYXRhIHBhaW50RGF0YSA9IGRhdGEuc291
cmNlLT5jb21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoRmxvYXRQb2ludDNEKHIsIGcsIGIpKTsK
KworICAgIC8vIFRvcCBsZWZ0LgorICAgIGludCBvZmZzZXQgPSAwOworICAgIHNldFBpeGVsKG9m
ZnNldCwgZGF0YSwgcGFpbnREYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOworCisgICAgLy8gVG9wIHJpZ2h0LgorICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9m
ZnNldCkpOworCisgICAgLy8gQm90dG9tIGxlZnQuCisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zm
c2V0KSk7CisKKyAgICAvLyBCb3R0b20gcmlnaHQuCisgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2
MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOworCisgICAg
aWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyKSB7CisgICAgICAgIC8vIFRvcCByb3cu
CisgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQor
ICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIHgsIDAsIGNGYWN0
b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKKworICAg
ICAgICAvLyBCb3R0b20gcm93LgorICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Cisg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IG9mZnNldCArPSBjUGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRh
LCBwYWludERhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2Mywg
Y0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAg
ICBpZiAoZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA+PSAyKSB7CisgICAgICAgIC8vIExlZnQg
Y29sdW1uLgorICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7
ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAg
ICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50RGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYy
LCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKworICAgICAg
ICAvLyBSaWdodCBjb2x1bW4uCisgICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludERhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFj
dG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CisgICAgfQorCisgICAg
aWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyICYmIGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUgPj0gMikgeworICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCisgICAgICAgIHBsYXRm
b3JtQXBwbHkoZGF0YSwgcGFpbnREYXRhKTsKKyAgICB9CisKKyAgICBpbnQgbGFzdFBpeGVsID0g
KGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgaWYgKGRhdGEudHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0
OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCisgICAgICAgICAgICBkYXRhLnBpeGVs
cy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgdWlu
dDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOworICAgICAgICAgICAgdWludDhfdCBhMiA9
IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKKyAgICAgICAgICAgIHVpbnQ4X3QgYTMgPSBkYXRh
LnBpeGVscy0+aXRlbShpICsgMik7CisgICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRv
IG1heChhMSwgYTIsIGEzKQorICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEg
Pj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZFTGlnaHRpbmc6
OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBd
LmdldCgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1
dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQ
aXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0
SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5w
dXQuaW1hZ2VSZWN0KCkpOworCisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0
cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIC8vIEZJWE1FOiBz
dXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJl
IGlzIHRoYXQgdGhlIFczCisgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhl
bSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8g
b3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0
aGV5IGFyZSByZWxpYWJsZS4KKyAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxk
IGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgSW50U2l6ZSBzaXplID0gSW50U2l6
ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlm
IHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMgc3Bl
YyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMu
CisgICAgaWYgKHNpemUud2lkdGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmNvbG9y
ID0gbV9jb2xvcjsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1
LjBmOworICAgIGRhdGEuZGlmZnVzZUNvbnN0YW50ID0gbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAg
ZGF0YS5zcGVjdWxhckNvbnN0YW50ID0gbV9zcGVjdWxhckNvbnN0YW50OworICAgIGRhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBkYXRhLnNvdXJjZSA9ICZt
X3NvdXJjZTsKKyAgICBkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UgPSAmb3BlcmF0aW5nQ29sb3JT
cGFjZSgpOworICAgIGRhdGEudHlwZSA9IHR5cGUoKTsKKworICAgIGRhdGEucGl4ZWxzID0gJm91
dHB1dFBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHNp
emUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0g
c2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gc2l6ZS5o
ZWlnaHQoKSAtIDE7CisKKyAgICBkcmF3TGlnaHRpbmcoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJn
ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDQ4NTJjOTRlZmJhMzEzYzdmYzlhYTg3YTAwZWE5
MjFiMmUwYjIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1l
cmdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgcmVzdWx0LCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpbnB1dHMuaXNFbXB0eSgpKTsKKworICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworCisgICAgZm9yIChhdXRvJiBpbnB1
dCA6IGlucHV0cykgeworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gaW5wdXQtPmltYWdlQnVm
ZmVyKCk7CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5w
dXQtPmltYWdlUmVjdCgpLCByZXN1bHQuaW1hZ2VSZWN0KCkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3Jw
aG9sb2d5U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzMWVi
OTM1ZGM3N2M1ZjgxMjhjN2Q0NDhkNjAyN2I3NTk1MWVhOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9s
b2d5U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5o
IgorCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5o
IgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHsKKyAg
ICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yOworICAgIGludCByYWRpdXNY
OworICAgIGludCByYWRpdXNZOworCisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1Bp
eGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgaW50
IHdpZHRoOworICAgIGludCBoZWlnaHQ7Cit9OworCitzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMgeworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBNb3JwaG9sb2d5UGFpbnRpbmdE
YXRhJiwgaW50LCBpbnQpPiBmaWxsUmVnaW9uOworICAgIGludCBzdGFydFk7CisgICAgaW50IGVu
ZFk7CisgICAgY29uc3QgTW9ycGhvbG9neVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworfTsK
KwordXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4sIDE2PjsKKworc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoKQoreworICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OworfQorCitp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKK3sKKyAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOworfQorCitpbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Cit9
CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiYgYikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKKwor
ICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Cit9CisKK3RlbXBsYXRlPE1vcnBob2xv
Z3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCit7
CisgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQ
YWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3Jj
UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0p
OworCisgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKKyAgICAg
ICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAg
ZXh0cmVtdW0gPSBtaW5Pck1heDxtb3JwaG9sb2d5T3BlcmF0b3I+KGV4dHJlbXVtLCBwaXhlbCk7
CisgICAgfQorICAgIHJldHVybiBleHRyZW11bTsKK30KKworQUxXQVlTX0lOTElORSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRo
LCBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQoreworICAgIGlmIChtb3Jw
aG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQorICAgICAgICBy
ZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhl
bEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKKworICAgIHJldHVybiBjb2x1bW5FeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3Rh
cnQsIHlFbmQsIHdpZHRoKTsKK30KKwordGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK3sKKyAgICBhdXRv
IGV4dHJlbXVtID0ga2VybmVsWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVs
LnNpemUoKTsgKytpKQorICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PG1vcnBob2xvZ3lPcGVy
YXRvcj4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7CisKKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisK
K0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVt
KGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xv
Z3lPcGVyYXRvcikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKKworICAgIHJldHVybiBrZXJuZWxFeHRyZW11
bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOworfQorCitzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uKGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisg
ICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eTsKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
OworCisgICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKKyAgICBj
b25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOworICAgIGNvbnN0IGludCB3
aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRp
bmdEYXRhLmhlaWdodDsKKworICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kg
PD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYg
c3RhcnRZIDwgZW5kWSk7CisKKyAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7CisgICAgZXh0cmVt
YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7CisKKyAgICBmb3IgKGlu
dCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIGludCB5UmFkaXVzU3RhcnQg
PSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7CisgICAgICAgIGludCB5UmFkaXVzRW5kID0gc3Rk
OjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOworCisgICAgICAgIGV4dHJlbWEuc2hyaW5r
KDApOworCisgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUg
ZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCByYWRpdXNYOyArK3gpCisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRy
ZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yKSk7CisKKyAgICAgICAgLy8gS2VybmVsIGlz
IGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVz
WCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhl
bEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFp
bnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpOworCisgICAgICAgICAgICBpZiAoeCA+IHJh
ZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4
ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAgICAgICAg
ICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVs
RXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpLnZhbHVl
OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2Vy
KFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKK3sKKyAgICBwYXJhbS0+ZmlsbFJlZ2lv
bigqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworfQor
CitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKK3sKKyAgICAvLyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hp
bWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBv
ZiBhYm91dCAwLjY1LgorICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRh
LnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1OworCisgICAgc3RhdGljIGNv
bnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworICAgIAorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBw
YWludGluZ0RhdGEuaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVy
ID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEu
aGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKKyAg
ICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4g
MSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKKyAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2Ug
ZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAg
ICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRz
OworICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUg
bnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAg
IGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgeworICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbS5maWxsUmVnaW9uID0gZmls
bFJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEg
OiBqb2JTaXplOworICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1v
ZGVsCisgICAgfQorCisgICAgZmlsbFJlZ2lvbihwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0
YS5oZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShGaWx0
ZXJJbWFnZSYgaW4sIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
aW50IHJhZGl1c1gsIGludCByYWRpdXNZKQoreworICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRp
dXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7CisgICAgICAgIGluLmNvcHlQaXhl
bEJ1ZmZlcihkc3RQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBpbWFnZVJlY3QsIGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZFTW9ycGhvbG9neTo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0
cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBJ
bnRSZWN0KGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0Lmlt
YWdlUmVjdCgpKSk7CisKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0
U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5l
cmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCksIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgb3V0cHV0SW1hZ2VS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShnZW9t
ZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAg
ICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKG91dHB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFk
aXVzLndpZHRoKCkpOworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4ob3V0cHV0SW1hZ2VSZWN0
LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCksIHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yID0gbV9tb3JwaG9sb2d5T3BlcmF0b3I7Cisg
ICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0Rh
dGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOworCisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkgPSBpbnB1dFBpeGVsQXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVs
QXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWls
ZihvdXRwdXRJbWFnZVJlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNl
aWxmKG91dHB1dEltYWdlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBwbGF0Zm9ybUFwcGx5KHBhaW50
aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
ZmIwYjhhYWFkMGE1YTU1Mjg4ZDE3ZWVjNDA4MDEyZTZlN2VmYjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zm
c2V0U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlu
cHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9
IGlucHV0LmltYWdlUmVjdCgpOworICAgIGlucHV0SW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVz
b2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2Vv
bWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0SW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOwor
CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2Us
IGlucHV0SW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mY2EwNTM1Y2MyN2M0MzQyMmM2OGIxZWM5ZjY4MGIzMGIzMTAxOWI4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVRpbGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2Uu
aCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQg
PSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0
cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJl
Y3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbnB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1h
cEltYWdlUmVjdChpbnB1dEltYWdlUmVjdCk7CisKKyAgICBhdXRvIHRpbGVSZWN0ID0gZ2VvbWV0
cnkuY2xpcFRvRmlsdGVyUmVnaW9uKGlucHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICB0
aWxlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdCh0aWxlUmVjdCk7CisKKyAgICBhdXRvIG91
dHB1dEltYWdlUmVjdCA9IG91dHB1dC5pbWFnZVJlY3QoKTsKKyAgICBvdXRwdXRJbWFnZVJlY3Qg
PSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0SW1hZ2VSZWN0KTsKKworICAgIGF1dG8gbWF4
T3V0cHV0UmVjdCA9IGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihvdXRwdXQucHJpbWl0aXZl
U3VicmVnaW9uKCkpOworICAgIG1heE91dHB1dFJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qo
bWF4T3V0cHV0UmVjdCk7CisKKyAgICBhdXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAx
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIXRpbGVJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3Jh
cGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0
KCk7CisgICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkp
OworICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1
dEltYWdlUmVjdC5sb2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBp
ZiAoIXRpbGVJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5lVHJhbnNm
b3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGls
ZVJlY3QubG9jYXRpb24oKSAtIG1heE91dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRv
IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsg
dHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
b3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4
dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKyAgICAKKyAgICBvdXRwdXRDb250
ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dEltYWdlUmVjdC5zaXpl
KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45OTdiNDAxNTFlNDc2MGRlNWNlZmJmOTFiMDkwMmViM2ZmNWQyZDI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdl
ZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdHVyYnVs
ZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVh
cnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKKworLyoKKyAgICBQcm9kdWNlcyByZXN1
bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAo
YSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9
IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2Vl
IFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgK
KyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0
MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmln
aW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5
NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKioz
MSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7
IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3Mzsg
Ly8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0
YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOworCitzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJl
Y3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBh
cmFsbGVsIGpvYnMuCisKK3N0cnVjdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhIHsKKyAgICBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25n
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAg
ICAgICAgOiB0dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkKKyAgICAgICAgLCBiYXNlRnJl
cXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJl
cXVlbmN5WSkKKyAgICAgICAgLCBudW1PY3RhdmVzKG51bU9jdGF2ZXMpCisgICAgICAgICwgc2Vl
ZChzZWVkKQorICAgICAgICAsIHN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKQorICAgICAgICAsIHBh
aW50aW5nU2l6ZShwYWludGluZ1NpemUpCisgICAgeworICAgIH0KKworICAgIC8vIENvbXB1dGUg
cHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgaW5saW5lIGxvbmcgcmFuZG9tKCkKKyAgICB7Cisg
ICAgICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAt
IHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApCisg
ICAgICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKKyAgICAgICAgc2VlZCA9IHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUdXJidWxlbmNlVHlwZSB0
dXJidWxlbmNlVHlwZTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WTsKKyAgICBpbnQgbnVtT2N0YXZlczsKKyAgICBsb25nIHNlZWQ7CisgICAgYm9v
bCBzdGl0Y2hUaWxlczsKKyAgICBJbnRTaXplIHBhaW50aW5nU2l6ZTsKKworICAgIGludCBsYXR0
aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07CisgICAgZmxvYXQgZ3JhZGllbnRbNF1b
MiAqIHNfYmxvY2tTaXplICsgMl1bMl07Cit9OworCitzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAg
U3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKKworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11
Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAg
fTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAg
aW50IHdyYXBZIHsgMCB9OworfTsKKworc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0aXRjaERh
dGEsIGludCwgaW50KT4gZmlsbFJlZ2lvbjsKKyAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxB
cnJheTsKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2Nh
bGU7CisgICAgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgIFN0aXRj
aERhdGEgc3RpdGNoRGF0YTsKKyAgICBpbnQgc3RhcnRZOworICAgIGludCBlbmRZOworfTsKKwor
aW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCit7CisgICAgcmV0dXJuIHQgKiB0ICog
KDMgLSAyICogdCk7Cit9CisKK2lubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0
IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKK30K
Kworc3RhdGljIHZvaWQgaW5pdFBhaW50KFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSkKK3sKKyAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOworCisgICAgLy8gVGhlIHNl
ZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAg
aWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0g
LShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBpZiAo
cGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdE
YXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKworICAgIGZsb2F0KiBncmFkaWVudDsKKyAg
ICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAgICAgIHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOworICAgICAgICAgICAgZ3JhZGllbnQg
PSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5n
RGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxv
Y2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6
ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAh
Z3JhZGllbnRbMV0pOworICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlw
b3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGdyYWRpZW50WzBdIC89
IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxp
emF0aW9uRmFjdG9yOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IHNfYmxv
Y2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgp
ICUgc19ibG9ja1NpemU7CisgICAgICAgIEFTU0VSVChqID49IDApOworICAgICAgICBBU1NFUlQo
aiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKKyAgICAgICAgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CisgICAgfQorCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsr
Y2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3Nf
YmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07
CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUg
KyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKKyAgICAgICAg
fQorICAgIH0KK30KKworc3RhdGljIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwg
Ym9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKKyAgICBm
bG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgQVNTRVJUKHRpbGVXaWR0
aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOworCisgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQg
dHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAvLyBzbyB0
aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgorICAgIGlmIChiYXNlRnJl
cXVlbmN5WCkgeworICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICBmbG9hdCBoaWdoRnJlcXVl
bmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAg
ICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRv
IHRoZSBzdGFuZGFyZC4KKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5
IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAgICAgYmFzZUZyZXF1
ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKKyAgICB9CisgICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7
CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZy
ZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNl
aWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZy
ZXF1ZW5jeVkpCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5Owor
ICAgIH0KKworICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKKyAgICBzdGl0Y2hEYXRhLndy
YXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgc3RpdGNoRGF0YS5o
ZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICBzdGl0Y2hE
YXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OworCisgICAgcmV0
dXJuIHN0aXRjaERhdGE7Cit9CisKKy8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6
IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVt
ZW50Lgorc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQoreworICAgIHN0cnVjdCBOb2lz
ZVBvc2l0aW9uIHsKKyAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0
ZXh0LgorICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0
LgorICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4K
KworICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOworICAgICAgICAgICAgLy8gIGJ4MCA9
IChpbnQpdDsKKyAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKKyAgICAgICAgICAgIC8vICBy
eDAgPSB0IC0gKGludCl0OworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQg
KyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAg
IGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQorICAgICAgICAgICAgLy8g
ICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSB3
cmFwU2l6ZSkKKyAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOworCisgICAgICAgICAgICAv
LyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAgICAvLyAgIGJ4MSAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFw
U2l6ZSkKKyAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOworICAgIE5v
aXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7CisKKyAgICAvLyBJZiBzdGl0Y2hp
bmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAocGFpbnRpbmdE
YXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0
aCwgc3RpdGNoRGF0YS53cmFwWCk7CisgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5o
ZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOworICAgIH0KKworICAgIC8vIGJ4MCAmPSBCTTsKKyAg
ICAvLyBieDEgJj0gQk07CisgICAgLy8gYnkwICY9IEJNOworICAgIC8vIGJ5MSAmPSBCTTsKKyAg
ICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VYLm5leHRJbmRleCAmPSBz
X2Jsb2NrTWFzazsKKyAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZ
Lm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKworICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9y
W2J4MF07CisgICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKKyAgICBpbnQgbGF0dGlj
ZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOworICAg
IGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lz
ZVgubmV4dEluZGV4XTsKKworICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7CisgICAg
Ly8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKKyAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZl
KG5vaXNlWC5mcmFjdGlvbik7CisgICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJh
Y3Rpb24pOworCisgICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsK
KyAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQorICAgICAgICBpbnQg
YjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVku
aW5kZXhdOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUg
PSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKKyAgICAgICAgZmxvYXQgdSA9IG5vaXNl
WC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOworCisgICAgICAgIC8v
IGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07CisgICAgICAgIGludCBiMTAgPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhd
OworICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50
W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOworICAgICAgICBmbG9h
dCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFb
MV07CisgICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYSA9IGxp
bmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworCisgICAgICAgIC8vIGIwMSA9IHVMYXR0aWNl
U2VsZWN0b3JbaSArIGJ5MV07CisgICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyBy
eTEgPSByeTAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxd
W2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOworICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9u
ICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisKKyAgICAgICAgLy8gYjEx
ID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKKyAgICAgICAgaW50IGIxMSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhd
OworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEg
KiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMTFdOworICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSAr
IChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisgICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1
LCB2KTsKKyAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwor
CisgICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKKyAgICAgICAgcmV0dXJuIGxpbmVh
ckludGVycG9sYXRpb24oc3ksIGEsIGIpOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAg
ICBub2lzZUZvckNoYW5uZWwoMCksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKKyAgICAg
ICAgbm9pc2VGb3JDaGFubmVsKDIpLAorICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKKyAgICB9
OworfQorCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50
cy4KKy8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4o
U1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCitzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKK3sKKyAgICByZXR1
cm4geworICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90
PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCisg
ICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVu
dHNbMl0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRp
Y19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKKyAgICB9Owor
fQorCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0IFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKKyAg
ICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJl
cXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKKyAgICBm
bG9hdCByYXRpbyA9IDE7CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRp
bmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEu
dHVyYnVsZW5jZVR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87CisKKyAgICAgICAgbm9pc2VWZWN0b3Iu
c2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lz
ZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8gKj0gMjsKKworICAgICAgICBpZiAocGFp
bnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZh
bHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9u
IGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1
YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Cisg
ICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Bl
cmxpbk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAg
ICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9p
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUp
ICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCisgICAgaWYgKHBhaW50aW5nRGF0YS50dXJi
dWxlbmNlVHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsg
MC41ZjsKKworICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKQorewor
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmls
dGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBz
dGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7CisKKyAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsg
MSk7CisgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAg
cG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IHBvaW50LnNjYWxlZCgxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNj
YWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsK
KyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgp
LCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKKyAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5u
ZWwgKz0gNDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldv
cmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBwYXJhbWV0ZXJz
LT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5maWx0ZXJS
ZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRh
LCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMt
PmVuZFkpOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0
LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7Cisg
ICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAg
ICBJbnRTaXplIG91dHB1dFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworICAgIEludFNpemUg
dGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6
ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKKyAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBtX3N0aXRjaFRpbGVzKTsKKworICAgIFR1cmJ1bGVuY2VQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhKG1fdHVyYnVsZW5jZVR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbV9udW1PY3RhdmVzLCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMsIHRpbGVTaXpl
KTsKKyAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKworICAgIGF1dG8gYXJlYSA9IG91dHB1
dFNpemUuYXJlYSgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGhlaWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CisKKyAg
ICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRp
bWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0
RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgp
KSk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQ
YXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmZmlsbFJlZ2lv
bldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFy
YW1ldGVyIGFycmF5CisgICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKKyAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxp
dCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJh
IHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCisgICAgICAgICAgICB1
bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBq
b2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0WSA9IDA7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2Jz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0g
cGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsbFJl
Z2lvbiA9IHN0YXRpY19jYXN0PHZvaWQoKikoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEsIGludCwgaW50KT4oJmZpbGxSZWdpb24pOworICAgICAgICAgICAgICAgIHBhcmFt
cy5waXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LmZpbHRlclJlZ2lvbiA9IG91dHB1dEltYWdlUmVjdDsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
ZmlsdGVyU2NhbGUgPSBnZW9tZXRyeS5maWx0ZXJTY2FsZSgpOworICAgICAgICAgICAgICAgIHBh
cmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZ
ID0gc3RhcnRZOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgam9iSGVpZ2h0ID0gKGkgPCBq
b2JzV2l0aEV4dHJhKSA/IHN0ZXBZICsgMSA6IHN0ZXBZOworICAgICAgICAgICAgICAgIHBhcmFt
cy5lbmRZID0gcGFyYW1zLnN0YXJ0WSArIGpvYkhlaWdodDsKKyAgICAgICAgICAgICAgICBzdGFy
dFkgKz0gam9iSGVpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBu
byByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgor
ICAgIGZpbGxSZWdpb24ob3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBnZW9tZXRy
eS5maWx0ZXJTY2FsZSgpLCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
SW1hZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNWZmYzJl
OGUzYTUzNzE3MGZhMjk4YzlmNGQyYzg3YzZhNzZiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdl
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlU29mdHdhcmUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJJbWFnZVNvZnR3YXJlOjpGaWx0ZXJJbWFnZVNvZnR3
YXJlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IGltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAgIDogRmlsdGVy
SW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGZhbHNlLCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSwgaW1hZ2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIt
PnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci0+Y29sb3JTcGFjZSgpKQorICAgICwgbV9p
bWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIEZp
bHRlckltYWdlU29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9n
aWNhbFNpemUpIH07CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4
ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCksIHJlY3QpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFn
ZVNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTYyN2U4ZWRkZWQ3ZTJl
OTU3YjE3ZTkzZGUyMGQ0MmViMTBiOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJl
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUg
bWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmlsdGVySW1hZ2VTb2Z0d2FyZSA6IHB1YmxpYyBGaWx0ZXJJbWFnZSB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlOworICAgIEZpbHRlckltYWdlU29mdHdh
cmUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
aW1hZ2VSZWN0LCBSZWY8SW1hZ2VCdWZmZXI+JiYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBvdmVycmlkZSB7IHJldHVybiBtX2lt
YWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVySW1hZ2VTb2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0xpZ2h0aW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdodGluZ0RhdGEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MTQ5ZDRhYmM4NTJlYjBiMTQxMzAyN2MwNGEzY2NlNDZlMjliYTBjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdo
dGluZ0RhdGEuaApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29u
c3RleHByIGludCBjUGl4ZWxTaXplID0gNDsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNo
YW5uZWxPZmZzZXQgPSAzOworc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOworCitzdHJ1Y3QgQWxwaGFXaW5kb3cgeworICAg
IHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OworICAgIAorICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlv
bnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgorICAgIHVp
bnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9
CisgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFb
MV1bMF07IH0KKyAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVy
biBhbHBoYVsyXVswXTsgfQorCisgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAg
ICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KKyAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAg
ICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQorICAgIHVpbnQ4X3QgYm90dG9tKCkg
Y29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICB2b2lkIHNl
dFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAg
ICB2b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFs
dWU7IH0KKyAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJd
WzFdID0gdmFsdWU7IH0KKworICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAg
IHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1
ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0Qm90dG9tUmln
aHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQorCisgICAgc3RhdGlj
IHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAgICB7CisgICAgICAgIGFscGhhWzBd
ID0gYWxwaGFbMV07CisgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2hpZnQoKQorICAgIHsKKyAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOworICAg
ICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBj
b250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAgICBDb2xvciBjb2xvcjsK
KyAgICBmbG9hdCBzdXJmYWNlU2NhbGU7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAg
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7CisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAg
ICBjb25zdCBMaWdodFNvdXJjZSogc291cmNlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKyAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZTsK
KworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAgaW50IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOworICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOworICAgIGludCBoZWln
aHREZWNyZWFzZWRCeU9uZTsKKworICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0OworICAgIAorICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNl
dCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21M
ZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJv
d05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKK307CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5n
RGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBp
bnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAg
IC0yICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAg
IC0yICogY2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9Owor
fQorCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2Vu
dGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0
ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLTIgKiBsZWZ0ICsg
MiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAorICAgICAgICAtbGVmdCAtIDIg
KiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQK
KyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50
ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBi
b3R0b21MZWZ0ICsgMiAqIGJvdHRvbQorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIExpZ2h0
aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBj
ZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZz
ZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSAyICogd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10
b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21S
aWdodCwKKyAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21S
aWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6aW50ZXJpb3JO
b3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoreworICAg
IGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQ7CisgICAgCisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ocmlnaHRBbHBoYU9mZnNldCkpOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSkpOworICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwor
CisgICAgaW50IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7CisgICAgaW50IHRvcExlZnQgPSBh
bHBoYVdpbmRvdy50b3BMZWZ0KCk7CisgICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwor
CisgICAgaW50IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7CisgICAgaW50
IGJvdHRvbSA9IGFscGhhV2luZG93LmJvdHRvbSgpOworCisgICAgLy8gVGhlIGFscGhhV2luZG93
IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4K
KyAgICBhbHBoYVdpbmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OworICAgIGFscGhhV2luZG93
LmFscGhhWzFdWzJdID0gcmlnaHQ7CisgICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0
b21SaWdodDsKKyAgICAKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3Jr
aW5nIHdpdGggc29tZSBzcG90LWNoZWNrcy4KKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVm
dCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKKyAgICBBU1NF
UlQoYWxwaGFXaW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKKworICAgIHJl
dHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdo
dCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9w
IC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAg
fTsKK30KKworaW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAg
IGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICog
Y2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9w
ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBM
aWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAg
b2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3AgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAg
ICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAorICAgICAgICAt
MiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5s
aW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICog
bGVmdCArIDIgKiByaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQg
KyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUg
TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAg
IGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAg
ICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKKyAgICAgICAgLXRv
cExlZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKKyAgICB9OworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMTc0MjhlNzY0ZGNjZmMxNTdkOTgwYTBjOTc5ZGJlZTc1ZDYx
ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgU291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVj
dCgpKTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0IHsg
eyB9LCBpbnB1dEltYWdlUmVjdC5zaXplKCkgfSwgQ29sb3I6OmJsYWNrKTsKKyAgICBvdXRwdXRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgSW50UG9pbnQoKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291
cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWQwMTUyYjEyNDUyMWY5ODMyNzU4
NTI2M2YzNzMzYmZjN2JmNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUdy
YXBoaWMuaCIKKworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6
YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
cHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisK
KyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5w
dXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9
IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbnB1dEltYWdlLCBGbG9hdFBvaW50KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmlu
ZGV4IGY0NGFlMTI5ZDA3MzhkMzBjNzZlNzEwODViMmFlYzA1YTdiNmYxZGEuLjgyYTcyMzRkYzIx
ZDQxZjUwYjdlYjIxZmUwMzAwY2ZlNDZhZDk1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsNDEyICsyOCwzNTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCi0jaW5j
bHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJFbGVtZW50SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVkZSAiRkVDb21wb25l
bnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCi0jaW5jbHVkZSAiRkVNZXJnZS5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dFJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21l
dHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQu
aCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZH
UmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRl
ckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgog
I2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQx
Lmg+CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6
Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIEZpbHRlckdlb21ldHJ5OjpD
bGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJl
ZihuZXcgQ1NTRmlsdGVyKG9wZXJhdGlvbnMpKTsKKworICAgIGlmICghZmlsdGVyLT5idWlsZEZ1
bmN0aW9ucyhyZW5kZXJlciwgb3BlcmF0aW9ucywgY2xpcE9wZXJhdGlvbikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChyZW5kZXJp
bmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkICYmICFmaWx0ZXItPnN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKCkpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCisgICAgICAgIAorICAgIGZpbHRlci0+c2V0UmVu
ZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gZmlsdGVyOworfQogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7CitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShWZWN0
b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mJiBmdW5jdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0ZpbHRlcihXVEZNb3ZlKGZ1
bmN0aW9ucyksIHJlbmRlcmluZ01vZGUpKTsKK30KIAotUmVmPENTU0ZpbHRlcj4gQ1NTRmlsdGVy
OjpjcmVhdGUoKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
b3BlcmF0aW9ucykKKyAgICA6IEZpbHRlcihUeXBlOjpDU1NGaWx0ZXIpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgbV9oYXNGaWx0
ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFz
RmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKIH0KIAotQ1NT
RmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAg
ICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpKQorQ1NTRmls
dGVyOjpDU1NGaWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYgZnVuY3Rpb25zLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCisgICAgOiBGaWx0ZXIoVHlwZTo6Q1NTRmlsdGVy
KQorICAgICwgbV9mdW5jdGlvbnMoV1RGTW92ZShmdW5jdGlvbnMpKQorICAgICwgbV9yZW5kZXJp
bmdNb2RlKHJlbmRlcmluZ01vZGUpCiB7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0g
ZGVmYXVsdDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNv
bnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckdlb21ldHJ5OjpD
bGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAg
ICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlv
biwgY2xpcE9wZXJhdGlvbiA9PSBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUg
PyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKK30KIAotR3JhcGhpY3NDb250
ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVj
dD4gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4g
c291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAg
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2Vw
dCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAg
ICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIGF1dG8q
IGZpbHRlckVsZW1lbnQgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCku
cmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0
aW9uKTsKLSAgICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJl
bmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5n
IHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOwotICAgICAgICAvLyBB
bHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBl
eGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBz
IGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1Pgot
ICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCi0gICAgICAg
IGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgcmVu
ZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNl
KGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAq
IGFtb3VudCArIDAuNTsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0
aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsK
K30KIAotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oJnBy
ZXZpb3VzRWZmZWN0KTsKLSAgICBtX3NvdXJjZUFscGhhID0gYnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpKTsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24m
IGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkID0gZHJvcFNoYWRvd09wZXJh
dGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUoc3Rk
LCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwg
ZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKK30KIAotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGVmZmVjdDsKLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IHJlZmVyZW5jZUVm
ZmVjdHM7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0
KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0
aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9k
dmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNj
YWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisg
ICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAor
ICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUo
aW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBj
aGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCpmaWx0
ZXJFbGVtZW50KSkgewotICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksICp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwg
IiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGJ1aWxkIGVmZmVjdCBmcm9tICIgPDwg
ZWZmZWN0RWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQor
c3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sK
KyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0
UGFyYW1ldGVycykpOworfQogCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRy
aWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVy
KCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0g
ICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5y
ZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygp
ID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFk
ZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZl
Y3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZl
Y3RvcihXVEZNb3ZlKHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0Oworc3Rh
dGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVB
UjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0g
MSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7
CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1
cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CiB9CiAKLWJvb2wgQ1NT
RmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCitzdGF0aWMgUmVmUHRy
PEZpbHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0eUVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAg
ICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4oKTsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0
aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsK
KworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVy
biBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CiAKLSAgICBtX2VmZmVjdHMuY2xl
YXIoKTsKLSAgICBtX291dHNldHMgPSB7IH07CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlU2F0dXJhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFt
ZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3Vu
dCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9U
WVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9u
ZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCks
IDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3
LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3Ig
aW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0g
MC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAt
IDAuMTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWlu
dXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44Njkg
KiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwK
KyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9Owor
CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0Zp
bHRlcj4gY3JlYXRlU1ZHRmlsdGVyKGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmls
dGVyT3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKK3sKKyAgICBhdXRvJiByZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNl
cygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLnJl
ZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlv
bik7CisKKyAgICBpZiAoIWZpbHRlckVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIAorICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCk7Cit9CisK
K2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyR2VvbWV0cnk6OkNsaXBP
cGVyYXRpb24gY2xpcE9wZXJhdGlvbikKK3sKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAq
ZWZmZWN0IH0pOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBt
X3NvdXJjZUdyYXBoaWMucHRyKCk7CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7
Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAgIHN3
aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24g
PSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnByZXZp
b3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICBSZWZQdHI8U1ZHRmlsdGVy
PiBmaWx0ZXI7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5F
U1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxl
RXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMu
Ci0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVz
QW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAt
IDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVz
QW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAt
IDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEy
NiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAg
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVz
QW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAg
ICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0g
ICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVC
bHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlw
T3BlcmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBU
bygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAg
ICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmls
dGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9y
bWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQ
YXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkz
ICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAg
ICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZs
b2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJp
eDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5w
dXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNU
OgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAg
IGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVE
cm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZF
UlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExF
X0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCisK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAgICAgICAgICBl
ZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1
bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAg
ICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3Bl
ID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwot
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVs
bEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7
CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAg
ICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJ
TkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVh
dGVPcGFjaXR5RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYg
Y29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNm
ZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAg
ICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5z
bG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
LTAuNSAqIGFtb3VudCArIDAuNTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRl
U2F0dXJhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRp
b24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3Bl
cmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3Np
YW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1l
ciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURH
RU1PREVfRFVQTElDQVRFKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6
IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAg
ICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpSRUZFUkVOQ0U6CisgICAgICAgICAgICBmaWx0ZXIgPSBjcmVhdGVTVkdGaWx0
ZXIoZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVy
ZXIpOworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBG
aWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRl
cgotICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0
byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xp
cHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwot
ICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9w
ZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAg
ICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0
KSB9OwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAg
ICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZm
ZWN0KCk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25O
dWxsKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KKworICAgICAgICBpZiAo
ZWZmZWN0KQorICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAg
ICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2Fs
bGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAg
aWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9lZmZlY3RzLnNocmlua1RvRml0KCk7Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3NvdXJj
ZURyYXdpbmdSZWdpb24pOwotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlmICghbV9maWx0ZXJS
ZW5kZXJlcikKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVy
Ojp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRl
clJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5nZXQoKSk7Ci0jZW5kaWYKKyAgICBt
X2Z1bmN0aW9ucy5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENT
U0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Y3QpCisjaWYgVVNFKENPUkVfSU1BR0UpCitib29sIENTU0ZpbHRlcjo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcoKSBjb25zdAogewotICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZmlsdGVyUmVjdCA9PSBzb3VyY2VJbWFnZVJlY3Qo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2V0U291cmNlSW1hZ2VSZWN0KGZpbHRl
clJlY3QpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAg
ICBpZiAoIWZ1bmN0aW9uLT5zdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KLQotdm9pZCBDU1NG
aWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiB0YXJnZXRDb250ZXh0KQotewotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGVmZmVjdCBjaGFp
biBoYXMgYmVlbiBidWlsdCwgYW5kIHRoZQotICAgIC8vIHNvdXJjZSBpbWFnZSBzaXplcyBzZXQu
IFdlIGp1c3QgbmVlZCB0byBhdHRhY2ggdGhlIGdyYXBoaWMKLSAgICAvLyBidWZmZXIgaWYgd2Ug
aGF2ZSBub3QgeWV0IGRvbmUgc28uCi0KLSAgICBpZiAobV9ncmFwaGljc0J1ZmZlckF0dGFjaGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplIHsgbV9zb3VyY2VE
cmF3aW5nUmVnaW9uLnNpemUoKSB9OwotICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJ
bWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7Ci0jaWYgVVNFKERJUkVDVDJE
KQotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7Ci0jZWxzZQotICAg
ICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7Ci0gICAgICAgIFJlbmRlcmluZ01vZGUg
bW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJl
bmRlcmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOwogI2VuZGlmCi0gICAgfQotICAgIG1fZ3Jh
cGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7Ci19CiAKLXZvaWQgQ1NTRmlsdGVyOjpkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQorSW50T3V0c2V0cyBDU1NGaWx0ZXI6OmNhbGN1
bGF0ZU91dHNldHMoKSBjb25zdAogewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMu
bGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QubWF4RWZmZWN0
UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBp
bWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZh
Y3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KLX0KKyAgICBpZiAoIW1faGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKQorICAgICAgICByZXR1cm4geyB9OwogCi12b2lkIENTU0ZpbHRlcjo6Y2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCkKLXsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0
KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEtPmNsZWFy
UmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVm
ZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHM7CisgICAgZm9yIChh
dXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBvdXRzZXRzICs9IGZ1bmN0aW9u
LT5jYWxjdWxhdGVPdXRzZXRzKCk7CisgICAgCisgICAgcmV0dXJuIG91dHNldHM7CiB9CiAKLXZv
aWQgQ1NTRmlsdGVyOjphcHBseSgpCitGaWx0ZXJFZmZlY3RWZWN0b3IgQ1NTRmlsdGVyOjplZmZl
Y3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlKSBjb25zdAogewotICAgIGF1dG8mIGVm
ZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIp
IHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7Ci0gICAg
ICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZWZm
ZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3Rz
OworCisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlm
IChmdW5jdGlvbi0+dHlwZSgpID09IHR5cGUpIHsKKyAgICAgICAgICAgIGVmZmVjdHMuYXBwZW5k
KHsgZG93bmNhc3Q8RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5nZXQoKSkgfSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZ1bmN0aW9uLT5p
c1NWR0ZpbHRlcigpKSB7CisgICAgICAgICAgICBhdXRvJiBmaWx0ZXIgPSBkb3duY2FzdDxTVkdG
aWx0ZXI+KGZ1bmN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGVmZmVjdHMuYXBwZW5kVmVjdG9y
KGZpbHRlci5lZmZlY3RzT2ZUeXBlKHR5cGUpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlZmZl
Y3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci19CiAKLUxheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21w
dXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBUaGUgcmVzdWx0
IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFyZWEgaW4gdGhlICJmaWx0ZXJCb3hSZWN0IiB0aGF0
IG5lZWRzIHRvIGJlIHJlcGFpbnRlZCwgc28gdGhhdCB3ZSBmdWxseSBjb3ZlciB0aGUgImRpcnR5
UmVjdCIuCi0gICAgYXV0byByZWN0Rm9yUmVwYWludCA9IGRpcnR5UmVjdDsKLSAgICBpZiAoaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCi0gICAgICAgIHJlY3RGb3JSZXBhaW50ICs9IG91dHNl
dHMoKTsKLSAgICByZWN0Rm9yUmVwYWludC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7Ci0gICAg
cmV0dXJuIHJlY3RGb3JSZXBhaW50OworICAgIHJldHVybiBlZmZlY3RzOwogfQogCi1JbWFnZUJ1
ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKSBjb25zdAorYm9vbCBDU1NGaWx0ZXI6OmFwcGx5KEZp
bHRlclJlc3VsdCYgcmVzdWx0LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBpZiAobV9maWx0ZXJSZW5kZXJlciAm
JiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVy
UmVuZGVyZXItPm91dHB1dCgpOwotICAgIAotICAgIHJldHVybiBtX2VmZmVjdHMubGFzdCgpLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwotfQotCi12b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQotewotICAgIG1fc291cmNlRHJh
d2luZ1JlZ2lvbiA9IHNvdXJjZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3Vy
Y2VJbWFnZVJlY3QpOwotICAgIHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAg
IG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwotfQotCi12b2lkIENTU0ZpbHRlcjo6
c2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQotewotICAgIGZv
ciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNldE1heEVmZmVj
dFJlY3QoZWZmZWN0UmVjdCk7Ci19Ci0KLUludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkg
Y29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsK
LSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJl
ciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0gICAgICAgIHJldHVybiBsYXN0
RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsgbV9maWx0
ZXJSZWdpb24gfSk7Ci0gICAgCi0gICAgcmV0dXJuIHsgfTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKCFmdW5jdGlvbi0+YXBwbHkocmVzdWx0
LCBzdGFjaywgZ2VvbWV0cnkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25z
dAorVGV4dFN0cmVhbSYgQ1NTRmlsdGVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKLSAg
ICBpZiAoIW1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQotICAgICAgICByZXR1cm4geyB9Owot
Ci0gICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBtX291dHNldHM7
CisgICAgYXV0byBlbmQgPSBtX2Z1bmN0aW9ucy5yZW5kKCk7CisgICAgdW5zaWduZWQgbGV2ZWwg
PSAwOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9mdW5jdGlvbnMucmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBhdXRvIGZ1bmN0aW9uID0gKml0OworICAgICAgICBpZiAoZnVu
Y3Rpb24tPnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7CisgICAg
ICAgICAgICBBU1NFUlQoaXQgIT0gZW5kKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgIH0K
KyAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIGxldmVsKysp
OworICAgICAgICBmdW5jdGlvbi0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50
YXRpb24pOworICAgIH0KIAotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAg
ICAgICBtX291dHNldHMgKz0gZWZmZWN0LT5vdXRzZXRzKCk7Ci0gICAgcmV0dXJuIG1fb3V0c2V0
czsKKyAgICByZXR1cm4gdHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3NThlMzc1
YzI1MmYyOWRiMGM1Li42MjJiZTI1M2EyYThjMzcwMGUyZGRiZDUwOTdjMzI0ZmZkNjhjNzBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsODIgKzI2LDUyIEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkludFJlY3RFeHRl
bnQuaCIKLSNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5o
PgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEZpbHRl
ckVmZmVjdFJlbmRlcmVyOwogY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLWNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVs
ZW1lbnQ7Ci1jbGFzcyBTb3VyY2VBbHBoYTsKLWNsYXNzIFNvdXJjZUdyYXBoaWM7Ci0KLWVudW0g
Y2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsK
IAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7Ci0KLSAgICB2b2lkIHNl
dFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZp
bHRlclJlZ2lvbjsgfQotCi0gICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwogCi0gICAg
Ym9vbCBidWlsZChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRl
ckNvbnN1bWVyKTsKLSAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZv
aWQgYXBwbHkoKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRl
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSA9
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIEZpbHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0
aW9uID0gRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2VjdCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShWZWN0b3I8UmVmPEZp
bHRlckZ1bmN0aW9uPj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKICAgICBib29sIGhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
OyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW47IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCk7Ci0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgQ1NTRmlsdGVyKCk7Ci0gICAgdmlydHVhbCB+Q1NTRmlsdGVyKCk7CisgICAgY29uc3QgVmVj
dG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiBmdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1
bmN0aW9uczsgfQogCi0gICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KKyAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KIAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KKyAgICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91
dHNldHMoKSBjb25zdCBmaW5hbDsKIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJS
ZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9
Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJF
bGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uJik7Ci0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYp
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKLQotICAgIGJvb2wgdXBk
YXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwotICAgIHZv
aWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
K3ByaXZhdGU6CisgICAgQ1NTRmlsdGVyKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBD
U1NGaWx0ZXIoVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+JiYsIFJlbmRlcmluZ01vZGUpOwog
Ci0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBidWlsZEZ1bmN0aW9u
cyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckdlb21ldHJ5
OjpDbGlwT3BlcmF0aW9uKTsKIAotICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVj
dEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QpOworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGJvb2wgc3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgogCi0gICAgRmxvYXRS
ZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247
CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBl
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9lZmZl
Y3RzOwotICAgIFJlZjxTb3VyY2VHcmFwaGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gbV9zb3VyY2VBbHBoYTsKKyAgICBib29sIGFwcGx5KEZpbHRlclJlc3Vs
dCYsIEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBmaW5hbDsKIAotICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7CisgICAgVGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50
YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9y
aWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJl
bmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOworCisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlv
bj4+IG1fZnVuY3Rpb25zOworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZThjMDM4M2Nl
OWUxMTA0Y2VkMzUxOGJjNjI4NmI0MmZiZGM1NDA2Mi4uMWEzZWJiMWVkYjVlNTQ5OTI0MzhjNzYy
MmQ4MjVmZDMwMjVkMDAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC01NTY3LDcgKzU1NjcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQ
YWludGluZ1N0cmF0ZWd5KCkKIEludE91dHNldHMgUmVuZGVyTGF5ZXI6OmZpbHRlck91dHNldHMo
KSBjb25zdAogewogICAgIGlmIChtX2ZpbHRlcnMpCi0gICAgICAgIHJldHVybiBtX2ZpbHRlcnMt
PmZpbHRlcigpID8gbV9maWx0ZXJzLT5maWx0ZXIoKS0+b3V0c2V0cygpIDogSW50T3V0c2V0cygp
OworICAgICAgICByZXR1cm4gbV9maWx0ZXJzLT5maWx0ZXIoKSA/IG1fZmlsdGVycy0+ZmlsdGVy
KCktPmNhbGN1bGF0ZU91dHNldHMoKSA6IEludE91dHNldHMoKTsKICAgICByZXR1cm4gcmVuZGVy
ZXIoKS5zdHlsZSgpLmZpbHRlck91dHNldHMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaAppbmRleCBlYjk2N2I1MzlkMDJjNjBmYjQxNWRkODNiZjI2MzczM2FlMTEz
Y2U2Li4zMDIyYTdhNzYzYjUxZDFlN2RhZTVkZDI1ODNmZWVjZjJlODY5NjUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNjIsNyArNjIsNiBAQCBjbGFzcyBUZXh0
U3RyZWFtOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU0ZpbHRlcjsKIGNsYXNz
IENsaXBSZWN0czsKIGNsYXNzIENsaXBSZWN0c0NhY2hlOwogY2xhc3MgRXZlbnRSZWdpb25Db250
ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNw
cAppbmRleCAyNTBhN2Q1YzBiYWEwYWM3NDFhOTBjODE4YjYxYTA1Zjk1Yjk2NGE0Li5kZTVkMTZm
MmRhMGNjZDEyMGJmNzI3MTk3Njk3NGIyYzNlNWI0YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcApAQCAtMzQsOCArMzQsMTAgQEAKICNp
bmNsdWRlICJDU1NGaWx0ZXIuaCIKICNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyR2Vv
bWV0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExOCwzNyArMTIwLDU1IEBA
IHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkK
IAogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQog
ewotICAgIGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNy
ZWF0ZSgpOwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwot
ICAgICAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9
IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAg
ICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmls
dGVyLT5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9CisgICAgbV9maWx0ZXIgPSBD
U1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVu
ZGVyaW5nTW9kZSwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OlVuaXRlKTsKKyAgICBt
X3NjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVy
TGF5ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQoKQoreworICAgIHJldHVybiBtX3NvdXJjZUltYWdl
ID8gJm1fc291cmNlSW1hZ2UtPmNvbnRleHQoKSA6IG51bGxwdHI7Cit9CiAKLSAgICAvLyBJZiB0
aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdp
bGwgc3RpbGwgYXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5n
IChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgIC8vIEZJ
WE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBm
aWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5k
ZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclBy
b3BlcnR5KSkKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOwordm9pZCBSZW5kZXJMYXllckZp
bHRlcnM6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2dyYXBo
aWNzQnVmZmVyQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbnRTaXplIHNp
emUgeyBtX3NvdXJjZUltYWdlUmVjdC5zaXplKCkgKiBtX3NjYWxlRmFjdG9yIH07CisgICAgYXV0
byBob3N0V2luZG93ID0gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yb290
KCkgPyBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJvb3QoKS0+aG9zdFdp
bmRvdygpIDogbnVsbHB0cjsKKworICAgIG1fc291cmNlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIG1fZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCksIFNob3VsZFVzZURpc3BsYXlMaXN0
OjpObywgUmVuZGVyaW5nUHVycG9zZTo6RE9NLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBob3N0V2luZG93KTsKKworICAgIEdyYXBoaWNzQ29u
dGV4dCYgaW1hZ2VDb250ZXh0ID0gbV9zb3VyY2VJbWFnZS0+Y29udGV4dCgpOworICAgIGltYWdl
Q29udGV4dC5zY2FsZShtX3NjYWxlRmFjdG9yKTsKKyAgICAKKyAgICBtX2dyYXBoaWNzQnVmZmVy
QXR0YWNoZWQgPSB0cnVlOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQs
IGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNzQ29udGV4
dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0
eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFt
X2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvJiBmaWx0ZXIgPSAq
bV9maWx0ZXI7Ci0gICAgYXV0byBmaWx0ZXJTb3VyY2VSZWN0ID0gZmlsdGVyLmNvbXB1dGVTb3Vy
Y2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoZmlsdGVyQm94UmVjdCwgZGlydHlSZWN0KTsKKyAgICAK
KyAgICBhdXRvIGZpbHRlclNvdXJjZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgaWYgKGZpbHRlci5o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKKyAgICAgICAgZmlsdGVyU291cmNlUmVjdCArPSBm
aWx0ZXIuY2FsY3VsYXRlT3V0c2V0cygpOworICAgIGZpbHRlclNvdXJjZVJlY3QuaW50ZXJzZWN0
KGZpbHRlckJveFJlY3QpOworCiAgICAgaWYgKGZpbHRlclNvdXJjZVJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9y
ZSA9IGZpbHRlci51cGRhdGVCYWNraW5nU3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworICAg
IAorICAgIGlmIChmaWx0ZXJTb3VyY2VSZWN0ICE9IG1fc291cmNlSW1hZ2VSZWN0KSB7CisgICAg
ICAgIG1fc291cmNlSW1hZ2VSZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKKyAgICAgICAgbV9ncmFw
aGljc0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVy
Lmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGly
dHlSZWN0OwogICAgIGVsc2UgewotICAgICAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSkK
KyAgICAgICAgaWYgKCFtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAgICAgICBtX3Jl
cGFpbnRSZWN0ID0gZmlsdGVyU291cmNlUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0OwpAQCAtMTU5LDExICsxNzksOSBAQCBHcmFwaGlj
c0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3ND
b250ZXh0JiBkZXN0aW5hdAogICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0Lmxv
Y2F0aW9uKCk7CiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQotICAgIGZpbHRlci5hbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgYXV0byogc291cmNl
R3JhcGhpY3NDb250ZXh0ID0gZmlsdGVyLmlucHV0Q29udGV4dCgpOwotICAgIGlmICghc291cmNl
R3JhcGhpY3NDb250ZXh0IHx8IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkp
KQorICAgIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKKyAgICBhdXRvKiBzb3VyY2VH
cmFwaGljc0NvbnRleHQgPSBpbnB1dENvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZUdyYXBoaWNz
Q29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBUcmFuc2xhdGUgdGhl
IGNvbnRleHQgc28gdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlzIGNhcHR1cmVkIGlu
IHRoZSBvZmZzY3JlZW4gbWVtb3J5IGJ1ZmZlci4KQEAgLTE3NywyMyArMTk1LDE5IEBAIEdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRl
ckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKLSAgICBBU1NF
UlQobV9maWx0ZXItPmlucHV0Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaW5wdXRDb250ZXh0KCkp
OwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXll
ckZpbHRlcnMgIiA8PCB0aGlzIDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAogICAgIGF1dG8m
IGZpbHRlciA9ICptX2ZpbHRlcjsKLSAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUo
KTsKLQotICAgIGZpbHRlci5hcHBseSgpOworICAgIGlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7
CiAKLSAgICAvLyBHZXQgdGhlIGZpbHRlcmVkIG91dHB1dCBhbmQgZHJhdyBpdCBpbiBwbGFjZS4K
LSAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKLSAgICBkZXN0
UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CisgICAgZGVz
dGluYXRpb25Db250ZXh0LnNjYWxlKDEgLyBtX3NjYWxlRmFjdG9yKTsKIAotICAgIGlmIChhdXRv
KiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9uQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVs
cyhkZXN0UmVjdCwgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSkpOworICAgIEZpbHRlckdlb21ldHJ5IGdlb21ldHJ5KG1fc291cmNlSW1hZ2VSZWN0LCBt
X3NjYWxlRmFjdG9yLCBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOworICAg
IGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3RmlsdGVySW1hZ2VCdWZmZXIobV9zb3VyY2VJbWFnZS5n
ZXQoKSwgbV9zb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZ2VvbWV0cnkpOwogCi0gICAgZmlsdGVy
LmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zY2Fs
ZShtX3NjYWxlRmFjdG9yKTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIlJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBk
b25lXG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUzMTkwYjcwMDNkN2U3ODQ0YzkxOTQ1YmY3Li45MmVm
MmZmOWQ4NzYyNjY0ODFjZGM3MDhkMzkxMTQwZmMzMGJiYTZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCkBAIC0zNyw4ICszNywxMCBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRTVkdEb2N1bWVudDsKK2NsYXNzIENTU0Zp
bHRlcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOworY2xhc3MgSW1h
Z2VCdWZmZXI7CiAKIGNsYXNzIFJlbmRlckxheWVyRmlsdGVycyBmaW5hbCA6IHByaXZhdGUgQ2Fj
aGVkU1ZHRG9jdW1lbnRDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAt
NjksMTQgKzcxLDIwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSYsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpIGZpbmFsOwogICAg
IHZvaWQgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKSB7IG1fZGlydHlTb3VyY2VSZWN0ID0gTGF5b3V0
UmVjdCgpOyB9CisgICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICB2b2lk
IGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoKTsKIAogICAgIFJlbmRlckxheWVyJiBtX2xh
eWVyOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gbV9pbnRlcm5hbFNWR1JlZmVyZW5j
ZXM7CiAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50Pj4g
bV9leHRlcm5hbFNWR1JlZmVyZW5jZXM7CiAKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291
cmNlSW1hZ2U7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OwogICAgIFJlZlB0cjxD
U1NGaWx0ZXI+IG1fZmlsdGVyOworICAgIGZsb2F0IG1fc2NhbGVGYWN0b3IgeyAxIH07CiAgICAg
TGF5b3V0UmVjdCBtX2RpcnR5U291cmNlUmVjdDsKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJB
dHRhY2hlZCB7IGZhbHNlIH07CiAgICAgCiAgICAgLy8gRGF0YSB1c2VkIHBlciBwYWludAogICAg
IExheW91dFBvaW50IG1fcGFpbnRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggNTA3OGY5
Y2FlZmI1MDZmOTIyMzdmMmNlN2FiNmY2ZTU5MjA4NjdiMS4uYzI5ZjIxNDBkYTVkMDJjNzg0OWZm
YzdhN2QxZjZhZGRlOWZkMDljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTU0LDcgKzE1NCw3
IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVU
cmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRv
T3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7CiAgICAgaWYgKCFjbGlwcGVyRGF0
YS5pc1ZhbGlkRm9yR2VvbWV0cnkob2JqZWN0Qm91bmRpbmdCb3gsIGNsaXBwZWRDb250ZW50Qm91
bmRzLCBhYnNvbHV0ZVRyYW5zZm9ybSkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRo
aXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0
ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0
aG91Z2guCi0gICAgICAgIGF1dG8gbWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoY2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgJmNvbnRleHQpOworICAgICAgICBhdXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNsaXBwZWRDb250ZW50Qm91bmRzLCBhYnNvbHV0ZVRyYW5z
Zm9ybSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogICAgICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCAxOTUwOWQ5NzE4YWZmMTEwZjg0MWVjNDk3NmY5
N2ZiMWE5MzRkOGE1Li43NWQxMzQ1NzFiMjJmNzI2YTg5MzcxMDZiYjA3MDU2ODQ3MDI4Zjk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjYsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgpAQCAtMzcsNiArMzksOCBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1JlbmRlcmluZ0NvbnRleHQuaCIKQEAgLTgyLDQ3ICs4NiwxMSBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYgY2xpZW50
LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZh
bGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlv
bik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAotewot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7Ci0gICAg
aWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2Rl
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRp
bmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLQotICAgIC8vIEFkZCBlZmZlY3Rz
IHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJC
dWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSk7Ci0gICAgYnVpbGRlci0+c2V0
UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkpOwotICAgIGJ1
aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICAKLSAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQoKSkpIHsKLSAgICAgICAgYXV0byBlZmZl
Y3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksIGZpbHRlcik7Ci0gICAgICAgIGlmICgh
ZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFwcGVuZEVm
ZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigpLCBlbGVtZW50LnJlbmRlcmVy
KCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkp
OwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJvdW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6
cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZl
bGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdC
b3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0
T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUo
KS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5l
YXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0g
ICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVsZW1lbnQucmVzdWx0KCksIFdURk1vdmUo
ZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyOwotfQotCiBib29sIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxS
ZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4
dCk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZU1vZGUsICFyZXNvdXJjZU1vZGUpOwogCi0g
ICAgTE9HKEZpbHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBhcHBseVJlc291cmNl
IHJlbmRlcmVyICVwIiwgdGhpcywgJnJlbmRlcmVyKTsKLQogICAgIGlmIChtX3JlbmRlcmVyRmls
dGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKSB7CiAgICAgICAgIEZpbHRlckRhdGEqIGZp
bHRlckRhdGEgPSBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5nZXQoJnJlbmRlcmVyKTsKICAgICAg
ICAgaWYgKGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OlBhaW50aW5nU291cmNlIHx8
IGZpbHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkFwcGx5aW5nKQpAQCAtMTMwLDEwMSAr
OTgsNTUgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBBbHJlYWR5IGJ1aWx0LCBvciB3ZSdyZSBpbiBhIGN5Y2xlLCBvciB3ZSdyZSBtYXJrZWQgZm9y
IHJlbW92YWwuIFJlZ2FyZGxlc3MsIGp1c3QgZG8gbm90aGluZyBtb3JlIG5vdy4KICAgICB9CiAK
KyAgICAvLyBCdWlsZCB0aGUgU1ZHRmlsdGVyCiAgICAgYXV0byBmaWx0ZXJEYXRhID0gbWFrZVVu
aXF1ZTxGaWx0ZXJEYXRhPigpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IHJl
bmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7Ci0KLSAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVz
ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVtZW50Pigm
ZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFyZ2V0Qm91
bmRpbmdCb3gpOwotICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1wdHkoKSkKKyAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCkp
OworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgYXV0byB0YXJnZXRCb3VuZGluZ0JveCA9IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5n
Qm94KCk7CisgICAgZmlsdGVyRGF0YS0+Ym91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJl
c29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVy
RWxlbWVudCgpLmZpbHRlclVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KTsKIAotICAgIC8vIERl
dGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVy
ZXIpOwotICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRp
bGUgaW1hZ2VzIGZvciBmZVRpbGUuCi0gICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAs
IDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKLQotICAgIC8vIERldGVybWlu
ZSBhYnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lv
bi4KKyAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZUltYWdlUmVjdAogICAgIGZpbHRlckRhdGEt
PmRyYXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwogICAgIGZpbHRl
ckRhdGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwot
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24pOwot
Ci0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZl
Qm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRh
dGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBm
aWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAg
Ly8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRh
LT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlm
ICghZmlsdGVyRGF0YS0+YnVpbGRlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlh
dGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4K
LSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0g
ICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5z
Y2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAKLSAgICAvLyBTZXQgdGhlIHNj
YWxlIGxldmVsIGluIFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRl
clJlc29sdXRpb24oc2NhbGUpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFs
T2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmls
dGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBs
YXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0
SW5wdXRzKQorICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGVUcmFuc2Zvcm0KKyAgICBhdXRv
IGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNm
b3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOworICAgIGlmICgh
YWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0
RWZmZWN0KCkpOwotCi0gICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVj
dFJlY3QoKTsKLSAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcg
aW1hZ2Ugc2l6ZSwKLSAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3
IHNjYWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhz
dWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5z
ZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGRyYXdp
bmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIv
Pi4KLSAgICAvLyBFdmVuIGlmIHRoZSB0YXJnZXQgb2JqZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0
eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3IHRoZSBsYXN0IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4g
cG9zdEFwcGx5UmVzb3VyY2UuCi0gICAgaWYgKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaXNF
bXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFp
bnMoJnJlbmRlcmVyKSk7Ci0gICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRl
eHQ7Ci0gICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVuZGVyZXIsIFdURk1v
dmUoZmlsdGVyRGF0YSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIC8vIEVs
aW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBi
ZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCisgICAg
YXV0byBhYnNvbHV0ZVNjYWxlID0gRmxvYXRTaXplKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgp
LCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7CisgICAgZmlsdGVyRGF0YS0+c2NhbGUgPSBG
aWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRlRmlsdGVyU2NhbGUoZmlsdGVyRGF0YS0+ZHJhd2luZ1Jl
Z2lvbiwgYWJzb2x1dGVTY2FsZSk7CiAKLSAgICAvLyBDaGFuZ2UgdGhlIGNvb3JkaW5hdGUgdHJh
bnNmb3JtYXRpb24gYXBwbGllZCB0byB0aGUgZmlsdGVyZWQgZWxlbWVudCB0byByZWZsZWN0IHRo
ZSByZXNvbHV0aW9uIG9mIHRoZSBmaWx0ZXIuCi0gICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2
ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwg
c2NhbGUuaGVpZ2h0KCkpOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJE
YXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgYXV0byBzaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShmaWx0ZXJEYXRhLT5zY2FsZS53aWR0aCgp
LCAwLCAwLCBmaWx0ZXJEYXRhLT5zY2FsZS5oZWlnaHQoKSwgMCwgMCk7CiAKLSAgICBhdXRvIHJl
bmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJs
ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKICNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0Ip
CiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdC
KCk7CiAjZWxzZQogICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpOwogI2VuZGlmCi0gICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0
aXZlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKKworICAg
IGF1dG8gaG9zdFdpbmRvdyA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yb290KCkgPyBy
ZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkucm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRy
OworCisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgc2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGhvc3RX
aW5kb3cpOwogICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVu
ZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwogICAgICAgICBmaWx0ZXJE
YXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0
YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZpbHRlckRhdGEpKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAvLyBTZXQgdGhlIHJlbmRlcmluZyBtb2RlIGZyb20g
dGhlIHBhZ2UncyBzZXR0aW5ncy4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldFJlbmRlcmlu
Z01vZGUocmVuZGVyaW5nTW9kZSk7CiAKKyAgICAvLyBTZXQgdGhlIHdvcmtpbmcgR3JhcGhpY0Nv
bnRleHQgdG8gdGhlIGZpbHRlciBzb3VyY2VHcmFwaGljCiAgICAgR3JhcGhpY3NDb250ZXh0JiBz
b3VyY2VHcmFwaGljQ29udGV4dCA9IHNvdXJjZUdyYXBoaWMtPmNvbnRleHQoKTsKLSAgCisKICAg
ICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gV1RGTW92ZShzb3VyY2VHcmFwaGlj
KTsKICAgICBmaWx0ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogCiAgICAgY29udGV4
dCA9ICZzb3VyY2VHcmFwaGljQ29udGV4dDsKIAotICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CiAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMjY5LDM4ICsxOTEsMjIgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmls
dGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0KLSAgICBpZiAobGFzdEVmZmVjdCAmJiAh
ZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJl
YWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9u
IHRoZQotICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2Ug
dGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKLSAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcu
Ci0gICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQotICAg
ICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVy
RGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7Ci0KLSAgICAgICAgLy8gQWx3YXlzIHRydWUgaWYg
ZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRh
OjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVzdWx0KCkpIHsKLSAgICAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAg
ICAgIGxhc3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0
RmlsdGVyUmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAg
ICB9CisgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAg
ICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShm
aWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihB
ZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAv
IGZpbHRlckRhdGEuc2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuc2NhbGUuaGVpZ2h0KCkp
KTsKIAotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRh
LmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRl
ci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIoKnJlc3VsdEltYWdlLCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0
ZXJSZXNvbHV0aW9uKCkpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gdGFyZ2V0
Qm91bmRpbmdTaXplOworICAgICAgICBpZiAoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRz
KCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQorICAg
ICAgICAgICAgdGFyZ2V0Qm91bmRpbmdTaXplID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3go
KS5zaXplKCk7CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmaWx0ZXJE
YXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOworICAgICAgICBhdXRvIGZpbHRlckVm
ZmVjdEJvdW5kYXJ5U2V0cyA9IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0Qm91
bmRhcnlTZXRzKGZpbHRlckVsZW1lbnQoKSwgcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKSk7
CisgICAgICAgIEZpbHRlckdlb21ldHJ5IGdlb21ldHJ5KGZpbHRlckRhdGEuYm91bmRhcmllcywg
ZmlsdGVyRGF0YS5zY2FsZSwgdGFyZ2V0Qm91bmRpbmdTaXplLCBXVEZNb3ZlKGZpbHRlckVmZmVj
dEJvdW5kYXJ5U2V0cykpOworCisgICAgICAgIGNvbnRleHQtPmRyYXdGaWx0ZXJJbWFnZUJ1ZmZl
cihmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIuZ2V0KCksIGZpbHRlckRhdGEuZHJhd2lu
Z1JlZ2lvbiwgKmZpbHRlckRhdGEuZmlsdGVyLCBnZW9tZXRyeSk7CiAKLSAgICBMT0dfV0lUSF9T
VFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAiIDw8IHRo
aXMgPDwgIiBwb3N0QXBwbHlSZXNvdXJjZSBkb25lXG4iKTsKKyAgICAgICAgY29udGV4dC0+c2Nh
bGUoZmlsdGVyRGF0YS5zY2FsZSk7CisgICAgfQogfQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QpCkBAIC0zMDgsMjcgKzIxNCwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OnJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplYwogICAgIHJl
dHVybiBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+
KCZmaWx0ZXJFbGVtZW50KCksIGZpbHRlckVsZW1lbnQoKS5maWx0ZXJVbml0cygpLCBvYmplY3Qu
b2JqZWN0Qm91bmRpbmdCb3goKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBy
aW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpCiB7Ci0gICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBwcmltaXR2
ZSA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KG9i
amVjdC0+bm9kZSgpKTsKLQotICAgIExPRyhGaWx0ZXJzLCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIgJXAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCByZW5kZXJlciAlcCIsIHRoaXMsIG9iamVj
dCk7Ci0KICAgICBmb3IgKGNvbnN0IGF1dG8mIG9iamVjdEZpbHRlckRhdGFQYWlyIDogbV9yZW5k
ZXJlckZpbHRlckRhdGFNYXApIHsKICAgICAgICAgY29uc3QgYXV0byYgZmlsdGVyRGF0YSA9IG9i
amVjdEZpbHRlckRhdGFQYWlyLnZhbHVlOwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUg
IT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBT
VkdGaWx0ZXJCdWlsZGVyKiBidWlsZGVyID0gZmlsdGVyRGF0YS0+YnVpbGRlci5nZXQoKTsKLSAg
ICAgICAgRmlsdGVyRWZmZWN0KiBlZmZlY3QgPSBidWlsZGVyLT5lZmZlY3RCeVJlbmRlcmVyKG9i
amVjdCk7Ci0gICAgICAgIGlmICghZWZmZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIC8vIFNpbmNlIGFsbCBlZmZlY3RzIHNoYXJlcyB0aGUgc2FtZSBhdHRyaWJ1dGUgdmFsdWUs
IGFsbAotICAgICAgICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgotICAgICAg
ICBpZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1
dGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNS
ZWN1cnNpdmUoZWZmZWN0KTsKLQogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUg
c2NyZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJE
YXRhUGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRl
eCA4Y2UwYzdhYmMxNDNiZGI2NTM4NTBjOTNlMzI5MmFjOWRhNDliYmM3Li44YzBmMGZjMTM2MmY5
ZjBlMDQ0NjI4NWJlOTk3NmQyMzExYjQzYTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC0yMywxMCArMjMs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKLSNp
bmNsdWRlICJTVkdGaWx0ZXIuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQzLDExICs0Miw5IEBAIHB1YmxpYzoKIAogICAgIEZpbHRl
ckRhdGEoKSA9IGRlZmF1bHQ7CiAKLSAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXI7CisgICAgUmVmUHRyPEZp
bHRlcj4gZmlsdGVyOwogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpY0J1ZmZl
cjsKICAgICBHcmFwaGljc0NvbnRleHQqIHNhdmVkQ29udGV4dCB7IG51bGxwdHIgfTsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0
IGJvdW5kYXJpZXM7CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb247CiAgICAgRmxvYXRTaXpl
IHNjYWxlOwpAQCAtNzIsOCArNjksNiBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJikg
Y29uc3Q7Ci0KICAgICBpbmxpbmUgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBmaWx0ZXJVbml0
cygpIGNvbnN0OwogICAgIGlubGluZSBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2
ZVVuaXRzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKaW5kZXgg
YWRkNzFhNjYzN2FiMjQ1YTljYzQ0MmFlMGJmM2M5ODcwZTRjOTFiYy4uZTQyNzc0MmY1MWY5MjNi
ZDBjN2NkZDk5M2M3NGE2YTU5YzVjZDg0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS5jcHAKQEAgLTU1LDIyICs1NSwxOCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29ucwogewogICAg
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUp
OwogCi0gICAgYXV0byogZmlsdGVyID0gcGFyZW50KCk7Ci0gICAgaWYgKCFmaWx0ZXIpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZTo6RXF1YWwgfHwg
IW9sZFN0eWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYg
bmV3U3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgaWYgKGlzPFNWR0ZFRmxvb2RFbGVt
ZW50PihmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkpKSB7CiAgICAgICAgIGlmIChuZXdTdHlsZS5m
bG9vZENvbG9yKCkgIT0gb2xkU3R5bGUtPnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKQotICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXIpLnByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQodGhpcywgU1ZHTmFtZXM6OmZsb29kX2NvbG9yQXR0cik7CisgICAg
ICAgICAgICBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdl
ZChTVkdOYW1lczo6Zmxvb2RfY29sb3JBdHRyKTsKICAgICAgICAgaWYgKG5ld1N0eWxlLmZsb29k
T3BhY2l0eSgpICE9IG9sZFN0eWxlLT5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKQotICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXIpLnByaW1pdGl2
ZUF0dHJpYnV0ZUNoYW5nZWQodGhpcywgU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlBdHRyKTsKKyAg
ICAgICAgICAgIGZpbHRlclByaW1pdGl2ZUVsZW1lbnQoKS5wcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkKFNWR05hbWVzOjpmbG9vZF9vcGFjaXR5QXR0cik7CiAgICAgfSBlbHNlIGlmIChpczxTVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ+KGZpbHRlclByaW1pdGl2ZUVsZW1lbnQoKSkgfHwgaXM8
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudD4oZmlsdGVyUHJpbWl0aXZlRWxlbWVudCgpKSkg
ewogICAgICAgICBpZiAobmV3U3R5bGUubGlnaHRpbmdDb2xvcigpICE9IG9sZFN0eWxlLT5zdmdT
dHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyPigqZmlsdGVyKS5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKHRoaXMsIFNW
R05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpOworICAgICAgICAgICAgZmlsdGVyUHJpbWl0aXZl
RWxlbWVudCgpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoU1ZHTmFtZXM6OmxpZ2h0aW5nX2Nv
bG9yQXR0cik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IGIyMzg3ODYyZGRmMjIy
MTcxZTRhNWQ5YzJkZjU1ZjZjOTgzOWJiNjIuLjZhNTNhZmExZWJkMTRmNzAzMTM5Njc1ODA0ZmY3
YjI4NWM3ZTUyYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlCiAjZW5kaWYKIAogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhp
cyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRl
ZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91
Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgbWFza0Nv
bG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOworICAgICAg
ICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIG1hc2tDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5t
YXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGM2NTAy
MWJlZTAzNTU2NWFhYjMxYzY3ZmI5MzE5Zjg4ZTYxODA3YzcuLjY5ZTdhNWNlMDY5OWNiYTZhZjVm
YzhlYmYzNzJmMmMwMjkzNWFlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlv
bi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5o
IgpAQCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3hJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdQYXRo
RWxlbWVudC5oIgpAQCAtNDMxLDEzICs0MzMsOSBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250
YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJgog
ICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci5w
cmltaXRpdmVVbml0cygpKTsKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRp
bmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgot
ICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0g
U1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0
LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1
aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxG
aWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1l
bnQoKSkpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3Bl
KHRzKTsKLQotICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxk
ZXItPmxhc3RFZmZlY3QoKSkKLSAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzKTsKKyAgICAgICAgICAgIGR1bW15RmlsdGVyLT5leHRlcm5hbFJlcHJl
c2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3Vy
Y2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewogICAgICAgICBjb25zdCBhdXRvJiBj
bGlwcGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyJj4ocmVz
b3VyY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHAKaW5kZXggMjBiOGI1ZTdiMDdiMzFhMTJjNWFhY2JhMzg1ODkyZmJmM2Ey
MzU3My4uMTYzNzAyYWFiMGM0MTU5NWU0YjM3YWE2MmVhM2Q1ZmJlY2JjZjkyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0yMjgsNyArMjI4LDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXQKICAgICByZXR1cm4g
YWJzb2x1dGVUcmFuc2Zvcm07CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewogICAgIEludFJlY3QgcGFpbnRSZWN0
ID0gY2FsY3VsYXRlSW1hZ2VCdWZmZXJSZWN0KHRhcmdldFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
KTsKICAgICAvLyBEb24ndCBjcmVhdGUgZW1wdHkgSW1hZ2VCdWZmZXJzLgpAQCAtMjM4LDEyICsy
MzgsNyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZwogICAgIEZsb2F0U2l6ZSBzY2FsZTsKICAg
ICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocGFpbnRS
ZWN0LnNpemUoKSwgc2NhbGUpOwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2RlLCBj
b250ZXh0LCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIDEsIGNvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0jZW5kaWYKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgU2hvdWxkVXNlRGlzcGxheUxp
c3Q6Ok5vLCBSZW5kZXJpbmdQdXJwb3NlOjpET00sIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0
OjpCR1JBOCwgaG9zdFdpbmRvdyk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNTk2NTk3YmUxMjQ3YTk2YTYwNGFjY2Y0NTdlMDkyOWZk
MGY1MGEwZS4uYzM5ZmIxMDJlYmQxZjY5YzgxYjQyN2U3ODEzZjNhOGQ4NGIzOWFkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgK
QEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRvUmVuZGVyU1ZHQ29u
dGVudChSZW5kZXJFbGVtZW50JiwgUGFpbnRJbmZvJiwgTmVlZHNHcmFwaGljc0NvbnRleHRTYXZl
ID0gRG9udFNhdmVHcmFwaGljc0NvbnRleHQpOwogICAgIGJvb2wgaXNSZW5kZXJpbmdQcmVwYXJl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nRmxhZ3MgJiBSZW5kZXJpbmdQcmVwYXJlZDsg
fQogCi0gICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIp
OwogICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkUmVjdCwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0KiA9IG51bGxwdHIpOwogCiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvQ29u
dGV4dChHcmFwaGljc0NvbnRleHQmLCBSZW5kZXJFbGVtZW50JiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAppbmRleCA3YmNm
MDQxODAwZjc5OWYxMTc0Y2ZlMDRiODIyZDZkMDY0MzFmNjg2Li4yZWYwN2U0ZDhkYTFmYmQ3ODgx
M2RiZjExZTU3OTEzMDk3MjNkYmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxl
bWVudC5jcHAKQEAgLTczLDE2ICs3Myw2IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1l
LCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVCbGVuZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCi17Ci0gICAgRkVCbGVuZCogYmxlbmQgPSBzdGF0aWNfY2FzdDxGRUJsZW5kKj4oZWZmZWN0
KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om1vZGVBdHRyKQotICAgICAgICByZXR1
cm4gYmxlbmQtPnNldEJsZW5kTW9kZShtb2RlKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpIHsKQEAgLTEwMCwyMCArOTAsMjcgQEAg
dm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0
ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgRkVCbGVuZCYgYmxlbmQgPSBkb3duY2FzdDxGRUJs
ZW5kPihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCisg
ICAgICAgIGJsZW5kLnNldEJsZW5kTW9kZShtb2RlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MigpKTsKIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkp
OwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0
RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7
ICAgIAotICAgIHJldHVybiBlZmZlY3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAo
IWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVCbGVuZDo6Y3Jl
YXRlKG1vZGUoKSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJl
bGVhc2VOb25OdWxsKCksIGlucHV0Mi5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhk
OTIxNmUwYjk0MWZjOGIwNmRlYzY2Li42NTA4ODFmZTIyNmU1ZGFmYjU4MzdlOTFjNDIwYzU3MTQy
NTVjMjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjksOCAr
NjksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVm
ZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2UxZjI0NGU0MzY3ODY4ZjQyYmE5
Yy4uNjkzNGM4ZTJmYzU1OTA2NDZlZjI2NGQ5OTc3YTdjZTJlYzE3ZTg4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC03MSwxOCArNzEs
NiBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdAogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFQ29s
b3JNYXRyaXgqIGNvbG9yTWF0cml4ID0gc3RhdGljX2Nhc3Q8RkVDb2xvck1hdHJpeCo+KGVmZmVj
dCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICAgICAgcmV0
dXJuIGNvbG9yTWF0cml4LT5zZXRUeXBlKHR5cGUoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjp2YWx1ZXNBdHRyKQotICAgICAgICByZXR1cm4gY29sb3JNYXRyaXgtPnNldFZhbHVl
cyh2YWx1ZXMoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjp0eXBlQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6dmFsdWVzQXR0cikg
ewpAQCAtMTAwLDUwICs4OCw2MyBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK3ZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0
ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7Ci0KLSAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
YXV0byYgY29sb3JNYXRyaXggPSBkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpOworICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpIHsKKyAgICAgICAgY29sb3JNYXRy
aXguc2V0Q29sb3JNYXRyaXhUeXBlKHR5cGUoKSk7CisgICAgICAgIGNvbG9yTWF0cml4LnNldFZh
bHVlcyhmaWx0ZXJWYWx1ZXMoKSk7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6dmFsdWVzQXR0cikKKyAgICAgICAgY29sb3JNYXRyaXguc2V0VmFsdWVzKGZpbHRlclZhbHVl
cygpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi0gICAg
VmVjdG9yPGZsb2F0PiBmaWx0ZXJWYWx1ZXM7Ci0gICAgQ29sb3JNYXRyaXhUeXBlIGZpbHRlclR5
cGUgPSB0eXBlKCk7CitWZWN0b3I8ZmxvYXQ+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpmaWx0
ZXJWYWx1ZXMoKSBjb25zdAoreworICAgIFZlY3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzID0gdmFs
dWVzKCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHZhbHVlcygpLnNpemUoKTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1hdHJpeFZhbHVlQ291bnQgPSAyMDsKIAogICAgIC8vIFVzZSBk
ZWZhdWx0cyBpZiB2YWx1ZXMgaXMgZW1wdHkgKFNWRyAxLjEgMTUuMTApLgotICAgIGlmICghaGFz
QXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNBdHRyKSkgewotICAgICAgICBzd2l0Y2ggKGZpbHRl
clR5cGUpIHsKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAg
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1hdHJpeFZhbHVlQ291bnQgPSAyMDsK
LSAgICAgICAgICAgIGZpbHRlclZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hdHJpeFZh
bHVlQ291bnQpOworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYOgorICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVz
QXR0cikgfHwgc2l6ZSAhPSBtYXRyaXhWYWx1ZUNvdW50KSB7CisgICAgICAgICAgICBmaWx0ZXJW
YWx1ZXMuY2xlYXIoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0cml4
VmFsdWVDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlcy51bmNoZWNrZWRB
cHBlbmQoKGkgJSA2KSA/IDAgOiAxKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGZpbHRlclZhbHVlcy5hcHBlbmQoKGkgJSA2KSA/IDAgOiAxKTsKICAgICAgICAgfQotICAg
ICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgorICAgICAgICBpZiAoIWhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6dmFsdWVzQXR0cikgfHwgc2l6ZSAhPSAxKQogICAgICAgICAg
ICAgZmlsdGVyVmFsdWVzID0geyAwIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGlmICghaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB8fCBzaXplICE9IDEpCiAgICAgICAgICAgICBmaWx0ZXJW
YWx1ZXMgPSB7IDEgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25l
ZCBzaXplID0gdmFsdWVzKCkuc2l6ZSgpOwotCi0gICAgICAgIGlmICgoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYICYmIHNpemUgIT0gMjApCi0gICAgICAgICAgICB8fCAo
ZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFICYmIHNpemUgIT0gMSkK
LSAgICAgICAgICAgIHx8IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RSAmJiBzaXplICE9IDEpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIAot
ICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMoKTsKLSAgICAgICAgZmlsdGVyVmFsdWVzLnNo
cmlua1RvRml0KCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmls
dGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgZmlsdGVy
VmFsdWVzLnNocmlua1RvRml0KCk7CisgICAgcmV0dXJuIGZpbHRlclZhbHVlczsKK30KKworCitz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRl
cikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAg
IGlmICghaW5wdXQxKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJF
ZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSh0
eXBlKCksIGZpbHRlclZhbHVlcygpKSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwg
eyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXgg
N2FiNGFhNDE4MWU3YWIxOThiMTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uZjhkZWE1MjFiOTFhMzU3
MDk1YzExYjU4M2E2M2I3NDAwODJlMjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmgKQEAgLTg1LDggKzg1LDEwIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIFZlY3RvcjxmbG9hdD4gZmlsdGVyVmFsdWVzKCkgY29uc3Q7CisKKyAgICB2b2lk
IGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggOTBhNTViN2VmZmY3YTNmZTYwNmE5ZTA1Nzlh
NzZlZGU5Zjk2ODAxMS4uOWQ0ODQ3MTEwMGRjMjk1NTUzMWQ1ZWZjNzM1MTJkM2Y1NTUzYzA4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuY3BwCkBAIC02MywxMiArNjMsMTQgQEAgdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY28KICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5h
bWUsIHZhbHVlKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICAKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChoYXNGaWx0ZXJFZmZl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWQ7CiAgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbjsKQEAgLTg1LDEwICs4NywxMCBAQCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdAogICAgICAgICBlbHNlIGlmIChpczxTVkdGRUZ1bmNBRWxlbWVu
dD4oY2hpbGQpKQogICAgICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVu
dD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9Ci0gICAgCi0gICAgYXV0byBlZmZl
Y3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAg
cmV0dXJuIGVmZmVjdDsKKworICAgIHNldEZpbHRlckVmZmVjdChGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpKTsKKworICAgIHJldHVybiB7IGZpbHRl
ckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRl
eCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThiOTkzYTRkZDU0ODYzLi42NWY2OTYxMTBjMzFh
MjdiYjZkY2VhMzExMzA0MGZjOTEwNjY0M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2
YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZp
bHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lz
dHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUy
MDVhYzk4MjM1Li5iZDA0MDA5NjA0NDVlZDcyOGRhMWI0ZGM2ZTkxOWEzMmQ5ZTE2NzJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtNDAsNyAr
NDAsNyBAQCBpbmxpbmUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZH
TmFtZXM6OmluQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjE+KCk7CiAgICAgICAg
IFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmluMkF0dHIsICZT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1faW4yPigpOwotICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIENvbXBvc2l0ZU9wZXJh
dGlvblR5cGUsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAg
ICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9y
QXR0ciwgRkVDb21wb3NpdGVPcGVyYXRvciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9jb21w
b3NpdGVPcGVyYXRvcj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9w
ZXJ0eTxTVkdOYW1lczo6azFBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2sxPigpOwog
ICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMkF0
dHIsICZTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazI+KCk7CiAgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmszQXR0ciwgJlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6bV9rMz4oKTsKQEAgLTU2LDkgKzU2LDkgQEAgUmVmPFNWR0ZFQ29tcG9zaXRlRWxl
bWVudD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGEKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFt
ZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7Ci0gICAgICAgIENvbXBvc2l0ZU9wZXJhdGlv
blR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJhdGlv
blR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgRkVDb21wb3NpdGVPcGVyYXRvciBw
cm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmZy
b21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAg
ICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk1LDI1ICs5NSw2IEBAIHZvaWQgU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9tCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFQ29tcG9zaXRlKiBjb21wb3NpdGUgPSBz
dGF0aWNfY2FzdDxGRUNvbXBvc2l0ZSo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpvcGVyYXRvckF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldE9wZXJh
dGlvbihzdmdPcGVyYXRvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0
cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzEoazEoKSk7Ci0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjprMkF0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEsy
KGsyKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azNBdHRyKQotICAgICAgICBy
ZXR1cm4gY29tcG9zaXRlLT5zZXRLMyhrMygpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6Oms0QXR0cikKLSAgICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzQoazQoKSk7Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQogdm9pZCBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRv
ckF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsxQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6azJBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprM0F0dHIgfHwgYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6Oms0QXR0cikgewpAQCAtMTMxLDIwICsxMTIsMzUgQEAgdm9pZCBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpmaWx0
ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjIoKSk7Ci0gICAgCisgICAgYXV0byYgY29tcG9zaXRlID0gZG93bmNh
c3Q8RkVDb21wb3NpdGU+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpv
cGVyYXRvckF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRDb21wb3NpdGVPcGVyYXRvcihjb21w
b3NpdGVPcGVyYXRvcigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFB
dHRyKQorICAgICAgICBjb21wb3NpdGUuc2V0SzEoazEoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKKyAgICAgICAgY29tcG9zaXRlLnNldEsyKGsyKCkpOwor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprM0F0dHIpCisgICAgICAgIGNvbXBv
c2l0ZS5zZXRLMyhrMygpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRB
dHRyKQorICAgICAgICBjb21wb3NpdGUuc2V0SzQoazQoKSk7CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBidWlsZGVyLm5hbWVkRWZm
ZWN0KGluMigpKTsKKwogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRl
ciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlu
cHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChp
bnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0dXJu
IGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0
KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbXBvc2l0
ZU9wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpKTsKKyAgICAKKyAgICByZXR1cm4g
eyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJlbGVh
c2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmgKaW5kZXggODFhNzhjODY1N2EwZmEzMDQ0ZGY1YjdjNWEwODBkNmU3Nzk3MjJm
Ni4uZWZiY2Y1ZDEzNjAyOWM3NTdjYTFiYTgxZGU5ODgwNDA0ZjRhNzNiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaApAQCAtMjcsMTUgKzI3LDE1IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KLWlubGluZSB1bnNpZ25lZCBTVkdJRExF
bnVtTGltaXRzPENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1
ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KK2lubGluZSB1
bnNpZ25lZCBTVkdJRExFbnVtTGltaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+OjpoaWdoZXN0RXhw
b3NlZEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7
IH0KIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPENvbXBvc2l0ZU9wZXJh
dGlvblR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9y
PiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRUNP
TVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOyB9CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5n
KENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5n
KEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCiAgICAgewotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRvcikgewogICAg
ICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVS
OgpAQCAtNTgsNyArNTgsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3Bl
cmF0aW9uVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgc3RhdGljIEZFQ29tcG9zaXRlT3BlcmF0b3IgZnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJvdmVyIikKICAgICAg
ICAgICAgIHJldHVybiBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOwpAQCAtODUsNyArODUsNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJl
bnRWYWx1ZSgpOyB9CiAgICAgU3RyaW5nIGluMigpIGNvbnN0IHsgcmV0dXJuIG1faW4yLT5jdXJy
ZW50VmFsdWUoKTsgfQotICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgc3ZnT3BlcmF0b3IoKSBj
b25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT4oKTsgfQorICAgIEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8RkVDb21w
b3NpdGVPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IGsxKCkgY29uc3QgeyByZXR1cm4gbV9rMS0+
Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazItPmN1
cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgazMoKSBjb25zdCB7IHJldHVybiBtX2szLT5jdXJy
ZW50VmFsdWUoKTsgfQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAgICBTVkdBbmltYXRl
ZFN0cmluZyYgaW4xQW5pbWF0ZWQoKSB7IHJldHVybiBtX2luMTsgfQogICAgIFNWR0FuaW1hdGVk
U3RyaW5nJiBpbjJBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4yOyB9Ci0gICAgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3I7
IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBjb21wb3NpdGVPcGVyYXRvckFuaW1hdGVk
KCkgeyByZXR1cm4gbV9jb21wb3NpdGVPcGVyYXRvcjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVy
JiBrMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMTsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBr
MkFuaW1hdGVkKCkgeyByZXR1cm4gbV9rMjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiBrM0Fu
aW1hdGVkKCkgeyByZXR1cm4gbV9rMzsgfQpAQCAtMTA4LDEzICsxMDgsMTMgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmli
dXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRl
ckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0
ZWRTdHJpbmc+IG1faW4yIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAg
IFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpIH07Cisg
ICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fY29tcG9zaXRlT3BlcmF0b3IgeyBTVkdB
bmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZF
UikgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazEgeyBTVkdBbmltYXRlZE51bWJl
cjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2syIHsgU1ZH
QW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJl
cj4gbV9rMyB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaWRsIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5pZGwKaW5kZXggNzhlNDAyMDdmNWIwMmY2
NzBmMDQwYjI5Mzc1ZWFkN2MyYjQ1MmRlMC4uZmM2NzBjOWVjNTZjNDFjMTA5Mjg1NDg0MjdjNWY2
YThlMTg1YjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5pZGwKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmlt
YXRlZFN0cmluZyAgICAgIGluMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRT
dHJpbmcgICAgICBpbjI7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3JdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAgIFtJbXBsZW1l
bnRlZEFzPWNvbXBvc2l0ZU9wZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRO
dW1iZXIgICAgICBrMTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIg
ICAgICBrMjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBr
MzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
Y3BwCmluZGV4IGY3NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1YTgwYzZhMjZkZjEuLjY0ODIz
MjEwNWI5ZmU0YzM3NTNiYjg0OTE3OTU2YmU0MjBmNjk3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApAQCAtMTM4LDI4ICsxMzgs
NiBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdAogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVy
RWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZF
Q29udm9sdmVNYXRyaXgqIGNvbnZvbHZlTWF0cml4ID0gc3RhdGljX2Nhc3Q8RkVDb252b2x2ZU1h
dHJpeCo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0
dHIpCi0gICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0RWRnZU1vZGUoZWRnZU1vZGUo
KSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaXZpc29yQXR0cikKLSAgICAgICAg
cmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXREaXZpc29yKGRpdmlzb3IoKSk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpiaWFzQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0
cml4LT5zZXRCaWFzKGJpYXMoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJn
ZXRYQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRUYXJnZXRPZmZzZXQo
SW50UG9pbnQodGFyZ2V0WCgpLCB0YXJnZXRZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnRhcmdldFlBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldFRh
cmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFkoKSkpOwotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpCi0gICAgICAgIHJldHVybiBj
b252b2x2ZU1hdHJpeC0+c2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50KGtlcm5lbFVuaXRM
ZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCkpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgt
PnNldFByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6c2V0T3JkZXIoZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBtX29yZGVyWC0+c2V0
QmFzZVZhbEludGVybmFsKHgpOwpAQCAtMTkxLDEzICsxNjksMzYgQEAgdm9pZCBTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8mIGNvbnZvbHZlTWF0cml4
ID0gZG93bmNhc3Q8RkVDb252b2x2ZU1hdHJpeD4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0RWRn
ZU1vZGUoZWRnZU1vZGUoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRp
dmlzb3JBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXREaXZpc29yKGRpdmlzb3IoKSk7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJpYXNBdHRyKQorICAgICAgICBj
b252b2x2ZU1hdHJpeC5zZXRCaWFzKGJpYXMoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnRhcmdldFhBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRUYXJnZXRP
ZmZzZXQoSW50UG9pbnQodGFyZ2V0WCgpLCB0YXJnZXRZKCkpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNl
dFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFkoKSkpOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKKyAgICAgICAg
Y29udm9sdmVNYXRyaXguc2V0S2VybmVsVW5pdExlbmd0aChGbG9hdFBvaW50KGtlcm5lbFVuaXRM
ZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCkpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNl
dFByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQogCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBW
ZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxk
ZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGlmIChoYXNGaWx0ZXJFZmZlY3Qo
KSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25O
dWxsKCkgfSB9OworICAgIAogICAgIGludCBvcmRlclhWYWx1ZSA9IG9yZGVyWCgpOwogICAgIGlu
dCBvcmRlcllWYWx1ZSA9IG9yZGVyWSgpOwogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVz
OjpvcmRlckF0dHIpKSB7CkBAIC0yMDYsMjIgKzIwNywyMiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQgogICAgIH0KICAgICAvLyBTcGVjIHNheXMgb3JkZXIgbXVzdCBiZSA+IDAuIEJhaWwgaWYg
aXQgaXMgbm90LgogICAgIGlmIChvcmRlclhWYWx1ZSA8IDEgfHwgb3JkZXJZVmFsdWUgPCAxKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBhdXRvJiBr
ZXJuZWxNYXRyaXggPSB0aGlzLT5rZXJuZWxNYXRyaXgoKTsKICAgICBpbnQga2VybmVsTWF0cml4
U2l6ZSA9IGtlcm5lbE1hdHJpeC5pdGVtcygpLnNpemUoKTsKICAgICAvLyBUaGUgc3BlYyBzYXlz
IHRoaXMgaXMgYSByZXF1aXJlbWVudCwgYW5kIHNob3VsZCBiYWlsIG91dCBpZiBmYWlscwogICAg
IGlmIChvcmRlclhWYWx1ZSAqIG9yZGVyWVZhbHVlICE9IGtlcm5lbE1hdHJpeFNpemUpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaW50IHRhcmdl
dFhWYWx1ZSA9IHRhcmdldFgoKTsKICAgICBpbnQgdGFyZ2V0WVZhbHVlID0gdGFyZ2V0WSgpOwog
ICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSAmJiAodGFyZ2V0WFZh
bHVlIDwgMCB8fCB0YXJnZXRYVmFsdWUgPj0gb3JkZXJYVmFsdWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoZSBk
ZWZhdWx0IHZhbHVlIGlzOiB0YXJnZXRYID0gZmxvb3IgKCBvcmRlclggLyAyICkpCiAgICAgaWYg
KCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldFhBdHRyKSkKICAgICAgICAgdGFyZ2V0WFZh
bHVlID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob3JkZXJYVmFsdWUgLyAyKSk7CiAgICAgaWYg
KGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpICYmICh0YXJnZXRZVmFsdWUgPCAw
IHx8IHRhcmdldFlWYWx1ZSA+PSBvcmRlcllWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4geyB9OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQg
dmFsdWUgaXM6IHRhcmdldFkgPSBmbG9vciAoIG9yZGVyWSAvIDIgKSkKICAgICBpZiAoIWhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6dGFyZ2V0WUF0dHIpKQogICAgICAgICB0YXJnZXRZVmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvcmRlcllWYWx1ZSAvIDIpKTsKQEAgLTIzNCwxMSArMjM1
LDExIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZ
VmFsdWUgPSAxOwogICAgIH0KICAgICBpZiAoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSA8PSAwIHx8
IGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUgPD0gMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBmbG9hdCBkaXZpc29yVmFsdWUgPSBkaXZpc29yKCk7
CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZGl2aXNvckF0dHIpICYmICFkaXZpc29y
VmFsdWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogICAg
IGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpkaXZpc29yQXR0cikpIHsKICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBrZXJuZWxNYXRyaXhTaXplOyArK2kpCiAgICAgICAgICAgICBkaXZp
c29yVmFsdWUgKz0ga2VybmVsTWF0cml4Lml0ZW1zKClbaV0tPnZhbHVlKCk7CkBAIC0yNDYsOSAr
MjQ3LDEyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgICAgICAgICBkaXZpc29yVmFs
dWUgPSAxOwogICAgIH0KIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3Jl
YXRlKGZpbHRlciwgSW50U2l6ZShvcmRlclhWYWx1ZSwgb3JkZXJZVmFsdWUpLCBkaXZpc29yVmFs
dWUsIGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZhbHVlLCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9k
ZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZ
VmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5lbE1hdHJpeCk7Ci0gICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBhdXRvIGtl
cm5lbFNpemUgPSBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSk7CisgICAgYXV0byB0
YXJnZXRPZmZzZXQgPSBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSk7CisgICAg
YXV0byBrZXJuZWxVbml0TGVuZ3RoID0gRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVl
LCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKTsKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVDb252b2x2
ZU1hdHJpeDo6Y3JlYXRlKGtlcm5lbFNpemUsIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCB0YXJnZXRP
ZmZzZXQsIGVkZ2VNb2RlKCksIGtlcm5lbFVuaXRMZW5ndGgsIHByZXNlcnZlQWxwaGEoKSwga2Vy
bmVsTWF0cml4KSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVs
ZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKaW5kZXggODVjMDAy
Njk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5MDQ5YjMzOS4uMGUwOGUyOWFjMzFjMTU4YjBkZDBj
N2JiNmQ1YmUyYjdjMTQ0YzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEwMiw4ICsxMDIsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0
JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5
OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li41ZTU4OGZlOTcwNjIyYTgxYWVmZDMxYmUwMzNhZWQ5
NjdjYTQ1MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcApAQCAtODEsNTAgKzgxLDYgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnMKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcqIGRpZmZ1c2VM
aWdodGluZyA9IHN0YXRpY19jYXN0PEZFRGlmZnVzZUxpZ2h0aW5nKj4oZWZmZWN0KTsKLQotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7Ci0gICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgICAgICBBU1NF
UlQocmVuZGVyZXIpOwotICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNv
bG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGln
aHRpbmdDb2xvcigpKTsKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0TGlnaHRp
bmdDb2xvcihjb2xvcik7Ci0gICAgfQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikKLSAgICAgICAgcmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0U3VyZmFj
ZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRp
ZmZ1c2VDb25zdGFudEF0dHIpCi0gICAgICAgIHJldHVybiBkaWZmdXNlTGlnaHRpbmctPnNldERp
ZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7Ci0KLSAgICBhdXRvJiBsaWdodFNvdXJj
ZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmctPmxpZ2h0U291cmNl
KCkpOwotICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxp
Z2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBBU1NFUlQobGlnaHRFbGVt
ZW50KTsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCi0gICAg
ICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgp
KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIpCi0gICAgICAg
IHJldHVybiBsaWdodFNvdXJjZS5zZXRFbGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24o
KSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgcmV0dXJu
IGxpZ2h0U291cmNlLnNldFgobGlnaHRFbGVtZW50LT54KCkpOwotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0
RWxlbWVudC0+eSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnpBdHRyKQotICAg
ICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVsZW1lbnQtPnooKSk7Ci0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQotICAgICAgICByZXR1cm4gbGln
aHRTb3VyY2Uuc2V0UG9pbnRzQXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRYKCkpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKLSAgICAgICAgcmV0dXJuIGxp
Z2h0U291cmNlLnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCi0gICAgICAgIHJldHVybiBs
aWdodFNvdXJjZS5zZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2ludHNBdFooKSk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAg
cmV0dXJuIGxpZ2h0U291cmNlLnNldFNwZWN1bGFyRXhwb25lbnQobGlnaHRFbGVtZW50LT5zcGVj
dWxhckV4cG9uZW50KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdD
b25lQW5nbGVBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25l
QW5nbGUobGlnaHRFbGVtZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVB
dHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRyIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7CkBAIC0xNTEsMjggKzEwNyw4MCBAQCB2b2lkIFNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChj
b25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBj
b25zdAordm9pZCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJp
YnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7CisgICAgYXV0byYgZGlmZnVzZUxpZ2h0aW5nID0gZG93bmNhc3Q8RkVEaWZmdXNl
TGlnaHRpbmc+KGVmZmVjdCk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0
aW5nX2NvbG9yQXR0cikgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICAgICAgQ29sb3IgY29s
b3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJl
ci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CisgICAgICAgIGRpZmZ1c2VM
aWdodGluZy5zZXRDb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpIHsKKyAgICAgICAgZGlm
ZnVzZUxpZ2h0aW5nLnNldFN1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkaWZmdXNl
Q29uc3RhbnRBdHRyKSB7CisgICAgICAgIGRpZmZ1c2VMaWdodGluZy5zZXREaWZmdXNlQ29uc3Rh
bnQoZGlmZnVzZUNvbnN0YW50KCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgYXV0
byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0U291cmNlJj4oZGlmZnVzZUxpZ2h0aW5n
LnNvdXJjZSgpKTsKKyAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGlnaHRFbGVtZW50ID0g
U1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CisgICAgQVNTRVJUKGxp
Z2h0RWxlbWVudCk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRy
KQorICAgICAgICBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVudC0+YXppbXV0aCgp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKKyAg
ICAgICAgbGlnaHRTb3VyY2Uuc2V0RWxldmF0aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0aW9uKCkp
OworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikKKyAgICAgICAgbGln
aHRTb3VyY2Uuc2V0WChsaWdodEVsZW1lbnQtPngoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRZKGxpZ2h0RWxlbWVu
dC0+eSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCisgICAg
ICAgIGxpZ2h0U291cmNlLnNldFoobGlnaHRFbGVtZW50LT56KCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5z
ZXRQb2ludHNBdFgobGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7CisgICAgZWxzZSBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNl
dFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKKyAgICBlbHNlIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0
UG9pbnRzQXRaKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRaKCkpOworICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAgICAgbGlnaHRTb3Vy
Y2Uuc2V0U3BlY3VsYXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQoKSk7
CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0
cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25lQW5nbGUobGlnaHRFbGVtZW50
LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVk
RWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAg
ICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0g
fTsKIAogICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExp
Z2h0RWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJj
ZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8g
bGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGJ1aWxkZXIpOwogCiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmls
dGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBz
dXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtl
cm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHNldEZp
bHRlckVmZmVjdChGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUo
KSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5n
dGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZl
Y3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAppbmRleCA2ODk5OTYw
OWY0YjZiNTZhNzZjODhlYTU2OTVmMWUwZTllMjA1NTgwLi41ZmFkNzU5NTQ1MDYzZjMyZTU0MWY5
ZmQ0NjBhNzkwZmRhMDA5N2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3Qm
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2
YTI2OWVhNmQ3MjJkZmQwNTE3M2Q4YzIuLmE4M2JhYTRjZmIwNGIzMmMzMGRjYWVmN2JmY2U0MGIz
ZjgwMmQ0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwCkBAIC04NCwyMCArODQsNiBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
cwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRURpc3BsYWNlbWVudE1hcCogZGlzcGxhY2Vt
ZW50TWFwID0gc3RhdGljX2Nhc3Q8RkVEaXNwbGFjZW1lbnRNYXAqPihlZmZlY3QpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIpCi0gICAgICAgIHJl
dHVybiBkaXNwbGFjZW1lbnRNYXAtPnNldFhDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3Rv
cigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRy
KQotICAgICAgICByZXR1cm4gZGlzcGxhY2VtZW50TWFwLT5zZXRZQ2hhbm5lbFNlbGVjdG9yKHlD
aGFubmVsU2VsZWN0b3IoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzY2FsZUF0
dHIpCi0gICAgICAgIHJldHVybiBkaXNwbGFjZW1lbnRNYXAtPnNldFNjYWxlKHNjYWxlKCkpOwot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lk
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnhDaGFubmVsU2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNl
bGVjdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKSB7CkBAIC0xMTUs
MjAgKzEwMSwzMSBAQCB2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTgogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
Cit2b2lkIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRl
Q2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgYXV0byYgZGlzcGxhY2VtZW50TWFwID0gZG93bmNhc3Q8RkVEaXNwbGFjZW1l
bnRNYXA+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hhbm5lbFNl
bGVjdG9yQXR0cikKKyAgICAgICAgZGlzcGxhY2VtZW50TWFwLnNldFhDaGFubmVsU2VsZWN0b3Io
eENoYW5uZWxTZWxlY3RvcigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
eUNoYW5uZWxTZWxlY3RvckF0dHIpCisgICAgICAgIGRpc3BsYWNlbWVudE1hcC5zZXRZQ2hhbm5l
bFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnNjYWxlQXR0cikKKyAgICAgICAgZGlzcGxhY2VtZW50TWFwLnNldFNjYWxlKHNj
YWxlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVp
bGRlcikKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogICAgIAogICAgIGlm
ICghaW5wdXQxIHx8ICFpbnB1dDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxTZWxl
Y3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVm
ZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQx
KTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAotICAgIHJldHVybiBlZmZl
Y3Q7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQor
ICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5l
bFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSkpOworCisgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCksIGlucHV0Mi5yZWxl
YXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRk
MGFlNWVjZDU4NjY1ZDMuLmQxNWY4OGU4ZTA5YWMzZWY5Njg2MGQ5M2Y2ZWUyZTJiZDY3ZWQyNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmgKQEAgLTkwLDggKzkwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAot
ICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdp
c3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0Fu
aW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAKaW5kZXggYTY4NmJiOGZhMzhkOWRkZmEyOGUwMmFl
ZDk1ZTQxYjA4YTM2ZjJmNy4uOWVhMGUwNzgzYmU4YTJmODBkZDZiN2FiYjY2ZDMwOGViZjcwYTA1
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5j
cHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MCw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKKyNpbmNs
dWRlICJEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsOSArMzcsOSBAQCBSZWY8U1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50PiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CitMaWdodFNv
dXJjZSBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdAogewotICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2U6OmNyZWF0
ZShhemltdXRoKCksIGVsZXZhdGlvbigpKTsKKyAgICByZXR1cm4geyBEaXN0YW50TGlnaHRTb3Vy
Y2VEYXRhKGF6aW11dGgoKSwgZWxldmF0aW9uKCkpIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAppbmRleCBmYmRmNzFjMGVjYmQ5Zjk5
N2Q2OWVhNjU0YjlmNWJhMDMxN2Q3MWNjLi4wZDk5NjJjZWQwYjEyMWYxM2U4MTM4ODQ0YTE4OWVh
ZTk1ZWJlN2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGln
aHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzAsOCArMzEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIFJlZjxMaWdo
dFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIExpZ2h0U291cmNlIGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIH07CisKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNw
cAppbmRleCAyMmJjZTFkMzMzMTdjOTU3MWZlNWQ3OWY0YjMyNmE4OWJmYzViNjgxLi5mZTIzMjhi
NWNhNjYzYjRkNGM5Yjc3ZTkzMjc0Y2VjMGE4ZTFkZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCkBAIC04OCw3ICs4OCwxMyBAQCB2b2lkIFNW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUsIGNvbnN0IEF0bwogCiB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgaWYgKFBy
b3BlcnR5UmVnaXN0cnk6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0
ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cikgeworICAgICAgICBJ
bnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKKyAgICAgICAgcHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0cikgewogICAgICAgICBJbnN0YW5jZUlu
dmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAg
ICAgICByZXR1cm47CkBAIC05NywyNyArMTAzLDQ0IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxl
bWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiB7CisgICAgYXV0byYgZmVEcm9wU2hhZG93ID0gZG93bmNhc3Q8RkVEcm9w
U2hhZG93PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyKQor
ICAgICAgICBmZURyb3BTaGFkb3cuc2V0RHgoZHgoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldER5KGR5KCkpOwor
ICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7Cisg
ICAgICAgIGZlRHJvcFNoYWRvdy5zZXRTdGREZXZpYXRpb25YKHN0ZERldmlhdGlvblgoKSk7Cisg
ICAgICAgIGZlRHJvcFNoYWRvdy5zZXRTdGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblkoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAg
IGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFpbnB1
dDEpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisg
ICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgp
IH0gfTsKKwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgaWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgp
IDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdT
dHlsZSgpOwogICAgIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JC
eUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBmbG9hdCBv
cGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICBhdXRvIGlucHV0MSA9IGZp
bHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGlmICghaW5wdXQxKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzZXRGaWx0ZXJFZmZlY3QoRkVEcm9wU2hhZG93Ojpj
cmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9y
LCBvcGFjaXR5KSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZp
bHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9y
LCBvcGFjaXR5KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAg
ICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5y
ZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1OGU3MTJiNjIxYjhjYmU0
MmY3NDUxZC4uNzZiZjkyNTMxNTk4MzE5YjI1MWU1OWZiMTdmN2ZlMzQzNWQzMDI3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCkBAIC01Myw3ICs1Myw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBlMTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIu
LjI3YzE1YjBmZTFjOGM3ZjY0NDNlYmY2M2FjMTI1YWYxZTg2M2Y1YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApAQCAtNDIsMzQgKzQyLDM4IEBAIFJlZjxTVkdG
RUZsb29kRWxlbWVudD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVGbG9vZEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdGRUZsb29kRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKK3ZvaWQgU1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0
dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJl
cigpOwogICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgRkVGbG9vZCogZmxvb2QgPSBzdGF0aWNfY2FzdDxG
RUZsb29kKj4oZWZmZWN0KTsKLQorICAgIAorICAgIGF1dG8mIGZsb29kID0gZG93bmNhc3Q8RkVG
bG9vZD4oZWZmZWN0KTsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX2NvbG9y
QXR0cikKLSAgICAgICAgcmV0dXJuIGZsb29kLT5zZXRGbG9vZENvbG9yKHN0eWxlLnN2Z1N0eWxl
KCkuZmxvb2RDb2xvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmZsb29kX29w
YWNpdHlBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2QtPnNldEZsb29kT3BhY2l0eShzdHlsZS5z
dmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZmxvb2Quc2V0Rmxvb2RDb2xvcihzdHlsZS5zdmdT
dHlsZSgpLmZsb29kQ29sb3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmZsb29kX29wYWNpdHlBdHRyKQorICAgICAgICBmbG9vZC5zZXRGbG9vZE9wYWNpdHkoc3R5bGUu
c3ZnU3R5bGUoKS5mbG9vZE9wYWNpdHkoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVw
bGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZF
Rmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikKIHsKKyAgICBpZiAoaGFzRmls
dGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKKwog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICgh
cmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAorICAgICAgICByZXR1cm4g
eyB9OworCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gcmVuZGVyZXItPnN0
eWxlKCkuc3ZnU3R5bGUoKTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCku
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBm
bG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICByZXR1cm4gRkVG
bG9vZDo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIG9wYWNpdHkpOworICAgIHNldEZpbHRlckVmZmVj
dChGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpKTsKKworICAgIHJldHVybiB7IGZpbHRl
ckVmZmVjdCgpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1l
bnQuaAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcyNDhhMWI2ZjVjZjUxZmVlOTExLi5hOWQ1
MjNlYmNkMDg3MWYwMzRmZDRjZWIwNGRjNmEwNzM1OTc1ZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAtMzUsOCArMzUsOCBAQCBwcml2YXRlOgogICAgIHVzaW5n
IFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8U1ZHRkVGbG9vZEVs
ZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47CiAgICAgY29uc3Qg
U1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNo
YW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdhOTk4
MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLjFkNTcxNTZhNzgyZWE5NWM2MTY3
ZTA2OTdlMjcyNDg4OGU5MGE1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC04Niw3ICs4NiwxMyBAQCB2b2lkIFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQQogCiB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoUHJvcGVydHlS
ZWdpc3RyeTo6aXNLbm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVk
Z2VNb2RlQXR0cikgeworICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0
aGlzKTsKKyAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikgewogICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAg
ICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CkBAIC05NSwxOCArMTAxLDMxIEBA
IHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVj
dCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8mIGZl
R2F1c3NpYW5CbHVyID0gZG93bmNhc3Q8RkVHYXVzc2lhbkJsdXI+KGVmZmVjdCk7CisgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7CisgICAgICAgIGZlR2F1
c3NpYW5CbHVyLnNldFN0ZERldmlhdGlvblgoc3RkRGV2aWF0aW9uWCgpKTsKKyAgICAgICAgZmVH
YXVzc2lhbkJsdXIuc2V0U3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKCkpOworICAgIH0gZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikKKyAgICAgICAgZmVHYXVz
c2lhbkJsdXIuc2V0RWRnZU1vZGUoZWRnZU1vZGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHN0ZERldmlhdGlvblgoKSA8
IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBz
ZXRGaWx0ZXJFZmZlY3QoRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0
ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNz
aWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCks
IGVkZ2VNb2RlKCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9Owot
ICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQx
LnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIyYzUwOWUyMTRmZTk0YWU0
MTAwMWNlNDhlZTBiMi4uMzg1NTE4ZmVmMmM4ZGQ2MTliYzk1MzA5NDk2NTFiN2FiNDQwYTVmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaApAQCAt
NTMsNyArNTMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJF
ZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxS
ZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgxMTk1
ZDNjMjdlYzRmLi5iZGFhYjg4NjQ2NmEzMzZlYjYxMTgyMGI5MTM3MDA0Y2I2Yjk4ZjE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTE3NCwxNiArMTc1LDUzIEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFs
aWRhdGlvbigqcGFyZW50UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBj
b25zdAorUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdGRUltYWdlRWxlbWVudDo6aW1hZ2VCdWZmZXJG
b3JFZmZlY3QoKSBjb25zdAogewotICAgIGlmIChtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1
cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKGZpbHRlciwgbV9jYWNoZWRJbWFnZS0+aW1hZ2VG
b3JSZW5kZXJlcihyZW5kZXJlcigpKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKLQogICAgIGF1
dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyho
cmVmKCksIHRyZWVTY29wZSgpKTsKKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBpZiAoaXNEZXNjZW5kYW50T3JT
aGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZp
bHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICBh
dXRvIGNvbnRleHROb2RlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQu
ZWxlbWVudCk7CisgICAgYXV0byByZW5kZXJlciA9IGNvbnRleHROb2RlLT5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBhYnNvbHV0ZVRyYW5zZm9ybQorICAgIGF1dG8gYWJzb2x1dGVUcmFuc2Zvcm0g
PSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0
Q29vcmRpbmF0ZVN5c3RlbSgqcmVuZGVyZXIpOworICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9y
bS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFuc2Zvcm0ueVNjYWxlKCksIDAsIDApOworCisg
ICAgYXV0byBzcmNSZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCk7CisKKyAgICBhdXRvIGltYWdlUmVjdCA9IHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1h
cFJlY3Qoc3JjUmVjdCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VSZWN0LCBzaGVhckZyZWVBYnNvbHV0ZVRyYW5z
Zm9ybSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byYgY29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgU1ZH
UmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250ZXh0LCAqcmVuZGVy
ZXIsIEFmZmluZVRyYW5zZm9ybSgpKTsKKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKwor
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKQoreworICAgIGlm
IChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsg
fSB9OworCisgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChG
RUltYWdlOjpjcmVhdGUoUmVmPEltYWdlPiB7ICptX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRl
cmVyKHJlbmRlcmVyKCkpIH0sIHByZXNlcnZlQXNwZWN0UmF0aW8oKSkpOworCisgICAgaWYgKGF1
dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlckZvckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0
ZXJFZmZlY3QoRkVJbWFnZTo6Y3JlYXRlKGltYWdlQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIHBy
ZXNlcnZlQXNwZWN0UmF0aW8oKSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsg
fSB9OwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
SW1hZ2VFbGVtZW50LmgKaW5kZXggZDkzZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEyNTZiYWRhMTU0
YzVjNy4uNDcwN2ZlNjgwNmJhODk2NTEwNDlhNmY4OTRjOGE3MWFlMjU4NTRiZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKQEAgLTU1LDcgKzU1LDEwIEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyRm9yRWZmZWN0
KCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZp
bHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZSB7IH0KKyAgICBzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3Vy
Y2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAppbmRleCBjZDBiZmI5ZWRjZmQ3YjRlMWFmMzli
NTVlZGJiYmQ3ODRhYWVhODlkLi4zNzFjNDJhYzQ1NjZkYzA2ZjZjMDYyYTYwYTJmZWQzNjk0OTBi
ZjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaApAQCAtMiw3ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvbGl2
ZXJAbmVyZ2V0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNyArMzIsNyBA
QCBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyOwogY2xhc3MgU1ZHRkVMaWdodEVsZW1lbnQgOiBwdWJs
aWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGRUxpZ2h0RWxl
bWVudCk7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNl
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBMaWdodFNvdXJjZSBs
aWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOwogICAgIHN0YXRp
YyBTVkdGRUxpZ2h0RWxlbWVudCogZmluZExpZ2h0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7
CiAKICAgICBmbG9hdCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoLT5jdXJyZW50
VmFsdWUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5kZXgg
YmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uNDY0N2U0NjkyZGFlOGM5
MjBkMmJkOWFjZTQ0MjhmYWJlMGE2OTRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJn
ZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtNDUs
MjQgKzQ0LDI1IEBAIFJlZjxTVkdGRU1lcmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVNZXJnZUVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCiB7Ci0gICAgYXV0byBlZmZlY3Qg
PSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCk7CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtZXJnZUlu
cHV0czsKIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5cGU8U1ZHRkVN
ZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZp
bHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAgICAgICAgYXV0
byBtZXJnZUVmZmVjdCA9IGJ1aWxkZXIubmFtZWRFZmZlY3QobWVyZ2VOb2RlLmluMSgpKTsKICAg
ICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKG1lcmdlRWZmZWN0LnJl
bGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIG1lcmdlSW5wdXRzLnNocmlua1RvRml0KCk7
Ci0KICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisg
ICAgICAgIHNldEZpbHRlckVmZmVjdChGRU1lcmdlOjpjcmVhdGUobWVyZ2VJbnB1dHMuc2l6ZSgp
KSk7CiAKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCBX
VEZNb3ZlKG1lcmdlSW5wdXRzKSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdl
RWxlbWVudC5oCmluZGV4IDc0NTA4NjgxNmY2OTc2YzY2OTdkYzUxMDc1ODAyZDI4M2NmNGUzYzIu
LmU4ODBlNmU5N2IzY2UyZTJjYmZmMzMyZTFkOTNhMTFkMjQ2YzlmM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCkBAIC0zNSw3ICszNSw3IEBAIHByaXZhdGU6CiAgICAg
dXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGRU1l
cmdlRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPjsKICAgICBj
b25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
c3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdp
c3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5
M2JlYWNlMzVlMmVkMTc5NWQzMjFiLi4wYWI1NWIyYWMxZjgxOGVjMmVmNDU2MTU0ZjU0MmU5NGJj
OGNhM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
Y3BwCkBAIC0zOSw3ICszOSw3IEBAIGlubGluZSBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpTVkdG
RU1vcnBob2xvZ3lFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hCiAgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBb
XSB7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6
OmluQXR0ciwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1faW4xPigpOwotICAgICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpvcGVyYXRvckF0dHIsIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3N2Z09wZXJh
dG9yPigpOworICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05h
bWVzOjpvcGVyYXRvckF0dHIsIE1vcnBob2xvZ3lPcGVyYXRvciwgJlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6Om1fbW9ycGhvbG9neU9wZXJhdG9yPigpOwogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjpyYWRpdXNBdHRyLCAmU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6bV9yYWRpdXNYLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9yYWRpdXNZPigp
OwogICAgIH0pOwogfQpAQCAtNTksOSArNTksOSBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1l
bnQ6OnNldFJhZGl1cyhmbG9hdCB4LCBmbG9hdCB5KQogdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRy
KSB7Ci0gICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1By
b3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsK
KyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3I+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICAgaWYg
KHByb3BlcnR5VmFsdWUgPiAwKQotICAgICAgICAgICAgbV9zdmdPcGVyYXRvci0+c2V0QmFzZVZh
bEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+KHByb3BlcnR5VmFsdWUpOworICAgICAg
ICAgICAgbV9tb3JwaG9sb2d5T3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5
T3BlcmF0b3I+KHByb3BlcnR5VmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04
MSwyMiArODEsNiBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0bwogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQog
Ci1ib29sIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0g
ICAgRkVNb3JwaG9sb2d5KiBtb3JwaG9sb2d5ID0gc3RhdGljX2Nhc3Q8RkVNb3JwaG9sb2d5Kj4o
ZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAg
ICAgICAgcmV0dXJuIG1vcnBob2xvZ3ktPnNldE1vcnBob2xvZ3lPcGVyYXRvcihzdmdPcGVyYXRv
cigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKLSAgICAg
ICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rpb25zIHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJh
dGVseS4KLSAgICAgICAgYm9vbCBpc1JhZGl1c1hDaGFuZ2VkID0gbW9ycGhvbG9neS0+c2V0UmFk
aXVzWChyYWRpdXNYKCkpOwotICAgICAgICBib29sIGlzUmFkaXVzWUNoYW5nZWQgPSBtb3JwaG9s
b2d5LT5zZXRSYWRpdXNZKHJhZGl1c1koKSk7Ci0gICAgICAgIHJldHVybiBpc1JhZGl1c1hDaGFu
Z2VkIHx8IGlzUmFkaXVzWUNoYW5nZWQ7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnJhZGl1c0F0dHIpIHsKQEAgLTExNCwyMSArOTgsMzQgQEAgdm9pZCBTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxk
ZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpm
aWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7
Ci0gICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKKyAgICBhdXRvJiBtb3JwaG9sb2d5ID0g
ZG93bmNhc3Q8RkVNb3JwaG9sb2d5PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6b3BlcmF0b3JBdHRyKQorICAgICAgICBtb3JwaG9sb2d5LnNldE1vcnBob2xvZ3lPcGVy
YXRvcihtb3JwaG9sb2d5T3BlcmF0b3IoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnJhZGl1c0F0dHIpIHsKKyAgICAgICAgLy8gQm90aCBzZXRSYWRpdXMgZnVuY3Rpb25z
IHNob3VsZCBiZSBldmFsdWF0ZWQgc2VwYXJhdGVseS4KKyAgICAgICAgbW9ycGhvbG9neS5zZXRS
YWRpdXNYKHJhZGl1c1goKSk7CisgICAgICAgIG1vcnBob2xvZ3kuc2V0UmFkaXVzWShyYWRpdXNZ
KCkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAorc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikK
K3sKKyAgICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlm
ICghaW5wdXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAorICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7CisgICAgZmxvYXQgeVJhZGl1cyA9IHJh
ZGl1c1koKTsKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJhZGl1cyA8IDApCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJF
ZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFTW9ycGhvbG9neTo6Y3JlYXRlKG1v
cnBob2xvZ3lPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKSk7CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywg
eVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAg
cmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVs
ZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4
NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2NjkuLjg0MGI1YmFhZjI4MzYwYzZmNjU5ZjNlOTk3NTQ3
MDcxODkzNGM3YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xv
Z3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaApAQCAtMjYsMTIgKzI2LDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRl
PD4KLXN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7Citz
dHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPiB7CiAgICAgc3RhdGlj
IHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRElMQVRFOyB9CiAKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUgdHlwZSkKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKE1vcnBob2xvZ3lPcGVy
YXRvciBtb3JwaG9sb2d5T3BlcmF0b3IpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgc3dpdGNoIChtb3JwaG9sb2d5T3BlcmF0b3IpIHsKICAgICAgICAgY2FzZSBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERToKQEAgLTQ0LDcg
KzQ0LDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+
IHsKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgfQogCi0gICAgc3RhdGljIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3IgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJlcm9kZSIpCiAgICAgICAgICAgICByZXR1
cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOwpAQCAtNjIsMTIgKzYyLDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFJhZGl1cyhmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAog
ICAgIFN0cmluZyBpbjEoKSBjb25zdCB7IHJldHVybiBtX2luMS0+Y3VycmVudFZhbHVlKCk7IH0K
LSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHN2Z09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdmdPcGVyYXRvci0+Y3VycmVudFZhbHVlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+KCk7IH0K
KyAgICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0b3I+
KCk7IH0KICAgICBmbG9hdCByYWRpdXNYKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNYLT5jdXJy
ZW50VmFsdWUoKTsgfQogICAgIGZsb2F0IHJhZGl1c1koKSBjb25zdCB7IHJldHVybiBtX3JhZGl1
c1ktPmN1cnJlbnRWYWx1ZSgpOyB9CiAKICAgICBTVkdBbmltYXRlZFN0cmluZyYgaW4xQW5pbWF0
ZWQoKSB7IHJldHVybiBtX2luMTsgfQotICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIHN2Z09w
ZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX3N2Z09wZXJhdG9yOyB9CisgICAgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbiYgbW9ycGhvbG9neU9wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX21v
cnBob2xvZ3lPcGVyYXRvcjsgfQogICAgIFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNYQW5pbWF0
ZWQoKSB7IHJldHVybiBtX3JhZGl1c1g7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYgcmFkaXVz
WUFuaW1hdGVkKCkgeyByZXR1cm4gbV9yYWRpdXNZOyB9CiAKQEAgLTgwLDEyICs4MCwxMiBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5n
ZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxT
VkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAgICBS
ZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9tb3JwaG9sb2d5T3BlcmF0b3IgeyBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RF
KSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWRO
dW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRp
dXNZIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbAppbmRleCBhMmMxODFmMmU2Mzdj
ZDM5MDk4ZWJlNjllNjA5OGFiZTNjMzg1Y2QxLi4yZDIxZjJhMWQ4ODhkMDJlYzE3OWRmMTBlMmRl
NDNmYzY1Mjk3ZDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuaWRsCkBAIC0zMyw3ICszMyw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU1ZH
X01PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFICAgPSAyOwogCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4xOwotICAgIFtJbXBsZW1lbnRlZEFzPXN2Z09w
ZXJhdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRv
cjsKKyAgICBbSW1wbGVtZW50ZWRBcz1tb3JwaG9sb2d5T3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJhZGl1c1g7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAgcmFkaXVzWTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcAppbmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIz
MDM1NDEwMGE1ZWU3Li41OTQ1MDZhM2ViNmJlMGI2ZTc1YTJmNzA0YmJhYjY4NWI2ZDUwNDQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApAQCAtNzIsNyArNzIs
MTMgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHIKIAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0g
ICAgaWYgKFByb3BlcnR5UmVnaXN0cnk6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7Cisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmR5QXR0cikgeworICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0
aGlzKTsKKyAgICAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmluQXR0
cikgewogICAgICAgICBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkIGd1YXJkKCp0aGlzKTsKICAg
ICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CkBAIC04MSwxNiArODcsMjcgQEAg
dm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50Ojpm
aWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8mIGZlT2Zmc2V0ID0gZG93bmNhc3Q8
RkVPZmZzZXQ+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIp
CisgICAgICAgIGZlT2Zmc2V0LnNldER4KGR4KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpkeUF0dHIpCisgICAgICAgIGZlT2Zmc2V0LnNldER5KGR5KCkpOworICAgIGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVmUHRy
PEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFT2Zmc2V0RWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIGlucHV0
MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmls
dGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRU9mZnNldDo6Y3JlYXRlKGR4
KCksIGR5KCkpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShmaWx0ZXIs
IGR4KCksIGR5KCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9Owot
ICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQx
LnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3MmRiNjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJl
ZS4uOWQzZGFmMDlkZDUzMWM0YzIzYjRlMWJhYzY0ZmI1NTQ2YTRhNDRiZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAtNDcsNyArNDcsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21T
dHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExp
Z2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dC5jcHAKaW5kZXggOWZmODQ3MzM4YTFiNmE1NWZjZGI4MjFhMDlmMGFjYzNjMjA3ZWE4MS4uY2Fh
NzYwZmY1MzBmYmJhYWUwNWY4OWExYjMzYzBmZWY5NWM2ZTJlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVy
eS5hYy5uej4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDExICsyMSw4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIgogCi0jaW5jbHVk
ZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2VE
YXRhLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDIxICszNywxMCBAQCBSZWY8U1ZHRkVQ
b2ludExpZ2h0RWxlbWVudD4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVQb2ludExpZ2h0RWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpIGNv
bnN0CitMaWdodFNvdXJjZSBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25z
dCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKLSAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247
Ci0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19V
TklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5j
ZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAgICAgIHBv
c2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgp
KTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICogcmVmZXJl
bmNlQm94LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2ZpbHRlcnMuaHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5v
cmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAg
cG9zaXRpb24uc2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1p
bllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxv
YXQpOwotICAgIH0gZWxzZQotICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHko
KSwgeigpKTsKLSAgICAKLSAgICByZXR1cm4gUG9pbnRMaWdodFNvdXJjZTo6Y3JlYXRlKHBvc2l0
aW9uKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOwor
ICAgIHJldHVybiB7IFBvaW50TGlnaHRTb3VyY2VEYXRhKHBvc2l0aW9uKSB9OwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaAppbmRleCAzM2E1YmQ3
NDkyMDgyOGM5OTg2NDViNzIyZjcyYTc0NWU0OGRhNzllLi4zZTM3NDg0MDQwYWYyNDc2NzUwNjgy
Yjg5ZTcyZGE1ZDM5ZGQxODZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGln
aHRFbGVtZW50LmgKQEAgLTMwLDggKzMwLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdG
RVBvaW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0g
ICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgTGlnaHRTb3VyY2UgbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKKwogc3RhdGljX2Fzc2VydChzaXplb2YoU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudCkgPT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCA5YjdjZTQwYWI5NzE2YWU0ZjMzNWY1NGIyNGNk
YTQ1OWE4NDI5YTU5Li5iYzgyNWZhNGE0NTExMDMxYjkyYWU5YmFkMWViMzdiZTI5YWQwY2QwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuY3BwCkBAIC04OCw1MiArODgsNiBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbgogICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwg
dmFsdWUpOwogfQogCi1ib29sIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVTcGVjdWxhckxpZ2h0aW5nKiBzcGVjdWxhckxpZ2h0aW5n
ID0gc3RhdGljX2Nhc3Q8RkVTcGVjdWxhckxpZ2h0aW5nKj4oZWZmZWN0KTsKLQotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7Ci0gICAgICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwotICAgICAgICBBU1NFUlQocmVu
ZGVyZXIpOwotICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlB
cHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdD
b2xvcigpKTsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldExpZ2h0aW5nQ29s
b3IoY29sb3IpOwotICAgIH0KLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VT
Y2FsZUF0dHIpCi0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTdXJmYWNlU2Nh
bGUoc3VyZmFjZVNjYWxlKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3Vs
YXJDb25zdGFudEF0dHIpCi0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTcGVj
dWxhckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgcmV0dXJuIHNwZWN1bGFyTGln
aHRpbmctPnNldFNwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCgpKTsKLQotICAgIGF1
dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRp
bmctPmxpZ2h0U291cmNlKCkpOwotICAgIGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVs
ZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBB
U1NFUlQobGlnaHRFbGVtZW50KTsKLQotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXpp
bXV0aEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxl
bWVudC0+YXppbXV0aCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmVsZXZhdGlv
bkF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRFbGV2YXRpb24obGlnaHRFbGVt
ZW50LT5lbGV2YXRpb24oKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikK
LSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFgobGlnaHRFbGVtZW50LT54KCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNv
dXJjZS5zZXRZKGxpZ2h0RWxlbWVudC0+eSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnpBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVsZW1lbnQt
PnooKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQotICAg
ICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRz
QXRYKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZQXR0cikKLSAg
ICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50
c0F0WSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCi0g
ICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2lu
dHNBdFooKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50
QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFNwZWN1bGFyRXhwb25lbnQobGln
aHRFbGVtZW50LT5zcGVjdWxhckV4cG9uZW50KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uu
c2V0TGltaXRpbmdDb25lQW5nbGUobGlnaHRFbGVtZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsK
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9p
ZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6c3VyZmFjZVNjYWxlQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25z
dGFudEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewpAQCAtMTYwLDI4
ICsxMTQsODUgQEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1l
bnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHQKICAgICBwcmltaXRpdmVBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRl
ciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byYgc3BlY3VsYXJMaWdodGlu
ZyA9IGRvd25jYXN0PEZFU3BlY3VsYXJMaWdodGluZz4oZWZmZWN0KTsKIAotICAgIGlmICghaW5w
dXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICAgICAg
Q29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CisgICAgICAg
IHNwZWN1bGFyTGlnaHRpbmcuc2V0Q29sb3IoY29sb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgUmVmUHRyIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGln
aHRFbGVtZW50KHRoaXMpOwotICAgIGlmICghbGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIp
IHsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZy5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxl
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpIHsKKyAgICAgICAgc3BlY3VsYXJMaWdodGlu
Zy5zZXRTcGVjdWxhckNvbnN0YW50KHNwZWN1bGFyQ29uc3RhbnQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGln
aHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
c3BlY3VsYXJFeHBvbmVudEF0dHIpIHsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZy5zZXRTcGVj
dWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihzcGVj
dWxhckxpZ2h0aW5nLnNvdXJjZSgpKTsKKyAgICBjb25zdCBTVkdGRUxpZ2h0RWxlbWVudCogbGln
aHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7Cisg
ICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmF6aW11dGhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRBemltdXRoKGxpZ2h0RWxlbWVu
dC0+YXppbXV0aCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0
aW9uQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0RWxldmF0aW9uKGxpZ2h0RWxlbWVudC0+
ZWxldmF0aW9uKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4QXR0cikK
KyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0WChsaWdodEVsZW1lbnQtPngoKSk7CisgICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRZ
KGxpZ2h0RWxlbWVudC0+eSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
ekF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFoobGlnaHRFbGVtZW50LT56KCkpOworICAg
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFhBdHRyKQorICAgICAgICBs
aWdodFNvdXJjZS5zZXRQb2ludHNBdFgobGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7CisgICAg
ZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCisgICAgICAgIGxp
Z2h0U291cmNlLnNldFBvaW50c0F0WShsaWdodEVsZW1lbnQtPnBvaW50c0F0WSgpKTsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKKyAgICAgICAgbGln
aHRTb3VyY2Uuc2V0UG9pbnRzQXRaKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRaKCkpOworICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKKyAgICAg
ICAgbGlnaHRTb3VyY2Uuc2V0U3BlY3VsYXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFy
RXhwb25lbnQoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5n
Q29uZUFuZ2xlQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0TGltaXRpbmdDb25lQW5nbGUo
bGlnaHRFbGVtZW50LT5saW1pdGluZ0NvbmVBbmdsZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0g
YnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFpbnB1dDEpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVybiB7
IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKKyAgICAKICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExp
Z2h0RWxlbWVudCh0aGlzKTsKKyAgICBpZiAoIWxpZ2h0RWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNl
KGJ1aWxkZXIpOworCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5n
Q29sb3IoKSk7CisgICAgCisgICAgc2V0RmlsdGVyRWZmZWN0KEZFU3BlY3VsYXJMaWdodGluZzo6
Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxh
ckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdo
dGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0
YW50KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5p
dExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZl
Y3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmls
dGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRl
eCA4OTdiOGRlMTU2ZDFjNzlhMWQzZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li5mYTY4NzhmYjVjYjQ3
NjQ2YzQyZWUzYjkwNzdhZjhlMTcyMDE5MjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU3LDggKzU3LDggQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZp
bHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKaW5kZXggZDZkYTMxMDY0Y2IxYjM3ZThj
YzkzODc0ZWE0YWE5Y2YyZGZiZmZlZS4uNDRjYTg4NjJlZTg4ODIyYmQ4MWRkMmExMjc1Y2MzNmJi
YzJiY2Y2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5j
cHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50
IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MCwxMSArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJT
cG90TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUg
IlNwb3RMaWdodFNvdXJjZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwy
OSArMzcsMTEgQEAgUmVmPFNWR0ZFU3BvdExpZ2h0RWxlbWVudD4gU1ZHRkVTcG90TGlnaHRFbGVt
ZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGEKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTVkdGRVNwb3RMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVm
PExpZ2h0U291cmNlPiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKFNWR0ZpbHRl
ckJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CitMaWdodFNvdXJjZSBTVkdGRVNwb3RMaWdodEVsZW1l
bnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewotICAgIEZs
b2F0UG9pbnQzRCBwb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgcG9pbnRzQXQ7Ci0KLSAgICBp
ZiAoYnVpbGRlci5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQ
RV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0g
YnVpbGRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24u
c2V0WChyZWZlcmVuY2VCb3gueCgpICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAg
ICAgICBwb3NpdGlvbi5zZXRZKHJlZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3gu
aGVpZ2h0KCkpOwotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMu
aHRtbCNmZVBvaW50TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2Nvb3Jkcy5odG1sI1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9zaXRpb24u
c2V0Wih6KCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWluWE1pbllDb3JuZXIo
KSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdvRmxvYXQpOwotCi0g
ICAgICAgIHBvaW50c0F0LnNldFgocmVmZXJlbmNlQm94LngoKSArIHBvaW50c0F0WCgpICogcmVm
ZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb2ludHNBdC5zZXRZKHJlZmVyZW5jZUJveC55
KCkgKyBwb2ludHNBdFkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1
dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3Bv
cnRfcGVyY2VudGFnZQotICAgICAgICBwb2ludHNBdC5zZXRaKHBvaW50c0F0WigpICogZXVjbGlk
aWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5t
YXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsKLSAgICAgICAgcG9pbnRz
QXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIFNwb3RMaWdodFNvdXJjZTo6Y3JlYXRlKHBvc2l0aW9uLCBw
b2ludHNBdCwgc3BlY3VsYXJFeHBvbmVudCgpLCBsaW1pdGluZ0NvbmVBbmdsZSgpKTsKKyAgICBh
dXRvIHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOworICAgIGF1dG8gcG9p
bnRzQXQgPSBGbG9hdFBvaW50M0QocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFoo
KSk7CisgICAgcmV0dXJuIHsgU3BvdExpZ2h0U291cmNlRGF0YShwb3NpdGlvbiwgcG9pbnRzQXQs
IHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5nbGUoKSkgfTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCmluZGV4IDNmNzcxN2MxMjY1
YzRmMzFmNTMwODg2OGQ0N2M5Nzg3OTdhNzMyMTEuLmNhYjk2NDk3NjAyNzIwNzJjNjM2M2Q3ZWU5
YjQzYWJhOTc2M2VkYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RM
aWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVt
ZW50LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBI
dW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zMCw3ICszMSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVTcG90TGlnaHRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291
cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
TGlnaHRTb3VyY2UgbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFNWR0ZFU3BvdExpZ2h0RWxlbWVudCkg
PT0gc2l6ZW9mKFNWR0ZFTGlnaHRFbGVtZW50KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3
MzcwLi42MzdhMzJmOWNkZTI4ZDRjNjMyZTEzMWI3Mjk0ODhhYzhjY2JhMGE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBAIC03MCwxNiArNzAsMTYgQEAgdm9pZCBT
VkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgYnVpbGRlcikKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotCisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZm
ZWN0KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAg
ICBzZXRGaWx0ZXJFZmZlY3QoRkVUaWxlOjpjcmVhdGUoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
aW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3Qo
KSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4IDQ1YjMyNzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIyZGM0
MmEzM2E5MWYuLmJlMzc5Njk5MDkzMDFkMjk2Y2ZmNWUwMTk3NDJkNDA1YTFiMTBmNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaApAQCAtNDIsNyArNDIsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkg
bV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgzZTNm
Yzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRhNGQuLjEyOTRiZjRhNTFhMDUyNGZjMzkyZjE4NDQ2ZGNl
ZTEzMzVkNDBhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5jcHAKQEAgLTg4LDI0ICs4OCw2IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1l
LCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZm
ZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKLXsKLSAgICBGRVR1cmJ1bGVuY2UqIHR1cmJ1bGVuY2UgPSBzdGF0aWNfY2FzdDxG
RVR1cmJ1bGVuY2UqPihlZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dHlw
ZUF0dHIpCi0gICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5zZXRUeXBlKHR5cGUoKSk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpCi0gICAgICAgIHJldHVy
biB0dXJidWxlbmNlLT5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpKTsKLSAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKQotICAgICAgICByZXR1cm4gKHR1
cmJ1bGVuY2UtPnNldEJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKCkpIHx8IHR1cmJ1bGVu
Y2UtPnNldEJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKCkpKTsKLSAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnNlZWRBdHRyKQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0
U2VlZChzZWVkKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0
dHIpCi0gICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5zZXROdW1PY3RhdmVzKG51bU9jdGF2ZXMo
KSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKQEAgLTExNywxMSArOTksMzMgQEAgdm9pZCBTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCit7CisgICAgYXV0byYgdHVyYnVsZW5jZSA9IGRvd25jYXN0PEZFVHVyYnVs
ZW5jZT4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQor
ICAgICAgICB0dXJidWxlbmNlLnNldFR1cmJ1bGVuY2VUeXBlKHR5cGUoKSk7CisgICAgZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikKKyAgICAgICAgdHVyYnVs
ZW5jZS5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpIHsKKyAgICAgICAgdHVyYnVsZW5jZS5z
ZXRCYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCgpKTsKKyAgICAgICAgdHVyYnVsZW5jZS5z
ZXRCYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpzZWVkQXR0cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRTZWVkKHNl
ZWQoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRy
KQorICAgICAgICB0dXJidWxlbmNlLnNldE51bU9jdGF2ZXMobnVtT2N0YXZlcygpKTsKKyAgICBl
bHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6OnR1cGxlPFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikKIHsKICAgICBpZiAoYmFzZUZyZXF1
ZW5jeVgoKSA8IDAgfHwgYmFzZUZyZXF1ZW5jeVkoKSA8IDApCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShmaWx0ZXIsIHR5cGUoKSwgYmFz
ZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0
aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVj
dChGRVR1cmJ1bGVuY2U6OmNyZWF0ZSh0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVx
dWVuY3lZKCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElU
Q0hUWVBFX1NUSVRDSCkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9Owog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAppbmRl
eCBiZjlkYTIyYWQ0MmU0MTBhMTA0MzVlMGE0MGUzNDI2Nzc2OWUxOThhLi4zOTllYjhhNTJmNjQ3
ZmY2ZTVhMzFiNTc4OGEwMmY5YzJmY2Q0YWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmgKQEAgLTExOCw4ICsxMTgsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOworICAg
IHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKaW5kZXggNTU3OGI1MTlh
MzYyMmJkNzA2YWQyN2JmZTRjNjAwMzkxNDg1OGNhMC4uOWM0MzExMzRhODc3MDRmMDY0OWQ5MjJi
YTk3MTYzNmRkMjVlMWM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNw
cApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
aCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5saW5lcy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1
aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAppbmRleCBmZjUyMjMwOTQ2NmIwNDBiZWYwODlkMTU3YjM4
NmRmZmJiMDVjNjE5Li4zODY2ZDg5Y2Q3ZTNmMDg0NWQ0YTU3YjM2ZmI5Zjk5ODdhMzJkNzljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmNwcApAQCAtMjUsOSArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUu
aCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC02NiwxMSArNjQsMTUgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG4K
ICAgICBTVkdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpCit2b2lkIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCiB7Ci0gICAgLy8gV2hlbiBhbGwgZmlsdGVy
cyBzdXBwb3J0IHRoaXMgbWV0aG9kLCBpdCB3aWxsIGJlIGNoYW5nZWQgdG8gYSBwdXJlIHZpcnR1
YWwgbWV0aG9kLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIW1fZWZmZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBmaWx0ZXJFZmZlY3RB
dHRyaWJ1dGVDaGFuZ2VkKCptX2VmZmVjdCwgYXR0cmlidXRlKTsKKworICAgIGlmIChhdXRvKiBw
cmltaXRpdmVSZW5kZXJlciA9IHJlbmRlcmVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKj4ocHJpbWl0aXZlUmVuZGVyZXIpLT5wcmltaXRp
dmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZSk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lKQpAQCAtOTMsMjIgKzk1LDYgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYg
Y2gKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KiBmaWx0ZXJF
ZmZlY3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZpbHRlckVmZmVjdCk7Ci0gICAgaWYgKCFmaWx0
ZXJFZmZlY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNYKHRydWUpOwotICAgIGlm
IChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5z
ZXRIYXNZKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikp
Ci0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzV2lkdGgodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0
SGFzSGVpZ2h0KHRydWUpOwotfQotCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVy
U3R5bGUmJiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKIHsKICAgICByZXR1cm4g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU+KCp0aGlzLCBX
VEZNb3ZlKHN0eWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKaW5kZXggYzk4YjEzZWQ5NjI3NmFmOWUx
NGY2NDI4MTFhNmZkNzQ2NzcyYWNhNy4uZDdmZmRkYWQyNGIyYzM2YTc5N2RmMjIwYjg5ZTEyMjAx
ZmVkMmE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAtMzYsMTIgKzM2LDYgQEAgY2xhc3MgU1ZH
RmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRT
dGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25z
dCA9IDA7Ci0gICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVu
dCBmcm9tIHRoZSBvbGQgb25lLgotICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotCiAgICAgdXNpbmcg
UHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5T3duZXJSZWdpc3RyeTxTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0VsZW1lbnQ+OwogCiAgICAgY29uc3QgU1ZHTGVu
Z3RoVmFsdWUmIHgoKSBjb25zdCB7IHJldHVybiBtX3gtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC01
Niw2ICs1MCw5IEBAIHB1YmxpYzoKICAgICBTVkdBbmltYXRlZExlbmd0aCYgaGVpZ2h0QW5pbWF0
ZWQoKSB7IHJldHVybiBtX2hlaWdodDsgfQogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiByZXN1bHRB
bmltYXRlZCgpIHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAKKyAgICB2b2lkIHByaW1pdGl2ZUF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSk7CisgICAgdmly
dHVhbCBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVm
ZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCkBAIC02NCw3ICs2MSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBj
aGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
aW52YWxpZGF0ZSgpOwotICAgIHZvaWQgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsdGVyRWZm
ZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikg
eyB9CisKKyAgICBib29sIGhhc0ZpbHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0
OyB9CisgICAgdm9pZCBzZXRGaWx0ZXJFZmZlY3QoUmVmPEZpbHRlckVmZmVjdD4gZWZmZWN0KSB7
IG1fZWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOyB9CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3Q7IH0KIAogcHJpdmF0ZToKICAg
ICBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpA
QCAtNzMsNiArNzQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25z
dCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRlOwogICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5k
ZXJlcihjb25zdCBOb2RlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAorICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fZWZmZWN0OworICAgIAogICAgIC8vIFNwZWM6IElmIHRo
ZSB4L3kgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2
YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgogICAgIC8vIFNwZWM6IElmIHRoZSB3aWR0aC9o
ZWlnaHQgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2
YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCiAgICAgUmVmPFNWR0FuaW1hdGVkTGVuZ3Ro
PiBtX3ggeyBTVkdBbmltYXRlZExlbmd0aDo6Y3JlYXRlKHRoaXMsIFNWR0xlbmd0aE1vZGU6Oldp
ZHRoLCAiMCUiKSB9OwpAQCAtOTAsMTIgKzkzLDYgQEAgaW5saW5lIHZvaWQgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjppbnZhbGlkYXRlKCkKICAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcHJp
bWl0aXZlUmVuZGVyZXIpOwogfQogCi1pbmxpbmUgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlKQotewotICAgIGlmIChhdXRvKiBwcmltaXRpdmVSZW5kZXJlciA9IHJl
bmRlcmVyKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlKj4ocHJpbWl0aXZlUmVuZGVyZXIpLT5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJpYnV0ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUuY3BwCmluZGV4IDEwYzg4NDI5YzcyNDAzZGNlZDNhM2Y3ZWE0MDYwMGI1NzQ3MDNjZTguLjQx
ODQwMmJiMDFhZDhiMzBmMTAxNzljZDFmMGNhM2RmZjk4ZDQzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwCkBAIC0zMSwxNSAr
MzEsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgpCi0gICAgOiBtX2FsaWduKFNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlEKQotICAgICwgbV9tZWV0T3JTbGljZShTVkdfTUVF
VE9SU0xJQ0VfTUVFVCkKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1ZpZXcgdmFsdWUpCiB7CisgICAgcGFyc2UodmFsdWUpOwog
fQogCi1TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZShTdHJpbmdWaWV3IHZhbHVlKQorU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgYWxpZ24s
IFNWR01lZXRPclNsaWNlVHlwZSBtZWV0T3JTbGljZSkKKyAgICA6IG1fYWxpZ24oYWxpZ24pCisg
ICAgLCBtX21lZXRPclNsaWNlKG1lZXRPclNsaWNlKQogewotICAgIHBhcnNlKHZhbHVlKTsKIH0K
IAogRXhjZXB0aW9uT3I8dm9pZD4gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpzZXRBbGln
bih1bnNpZ25lZCBzaG9ydCBhbGlnbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAppbmRleCA1MTQwZjY5ZGY4Mjc2YjVlNzQzNmIyOGZkNTRj
ODMxN2MyOTlhYjMwLi4wOWRjNDQ3ODRkNzcyNTk5Y2FjYWIwMTdhYzBjZjMwYzI1OWJhMjExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5o
CkBAIC01MSw4ICs1MSw5IEBAIHB1YmxpYzoKICAgICAgICAgU1ZHX01FRVRPUlNMSUNFX1NMSUNF
ID0gMgogICAgIH07CiAKLSAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKTsKKyAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKSA9IGRlZmF1bHQ7CiAgICAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1ZpZXcpOworICAgIFdFQkNPUkVfRVhQT1JUIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZShTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSwgU1ZHTWVldE9y
U2xpY2VUeXBlKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEFsaWduKHVuc2lnbmVkIHNo
b3J0KTsKICAgICB1bnNpZ25lZCBzaG9ydCBhbGlnbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ247
IH0KQEAgLTcwLDEzICs3MSwzOSBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgdmFsdWVBc1N0cmlu
ZygpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1f
YWxpZ247Ci0gICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1fbWVldE9yU2xpY2U7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBhcnNlSW50ZXJuYWwoU3RyaW5nUGFyc2luZ0J1
ZmZlcjxDaGFyYWN0ZXJUeXBlPiYsIGJvb2wgdmFsaWRhdGUpOworCisgICAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1R5cGUgbV9hbGlnbiB7IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlE
IH07CisgICAgU1ZHTWVldE9yU2xpY2VUeXBlIG1fbWVldE9yU2xpY2UgeyBTVkdfTUVFVE9SU0xJ
Q0VfTUVFVCB9OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IG1fYWxpZ247CisgICAgZW5jb2RlciA8PCBtX21lZXRPclNsaWNlOworfQor
Cit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWU+IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlw
ZT4gYWxpZ247CisgICAgZGVjb2RlciA+PiBhbGlnbjsKKyAgICBpZiAoIWFsaWduKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTVkdNZWV0T3JTbGlj
ZVR5cGU+IG1lZXRPclNsaWNlOworICAgIGRlY29kZXIgPj4gbWVldE9yU2xpY2U7CisgICAgaWYg
KCFtZWV0T3JTbGljZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKmFsaWduLCAqbWVldE9yU2xpY2UpOworfQor
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU+IHsKICAgICBzdGF0aWMgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgpOyB9CiAgICAg
c3RhdGljIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKSB7IHJldHVybiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoc3RyaW5nKTsg
fQpAQCAtODUsMyArMTEyLDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRz
PFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9UeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29y
ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlw
ZSwKKworICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19Q
UkVTRVJWRUFTUEVDVFJBVElPX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSwKKyAgICAgICAg
V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19YTUlOWU1JTiwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JTiwKKyAgICAgICAgV2ViQ29yZTo6
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFY
WU1JTiwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdf
UFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JRCwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRCwKKyAg
ICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19YTUFYWU1JRCwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWCwKKyAgICAgICAgV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUlEWU1BWCwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
OjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1BWAorICAgID47Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZTo6U1ZHTWVldE9yU2xpY2VUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
KyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdNZWV0T3JT
bGljZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
OjpTVkdfTUVFVE9SU0xJQ0VfVU5LTk9XTiwKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpTVkdfTUVFVE9SU0xJQ0VfTUVFVCwKKyAgICAgICAgV2ViQ29yZTo6
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UKKyAgICA+
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDM4NWFmMjkwODQ4YTNkMGI4M2Yx
MmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjFhZmFkMDg3ZjM1MWNlYzY1ZTliYWZkMDQzNjFmNzAxYTQ2
YzM1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywxMzAgKzI0LDg4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogCi0jaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmls
dGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVy
VHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdSZW5k
ZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFSW1hZ2U6
OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAs
IG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+
IEZFSW1hZ2U6OmNyZWF0ZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlLCBjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSwgcHJlc2VydmVBc3Bl
Y3RSYXRpbykpOwogfQogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2Nv
cGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmls
dGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1fdHJlZVNjb3BlKCZ0cmVlU2NvcGUpCi0gICAgLCBt
X2hyZWYoaHJlZikKK0ZFSW1hZ2U6OkZFSW1hZ2UoU291cmNlSW1hZ2UmJiBzb3VyY2VJbWFnZSwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQor
ICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFSW1hZ2UpCisgICAgLCBtX3NvdXJjZUltYWdlKFdU
Rk1vdmUoc291cmNlSW1hZ2UpKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZl
QXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSW1h
Z2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgaW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsK
LX0KLQotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVy
JiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK0Zsb2F0
UmVjdCBGRUltYWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2Uo
ZmlsdGVyLCB0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZUltYWdlLAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxJ
bWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBhdXRvIGRyYXdpbmdSZWN0ID0gcHJpbWl0aXZl
U3VicmVnaW9uOworICAgICAgICAgICAgYXV0byBzcmNSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBp
bWFnZS0+c2l6ZSgpIH07CisgICAgICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNm
b3JtUmVjdChkcmF3aW5nUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm4gZ2VvbWV0
cnkuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGRyYXdpbmdSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4m
KSB7CisgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1p
dGl2ZVN1YnJlZ2lvbik7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgfQorICAgICk7CiB9CiAKLXZvaWQg
RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorYm9vbCBGRUltYWdlOjphcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBw
YWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChtX2lt
YWdlKSB7Ci0gICAgICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotICAgICAg
ICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3Qp
OwotICAgIH0gZWxzZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVu
ZGVyZXIoKSkKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0KLSAg
ICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVm
ZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0
UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50
UmVjdCkpOwotfQorICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGltYWdlUmVjdCA9IG91dHB1dC5wcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBhdXRvJiBvdXRw
dXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIFdURjo6c3dpdGNoT24o
bV9zb3VyY2VJbWFnZSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8SW1hZ2U+JiBpbWFnZSkgewor
ICAgICAgICAgICAgYXV0byBzcmNSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgp
IH07CisgICAgICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChpbWFn
ZVJlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgaW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1h
Z2VSZWN0KGltYWdlUmVjdCwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICAgICAgICAgIG91dHB1
dENvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3QsIHNyY1JlY3QpOworICAgICAgICB9
LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7Cisg
ICAgICAgICAgICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW1hZ2VSZWN0LCBv
dXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICAgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdIChSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgKTsKIAotUmVuZGVyRWxlbWVudCog
RkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fdHJlZVNj
b3BlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJl
ZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcobV9ocmVmLCAqbV90cmVlU2NvcGUp
OwotICAgIGlmICghaXM8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gdGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K1RleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdlICYmICFyZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdh
eXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJ
bWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVy
KCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
KTsKLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAg
c3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNy
Y1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAgICAg
ICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7
Ci0gICAgfQotCi0gICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0
KCkubG9jYXRpb24oKTsKLSAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBh
aW50TG9jYXRpb24ueSgpKTsKLQotICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOwotCi0gICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpOwot
ICAgICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICAgICAg
UmVmUHRyIGNvbnRleHROb2RlID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVsZW1l
bnQoKSk7Ci0gICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsK
LSAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0Tm9kZS5n
ZXQoKSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwotCi0gICAgICAgICAg
ICAvLyBJZiB3ZSdyZSByZWZlcmVuY2luZyBhbiBlbGVtZW50IHdpdGggcGVyY2VudGFnZSB1bml0
cywgZWcuIDxyZWN0IHdpdGg9IjMwJSI+IHRob3NlIHZhbHVlcyB3ZXJlIHJlc29sdmVkIGFnYWlu
c3QgdGhlIHZpZXdwb3J0LgotICAgICAgICAgICAgLy8gQnVpbGQgdXAgYSB0cmFuc2Zvcm1hdGlv
biB0aGF0IG1hcHMgZnJvbSB0aGUgdmlld3BvcnQgc3BhY2UgdG8gdGhlIGZpbHRlciBwcmltaXRp
dmUgc3VicmVnaW9uLgotICAgICAgICAgICAgaWYgKGxlbmd0aENvbnRleHQuZGV0ZXJtaW5lVmll
d3BvcnQodmlld3BvcnRTaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbmNhdENUTSht
YWtlTWFwQmV0d2VlblJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHZpZXdwb3J0U2l6ZSks
IGRlc3RSZWN0KSk7CisgICAgYXV0byBpbWFnZVNpemUgPSBXVEY6OnN3aXRjaE9uKG1fc291cmNl
SW1hZ2UsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAgICAgICAg
ICAgIHJldHVybiBpbWFnZS0+c2l6ZSgpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0
IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICByZXR1cm4gRmxv
YXRTaXplKGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdIChSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwogICAgICAgICB9
CisgICAgKTsKIAotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGVudFRyYW5zZm9ybWF0aW9u
OwotICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0cmVlVG9Db250ZXh0KGNv
bnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGNvbnRleHQuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3Jj
UmVjdCk7Ci19Ci0KLVRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
LXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXplOwotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBp
bWFnZVNpemUgPSBtX2ltYWdlLT5zaXplKCk7Ci0gICAgZWxzZSBpZiAoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBpbWFnZVNpemUgPSBlbmNs
b3NpbmdJbnRSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKS5z
aXplKCk7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVJbWFnZSI7Ci0gICAgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwg
IiBpbWFnZS1zaXplPVwiIiA8PCBpbWFnZVNpemUud2lkdGgoKSA8PCAieCIgPDwgaW1hZ2VTaXpl
LmhlaWdodCgpIDw8ICJcIl1cbiI7CiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1bXAgYWxz
byBvYmplY3QgcmV0dXJuZWQgYnkgU1ZHRkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0dXJuIHRz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5o
CmluZGV4IGFjMTYwZWRjZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLmY4NzY3Y2Zm
YzVmZjlhMzI5NzFjMWVjMjMxN2ZiNjNhNDdlM2ZhNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIzLDQxICsyNCw4MSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3Vt
ZW50OwogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgVHJlZVNjb3Bl
OwogCiBjbGFzcyBGRUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRy
PEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGlj
IFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAg
IHVzaW5nIFNvdXJjZUltYWdlID0gc3RkOjp2YXJpYW50PAorICAgICAgICBSZWY8SW1hZ2U+LAor
ICAgICAgICBSZWY8SW1hZ2VCdWZmZXI+LAorICAgICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIKKyAgICA+OwogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9IGRlZmF1
bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlKFNvdXJjZUltYWdlJiYsIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworCisgICAgU291cmNlSW1hZ2UmIHNv
dXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VT
b3VyY2UoU291cmNlSW1hZ2UmJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92
ZShzb3VyY2VJbWFnZSk7IH0KIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVJbWFnZSI7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOwogCi0g
ICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9Citwcml2YXRlOgorICAgIEZFSW1hZ2UoU291cmNl
SW1hZ2UmJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAgICBSZW5k
ZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICAvLyBGRUltYWdlIHJl
c3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQorICAgIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBv
dmVycmlkZSB7IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgZmluYWw7Ci0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIGZpbmFsOwotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRl
ckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICAvLyBtX3RyZWVTY29wZSB3aWxs
IG5ldmVyIGJlIGEgZGFuZ2xpbmcgcmVmZXJlbmNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MjQzCi0gICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZSB7IG51
bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9ocmVmOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3QgZmluYWw7CisKKyAgICBTb3VyY2VJbWFnZSBtX3NvdXJjZUltYWdlOwogICAgIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiB9OwogCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRUltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBhdXRvIHNvdXJjZUltYWdlRW5jb2RlID0gV1RGOjptYWtlVmlzaXRv
cigKKyAgICAgICAgWyZdKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpKQorICAgICAgICAgICAg
ICAgIGVuY29kZXIgPDwgbmF0aXZlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
OworICAgICAgICB9LAorICAgICAgICBbJl0oY29uc3QgUmVmPEltYWdlQnVmZmVyPiYgaW1hZ2VC
dWZmZXIpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaW1hZ2VCdWZmZXItPnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpOworICAgICAgICB9LAorICAgICAgICBbJl0oUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgZW5jb2RlciA8PCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgIH0KKyAg
ICApOworCisgICAgc3RkOjp2aXNpdChzb3VyY2VJbWFnZUVuY29kZSwgbV9zb3VyY2VJbWFnZSk7
CisgICAgZW5jb2RlciA8PCBtX3ByZXNlcnZlQXNwZWN0UmF0aW87Cit9CisKK3RlbXBsYXRlPGNs
YXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUltYWdlPj4gRkVJbWFnZTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllcjsKKyAgICBkZWNvZGVyID4+IGltYWdlSWRlbnRp
ZmllcjsKKyAgICBpZiAoIWltYWdlSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGRlY29kZXIgPj4gcHJlc2VydmVBc3BlY3RSYXRpbzsK
KyAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKCppbWFnZUlkZW50aWZpZXIsICpwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJbWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4
NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjUwZTVmOTZkZjk3NzYyYmRiZmJiZjY4ZWY0
NzI5MWEwNTI3NjE0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxMzIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUg
IlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorI2luY2x1ZGUg
IlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNW
R0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZm
ZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCi0g
ICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0
ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94
TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1l
bnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGJ1aWx0aW5FZmZl
Y3RzID0geworICAgICAgICBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSwKKyAgICAgICAgU291cmNl
QWxwaGE6OmNyZWF0ZSgpCisgICAgfTsKKworICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsK
KyAgICBhdXRvIFtmaWx0ZXJFZmZlY3RzLCBleHByZXNzaW9uXSA9IGJ1aWxkZXIuYnVpbGRFZmZl
Y3RzKGZpbHRlckVsZW1lbnQsIGJ1aWx0aW5FZmZlY3RzKTsKKyAgICBpZiAoZmlsdGVyRWZmZWN0
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0
ZShXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92
ZShleHByZXNzaW9uKSk7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRl
KEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24m
JiBleHByZXNzaW9uKQoreworICAgIEZpbHRlckVmZmVjdFZlY3RvciBidWlsdGluRWZmZWN0cyA9
IHsgU291cmNlR3JhcGhpYzo6Y3JlYXRlKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKSB9OworICAg
IHJldHVybiBjcmVhdGUoV1RGTW92ZShidWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZm
ZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbikpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdG
aWx0ZXI6OmNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVy
RWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJl
c3Npb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIoV1RGTW92ZShidWls
dGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbikp
KTsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoRmlsdGVyRWZmZWN0VmVjdG9yJiYgYnVpbHRp
bkVmZmVjdHMsIEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNWR0ZpbHRlckV4
cHJlc3Npb24mJiBleHByZXNzaW9uKQorICAgIDogRmlsdGVyKFR5cGU6OlNWR0ZpbHRlcikKKyAg
ICAsIG1fYnVpbHRpbkVmZmVjdHMoV1RGTW92ZShidWlsdGluRWZmZWN0cykpCisgICAgLCBtX2Zp
bHRlckVmZmVjdHMoV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSkKKyAgICAsIG1fZXhwcmVzc2lvbihX
VEZNb3ZlKGV4cHJlc3Npb24pKQoreworICAgIEFTU0VSVChtX2J1aWx0aW5FZmZlY3RzLnNpemUo
KSA9PSAyKTsKKyAgICBBU1NFUlQoIW1fZmlsdGVyRWZmZWN0cy5pc0VtcHR5KCkpOworICAgIEFT
U0VSVCghbV9leHByZXNzaW9uLmlzRW1wdHkoKSk7Cit9CisKK1JlZjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZpbHRlcjo6aW5kZXhlZEVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSwgdW5zaWduZWQg
aW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3Vy
Y2VHcmFwaGljKQorICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0c1swXTsKKworICAgIGlm
ICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEpCisgICAgICAgIHJldHVy
biBtX2J1aWx0aW5FZmZlY3RzWzFdOworCisgICAgQVNTRVJUKGluZGV4IDwgbV9maWx0ZXJFZmZl
Y3RzLnNpemUoKSk7CisgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0c1tpbmRleF07Cit9CisKK1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6bGFzdEVmZmVjdCgpIGNvbnN0CiB7Ci0gICAg
bV9hYnNvbHV0ZUZpbHRlclJlZ2lvbiA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVy
UmVnaW9uKTsKKyAgICBpZiAobV9leHByZXNzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA9IG1fZXhwcmVzc2lvbi5s
YXN0KCk7CisgICAgcmV0dXJuIGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgpOwogfQogCi1GbG9h
dFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUp
IGNvbnN0CitGaWx0ZXJFZmZlY3RWZWN0b3IgU1ZHRmlsdGVyOjplZmZlY3RzT2ZUeXBlKEZpbHRl
ckVmZmVjdDo6VHlwZSB0eXBlKSBjb25zdAogewotICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQot
ICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAgIEZp
bHRlckVmZmVjdFZlY3RvciBlZmZlY3RzOworCisgICAgZm9yIChhdXRvIGVmZmVjdCA6IG1fZmls
dGVyRWZmZWN0cykgeworICAgICAgICBpZiAoZWZmZWN0LT50eXBlKCkgPT0gdHlwZSkKKyAgICAg
ICAgICAgIGVmZmVjdHMuYXBwZW5kKFdURk1vdmUoZWZmZWN0KSk7CisgICAgfQorCisgICAgcmV0
dXJuIGVmZmVjdHM7CisKK30KKworYm9vbCBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlclJlc3VsdCYg
cmVzdWx0LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBn
ZW9tZXRyeSkgY29uc3QKK3sKKyAgICBpZiAoIWxhc3RFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBzb3VyY2VJbWFnZTsKKyAgICBpZiAo
IXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlSW1hZ2UgPSBzdGFjay50YWtlTGFzdCgp
OwogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICog
bV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7Cisg
ICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHJlc3Vs
dC5pbWFnZXMoKS5nZXQoeyAqdGhpcyB9KSkgeworICAgICAgICBzdGFjay5hcHBlbmQoeyAqaW1h
Z2UgfSk7CisgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gW3R5
cGUsIGluZGV4LCBsZXZlbF0gOiBtX2V4cHJlc3Npb24pIHsKKyAgICAgICAgYXV0byBlZmZlY3Qg
PSBpbmRleGVkRWZmZWN0KHR5cGUsIGluZGV4KTsKKyAgICAgICAgYXV0byBib3VuZGFyeVNldCA9
IGdlb21ldHJ5LmJvdW5kYXJ5U2V0KHR5cGUsIGluZGV4KTsKKworICAgICAgICBpZiAoZWZmZWN0
LT50eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKSB7CisgICAgICAg
ICAgICBpZiAoIXNvdXJjZUltYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgc3RhY2suYXBwZW5kKHsgKnNvdXJjZUltYWdlIH0pOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFlZmZlY3QtPmFwcGx5KHJlc3VsdCwgc3RhY2ssIGdlb21ldHJ5LCBib3Vu
ZGFyeVNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVJlZjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVT
b3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBj
b25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1RleHRT
dHJlYW0mIFNWR0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
RmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZVNvdXJj
ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJSZWdpb24sIGVmZmVjdEJC
b3hNb2RlKSk7CisgICAgYXV0byBlbmQgPSBtX2V4cHJlc3Npb24ucmVuZCgpOworCisgICAgZm9y
IChhdXRvIGl0ID0gbV9leHByZXNzaW9uLnJiZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA9ICppdDsKKyAgICAgICAgaWYgKHR5cGUg
PT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkKKyAgICAgICAgICAgICsraXQ7CisK
KyAgICAgICAgYXV0byBlZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5cGUsIGluZGV4KTsKKyAgICAg
ICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMsIGxldmVsKTsKKyAgICAg
ICAgZWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDgw
OTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2YuLmMwNzljYTdjNzg3OTQwMDRj
NDE5OWM4NWUyYjkwNmJlNjZjNzQ3YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIwLDQxICsyMSw0NiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNs
dWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisj
aW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1Ymxp
YyBGaWx0ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAK
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50Jik7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShGaWx0ZXJFZmZl
Y3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYpOwogCi0gICAg
RmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFs
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdDsKIAotICAgIEZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRl
U291cmNlRHJhd2luZ1JlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KKyAgICBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGZpbHRlckVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVmZmVj
dHM7IH0KKyAgICBjb25zdCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAKLSAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3RzT2ZU
eXBlKEZpbHRlckVmZmVjdDo6VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAg
U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBl
ZmZlY3RCQm94TW9kZSk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShGaWx0
ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmls
dGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmKTsKKworICAgIFNWR0ZpbHRlcihGaWx0
ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmls
dGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmKTsKKworICAgIFJlZjxGaWx0ZXJFZmZl
Y3Q+IGluZGV4ZWRFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CisKKyAgICBib29sIGFwcGx5KEZpbHRlclJlc3VsdCYsIEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5hbDsKKworICAgIFRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0
aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJl
Y3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247
Ci0gICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2J1
aWx0aW5FZmZlY3RzOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2ZpbHRlckVmZmVjdHM7Cisg
ICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmls
dGVyKQogICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRl
cikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5j
dGlvbi5pc1NWR0ZpbHRlcigpOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuY3BwCmluZGV4IDk2ZjNhODA1MDQyOTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdiOTQu
LjE3ZDQzODk5NTMyZTliZGMxMTI4N2MxYzU4YTliZTU5ZjU4MTg4MjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
Y3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDg3ICsy
MSwxODQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVy
LmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIK
ICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+CisKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0Vf
TElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8
RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQorVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhTVkdGaWx0ZXJF
bGVtZW50JiBmaWx0ZXJFbGVtZW50LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
KQoreworICAgIGF1dG8gcHJpbWl0aXZlVW5pdHMgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVu
aXRzKCk7CisgICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBmaWx0ZXJFZmZlY3RCb3VuZGFy
eVNldHM7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7Cisg
ICAgICAgIGF1dG8gYm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5n
bGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwg
cHJpbWl0aXZlVW5pdHMsIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgCisgICAgICAgIE9w
dGlvblNldDxGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M+IGZsYWdzOworICAgICAgICBpZiAoZWZm
ZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAgICAgICAgIGZs
YWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gpOworCisgICAgICAgIGlmIChl
ZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAgICAgICAg
ZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWSk7CisKKyAgICAgICAgaWYg
KGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAg
ICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzV2lkdGgpOworCisg
ICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0
cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNI
ZWlnaHQpOworCisgICAgICAgIGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cy5hcHBlbmQoeyBib3Vu
ZGFyaWVzLCBmbGFncyB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmlsdGVyRWZmZWN0Qm91bmRh
cnlTZXRzOworfQorCitzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdFZlY3RvciwgU1ZHRmlsdGVyRXhw
cmVzc2lvbj4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQm
IGZpbHRlckVsZW1lbnQsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMp
Cit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsK
KyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGRO
b2RlcykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHNldHVwQnVpbHRpbkVmZmVjdHMoYnVp
bHRpbkVmZmVjdHMpOworCisgICAgRmlsdGVyRWZmZWN0c0lucHV0cyBlZmZlY3RzSW5wdXRzOwor
ICAgIGlmICghYnVpbGRFZmZlY3RzKGZpbHRlckVsZW1lbnQsIGVmZmVjdHNJbnB1dHMpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFidWlsZEV4cHJlc3Npb24oZWZmZWN0c0lucHV0
cykpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKG1fZmlsdGVy
RWZmZWN0cyksIFdURk1vdmUobV9leHByZXNzaW9uKSB9OworfQorCit2b2lkIFNWR0ZpbHRlckJ1
aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBidWls
dGluRWZmZWN0cykKK3sKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChGaWx0ZXJFZmZlY3Q6OnNv
dXJjZUdyYXBoaWNOYW1lKCksIGJ1aWx0aW5FZmZlY3RzWzBdKTsKKyAgICBtX2J1aWx0aW5FZmZl
Y3RzLmFkZChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgpLCBidWlsdGluRWZmZWN0c1sx
XSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUdy
YXBoaWMoKSBjb25zdAoreworICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChGaWx0ZXJF
ZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1lKCkpOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSgpIGNvbnN0CiB7Ci0gICAgbV9idWlsdGluRWZm
ZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAg
ICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VB
bHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFwaGljKSk7Ci0gICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsK
KyAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBo
YU5hbWUoKSk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJp
bmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCit2b2lkIFNWR0ZpbHRlckJ1aWxk
ZXI6OmFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIFJlZjxGaWx0ZXJFZmZl
Y3Q+IGVmZmVjdCkKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbGFzdEVm
ZmVjdCA9IGVmZmVjdDsKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9sYXN0
RWZmZWN0ID0gZWZmZWN0LnB0cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQorICAgIGlmIChtX2J1aWx0aW5FZmZlY3Rz
LmNvbnRhaW5zKG5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2xhc3RFZmZlY3QgPSBl
ZmZlY3Q7Ci0gICAgbV9uYW1lZEVmZmVjdHMuc2V0KGlkLCBtX2xhc3RFZmZlY3QpOworICAgIG1f
bGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIoKTsKKyAgICBtX25hbWVkRWZmZWN0cy5zZXQobmFtZSwg
V1RGTW92ZShlZmZlY3QpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVp
bGRlcjo6Z2V0RWZmZWN0QnlJZChjb25zdCBBdG9tU3RyaW5nJiBpZCkgY29uc3QKK1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKGlkLmlzRW1wdHkoKSkgeworICAgIGlmIChuYW1l
LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAobV9sYXN0RWZmZWN0KQogICAgICAgICAgICAgcmV0
dXJuIG1fbGFzdEVmZmVjdDsKIAotICAgICAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQo
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUdyYXBo
aWMoKTsKICAgICB9CiAKLSAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhpZCkpCi0g
ICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChpZCk7CisgICAgaWYgKG1fYnVpbHRp
bkVmZmVjdHMuY29udGFpbnMobmFtZSkpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3Rz
LmdldChuYW1lKTsKIAotICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQoaWQpOworICAgIHJl
dHVybiBtX25hbWVkRWZmZWN0cy5nZXQobmFtZSk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYg
ZWZmZWN0LCBSZW5kZXJPYmplY3QqIG9iamVjdCkKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09M
T1JfU1BBQ0VfTElORUFSX1NSR0IpCitzdGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9ySW50
ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICAvLyBUaGUg
ZWZmZWN0IG11c3QgYmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBlZmZlY3QuCi0gICAgQVNTRVJU
KCFtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgQVNTRVJUKCFvYmpl
Y3QgfHwgIW1fZWZmZWN0UmVuZGVyZXIuY29udGFpbnMob2JqZWN0KSk7Ci0gICAgbV9lZmZlY3RS
ZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKLQotICAgIHVuc2lnbmVk
IG51bWJlck9mSW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7Ci0K
LSAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0
IHR3aWNlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklucHV0RWZmZWN0
czsgKytpKQotICAgICAgICBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC0+aW5wdXRFZmZlY3QoaSkp
LmFkZChlZmZlY3QuZ2V0KCkpOwotCi0gICAgLy8gSWYgb2JqZWN0IGlzIG51bGwsIHRoYXQgbWVh
bnMgdGhlIGVsZW1lbnQgaXNuJ3QgYXR0YWNoZWQgZm9yIHNvbWUKLSAgICAvLyByZWFzb24sIHdo
aWNoIGluIHR1cm4gbWVhbiB0aGF0IGNlcnRhaW4gdHlwZXMgb2YgaW52YWxpZGF0aW9uIHdpbGwg
bm90Ci0gICAgLy8gd29yayAodGhlIExheW91dE9iamVjdCAtPiBGaWx0ZXJFZmZlY3QgbWFwcGlu
ZyB3aWxsIG5vdCBiZSBkZWZpbmVkKS4KLSAgICBpZiAob2JqZWN0KQotICAgICAgICBtX2VmZmVj
dFJlbmRlcmVyLmFkZChvYmplY3QsIGVmZmVjdC5nZXQoKSk7CisgICAgaWYgKGF1dG8gcmVuZGVy
ZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUo
KS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsKKworICAgIC8vIFRyeSB0
byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIGNvbXB1dGVkIHN0eWxlLgor
ICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcigmZWxlbWVudCkucHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMpKSB7CisgICAg
ICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIH0KKworICAgIHJldHVy
biBDb2xvckludGVycG9sYXRpb246OkF1dG87CiB9CisjZW5kaWYKIAotdm9pZCBTVkdGaWx0ZXJC
dWlsZGVyOjpjbGVhckVmZmVjdHMoKQorYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVj
dHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgRmlsdGVyRWZmZWN0c0lucHV0cyYg
ZWZmZWN0c0lucHV0cykKIHsKLSAgICBtX2xhc3RFZmZlY3QgPSBudWxscHRyOwotICAgIG1fbmFt
ZWRFZmZlY3RzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmNsZWFyKCk7Ci0gICAg
bV9lZmZlY3RSZW5kZXJlci5jbGVhcigpOwotICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CisgICAg
ZWZmZWN0c0lucHV0cy5zZXQoKnNvdXJjZUFscGhhKCksIEZpbHRlckVmZmVjdFZlY3RvciB7ICpz
b3VyY2VHcmFwaGljKCkgfSk7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGls
ZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVs
ZW1lbnQpKSB7CisgICAgICAgIGF1dG8gW2VmZmVjdCwgaW5wdXRzXSA9IGVmZmVjdEVsZW1lbnQu
YnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikK
KyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0RWxlbWVudCkg
PT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBlZmZlY3QtPnNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkp
OworI2VuZGlmCisgICAgCisgICAgICAgIGVmZmVjdHNJbnB1dHMuc2V0KHsgKmVmZmVjdCB9LCBX
VEZNb3ZlKGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVjdChlZmZlY3RFbGVtZW50LnJl
c3VsdCgpLCB7ICplZmZlY3QgfSk7CisKKyAgICAgICAgbV9maWx0ZXJFZmZlY3RzLmFwcGVuZChl
ZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVj
dCogZWZmZWN0KQorYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oY29uc3Qg
UmVmPEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZm
ZWN0c0lucHV0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpCiB7
Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CisgICAgLy8g
QSBjeWNsZSBpcyBkZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVmZmVjdC5wdHIoKSA9PSBzb3VyY2VHcmFw
aGljKCkpCisgICAgICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUdyYXBoaWMsIDAsIGxldmVsIH0pOworICAgIGVsc2UgaWYgKGVmZmVjdC5wdHIo
KSA9PSBzb3VyY2VBbHBoYSgpKQorICAgICAgICBtX2V4cHJlc3Npb24uaW5zZXJ0KDAsIHsgRmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSwgMSwgbGV2ZWwgfSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChtX2ZpbHRlckVmZmVjdHMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAg
IG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QtPnR5cGUoKSwgbV9maWx0ZXJFZmZlY3Rz
LmZpbmQoZWZmZWN0KSwgbGV2ZWwgfSk7CisgICAgfQorCisgICAgc3RhY2suYXBwZW5kKGVmZmVj
dCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0RWZmZWN0IDogZWZmZWN0c0lucHV0cy5nZXQoZWZm
ZWN0KSkgeworICAgICAgICBpZiAoIWJ1aWxkRXhwcmVzc2lvbihpbnB1dEVmZmVjdCwgZWZmZWN0
c0lucHV0cywgc3RhY2ssIGxldmVsICsgMSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIEFTU0VSVCghc3RhY2suaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoc3RhY2subGFzdCgpLnB0cigpID09IGVmZmVjdC5wdHIoKSk7
CisKKyAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1
dHMmIGVmZmVjdHNJbnB1dHMpCit7CisgICAgaWYgKCFtX2xhc3RFZmZlY3QpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGZvciAoYXV0byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJlbmNl
cyhlZmZlY3QpKQotICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKKyAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7CisgICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvbih7
ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0c0lucHV0cywgc3RhY2ssIDApOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5NzRm
YTMzZTc2NDYwY2U5N2ZhNy4uZWVlOGRkNWE4ZDcwYjc1NjkwYzE4YzZlM2E2NjAzNjBmZTk5ODRl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIwLDY4ICsyMSw0NSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorI2luY2x1ZGUg
IkZpbHRlckVmZmVjdFZlY3Rvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24uaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKIAogY2xhc3Mg
U1ZHRmlsdGVyQnVpbGRlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKKyAg
ICBTVkdGaWx0ZXJCdWlsZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgU1ZHRmlsdGVyQnVpbGRlcihS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAgICBzdGF0aWMgVmVjdG9yPEZp
bHRlckJvdW5kYXJ5U2V0PiBidWlsZEZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyhTVkdGaWx0ZXJF
bGVtZW50JiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCk7CiAKLSAgICB2b2lk
IHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5k
aW5nQm94ID0gcjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAgICAKLSAgICBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVVbml0
czsgfQotICAgIHZvaWQgc2V0UHJpbWl0aXZlVW5pdHMoU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlw
ZSB1bml0cykgeyBtX3ByaW1pdGl2ZVVuaXRzID0gdW5pdHM7IH0KKyAgICBzdGQ6OnR1cGxlPEZp
bHRlckVmZmVjdFZlY3RvciwgU1ZHRmlsdGVyRXhwcmVzc2lvbj4gYnVpbGRFZmZlY3RzKFNWR0Zp
bHRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsK
IAotICAgIHZvaWQgYWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0
Pik7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZSkgY29uc3Q7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBnZXRFZmZlY3RCeUlk
KGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0KLQotICAgIHZvaWQgYXBwZW5k
RWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYsIFJlbmRlck9i
amVjdCopOworcHJpdmF0ZToKKyAgICB1c2luZyBGaWx0ZXJFZmZlY3RzSW5wdXRzID0gSGFzaE1h
cDxSZWY8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj47CiAKLSAgICBp
bmxpbmUgRmlsdGVyRWZmZWN0U2V0JiBlZmZlY3RSZWZlcmVuY2VzKEZpbHRlckVmZmVjdCogZWZm
ZWN0KQotICAgIHsKLSAgICAgICAgLy8gT25seSBhbGxvd2VkIGZvciBlZmZlY3RzIGJlbG9uZ3Mg
dG8gdGhpcyBidWlsZGVyLgotICAgICAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRh
aW5zKGVmZmVjdCkpOwotICAgICAgICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZm
ZWN0KS0+dmFsdWU7Ci0gICAgfQorICAgIHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBzb3VyY2VHcmFwaGljKCkgY29uc3Q7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gc291
cmNlQWxwaGEoKSBjb25zdDsKIAotICAgIC8vIFJlcXVpcmVkIHRvIGNoYW5nZSB0aGUgYXR0cmli
dXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRlQ2hhbmdlZC4KLSAgICBpbmxp
bmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7
IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9CisgICAgdm9pZCBhZGROYW1l
ZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8RmlsdGVyRWZmZWN0Pik7CisgICAg
Ym9vbCBidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdHNJbnB1dHMm
KTsKIAotICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1
cnNpdmUoRmlsdGVyRWZmZWN0Kik7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgUmVm
PEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiwgRmlsdGVyRWZmZWN0
VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpOworICAgIGJvb2wgYnVpbGRFeHByZXNzaW9u
KGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmKTsKIAotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9p
ZCBhZGRCdWlsdGluRWZmZWN0cygpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6
IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkpCi0gICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5j
ZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotICAgIH0KLQotICAgIEhhc2hNYXA8
QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7Ci0gICAg
SGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7
Ci0gICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVy
IGVmZmVjdHMsCi0gICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBlZmZlY3Qu
Ci0gICAgSGFzaE1hcDxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0PiBtX2Vm
ZmVjdFJlZmVyZW5jZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJFZmZlY3Qq
PiBtX2VmZmVjdFJlbmRlcmVyOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2ZpbHRlckVmZmVj
dHM7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Npb247CiAKKyAgICBIYXNoTWFw
PEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOworICAgIEhh
c2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOwogICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKLSAgICBGbG9hdFJlY3QgbV90YXJn
ZXRCb3VuZGluZ0JveDsKLSAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZl
VW5pdHMgeyBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UgfTsKIH07
Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYjUwMmFkYTk2MjcwZTUwMTkzMmM2YzA3YjVmNDc5NTYyNDAzYjQ3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgU1ZHRmlsdGVyRXhwcmVzc2lvbiA9IFZlY3RvcjxzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdDo6
VHlwZSwgdW5zaWduZWQsIHVuc2lnbmVkPj47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBlZWE5MmZkZmFmYWY4NjJmMDBkMjEyOTQ4
M2U3MTkxYzE3YzZiNjcyLi43MjllNGE0NmYwMTVmMzA2Nzc0YjlhYmJlMDQ3MmI0NDYyYjQzMWMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ck1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMzAwLDYgKzMwMSw0MyBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmRyYXdQYXR0ZXJuV2l0aFF1YWxpZmll
ZElkZW50aWZpZXIoUXVhbGlmaWVkUmVuZAogICAgIHJlc291cmNlQ2FjaGUoKS5yZWNvcmRSZXNv
dXJjZVVzZShpbWFnZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyUmVmZXJlbmNlLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCit7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlcjsKKyAgICBpZiAoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSB7CisgICAgICAgIGlt
YWdlQnVmZmVyID0gcmVzb3VyY2VDYWNoZSgpLmNhY2hlZEltYWdlQnVmZmVyKHsgKmltYWdlQnVm
ZmVySWRlbnRpZmllciwgbV93ZWJQcm9jZXNzSWRlbnRpZmllciB9KTsKKyAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGZpbHRlciA9IGZpbHRl
clJlZmVyZW5jZS50YWtlRmlsdGVyKCk7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRl
ci0+ZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpKSB7CisgICAgICAg
IGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdlPihlZmZlY3QuZ2V0KCkpOworICAgICAg
ICAKKyAgICAgICAgY29uc3QgYXV0byogcmVzb3VyY2VJZGVudGlmaWVyID0gc3RkOjpnZXRfaWY8
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPigmZmVJbWFnZS5zb3VyY2VJbWFnZSgpKTsKKyAg
ICAgICAgaWYgKCFyZXNvdXJjZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGF1dG8gbmF0aXZlSW1hZ2UgPSByZXNvdXJjZUNhY2hlKCkuY2FjaGVkTmF0aXZlSW1hZ2UoeyAq
cmVzb3VyY2VJZGVudGlmaWVyLCBtX3dlYlByb2Nlc3NJZGVudGlmaWVyIH0pKSB7CisgICAgICAg
ICAgICBSZWY8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8TmF0aXZl
SW1hZ2U+IHsgbmF0aXZlSW1hZ2UgfSk7CisgICAgICAgICAgICBmZUltYWdlLnNldEltYWdlU291
cmNlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSByZXNvdXJjZUNhY2hlKCkuY2FjaGVkSW1h
Z2VCdWZmZXIoeyAqcmVzb3VyY2VJZGVudGlmaWVyLCBtX3dlYlByb2Nlc3NJZGVudGlmaWVyIH0p
KSB7CisgICAgICAgICAgICBmZUltYWdlLnNldEltYWdlU291cmNlKHsgKmltYWdlQnVmZmVyIH0p
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBoYW5kbGVJ
dGVtKERpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCBzb3VyY2VJbWFnZVJlY3QsIFdURk1vdmUoZmlsdGVyKSwgZ2VvbWV0cnkpLCBpbWFnZUJ1
ZmZlci5nZXQoKSk7Cit9CisKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIGhhbmRsZUl0ZW0oRGlzcGxh
eUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
aCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmgKaW5kZXggNjJhNDk3MDZlMjhiMDFlMGE2Yjg2OWJkMzNlNjI0ZWM3ZDhiMzY5MS4u
MjJiNjM5Yzk0OTMyZjcxOTFiYTYyY2ZkNzkyNmIwNzY0N2RkOTFiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlci5oCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBG
aWx0ZXJSZWZlcmVuY2U7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOwpAQCAtODAsNiArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVm
ZmVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMmKTsKICAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyYpOwogICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAg
dm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlLCBjb25zdCBXZWJD
b3JlOjpGaWx0ZXJHZW9tZXRyeSYpOwogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KTsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgppbmRleCA1
YzE0MDkzYTNiOWFiYTBhMWJlNzIwNjg3ZWZiNDY2OGI1OTVhMzYxLi5hNmU2YTFjYmY0NzMyYjVm
MDAzODg1OWE2MzhjMWU4MzE1YjI3MGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5tZXNzYWdlcy5pbgpAQCAtNDYsNiArNDYsNyBAQCBtZXNzYWdlcyAtPiBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBDbGlwUGF0aChXZWJD
b3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkK
ICAgICBCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGlu
YXRpb24sIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogICAgIEVu
ZENsaXBUb0RyYXdpbmdDb21tYW5kcyhXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisg
ICAgRHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBz
b3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlciwgV2ViQ29yZTo6Rmls
dGVyR2VvbWV0cnkgZ2VvbWV0cnkpCiAgICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0dseXBocyBpdGVtKQogICAgIERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9h
dFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCiAgICAgRHJhd05hdGl2ZUlt
YWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVj
dCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50
aW5nT3B0aW9ucyBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IGMyOWFhODZj
NGVhZWQyMmUwNzRiNmU1NzJhODJhYmIwNzZlYTUwMzQuLjk5MjhkYWFjMjUxNjczOTYyZWY4NGZi
MDAwZmU3NmY5MDFjZDg4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkZpbHRlclJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oIgpAQCAt
MzIwLDYgKzMyMSwzNCBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldFNoYXJlYWJs
ZUJpdG1hcEZvckltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aQogICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpZGVudGlmaWVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSYmIGZpbHRlclJlZmVyZW5jZSwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LAorICAgIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIGZpbHRlciA9IGZpbHRl
clJlZmVyZW5jZS50YWtlRmlsdGVyKCk7CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgaGFuZGxlOworICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVt
b3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcih7IGlkZW50aWZpZXIsIG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSB9KTsKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBpbWFn
ZSA9IGltYWdlQnVmZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwgZ2VvbWV0cnkpOworICAgICAg
ICBpZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZVNpemUpLCB7IGltYWdlQnVmZmVyLT5jb2xv
clNwYWNlKCkgfSk7CisgICAgICAgIGlmICghYml0bWFwKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGJpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUoaGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y2FjaGVOYXRp
dmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAg
Ly8gSW1tZWRpYXRlbHkgdHVybiB0aGUgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyICh3aGlj
aCBpcyBlcnJvci1wcm9uZSkgdG8gYSBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAxOWZiMTdmMDI1ZmIyYzY1ZjFkZGUyNzJjMzBi
YjBkZTk0NWNhZjlmLi5jYjlkMGQ3NTAxM2I4YWM2YjAzZjJlNDdhMjY3YzA0YTZmMmY1NGJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTU5LDYgKzU5LDEwIEBAIGVudW0gY2xhc3MgUmVuZGVy
aW5nTW9kZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZl
cmVuY2U7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOwpAQCAtMTA5LDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXREYXRh
VVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYm
KT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4m
Jik+JiYpOwogICAgIHZvaWQgZ2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRp
b24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYp
OworICAgIHZvaWQgZ2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UmJiwgY29uc3QgV2Vi
Q29yZTo6RmlsdGVyR2VvbWV0cnkmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpGb250PiYmKTsKICAgICB2b2lk
IGRlbGV0ZUFsbEZvbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
CmluZGV4IGExNDJmNDg5NjZmNWM0OTc1OTQ1NjU0NzcyYzc5YzMxOTc2ZjUzZGMuLjQxNWZkYTU4
ZGNmNmJiMDg2NGZiNjExMzUxMDU5OTY3MjQxNzRmYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0zMSw2ICszMSw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIEdldERhdGFVUkxGb3JJ
bWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0
RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMK
ICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAoV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5
CisgICAgR2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVy
LCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSBnZW9tZXRyeSkgLT4gKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1FbmNvZGFibGVSZXBs
eQogICAgIENhY2hlTmF0aXZlSW1hZ2UoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpIE5vdFN0cmVhbUVuY29kYWJsZQogICAgIENhY2hlRm9udChJUEM6OkZv
bnRSZWZlcmVuY2UgZm9udCkgTm90U3RyZWFtRW5jb2RhYmxlCiAgICAgRGVsZXRlQWxsRm9udHMo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNl
LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kNDUzN2RjMmVkZDM0YWNhZTQzNjI4NmVlZTJjZWY1YjkxZjg5ZWJjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmlsdGVyUmVmZXJlbmNlLmgKQEAg
LTAsMCArMSw0MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTRmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUJsZW5kLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GRUNvbG9yTWF0cml4Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbXBvbmVu
dFRyYW5zZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbXBvc2l0ZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRkVDb252b2x2ZU1hdHJpeC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVEaWZmdXNl
TGlnaHRpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFRGlzcGxhY2VtZW50TWFwLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9GRURyb3BTaGFkb3cuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFRmxvb2Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFR2F1c3NpYW5CbHVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GRU1lcmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU1vcnBob2xvZ3kuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZFT2Zmc2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRVNwZWN1bGFyTGlnaHRp
bmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFVGlsZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVU
dXJidWxlbmNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbHRlckVmZmVjdFZlY3Rvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZHRkVJbWFnZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZHRmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdG
aWx0ZXJFeHByZXNzaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VHcmFwaGljLmg+CisK
K25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBGaWx0ZXJSZWZlcmVuY2UgeworcHVibGljOgorICAg
IEZpbHRlclJlZmVyZW5jZShSZWY8V2ViQ29yZTo6RmlsdGVyPiYmIGZpbHRlcikKKyAgICAgICAg
OiBtX2ZpbHRlcihXVEZNb3ZlKGZpbHRlcikpCisgICAgeworICAgIH0KKworICAgIFJlZjxXZWJD
b3JlOjpGaWx0ZXI+IHRha2VGaWx0ZXIoKSB7IHJldHVybiBXVEZNb3ZlKG1fZmlsdGVyKTsgfQor
CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbHRl
clJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiwgRW5jb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6RmlsdGVyRWZmZWN0PiBkZWNvZGVGaWx0ZXJFZmZlY3Qo
RGVjb2RlciYsIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlKTsKKworICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZVNWR0ZpbHRlcihjb25zdCBXZWJDb3Jl
OjpTVkdGaWx0ZXImLCBFbmNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIFJlZlB0cjxXZWJDb3JlOjpTVkdGaWx0ZXI+IGRlY29kZVNWR0ZpbHRlcihEZWNvZGVyJik7
CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGVDU1NGaWx0
ZXIoY29uc3QgV2ViQ29yZTo6Q1NTRmlsdGVyJiwgRW5jb2RlciYpOworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6Q1NTRmlsdGVyPiBkZWNvZGVDU1NG
aWx0ZXIoRGVjb2RlciYpOworICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHN0YXRp
YyB2b2lkIGVuY29kZUZpbHRlcihjb25zdCBXZWJDb3JlOjpGaWx0ZXImLCBFbmNvZGVyJik7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0ZXI+
IGRlY29kZUZpbHRlcihEZWNvZGVyJik7CisKKyAgICBSZWY8V2ViQ29yZTo6RmlsdGVyPiBtX2Zp
bHRlcjsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVyZW5j
ZTo6ZW5jb2RlRmlsdGVyRWZmZWN0KGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0
LCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIEFTU0VSVChlZmZlY3QudHlwZSgpID49IFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVNaW5pbXVtICYmIGVmZmVjdC50eXBlKCkgPD0gV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1heGltdW0pOworCisgICAgZW5jb2RlciA8PCBl
ZmZlY3QudHlwZSgpOworICAgIGVuY29kZXIgPDwgZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2Uo
KTsKKworICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgeworICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5kOgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUJs
ZW5kPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoKKyAgICAgICAgZG93
bmNhc3Q8V2ViQ29yZTo6RkVDb2xvck1hdHJpeD4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvc2l0ZToKKyAgICAgICAg
ZG93bmNhc3Q8V2ViQ29yZTo6RkVDb21wb3NpdGU+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpG
RUNvbnZvbHZlTWF0cml4OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmc6CisgICAgICAg
IGRvd25jYXN0PFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nPihlZmZlY3QpLmVuY29kZShlbmNv
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXA6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93OgorICAg
ICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRURyb3BTaGFkb3c+KGVmZmVjdCkuZW5jb2RlKGVuY29k
ZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUZsb29kOgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUZsb29kPihlZmZlY3Qp
LmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXI6CisgICAgICAgIGRvd25jYXN0PFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZToKKyAg
ICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVJbWFnZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFTWVyZ2U6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFTWVyZ2U+KGVmZmVjdCkuZW5j
b2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3k6CisgICAgICAgIGRvd25jYXN0
PFdlYkNvcmU6OkZFTW9ycGhvbG9neT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zmc2V0
OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRU9mZnNldD4oZWZmZWN0KS5lbmNvZGUoZW5j
b2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZzoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVT
cGVjdWxhckxpZ2h0aW5nPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlOgorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVR1cmJ1
bGVuY2U6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFVHVyYnVsZW5jZT4oZWZmZWN0KS5l
bmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+IEZpbHRlclJlZmVyZW5j
ZTo6ZGVjb2RlRmlsdGVyRWZmZWN0KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlIHR5cGUpCit7CisgICAgaWYgKCEodHlwZSA+PSBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVtICYmIHR5cGUgPD0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFTWF4aW11bSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IG9wZXJhdGluZ0NvbG9y
U3BhY2U7CisgICAgZGVjb2RlciA+PiBvcGVyYXRpbmdDb2xvclNwYWNlOworICAgIGlmICghb3Bl
cmF0aW5nQ29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPFJlZjxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+PiBlZmZlY3Q7CisgICAgCisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQmxl
bmQ6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFQmxlbmQ6OmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgorICAgICAg
ICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpkZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFQ29tcG9zaXRlOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVj
b2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3Jl
OjpGRUNvbnZvbHZlTWF0cml4OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVz
ZUxpZ2h0aW5nOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6
ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAgICAgICAgZWZmZWN0ID0gV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93Ogor
ICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6
RkVGbG9vZDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVGbG9vZDo6ZGVjb2RlKGRlY29k
ZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29y
ZTo6RkVJbWFnZTo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1lcmdlOgorICAgICAgICBlZmZlY3QgPSBX
ZWJDb3JlOjpGRU1lcmdlOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTW9ycGhvbG9neToKKyAgICAgICAg
ZWZmZWN0ID0gV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFT2Zmc2V0
OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU9mZnNldDo6ZGVjb2RlKGRlY29kZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpG
RVNwZWN1bGFyTGlnaHRpbmc6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFU3BlY3VsYXJM
aWdodGluZzo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGU6CisgICAgICAgIGVmZmVjdCA9IFdlYkNv
cmU6OkZFVGlsZTo6Y3JlYXRlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAgICAgZWZmZWN0ID0gV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAg
ICAgIGVmZmVjdCA9IFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBo
YToKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBpZiAoZWZmZWN0KSB7CisgICAgICAgICgqZWZmZWN0KS0+c2V0T3BlcmF0aW5nQ29sb3JT
cGFjZSgqb3BlcmF0aW5nQ29sb3JTcGFjZSk7CisgICAgICAgIHJldHVybiB7ICgqZWZmZWN0KS5w
dHIoKSB9OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgordm9pZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZVNWR0ZpbHRlcihjb25zdCBX
ZWJDb3JlOjpTVkdGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBlbmNv
ZGVyIDw8IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXI7CisKKyAgICBh
dXRvJiBmaWx0ZXJFZmZlY3RzID0gZmlsdGVyLmZpbHRlckVmZmVjdHMoKTsKKyAgICBlbmNvZGVy
IDw8IGZpbHRlckVmZmVjdHMuc2l6ZSgpOworCisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0
ZXJFZmZlY3RzKQorICAgICAgICBlbmNvZGVGaWx0ZXJFZmZlY3QoZWZmZWN0LCBlbmNvZGVyKTsK
KyAgICAKKyAgICBhdXRvJiBleHByZXNzaW9uID0gZmlsdGVyLmV4cHJlc3Npb24oKTsKKyAgICBl
bmNvZGVyIDw8IGV4cHJlc3Npb24uc2l6ZSgpOworCisgICAgZm9yIChhdXRvIFt0eXBlLCBpbmRl
eCwgbGV2ZWxdIDogZXhwcmVzc2lvbikgeworICAgICAgICBlbmNvZGVyIDw8IHR5cGU7CisgICAg
ICAgIGVuY29kZXIgPDwgaW5kZXg7CisgICAgICAgIGVuY29kZXIgPDwgbGV2ZWw7CisgICAgfQor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorUmVmUHRyPFdlYkNvcmU6OlNWR0ZpbHRlcj4g
RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVTVkdGaWx0ZXIoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAg
aWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3RWZWN0b3IgZmlsdGVyRWZmZWN0czsKKyAgICAKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBl
OworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICAgICAgYXV0byBlZmZlY3QgPSBkZWNvZGVGaWx0ZXJFZmZlY3QoZGVjb2RlciwgKnR5cGUp
OworICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IAorICAgICAgICBmaWx0ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgfQorCisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSB8fCAhKnNpemUp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgV2ViQ29yZTo6U1ZHRmlsdGVyRXhwcmVz
c2lvbiBleHByZXNzaW9uOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7
ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlw
ZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IGluZGV4OworICAgICAgICBkZWNvZGVyID4+IGluZGV4OworICAgICAgICBp
ZiAoIWluZGV4KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gbGV2ZWw7CisgICAgICAgIGRlY29kZXIgPj4gbGV2ZWw7CisgICAg
ICAgIGlmICghbGV2ZWwpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBl
eHByZXNzaW9uLmFwcGVuZCh7ICp0eXBlLCAqaW5kZXgsICpsZXZlbCB9KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUoV1RGTW92ZShmaWx0ZXJFZmZlY3Rz
KSwgV1RGTW92ZShleHByZXNzaW9uKSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2
b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlQ1NTRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkNTU0Zp
bHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGVuY29kZXIgPDwgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcjsKKyAgICBlbmNvZGVyIDw8IGZpbHRl
ci5mdW5jdGlvbnMoKS5zaXplKCk7CisgICAgCisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZp
bHRlci5mdW5jdGlvbnMoKSkgeworICAgICAgICBpZiAoaXM8V2ViQ29yZTo6U1ZHRmlsdGVyPihm
dW5jdGlvbikpCisgICAgICAgICAgICBlbmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6
U1ZHRmlsdGVyPihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBlbmNvZGVGaWx0ZXJFZmZlY3QoZG93bmNhc3Q8V2ViQ29yZTo6RmlsdGVyRWZmZWN0
PihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOworICAgIH0KKyAgICAKKyAgICBlbmNvZGVyIDw8
IGZpbHRlci5yZW5kZXJpbmdNb2RlKCk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitS
ZWZQdHI8V2ViQ29yZTo6Q1NTRmlsdGVyPiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUNTU0ZpbHRl
cihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzaXplOwor
ICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24+
PiBmdW5jdGlvbnM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4g
dHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcikgeworICAgICAgICAgICAgaWYgKGF1dG8g
ZmlsdGVyID0gZGVjb2RlU1ZHRmlsdGVyKGRlY29kZXIpKSB7CisgICAgICAgICAgICAgICAgZnVu
Y3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gZWZmZWN0ID0gZGVjb2RlRmlsdGVyRWZmZWN0KGRlY29k
ZXIsICp0eXBlKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoZWZmZWN0LnJlbGVhc2VO
b25OdWxsKCkpOworICAgIH0KKyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRl
cmluZ01vZGU+IHJlbmRlcmluZ01vZGU7CisgICAgZGVjb2RlciA+PiByZW5kZXJpbmdNb2RlOwor
ICAgIGlmICghcmVuZGVyaW5nTW9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbnMpLCAqcmVu
ZGVyaW5nTW9kZSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJl
ZmVyZW5jZTo6ZW5jb2RlRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyLCBFbmNv
ZGVyJiBlbmNvZGVyKQoreworICAgIGlmIChpczxXZWJDb3JlOjpDU1NGaWx0ZXI+KGZpbHRlcikp
CisgICAgICAgIGVuY29kZUNTU0ZpbHRlcihkb3duY2FzdDxXZWJDb3JlOjpDU1NGaWx0ZXI+KGZp
bHRlciksIGVuY29kZXIpOworICAgIGVsc2UKKyAgICAgICAgZW5jb2RlU1ZHRmlsdGVyKGRvd25j
YXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZmlsdGVyKSwgZW5jb2Rlcik7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIERlY29kZXI+CitSZWZQdHI8V2ViQ29yZTo6RmlsdGVyPiBGaWx0ZXJSZWZlcmVuY2U6
OmRlY29kZUZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7CisgICAgZGVjb2RlciA+PiB0eXBlOwor
ICAgIGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoKnR5cGUg
PT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcikKKyAgICAgICAgcmV0
dXJuIGRlY29kZUNTU0ZpbHRlcihkZWNvZGVyKTsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2Rl
U1ZHRmlsdGVyKGRlY29kZXIpOworICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZUZpbHRlcihtX2ZpbHRlciwgZW5jb2Rlcik7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVy
ZW5jZT4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBp
ZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVGaWx0ZXIoZGVjb2RlcikpCisgICAgICAgIHJldHVybiB7
IGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpIH07CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weQppbmRleCA2NTg0ZDFhZDdlMTU0ZWIwOTIwMjMxMGRkZmE2YjVlMTIxYWQyYzM5Li5lYjZj
MmI3MDE5ODI5MmYxYWRlZmMzNTg0MDMwODkwODI1NWRmNmRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI2Niw2ICsyNjYsNyBAQCBkZWYgdHlwZXNfdGhh
dF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwog
ICAgICAgICAnQ1ZQaXhlbEJ1ZmZlclJlZicsCiAgICAgICAgICdJUEM6OkRhdGFSZWZlcmVuY2Un
LAorICAgICAgICAnSVBDOjpGaWx0ZXJSZWZlcmVuY2UnLAogICAgICAgICAnSVBDOjpGb250UmVm
ZXJlbmNlJywKICAgICAgICAgJ0lQQzo6U2VtYXBob3JlJywKICAgICAgICAgJ01hY2hTZW5kUmln
aHQnLApAQCAtMjkwLDcgKzI5MSw2IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJk
X2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpNZWRpYUtleVN5c3RlbVJlcXVlc3RJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJDb3JlOjpNZWRpYVNlc3Npb25JZGVudGlmaWVyJywKLSAgICAgICAgJ1dlYkNvcmU6
Ok5hdGl2ZUltYWdlUmVmZXJlbmNlJywKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYkNvcmU6OlBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVudFBvbGljeScsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NDZlZTY0
NjE3NmRjZGUxNzRmZDQ3Zjk1NjgwOTY0NzhmNDk0YjIzLi45OWNjZTU0YWNhOTJmZGQ0YjgwNGMx
MTM3YjdjYTAyMDE0OWMyZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNDgsNiArMTM0OCw3IEBACiAJCTcxQkFBNzMzMjVGRkQw
OTgwMEQ3Q0Q1RCAvKiBXS01vZGVsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzFCQUE3MzEyNUZGQ0NCQTAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3
LmggKi87IH07CiAJCTcxRkI4MTBCMjI2MDYyN0UwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVk
TW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11
bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi87IH07CiAJCTcyOEU4NkYxMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNv
bG9yUGlja2VyTWFjLmggKi87IH07CisJCTcyRUU3OUJEMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0
ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyRUU3OUJBMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCAqLzsgfTsK
IAkJNzVBOEQyQzgxODdDQ0ZBQjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyQzQxODdDQ0Y5
RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlFIC8qIFdL
V2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0
YVN0b3JlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdL
UHJlZmVyZW5jZXNSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1Jl
ZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNDc2OCw2ICs0NzY5LDcgQEAKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdl
YkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
QjUzMTU3MjUzQzFFNEQwMDQ5Mjk1QSAvKiBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNTMxNTgyNTNDMUU0RDAwNDkyOTVBIC8qIFJlbW90ZVJl
c291cmNlQ2FjaGVQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZXNvdXJjZUNhY2hlUHJv
eHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJFRTc5QkEyNzBFNUFCOTAwNENF
NDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQy
QzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0
ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdE
MUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDE4LDYgKzc0MjAsNyBAQAogCQkJCUJDMDMyRDlF
MTBGNDM3RDEwMDU4QzE1QSAvKiBEZWNvZGVyLmggKi8sCiAJCQkJQkMwMzJEOUYxMEY0MzdEMTAw
NThDMTVBIC8qIEVuY29kZXIuY3BwICovLAogCQkJCUJDMDMyREEwMTBGNDM3RDEwMDU4QzE1QSAv
KiBFbmNvZGVyLmggKi8sCisJCQkJNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJl
ZmVyZW5jZS5oICovLAogCQkJCTlCRDhBQjQ5MjU4MjBFNTIwMDUzODZGOCAvKiBGb250UmVmZXJl
bmNlLmggKi8sCiAJCQkJNDE1MUU1QzMxRkJCOTBBOTAwRTQ3RTJEIC8qIEZvcm1EYXRhUmVmZXJl
bmNlLmggKi8sCiAJCQkJQzBDRTcyQUMxMjQ3RTc4RDAwQkMwRUM0IC8qIEhhbmRsZU1lc3NhZ2Uu
aCAqLywKQEAgLTEyNDM2LDYgKzEyNDM5LDcgQEAKIAkJCQk5MzEyQkFENjI2RjMzQzI5MDBGRERG
NUYgLyogRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUI1
NzlBMjZGNTE5MzMwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRsZVJlZ2lzdHJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzEyQkFENTI2RjMzQzI2MDBGRERGNUYgLyogRmlsZVN5c3Rl
bVN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkVFNzlCRDI3MEU1QUI5MDA0
Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwMEI5NjYxQTE4
RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MEMx
RjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNTlDNEE1OTE4QjgxMTc0MDA3QkRDQjYgLyogRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5jcHAKaW5kZXggOTQyMWRkMjM4Y2I2ZWM2M2ZlMWMwN2Q0NzM2MWNiMGI2NWZmNDBjYi4uMjVl
NGVmMDU3YWM4YThhZDViNGJlZjQxNTYyNWEwYTY3NGM5OWUwZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgpA
QCAtMjE0LDYgKzIxNSwxMSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaQogICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXR0ZXJuKGltYWdlSWRlbnRp
ZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpKTsKIH0KIAordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRy
eSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3
RmlsdGVySW1hZ2VCdWZmZXIoaW1hZ2VJZGVudGlmaWVyLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6
RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pLCBnZW9tZXRyeSkpOworfQor
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKaW5kZXggNzFmZGI2M2RmNGFj
ODQ5NzQ3MjMyNjliN2YwM2Q5OTdiODEzOTg5ZC4uZjc5MGYzNzA1NTYwMjEyZGU4YzY5MmYwOTll
MDFhZmZkOGJlMzA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5oCkBAIC05NCw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VC
dWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRl
bnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYsIGNvbnN0IFdlYkNv
cmU6OkZpbHRlckdlb21ldHJ5JikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDY5
MzRiYjQ2MTZjZTAwYmVhYjE0MGJhYTk0MTA5YjZiYTk1ZjNjMjQuLjJmNTZhY2U0MGRmMGI5MDIw
YjJkMzU2OTQyOTBkZTljMWIyZmYzOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBA
IC0xOTcsNiArMTk3LDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3Jl
YXRlSW1hZ2UoKTsKICAgICB9CiAKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGZpbHRlcmVk
SW1hZ2UoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IFdlYkNvcmU6OkZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VM
WSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlciht
X3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgfQor
CiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3RpbmF0aW9uRm9ybWF0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
aWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggMjhiYjI0NDgxNjgxOTNlZWU3ZGNh
Y2ViMzgxYThmM2RlMDhkYTFhZi4uYzBhMjI2NjQ4ZmQzNDZiMDQ0NjRiZmMxYWMwM2E2Nzg1YWJj
YmM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVy
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaCIKQEAgLTIyMyw2ICsyMjQsMjIgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRtYXAoUmVuZGVyaW4KICAgICBy
ZXR1cm4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKIH0KIAorUmVmUHRyPEltYWdl
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1
ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCit7CisgICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5j
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIElQQzo6RmlsdGVyUmVmZXJlbmNlIHsgUmVmPEZpbHRlcj4g
eyBjb25zdF9jYXN0PEZpbHRlciY+KGZpbHRlcikgfSB9LCBnZW9tZXRyeSksIE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXI6OlJl
cGx5KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIDFfcyk7CisgICAgQVNT
RVJUX1VOVVNFRChzZW5kUmVzdWx0LCBzZW5kUmVzdWx0KTsKKworICAgIGlmIChoYW5kbGUuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgYXV0byBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGlmICghYml0bWFwKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisK
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgc2VuZFRvU3RyZWFtKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZU5hdGl2ZUltYWdlKGhhbmRsZSwg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaAppbmRleCA2NGJiOTI2N2ZlNmIzMzQ5NmIzM2ZlNTcwZDlhNzFlYWNhNTU0Y2Nm
Li5lMGRmNjM2Y2UwZDgzZTAzMjQ3MmY1YjQ0M2YxNmVmN2NhYTA0MTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUg
IkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1dha2V1cE1lc3Nh
Z2VBcmd1bWVudHMuaCIKICNpbmNsdWRlICJJUENTZW1hcGhvcmUuaCIKQEAgLTkzLDYgKzk0LDcg
QEAgcHVibGljOgogICAgIFN0cmluZyBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
ICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGdldFNo
YXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBnZXRG
aWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXImLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9t
ZXRyeSYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9u
dHMoKTsK
</data>
<flag name="commit-queue"
          id="466817"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442352</attachid>
            <date>2021-10-25 03:05:33 -0700</date>
            <delta_ts>2021-10-25 23:05:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211025030532.patch</filename>
            <type>text/plain</type>
            <size>1007168</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIxNTA4ZWVkN2ExM2Rm
OWU0M2NiMDIwZDg0MzVkY2FmMGQ0YjY0Yi4uYzE5OWIwMWZlYzU4ZGQxMWU2YWQ0NTA0NWNhOThl
NTlhN2IyNTIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjEtMTAtMjUgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5Q29yZUltYWdlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRU
cmFuc2ZlckNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUltYWdlOjpp
bWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzaGFyZWRDSUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VD
b3JlSW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUlt
YWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OkRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRl
ckltYWdlQnVmZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmltYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjpzb3VyY2VJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnNldEJsZW5kTW9kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQmxlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YmxlbmRNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9y
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0
YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzZXRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6c2V0Q29sb3JNYXRyaXhUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6dmFsdWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cmVkRnVuY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6Z3JlZW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpibHVlRnVuY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YWxwaGFGdW5jdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
RkVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlOjpzZXRLMik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZTo6c2V0SzMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNl
dEs0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmsxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjprMiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6azMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6Oms0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0UHJl
c2VydmVBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpmYXN0U2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6a2VybmVs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjprZXJuZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZGl2aXNvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpiaWFzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxwaGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRp
bmc6OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFu
bmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFlDaGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRY
Q2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5u
ZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNo
YW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnlDaGFubmVsU2VsZWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZF
RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojp0YWtlSW5w
dXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRHJvcFNoYWRvdzo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNldER5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0U2hhZG93Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpz
dGREZXZpYXRpb25YIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6c3RkRGV2aWF0aW9uWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmR4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6ZHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNoYWRvd09wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnNldEZsb29kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRv
S2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChnYXVzc2lhbktlcm5l
bEZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9u
WCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnN0YW5kYXJkQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91
dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRT
dGREZXZpYXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdl
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmVkZ2VNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnRha2VJbnB1dHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExl
bmd0aFgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVs
VW5pdExlbmd0aFkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldEtlcm5lbFVuaXRMZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNl
dEtlcm5lbFVuaXRMZW5ndGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNvdXJj
ZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6c3VyZmFjZVNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRTb3VyY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93
OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6
OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZSk6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGl4ZWxB
cnJheUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUGl4ZWxW
YWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWlu
T3JNYXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0cmVtdW0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZ
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cmFkaXVzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnJhZGl1c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpzZXREeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6c2V0RHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkeCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6OkZFU3BlY3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJD
b25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VGlsZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRC
YXNlRnJlcXVlbmN5WSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldEJhc2VGcmVxdWVuY3lYKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6c2V0U2VlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNt
b290aEN1cnZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0UGFpbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNo
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9p
c2UyRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OnNldFNlZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2VlZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5n
RGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
Qm91bmRhcnlTZXQ6OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5
U2V0Ojp5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmRlY29kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1
dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xl
YXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5w
dXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFz
UmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZ
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hl
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJz
b2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1h
bGl6ZWRGbG9hdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjp0
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0NTU0ZpbHRl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNTVkdGaWx0ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlckVmZmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlQWxwaGFOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VHcmFwaGljTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNhbGN1bGF0ZU91dHNl
dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpGaWx0
ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRl
RmlsdGVyU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJ
bWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1hcElt
YWdlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6bWFwUmVz
b2x2ZWRJbWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6
Om1hcEltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNs
aXBUb0ZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZmlsdGVyUmVnaW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpmaWx0ZXJTY2FsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRl
ckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6Y3JlYXRlRmlsdGVySW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
aW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OmVmZmVjdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291
cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5U29mdHdhcmUgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om1hdHJp
eCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBS
R0JBVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW50ZXJpb3JQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRPdXRlclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFk
b3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oLgorICAg
ICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpwaXhlbEFycmF5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjptaW5Pck1heCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRy
ZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlR1
cmJ1bGVuY2VQYWludGluZ0RhdGE6OlR1cmJ1bGVuY2VQYWludGluZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VHVyYnVsZW5jZVBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OnNtb290aEN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6aW5pdFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdh
cmU6OkZpbHRlckltYWdlU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VT
b2Z0d2FyZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgor
ICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0xpZ2h0aW5nRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2lu
ZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpsZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWxwaGFXaW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdp
bmRvdzo6c2V0UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0
aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmguCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjph
cHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRG
dW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0
ZU91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0
aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1p
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9w
ZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJRExFbnVtTGltaXRz
PENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6dG9TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
SW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
ZXJnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50
OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmhpZ2hlc3RFbnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
aGFzRmlsdGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6ZmlsdGVyRWZmZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpkZWNvZGUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVm
ZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpj
bGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmlt
aXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorCiAyMDIxLTEwLTI1ICBaaXJhbiBTdW4gIDx6c3VuQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW2Nzcy13cml0aW5nLW1vZGVzXSBGaXggc2l6aW5nIG9mIG9ydGhv
Z29uYWwgZWxlbWVudHMgd2l0aCBwZXJjZW50YWdlIG1hcmdpbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZTJiNTBi
NzBhZGYyNWFmN2E0Mzk2MzJmMmFjZGNhYTQ1YjAxOGViZS4uNmVmNjBkYzM3ZGFkZmY1ZDNmZWQ5
NWNiODhjZWJlOTdmN2RhNDJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAyMS0xMC0y
NSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFBy
b2Nlc3NdIEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VG
b3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6RmlsdGVy
UmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVyKToK
KyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGVGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlckVmZmVjdCk6CisgICAgICAg
IChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlU1ZHRmlsdGVyKToKKyAgICAgICAgKElQQzo6
RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJS
ZWZlcmVuY2U6OmVuY29kZUNTU0ZpbHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5j
ZTo6ZGVjb2RlQ1NTRmlsdGVyKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNv
ZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlcik6
CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KElQQzo6RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNs
YXJlZCk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RmlsdGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRl
cmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMTAtMjQgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCBzaG91bGQgbm90IHNlbmQgSVBDIGluIHRoZSBtaWRkbGUgb2YgZGVzdHJ1Y3Rpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDY1ZThlODVkMDQyMmNkNDMyNWEwNjNkMGNhMzM0N2I0MjFk
MzcxYzcuLjI3Nzk0NzhiMzFhZmM4YzgwYzc4MzgzM2QwMGZlYjE5Njg4OWZiNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtMTQxOSw4ICsxNDE5LDMwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyQm91bmRhcnlTZXQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0VmVjdG9yLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9u
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJl
cHJlc2VudGF0aW9uLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmgKQEAgLTE1OTAsNiArMTYxMiw3IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbHVnaW5zL25wdHlw
ZXMuaAogCiAgICAgcmVuZGVyaW5nL0JyZWFrTGluZXMuaAorICAgIHJlbmRlcmluZy9DU1NGaWx0
ZXIuaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCiAgICAgcmVuZGVyaW5nL0V2ZW50UmVnaW9u
LmgKICAgICByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKQEAgLTE3MzAsMTIgKzE3NTMsMTcg
QEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHN2Zy9TVkdMZW5n
dGhWYWx1ZS5oCiAgICAgc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCiAgICAgc3ZnL1NWR1BhcnNp
bmdFcnJvci5oCisgICAgc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCiAgICAgc3Zn
L1NWR1N0cmluZ0xpc3QuaAogICAgIHN2Zy9TVkdUZXN0cy5oCiAgICAgc3ZnL1NWR1VuaXRUeXBl
cy5oCiAKICAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5oCiAKKyAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaAorICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaAorCiAg
ICAgc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJpbWl0
aXZlTGlzdC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHkuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA0YmVhMTRmNDRmYmY1MjExOTBmNjMzYWI2NzMwNjkxMjMzYTU1YmY0Li43NTQ5MDI1ZDU5
MWNkNGQ3YTYyM2JiOGEwODY1YmY4MGE1YTlhYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA0NSw3
ICsyMDQ1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9Jbk1lbW9yeURpc3Bs
YXlMaXN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2Uu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0yMDYzLDE0ICsyMDYzLDM3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Qb2ludExpZ2h0U291cmNlRGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
Ci1wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVGbG9vZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09PcmlnaW5h
bEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90ZWN0aW9uU2NoZW1l
SW5mb0JveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDdlZWVhYmJhZDM1OGFiZmJj
OGM3N2MzMjRkMWU4ZTViNTg3OTY5ZGIuLjEzYTJlY2Q3NWQ4ZjBkNDQ5NTgzZTI2OGJhYTQyY2Mz
YTlhYTE1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNDAxLDcgKzQwMSwxMCBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZm
ZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29sb3JNYXRy
aXhDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRy
YW5zZmVyQ29yZUltYWdlLm1tCitwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1h
Z2VDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGlj
Q29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmI2NGI5YWIwODE0ZmJlM2YzNzk0
ZTQ5YWEyNzdiMTAzYTk0OTM0MS4uZjFjZmZlOTY0NDUwNTZkMWZmMGQ2YjAzMjI0MzkxZGNhODlj
ZWU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjM4LDcgKzIzOCw2IEBACiAJCTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAv
KiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVp
bGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91
dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsK
IAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3
RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0
RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9u
dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODEsOCArNzgwLDYgQEAKIAkJ
MkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZE
MDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsKIAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdC
IC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNl
LmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQ
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJC
RThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsK
LQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBG
NzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0Ey
NEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3
MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQw
NjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURB
NjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJ
CTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMx
REE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJ
CTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAw
QTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgKi87IH07CkBAIC0xMjQ0LDcgKzEyNDEsNyBA
QAogCQk0MzEwN0JFMjE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzEwN0JFMTE4
Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggKi87IH07CiAJCTQzMkQz
RkU4MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzJEM0ZFNzE4QTg2
NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oICovOyB9OwogCQk0
MzU4RTg3RDEzNjBBMkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg3QjEzNjBB
MkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggKi87IH07Ci0JCTQzNThF
ODgxMTM2MEEzMTcwMEU0NzQ4QyAvKiBGRURyb3BTaGFkb3cuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNThFODdGMTM2MEEzMTcwMEU0NzQ4QyAvKiBG
RURyb3BTaGFkb3cuaCAqLzsgfTsKKwkJNDM1OEU4ODExMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJv
cFNoYWRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM1OEU4N0YxMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQzNThFODg2MTM2MEEzM0IwMEU0
NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg4MzEzNjBBMzNCMDBFNDc0OEMgLyogU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oICovOyB9OwogCQk0MzY3MDhDMTEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzNjcwODgyMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oICovOyB9
OwogCQk0MzY3MDhDMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4NDEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi87IH07CkBAIC0yMzA2LDExICsy
MzAzLDI1IEBACiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1
M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBO
YXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI3QTdGM0EyNDA3OEI4NDAw
NEQyOTMxIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOTU5MTZGMjcyMEVCODcwMDM2OTk5MyAvKiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDOEYyMjQ2MUREM0QxQzUwMEU5MkRBMyAvKiBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5
OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZB
NTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmlu
Z01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjlEMDUzMDI1MzE0MjQzMDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlEMDUy
RTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJBNzNCRUYyNDVB
M0Y5MDAwMUM5RDAzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFu
aW1hdGlvbkZyYW1lUmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQUE0NkMzMjcxNDM0NDcwMDNFODhDNCAvKiBGaWx0ZXJHZW9tZXRyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNEODMy
NzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0IC8q
IEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkFBNDZDNDI3MTQzNTA1MDAzRTg4QzQgLyogRmlsdGVyQm91bmRhcnlTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZDNjI3MTQzNUZEMDAzRTg4QzQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAv
KiBGaWx0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQUE0NkM3MjcxNDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJB
QTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzgyNzE0Mzcz
MzAwM0U4OEM0IC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZDOTI3MTQzN0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJB
QTQ2Q0EyNzE0MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENT
U0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTcyQUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMw
QjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyog
U1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4
OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJF
eHByZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzJBQTQ2RDQyNzE0RjE4RTAwM0U4OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCNDI3MTQy
Q0VCMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJD
NTc0ODYyNzIzRUM1RTAwMUVDOTVDIC8qIExpZ2h0U291cmNlRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDNTc0ODUyNzIzQzU1NjAwMUVDOTVD
IC8qIExpZ2h0U291cmNlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERpYWdub3N0
aWNMb2dnaW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dpbmdEb21h
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQw
Q0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuaCAqLzsgfTsKQEAgLTI3MTMsMzYgKzI3MjQsMzQgQEAKIAkJODQyMjQxOTQxMDdFNzhB
NzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MjI0MTkxMTA3RTc4QTcwMDc2NkE4NyAvKiBT
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi87IH07CiAJCTg0MzAwQkQ2MTIwQzlBQUMwMDIxOTU0
QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDMwMEJENTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oICovOyB9OwogCQk4NDMwMEJEODEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNv
dXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQz
MDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAqLzsgfTsKLQkJODQ1RTcy
RjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5o
ICovOyB9OwotCQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGQTBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi87IH07CiAJCTg0NjUwRTdFMjM4N0FEN0QwMDYyNjZF
MiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxp
c3RFdmVudC5oICovOyB9OwotCQk4NDczMEQ3NzEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExp
Z2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi87IH07
Ci0JCTg0NzMwRDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIz
MDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oICovOyB9OwotCQk4NDczMEQ3QjEyNDhGMEIz
MDBEM0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1
c2VMaWdodGluZy5oICovOyB9OwotCQk4NDczMEQ3RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNw
bGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDYwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5oICovOyB9
OwotCQk4NDczMEQ3RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRmxvb2QuaCAqLzsgfTsKLQkJODQ3MzBEODExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGln
aHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDY0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggKi87IH07Ci0JCTg0NzMwRDgz
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5o
ICovOyB9OwotCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2ODEyNDhG
MEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IH07Ci0JCTg0NzMwRDg3MTI0OEYwQjMw
MEQzQTlDOSAvKiBGRU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODQ3MzBENkExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggKi87IH07
Ci0JCTg0NzMwRDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsgfTsKLQkJODQ3MzBEOEIxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9
OwotCQk4NDczMEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi87IH07Ci0JCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlD
OSAvKiBMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENzQxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi87IH07
Ci0JCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NTEyNDhGMEIz
MDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oICovOyB9OwotCQk4NDczMEQ5MzEyNDhGMEIz
MDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NjEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0
U291cmNlLmggKi87IH07CisJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGln
aHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMw
RDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVDb252b2x2ZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTg0NzMwRDdCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdo
dGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3
MzBENUUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEN0QxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFRGlzcGxhY2VtZW50TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFj
ZW1lbnRNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk4NDczMEQ3RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRmxvb2QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk4NDczMEQ4MTEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjQxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFTGlnaHRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjYxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9s
b2d5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDcz
MEQ2ODEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEODcxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDczMEQ2QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4OTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxh
ckxpZ2h0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFVGlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTg0NzMwRDhEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDcwMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ5MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMw
RDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAv
KiBQb2ludExpZ2h0U291cmNlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3Vy
Y2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc2MTI0OEYw
QjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODQ3NkM5RTYxMURGNkEwQjAwNTU1QjAyIC8q
IFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3NkM5RTQxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0
QnVpbGRlci5oICovOyB9OwogCQk4NDc2QzlFQjExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzZDOUU4MTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRoQnVpbGRlci5oICovOyB9OwogCQk4NDc2
QzlFQzExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aENvbnN1bWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDc2QzlFOTExREY2QTI5MDA1NTVCMDIg
LyogU1ZHUGF0aENvbnN1bWVyLmggKi87IH07CiAJCTg0NzZDOUYwMTFERjZBNTgwMDU1NUIwMiAv
KiBTVkdQYXRoUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDc2QzlFRTExREY2QTU4MDA1NTVCMDIgLyogU1ZHUGF0aFBhcnNlci5oICovOyB9
OwotCQk4NDgwMTk1NTEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUzMTA4QkFGQjMw
MENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1ci5oICovOyB9OworCQk4NDgwMTk1NTEwOEJBRkIzMDBD
QjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUzMTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0
ODJCNzQ2MTE5OEMzNTQwMEJGQjAwNSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2
OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1
IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDgyQjc1MDExOThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZl
bnQuaCAqLzsgfTsKIAkJODQ4NTIyN0MxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1
MjI3ODExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdIS2VybkVsZW1lbnQuaCAqLzsgfTsKIAkJODQ4
NTIyN0UxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHVktlcm5FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1MjI3QTExOTAxNjJDMDA2RURD
N0YgLyogSlNTVkdWS2VybkVsZW1lbnQuaCAqLzsgfTsKIAkJODQ4NTIyOEIxMTkwMTczQzAwNkVE
QzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVu
dC5oICovOyB9OwogCQk4NEE4MUYzRTBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNDMEZD
N0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICovOyB9OwotCQk4NEE4MUY0MjBGQzdFMDI3
MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODRBODFGNDAwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBo
aWMuaCAqLzsgfTsKKwkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQw
MEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODRCMzQ5QTIyMkY4NkU3NTAwRDQ3QkNGIC8q
IEV2ZW50VGFyZ2V0Q29uY3JldGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0QjM0OUEwMjJGODZFNzQwMEQ0N0JDRiAvKiBFdmVudFRhcmdldENvbmNy
ZXRlLmggKi87IH07CiAJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlz
dFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi87IH07
CiAJCTg0QzVCMkZCMTIxNkRDODEwMDg4QjUzQSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEM1
QjJGOTEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oICov
OyB9OwpAQCAtMzUwMywxMCArMzUxMiwxMCBAQAogCQlBNzQwQjVBNTE0QzkzNUFCMDBBNzdGQTQg
LyogSlNJbnRlcm5hbFNldHRpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0I0RUE3OTE0QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRp
bmdzLmggKi87IH07CiAJCUE3NDBCNUE3MTRDOTM1QUYwMEE3N0ZBNCAvKiBKU0ludGVybmFsU2V0
dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdCNEVBNzgxNEM5MzQ4NDAwQzhGNUJGIC8qIEpTSW50ZXJuYWxTZXR0aW5ncy5jcHAgKi87IH07
CiAJCUE3NUU0OTc2MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU0OTc0MTA3
NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzVFOEI4OTBFMURFMkQ2MDA3RjI0
ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgfTsKLQkJQTc1
RThCOEIwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4QjgzMEUxREUyRDYwMDdGMjQ4MSAv
KiBGRUNvbG9yTWF0cml4LmggKi87IH07Ci0JCUE3NUU4QjhEMEUxREUyRDYwMDdGMjQ4MSAvKiBG
RUNvbXBvbmVudFRyYW5zZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzVFOEI4NTBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zl
ci5oICovOyB9OwotCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg3MEUx
REUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyB9OworCQlBNzVFOEI4OTBFMURFMkQ2
MDA3RjI0ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4QjBFMURF
MkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODMwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JN
YXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODUwRTFERTJE
NjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NUU4Qjg3MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkU1RjdGMTM1RTBEQ0Yw
MEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZFNUY3RTEzNUUwRENGMDBBNjk4MzcgLyogUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTE0MEQ2
QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFn
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
Nzk3OTI1MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oICovOyB9OwpAQCAtMzg2MCw3
ICszODY5LDcgQEAKIAkJQjIyMkY2OUQwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OUIw
QUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5oICovOyB9OwogCQlCMjIzNjIyOTBDM0FG
MDRBMDAwOENBOUIgLyogSlNTVkdUZXh0UGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjM2MjI3MEMzQUYwNEEwMDA4Q0E5QiAvKiBK
U1NWR1RleHRQYXRoRWxlbWVudC5oICovOyB9OwogCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEg
LyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjI1NTk5
ODUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RUltYWdlLmggKi87IH07CisJCUIyNTU5OTg1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThF
QjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNTU5OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI1NTk5QTUwRDAwRDhCQTAwQkI4MjVD
IC8qIEVtcHR5Q2xpZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTY1MEIw
NTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERG
RG9jdW1lbnRJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC02MTIxLDggKzYxMzAsNiBAQAogCQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUg
LyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyog
U1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYz
ODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3
NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3MSw4
ICs2Mjc4LDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFk
T25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50
UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQw
QzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3
ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzgxLDEwICs3Mzg2LDYgQEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8q
IFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEy
QTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2
NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRB
MzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1l
c3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYz
QTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTgwLDkgKzEwNTgxLDUzIEBACiAJCTcy
N0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5
NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOUMwOUVE
MjcyMjhBMjEwMEJFODgzOCAvKiBGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQw
NTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFF
IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1
QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIw
MDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNv
dXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIw
MDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
Q29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8q
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdD
MjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIw
MDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZF
QmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUg
LyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZp
bHRlckltYWdlVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBG
aWx0ZXJJbWFnZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlU29m
dHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCNzI3MTQyRjM4
MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VTb2Z0d2FyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJ
bWFnZVNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI4Mjcx
NDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbHRlckltYWdlQ29yZUltYWdlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNl
R3JhcGhpY0NvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCQjI3MTQzMEIwMDAzRTg4QzQgLyog
RmlsdGVyRWZmZWN0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZp
bHRlckVmZmVjdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZC
QzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQUE0NkJEMjcxNDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4
QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0
NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVy
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkM0MjcxNDM1
MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkFBNDZENzI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJpeENvcmVJbWFnZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkQ5MjcxNThBNTcwMDNFODhDNCAvKiBGRUNv
bXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRkVDb21w
b25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCMUI3NTEyNzE3RUEyRTAwMUIyRTA4IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCMUI3NTQyNzE5MTE0MzAwMUIyRTA4IC8qIExpZ2h0aW5nRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMaWdodGluZ0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMz
QTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3
MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDU5NCw2ICsxMDYzOSwxMCBAQAogCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRp
bmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzU3NDgzMjcyM0Mz
QTQwMDFFQzk1QyAvKiBMaWdodFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWdodFNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzU3NDg1MjcyM0M1NTYw
MDFFQzk1QyAvKiBMaWdodFNvdXJjZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlnaHRTb3VyY2VE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3
RjBFOCAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBF
OCAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRz
UkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYy
QSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRz
UkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1
MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNTI3LDEz
ICsxMTU3NiwxMCBAQAogCQk4NDMwMEJENTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU3RyaW5n
U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MzAwQkQ3MTIwQzlBRDQw
MDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1BhdGhTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBC
RDkxMjBDOUFFRDAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5
IC8qIFNWR0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFN0MyMzg3QUQ3QzAwNjI2
NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NDY1MEU3RjIzODdBRDhBMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFODAyMzg3QUQ4QjAwNjI2NkUy
IC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlh
UXVlcnlMaXN0RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDczMEQ1
QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291
cmNlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXN0YW50TGlnaHRT
b3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzMwRDVCMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NDczMEQ1QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzMwRDVEMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RURpZmZ1c2VMaWdodGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGRURpZmZ1c2VMaWdodGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTU1Nyw4ICsxMTYwMyw4IEBACiAJCTg0NzMwRDZGMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1
bGVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxl
bmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzAxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGRVR1cmJ1bGVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzQx
MjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpZ2h0U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0
NzMwRDc1MTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcG90TGlnaHRTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8q
IFBvaW50TGlnaHRTb3VyY2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvaW50TGlnaHRTb3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0
NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2VEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwb3RMaWdodFNvdXJjZURhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NDVCOEQyNEEzRjA5RjAwMjlBOEI1IC8qIEN1c3RvbVhQ
YXRoTlNSZXNvbHZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NDVCOEUyNEEzRjBB
MDAwMjlBOEI1IC8qIEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ3NkM5RTMxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVp
bGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU2Vn
TGlzdEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4ODYsOSAr
MTI5MzIsOSBAQAogCQlBMUUwODY2RTI0OEFBQzg1MDBFNDk2RDkgLyogZ2VuZXJhdGUtdW5pZmll
ZC1zb3VyY2VzLnNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQuc2g7IG5hbWUgPSAiZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNo
IjsgcGF0aCA9ICJTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRTA4NjZGMjQ4QUFDODUwMEU0OTZEOSAvKiBjaGVjay14
Y2ZpbGVsaXN0cy5zaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuc2NyaXB0LnNoOyBuYW1lID0gImNoZWNrLXhjZmlsZWxpc3RzLnNoIjsgcGF0
aCA9ICJTY3JpcHRzL2NoZWNrLXhjZmlsZWxpc3RzLnNoIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTFFMDg2NzAyNDhBQUM4NTAwRTQ5NkQ5IC8qIGdlbmVyYXRlLWRlcml2ZWQtc291
cmNlcy5zaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnNoOyBuYW1lID0gImdlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaCI7IHBh
dGggPSAiU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2giOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3RhbnRM
aWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExRTExNTQ1MTMw
MTVDNEUwMDU0QUM4QyAvKiBQb2ludExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMUUxMTU0NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwb3RMaWdodFNvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExRTExNTQzMTMwMTVDM0QwMDU0
QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNv
dXJjZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRM
aWdodFNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUUxMTU0
NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcG90TGlnaHRTb3VyY2VEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFFRDc3OEExQkUzMjkzRjAwREMxNzkxIC8qIERldmlj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUVENzc4QjFCRTMyOTQwMDBEQzE3OTEgLyog
RGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUY1NURCRjFGNTREMkQ2MDBFREI3NUYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnlJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0RW5jb2Rp
bmdSZWdpc3RyeUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTcyLDgg
KzE5NjE4LDExIEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRC
RTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJ
CTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZS5tbSAqLywKKwkJCQk3MkFBNDZENzI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJpeENv
cmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZEOTI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb21wb25l
bnRUcmFuc2ZlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQyRjdBMDAzRTg4QzQg
LyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4
QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2QjkyNzE0MkY3OTAw
M0U4OEM0IC8qIFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGNvcmVpbWFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzIwMiw2ICsyMzI1
MSwzMyBAQAogCQkJcGF0aCA9ICJtb2RlbC1lbGVtZW50IjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTcyQTgzRDZGMjcwNTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNEODIyNzA2
NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzUyNzA1
ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
N0EyNzA1QURGQTAwM0M1QUFFIC8qIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzYyNzA1ODkwMjAwM0M1QUFFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmUuY3Bw
ICovLAorCQkJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyog
RkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc4MjcwNThDMDMwMDNDNUFB
RSAvKiBGRUZsb29kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdCMjcwNUIyQzkwMDNDNUFB
RSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MTI3MDY0NkUy
MDAzQzVBQUUgLyogRkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NDI3MDU4
MzdEMDAzQzVBQUUgLyogRkVNZXJnZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MzI3MDU3
Q0JFMDAzQzVBQUUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDcy
MjcwNTc5QzcwMDNDNUFBRSAvKiBGRU9mZnNldFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3
RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDgw
MjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJB
QTQ2QjYyNzE0MkYzNzAwM0U4OEM0IC8qIEZpbHRlckltYWdlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmggKi8sCisJ
CQkJNzJCMUI3NTQyNzE5MTE0MzAwMUIyRTA4IC8qIExpZ2h0aW5nRGF0YS5oICovLAorCQkJCTcy
QTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAq
LywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NUZW1wbGF0ZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjUyNTgsOCAr
MjUzMzQsOSBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTFFMTE1NDMxMzAxNUMz
RDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAgKi8sCi0JCQkJODQ3MzBENUExMjQ4
RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAorCQkJCTcyQTgzRDZGMjcw
NTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLywKKwkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFD
OEMgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5jcHAgKi8sCisJCQkJODQ3MzBENUExMjQ4RjBC
MzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZURhdGEuaCAqLywKIAkJCQlBNzVFOEI4MDBF
MURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCiAJCQkJQTc1RThCODEwRTFERTJENjAw
N0YyNDgxIC8qIEZFQmxlbmQuaCAqLywKIAkJCQlBNzVFOEI4MjBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb2xvck1hdHJpeC5jcHAgKi8sCkBAIC0yNTI5NCwyNCArMjUzNzEsMzcgQEAKIAkJCQk4NDcz
MEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBENkYxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3
OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUgLyogRmlsdGVy
LmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8sCisJ
CQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8sCiAJ
CQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJ
MDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAotCQkJCTJDODU2
NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCi0JCQkJ
MkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJ
CQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLAor
CQkJCTcyQjFCNzUxMjcxN0VBMkUwMDFCMkUwOCAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJ
CQkJNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJ
NzI5QzA5RUQyNzIyOEEyMTAwQkU4ODM4IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLywKKwkJCQk3
MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywKKwkJCQk3MkM5
MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcyQzkwQTNB
MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovLAorCQkJCTcyQUE0NkI0MjcxNDJD
RUIwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCRDI3MTQzMEIx
MDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQz
MEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3
MDBGRDJDNTYgLyogRmlsdGVyUmVzdWx0LmggKi8sCisJCQkJNzJDNTc0ODMyNzIzQzNBNDAwMUVD
OTVDIC8qIExpZ2h0U291cmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5Qzkg
LyogTGlnaHRTb3VyY2UuaCAqLywKLQkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9p
bnRMaWdodFNvdXJjZS5jcHAgKi8sCi0JCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBv
aW50TGlnaHRTb3VyY2UuaCAqLywKKwkJCQk3MkM1NzQ4NTI3MjNDNTU2MDAxRUM5NUMgLyogTGln
aHRTb3VyY2VEYXRhLmggKi8sCisJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRBQzhDIC8qIFBvaW50
TGlnaHRTb3VyY2VEYXRhLmNwcCAqLywKKwkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyog
UG9pbnRMaWdodFNvdXJjZURhdGEuaCAqLywKIAkJCQk4NEE4MUYzQjBGQzdERkYwMDA5NTUzMDAg
LyogU291cmNlQWxwaGEuY3BwICovLAogCQkJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBT
b3VyY2VBbHBoYS5oICovLAogCQkJCTg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VH
cmFwaGljLmNwcCAqLywKIAkJCQk4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3Jh
cGhpYy5oICovLAotCQkJCUExRTExNTQ3MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGlnaHRTb3Vy
Y2UuY3BwICovLAotCQkJCTg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3Vy
Y2UuaCAqLywKKwkJCQlBMUUxMTU0NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNl
RGF0YS5jcHAgKi8sCisJCQkJODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNv
dXJjZURhdGEuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yNzA2NSwxMCArMjcxNTUsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUIyNTU5OEVBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCAqLywKIAkJCQlC
MjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovLAotCQkJCTg0NUU3MkY5
MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovLAotCQkJCTg0NUU3MkZBMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLywKLQkJCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1
NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCi0JCQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3
NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyog
U1ZHRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRl
ckJ1aWxkZXIuY3BwICovLAorCQkJCTcyQUE0NkJFMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBQTQ2QkYyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRl
ckV4cHJlc3Npb24uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDIwMSw4ICszMDI5Miw4IEBACiAJCQkJQ0E3RTlCNDcyNDM2
MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAqLywKIAkJCQk5MzkyRjE0
RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLAogCQkJCTkzOTJGMTRCMEFE
MTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJCTBGNTNGQjgxMjEzQjFCQjgw
MEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQz
NCAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NT
RmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVy
LmggKi8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8s
CiAJCQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJ
CQlFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMxNjI3
LDYgKzMxNzE4LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTcyRUJDN0REMjcxMTNE
MzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgy
MDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJC
RjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2
Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMjI4NCw2ICszMjM3Niw3IEBACiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRD
IC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzc5RTE0MUJC
MjE1QkIwMENBQThCRiAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NDQ3NkJEQjFERkNBQzAzMDA2OTBFMjMgLyogQ1NTRGVmZXJyZWRQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkNBMjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUZCQjBDNUI4MTdCQkQ2MjkwMDNEMzY3NyAvKiBDU1NGaWx0ZXJJ
bWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY0QjRENjBDQjQyOThBMDA1RjJCNjIg
LyogQ1NTRm9udEZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0ZEMEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzI1NTAsNyArMzI2
NDMsNyBAQAogCQkJCTBGNzkwRjQzMjUxN0NFNkUwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOTExMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4MzA0MDI4MzI0OUE3QTYyMDBBOTBEOEQgLyogRGlzdGFuY2VN
b2RlbFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAv
KiBEaXN0YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDc3MTI0OEYw
QjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkYzNEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
RUU2ODQ2RjEyRDI2RTM4MDBFNzMyMTUgLyogRE5TUmVzb2x2ZVF1ZXVlQ0ZOZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MTg1RjQwMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMjc5MSwxMiArMzI4ODQsMTcgQEAKIAkJCQk5MzBFNDQ4NjI3MEMzNzIy
MDBERTdBQjcgLyogRmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM5MjcxNDM3RDEwMDNFODhDNCAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8q
IEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3
NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyQ0FBNEEz
QTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RW
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBG
aWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4
OEM0IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDODI3MTQz
NzMzMDAzRTg4QzQgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkQ0
MjcxNEYxOEUwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM3MjcxNDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJS
ZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5
NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5
MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0Qy
REQyNTBGRDgyODAwMDIwN0FBIC8qIEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNDMyNyw2ICszNDQyNSw3IEBACiAJCQkJNDEwRTQ0NjEyMzQzNzNFOTAwMDE3M0Q0
IC8qIExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQzE0
QkM3MjZERTg1ODQwMDY4NUJGNSAvKiBMaWJXZWJSVENVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODQ3MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkM1NzQ4NjI3MjNFQzVFMDAxRUM5NUMgLyogTGlnaHRTb3VyY2VEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NTBEMDBCRjIyMDA3MUI3ODIgLyogTGluZWFyR3JhZGll
bnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjMxQzkxRTEwQUUxQjhFMDAwQzdC
OTIgLyogTGluZUNsYW1wVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGRUZBQjJBMTgzODBE
QTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ4NzIs
NyArMzQ5NzEsNyBAQAogCQkJCUY0MjBGMDBBMjVFNDc3OTEwMDkyNTFFRiAvKiBQb2ludGVyRXZl
bnRUeXBlTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1QTQ1
RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTNGRjgxM0E3MURCQTg2NDAwMDlC
RjAwMSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NzMw
RDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3MDU5OTdBMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVj
a2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjZDMkRBRDI2QzczQUZDMDA2NTE5MzEgLyogUG9s
aWN5Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFF
QzggLyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NTE3LDcgKzM1NjE2LDcg
QEAKIAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNv
dXJjZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDODNERTg2MUQwNENDNUQwMEZFQkNGMyAv
KiBTcHJpbmdTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTNCMTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTND
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTcwNCw5
ICszNTgwMyw5IEBACiAJCQkJQjIyMjdBMDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDYwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZFVGlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA5MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0MyNzE0MzlEOTAwM0U4OEM0IC8qIFNWR0ZpbHRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNEMjcxNDM5RTUwMDNFODhDNCAvKiBT
VkdGaWx0ZXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwRjBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyN0ExMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9u
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzU3NzQsNiArMzU4NzMsNyBAQAogCQkJCUIy
MjI3QTkxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2x5Z29uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBOTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlsaW5lRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOTU5MTZGMjcyMEVCODcwMDM2
OTk5MyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU1RENDNTI4MjI0MDdCMjAwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcAppbmRleCA4Y2Y5MDlhZTllNTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li41
ZWRmYmY1M2UzYWFmYmE5NzAyNjBkZDgzMzQ1OGMwMGI2YjNhODhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJFbGVtZW50LmgiCkBAIC0xMTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENT
U0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBG
bG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAg
Ly8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0
ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRl
cjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1
cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAg
IGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVnaW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0
ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpG
aWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5k
ZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRl
cikKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5h
cHBseSgpOwogCi0gICAgYXV0byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBp
ZiAoIW91dHB1dCkKLSAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgRmls
dGVyR2VvbWV0cnkgZ2VvbWV0cnkoaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0byBmaWx0ZXJlZElt
YWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSkp
CisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJuIG91dHB1dC0+Y29w
eUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9CiAKIHZvaWQgQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2YWIyMjIxODEuLjdj
N2ViNDJlNTNjNjRkZmRjZWM4MjNiYjRiM2U4YTljOTg2YTQ0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKQEAg
LTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKQEAgLTEz
OCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpOworICAgICAgICBpZiAoIWJh
Y2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIGNv
bnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0
KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAg
c3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3JlKSA9IGZpbHRlci5hcHBseSh0aGlzLCB7
IHsgfSwgbG9naWNhbFNpemUoKSB9LCBnZW9tZXRyeSk7CisgICAgICAgIHJldHVybiBpbWFnZUJ1
ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAgfQorCiAgICAg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDRjMWM1ZjkwODdhOTNh
N2QxMjViODkzNjQ0OGYwNGVmZWQwZjcwYzAuLjYxOTAzOTM5NWMxODE0MDliZDc2NGVlOTA5NTIx
MDRiYWZkODg3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiQmlk
aVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXIu
aCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBA
IC02MjksNiArNjMxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1h
Z2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkp
Cit7CisgICAgYXV0byBbZmlsdGVyZEltYWdlLCBpbWFnZVJlY3RdID0gZmlsdGVyLmFwcGx5KHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGdlb21ldHJ5KTsKKyAgICBpZiAoZmlsdGVyZElt
YWdlKQorICAgICAgICBkcmF3SW1hZ2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsK
K30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0KQogewogICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMDZiNzEzMzhlZjhk
OTFhZGU0NmM5MjA5YTU5Yzc3MDk1MmRjYTk5MC4uNDRkZWJiNWU2ZDQ2ODIyMjk2OThlMDgzMTAx
MWFlMTQ3ZGY3Y2MxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIFVJbnQ4OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CitjbGFzcyBGaWx0ZXI7CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRl
ZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTsKQEAgLTQ1MCw2ICs0NTIsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBhMDU5MmI5OWI4OGRiZTAx
OGZhOTVjNWEzMDVkMjk4MmMwMjRmNmQ4Li4zNmU0NTRjYTAyZmI5M2Y0YTI5MGI4Njc1NmRhMGQ3
OTMzYmIxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKQEAgLTQyLDYgKzQyLDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQ7CiBzdHJ1Y3Qg
SXRlbUJ1ZmZlckhhbmRsZTsKIH0KIAorY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0
cnk7CisKIGNsYXNzIEltYWdlQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElt
YWdlQnVmZmVyLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPEltYWdlQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxs
IHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtMTA2LDYgKzEwOSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSA9IDA7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2Ug
YnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhp
cyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBjb3B5
UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAppbmRleCAxNDNiYTAzYWNmZjlj
NmE2ZmM1NzkxMTU3OGNjM2I4MTljMjNiZGRkLi4wYWQyOTcwODhiNWY2N2RjMzJkZWJmOGJhNmE0
NGJhMjQ3ZWY1ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMJiwg
R0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzSW5Vc2UoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlR3JhcGhp
Y3NDb250ZXh0KCkgeyB9CiAgICAgdmlydHVhbCBWb2xhdGlsaXR5U3RhdGUgc2V0Vm9sYXRpbGUo
Ym9vbCkgeyByZXR1cm4gVm9sYXRpbGl0eVN0YXRlOjpWYWxpZDsgfQogICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlQnVmZmVyVG9Qb29sKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVy
c0NvY29hLm1tCmluZGV4IDJkMDIwMTZiYjhlZTYzZWI3ZTNmM2E3M2YzY2E2NjliYjA5ZTBlNTIu
LmFmYTQ5M2M4MzI1MWUxZWRlOGUxYWI0ODYwZmUzYTJiZDg0MzEzODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJz
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NT
RmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzYwMDgpLgorLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6
OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCku
CiBzdGF0aWMgY29uc3QgZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7
IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNv
bG9yTWF0cml4Q29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NmYTlmMTc5
NjdiOTNmYjg3ZWM4NDNiNzlhNjU0ZGYyOTU0ODcwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUlt
YWdlLm1tCkBAIC0wLDAgKzEsMTA2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgorCisjaWYgVVNFKENPUkVfSU1B
R0UpCisKKyNpbXBvcnQgIkZpbHRlckltYWdlQ29yZUltYWdlLmgiCisjaW1wb3J0IDxDb3JlSW1h
Z2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KKyNpbXBvcnQg
PENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
Q29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFCisg
ICAgICAgIHx8IG1fY29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEUKKyAgICAgICAgfHwgbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBk
b3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJbWFnZT4oaW5wdXQpLmltYWdlKCk7CisgICAgaWYgKCFp
bnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHZhbHVlcyA9IEZF
Q29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGZsb2F0IGNvbXBv
bmVudHNbOV07CisgICAgCisgICAgc3dpdGNoIChtX2NvbG9yTWF0cml4VHlwZSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CisgICAgICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TFVNSU5BTkNFVE9BTFBIQTogLy8gRklYTUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVt
ZW50YXRpb24KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGF1dG8g
KmNvbG9yTWF0cml4RmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1h
dHJpeCJdOworICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgp
IGZvcktleTprQ0lJbnB1dEltYWdlS2V5XTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29sb3JNYXRy
aXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CisgICAgICAgIFtjb2xvck1hdHJpeEZp
bHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1swXSBZOmNvbXBv
bmVudHNbMV0gWjpjb21wb25lbnRzWzJdIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Cisg
ICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
Y29tcG9uZW50c1szXSBZOmNvbXBvbmVudHNbNF0gWjpjb21wb25lbnRzWzVdIFc6MF0gZm9yS2V5
OkAiaW5wdXRHVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpb
Q0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1s2XSBZOmNvbXBvbmVudHNbN10gWjpjb21w
b25lbnRzWzhdIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1h
dHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAgICBZ
OjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9y
Il07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MF0g
Zm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6dmFsdWVzWzFd
ICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNbM11dICBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAg
ICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2
YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBaOnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1dICBmb3JLZXk6
QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltD
SVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZhbHVlc1sxMl0g
Vzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0
cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTVdIFk6dmFs
dWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3Ii
XTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVzWzldICBaOnZhbHVlc1sxNF0gVzp2YWx1ZXNbMTldXSBm
b3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgZG93bmNhc3Q8RmlsdGVySW1hZ2VDb3JlSW1hZ2U+KG91dHB1dCkuc2V0SW1hZ2UoY29sb3JN
YXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRy
YW5zZmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjYwNjMy
NTgyM2Q0ZTVkODU1ZGI0NmZiYjk4Mzk2YmU4OTYyNzUzOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5z
ZmVyQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCisKKyNp
ZiBVU0UoQ09SRV9JTUFHRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBh
dXRvIGlzTnVsbE9yTGluZWFyID0gW10gKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGZ1bmN0aW9uKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9VTktOT1dOCisgICAgICAgICAgICB8fCBmdW5jdGlvbi50eXBlID09IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgfTsKKworICAgIHJldHVybiBpc051
bGxPckxpbmVhcihtX3JlZEZ1bmN0aW9uKQorICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2dy
ZWVuRnVuY3Rpb24pCisgICAgICAgICYmIGlzTnVsbE9yTGluZWFyKG1fYmx1ZUZ1bmN0aW9uKQor
ICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2FscGhhRnVuY3Rpb24pOworfQorCitib29sIEZF
Q29tcG9uZW50VHJhbnNmZXI6OmFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJh
bnNmZXIgZnVuY3Rpb25zCisgICAgQVNTRVJUKHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkp
OworCisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBp
bnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBkb3duY2FzdDxGaWx0ZXJJ
bWFnZUNvcmVJbWFnZT4oaW5wdXQpLmltYWdlKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmls
dGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6
aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07CisgICAgCisgICAgYXV0
byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi50eXBlID09
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCisgICAgICAgICAgICBbZmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5jdGlv
bi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKKyAgICB9OworICAgIHNldENvZWZmaWNpZW50
cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgbV9yZWRGdW5jdGlvbik7CisgICAgc2V0Q29lZmZp
Y2llbnRzKEAiaW5wdXRHcmVlbkNvZWZmaWNpZW50cyIsIG1fZ3JlZW5GdW5jdGlvbik7CisgICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgbV9ibHVlRnVuY3Rpb24p
OworICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBtX2FscGhh
RnVuY3Rpb24pOworICAgIAorICAgIGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXRw
dXQpLnNldEltYWdlKGZpbHRlci5vdXRwdXRJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0
NGFmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0qIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9y
dCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KLQotT0JKQ19DTEFTUyBDSUltYWdlOwotT0JKQ19D
TEFTUyBDSUZpbHRlcjsKLU9CSkNfQ0xBU1MgQ0lDb250ZXh0OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZFQ29sb3JNYXRyaXg7Ci1jbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOwot
Y2xhc3MgU291cmNlR3JhcGhpYzsKLQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLSAgICBS
ZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKLSAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkg
Y29uc3QgZmluYWw7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKLSAgICBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpOwotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKLSAgICB2b2lkIHJlbmRl
clRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wg
Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgCi0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7Ci0gICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0
cml4JiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJh
bnNmZXImLCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwotICAgIAotICAgIFJlZlB0cjxJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1ZmZlcjsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9vdXRwdXRJbWFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2Uu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZTExMzdiMjlkNzFjMmI1NDQxNTcz
MDY3MjQwMGI4MjQyOGIzNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAg
QEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFH
RSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2ltcG9ydCAiRkVDb21wb25lbnRUcmFu
c2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCi0j
aW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbXBvcnQgPENv
cmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJbWFnZS9DSUZpbHRlci5oPgotI2lt
cG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6QHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNl
OiBicmlkZ2VfaWRfY2FzdChhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VTUkdCKSkpLmdldCgpIH1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0
YXRpYyBib29sIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBG
RUNvbXBvbmVudFRyYW5zZmVyJiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9
IFtdIChjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAg
ICByZXR1cm4gZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9X
TgotICAgICAgICAgICAgfHwgZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOwotICAgIH07Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAg
ICAgICAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9y
TGluZWFyKGVmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkKLXsKLSAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9u
Y2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RD
bGFzc1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGlj
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29s
b3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEU6Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5l
YXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+
KGVmZmVjdCkpOwotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZm
dXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1h
cDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Okdh
dXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpU
aWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAg
bV9vdXRwdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFt
X291dHB1dEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihs
YXN0RWZmZWN0KTsKLX0KLQotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAg
IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAo
YXV0byBpbiA6IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1h
Z2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5w
dXRJbWFnZSk7Ci0gICAgfQotICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIGVmZmVjdC5zZXRSZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwotICAgIAotICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5
KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRj
aCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdy
YXBoaWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9y
TWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJl
dHVybiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFu
c2Zlcj4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMg
YSB2YWxpZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpE
aWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVu
dE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3Vy
Y2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJj
ZUltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJm
YWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBp
bWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJ
bWFnZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGlt
YWdlV2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCldOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBl
ZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsK
LSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFs
dWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwot
ICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgp
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNb
MF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBv
bmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAg
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBB
bHBoYSBJbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAg
Ci0gICAgYXV0byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJDSUNvbG9yTWF0cml4Il07Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0
SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAo
ZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JN
YXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0g
WTpjb21wb25lbnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3Rv
ciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOmNvbXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBd
IGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzdd
IFo6Y29tcG9uZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAg
ICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0
QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAg
ICBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1h
dHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZh
bHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9y
Il07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6dmFsdWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAg
Zm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1
ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtj
b2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1
XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRB
VmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVz
WzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICByZXR1cm4gY29sb3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNv
bXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9y
PFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhlIHJlc3Qgb2YgRkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NF
UlQoaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0g
ICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAot
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFn
ZUtleV07Ci0gICAgCi0gICAgYXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICpr
ZXksIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAg
IGlmIChmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0g
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlv
bi5pbnRlcmNlcHQgWTpmdW5jdGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9
OwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJl
ZEZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVu
dHMiLCBlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1
dEJsdWVDb2VmZmljaWVudHMiLCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZm
aWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigp
KTsKLSAgICAKLSAgICByZXR1cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVm
ZmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBl
ZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygqaW4pIHx8ICFjYW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZm
ZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMg
PDwgIiB1c2luZyBDb3JlSW1hZ2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVy
LmdldCgpOwotfQotICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVu
ZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1
cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigp
LmZpbHRlclNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVh
clJlc3VsdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4
dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRw
dXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVm
ZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNv
bG9yU3BhY2UoKV07Ci19Ci0gICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsK
LSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxl
KCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRl
c3RTaXplKTsKLSAgICByZXR1cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICBtX291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAg
ICA6IEZpbHRlckVmZmVjdFJlbmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3NGM1OGFiNjZhMjgxMDUwMzA2Y2Y5Njc4YmI3NThkYTlhMjBkM2MKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
SW1hZ2VDb3JlSW1hZ2UuaApAQCAtMCwwICsxLDU4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlcklt
YWdlLmgiCisKK09CSkNfQ0xBU1MgQ0lJbWFnZTsKK09CSkNfQ0xBU1MgQ0lDb250ZXh0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckltYWdlQ29yZUltYWdlIDogcHVibGlj
IEZpbHRlckltYWdlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJJbWFnZTo6RmlsdGVySW1h
Z2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlOyB9CisgICAgdm9pZCBzZXRJbWFnZShSZXRhaW5QdHI8Q0lJbWFnZT4mJik7CisgICAgCitw
cml2YXRlOgorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBv
dmVycmlkZTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAg
IFJldGFpblB0cjxDSUltYWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJJbWFnZUNvcmVJbWFnZSkKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1
cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8gVVNF
KENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzE5ZmUwNTg4ZmYwNTU0ZTliMjEyMmM4YzYxZTU2MzM2NjRjNzE0OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJ
bWFnZUNvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDczIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCIKKwor
I2lmIFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisj
aW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUlt
YWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9UeXBlQ2FzdHNDb2NvYS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRh
aW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250
ZXh0V2l0aE9wdGlvbnM6QHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNlOiBicmlkZ2VfaWRf
Y2FzdChhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdC
KSkpLmdldCgpIH1dOworICAgIHJldHVybiBjaUNvbnRleHQ7Cit9CisKK3ZvaWQgRmlsdGVySW1h
Z2VDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQoreworICAg
IEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQorCitSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJJbWFnZUNvcmVJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0
cygpCit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXI7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0
ZXJJbWFnZUNvcmVJbWFnZTo6aW1hZ2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVy
KQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZm
ZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fbG9naWNhbFNpemUsIG1fcmVzb2x1
dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFt
X2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZGVzdFJl
Y3QgPSBGbG9hdFJlY3QgeyBGbG9hdFBvaW50KCksIG1fbG9naWNhbFNpemUgfTsKKyAgICBbc2hh
cmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX2ltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBk
b3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKm1faW1hZ2VCdWZmZXIpLnN1cmZhY2UoKS5z
dXJmYWNlKCkgYm91bmRzOmRlc3RSZWN0IGNvbG9yU3BhY2U6bV9jb2xvclNwYWNlLnBsYXRmb3Jt
Q29sb3JTcGFjZSgpXTsKKyAgICAKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291
cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwOWQ2ZWFk
MWJmMjU0ODg1YmI1M2U3MjY4ZTgwYWIzM2I2YmQxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJ
bWFnZS5tbQpAQCAtMCwwICsxLDYxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1B
R0UpCisKKyNpbXBvcnQgIkZpbHRlckltYWdlLmgiCisjaW1wb3J0ICJGaWx0ZXJJbWFnZVZlY3Rv
ci5oIgorI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91
cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYg
aW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlOworICAgIGlmIChpczxJT1N1cmZhY2VJ
bWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2UpKQorICAgICAgICBpbWFnZSA9IFtDSUltYWdlIGltYWdl
V2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2Up
LnN1cmZhY2UoKS5zdXJmYWNlKCldOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFn
ZSBpbWFnZVdpdGhDR0ltYWdlOmlucHV0SW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCldOworCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXB1dCkuc2V0SW1h
Z2UoV1RGTW92ZShpbWFnZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxl
bmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4u
MTE4MTllNTc5Y2VjOTJhN2NlNzFmNTA2NWFiNjk4MzA4NDBhMGYxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9O
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
L0ZFQmxlbmRORU9OLmgKQEAgLTI1LDggKzI1LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBGRUJsZW5kTkVPTl9oCi0jZGVmaW5lIEZFQmxlbmRORU9OX2gKKyNwcmFnbWEgb25j
ZQogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogCkBAIC0xMDcsMTUgKzEwNiwxOCBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorRmlsdGVyUmVzdWx0KiBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoRmlsdGVy
UmVzdWx0cyYgcmVzdWx0cywgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAg
YXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFz
dCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsgKnRoaXMgfSkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIoKS5j
cmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzEsNyBAQCB2b2lkIEZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0
aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5k
YXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5k
YXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJZiB0aGVyZSBpcyBqdXN0
IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VSVChzb3VyY2VQaXhlbEFy
cmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQyLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOwogICAgIHBsYXRmb3Jt
QXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07CisK
KyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciog
c3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCkBAIC0yMDUsNSAr
MjA5LDMgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3IKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEZFQmxl
bmRORU9OX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2
L0NWVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZV
dGlsaXRpZXMubW0KaW5kZXggNDA3MjcwNDNmZDEyZDYyYTRjYmQ3ZGJiNTllNDExNjBhMjhkZGYy
Mi4uYWNmOTZmZDBkNTQwYWI4NmU3NzBkNDYxM2MxOTBhMjI4M2I3MDVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KQEAgLTI2
LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIK
IAorI2ltcG9ydCAiQ29sb3JTcGFjZUNHLmgiCiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cAppbmRleCBkZmY0MTQ0MjYxOTY3YmZlOGRlMmRlYzkyYzZmOTM5ODMyZGUxN2U4Li4zODVlZWU5
ZjZmYjQ4MDFmN2JmOTMxNmEwM2MwYjVlMjcxZjVjMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAKQEAgLTI1MSw2ICsyNTEsOCBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhh
bmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaXRlbS5n
ZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UGF0dGVybj4oaXRlbS5nZXQ8RHJhd1BhdHRlcm4+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PERyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RHJhd1JlY3Q+KGl0ZW0uZ2V0PERyYXdSZWN0PigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5jcHAKaW5kZXggYzEzOWU1MDk0ODUxODBiOWViZDkwMTcyNzJiZTk2YWE1MjI2NzVmZS4uYWEy
ZDU3YWYwZGRjNTE0YWFiZjAyM2M1YTQ3ZjA5ZjFjNTMwOGYzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTEyNiw2ICsxMjYsOSBAQCB2b2lkIEl0
ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3UGF0dGVybjoKICAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLmFwcGx5KGNvbnRl
eHQpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdl
QnVmZmVyOgorICAgICAgICBnZXQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAg
ICAgIGdldDxEcmF3UmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjU5LDYgKzI2Miw5IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcFBhdGg6CiAgICAgICAgIGdldDxDbGlwUGF0aD4oKS5+Q2xpcFBhdGgoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoK
KyAgICAgICAgZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKS5+RHJhd0ZpbHRlckltYWdlQnVm
ZmVyKCk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDoKICAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9jdXNSaW5nUGF0
aCgpOwogICAgICAgICByZXR1cm47CkBAIC01MDAsNiArNTA2LDggQEAgYm9vbCBJdGVtSGFuZGxl
OjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29u
c3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBPdXRUb1BhdGg+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPENsaXBQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZpbHRlckltYWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88RHJhd0ZpbHRlcklt
YWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1BhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3Rm9jdXNSaW5nUGF0aD4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCAyNDRlMGUz
NWMxMjc1NjIwOTY5YzVhYmE1ODY0MjA1MThhZTRlZDQwLi4wYWU5MDc1OGRjYTIyMGJiMGRiNmRh
YjhhMjJmZjY5YjgzNTU0ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5
cGUuY3BwCkBAIC04OCw2ICs4OCw4IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMo
SXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3TmF0aXZlSW1hZ2UpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERy
YXdQYXR0ZXJuKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ZpbHRlckltYWdlQnVmZmVyKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3UmVjdCk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CkBAIC0yMjIsNiArMjI0LDcgQEAgYm9vbCBpc0RyYXdp
bmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVm
ZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhz
OgpAQCAtMjk2LDYgKzI5OSw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuaAppbmRleCA5OTE5NDU4ZDIzNjU5Y2VlY2I3NTg1Mzg3ZjEyOGVmYWYw
ZDQ3YTI1Li4yYjMyMDQ0M2NiZGM0ZTU2MDY2YjY5NDdlMTBiOGViZWExYjQ3NjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBj
bGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIENsaXBQYXRoLAogICAgIEJlZ2luQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzLAogICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcywKKyAgICBEcmF3
RmlsdGVySW1hZ2VCdWZmZXIsCiAgICAgRHJhd0dseXBocywKICAgICBEcmF3SW1hZ2VCdWZmZXIs
CiAgICAgRHJhd05hdGl2ZUltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CmluZGV4IGU3MjZkOTRmMzAwNTAwMjMxMmJjNjQyYjMwMTVlY2JhZTMxNDg0OGMuLmMzYWE2NTIz
ZDY2Y2U0YzZiNTU5MzMyNDA3M2JjMTMxMGNhY2I5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKQEAgLTQyNSw2ICs0MjUsMzEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAorRHJhd0ZpbHRlckltYWdlQnVmZmVyOjpEcmF3RmlsdGVySW1hZ2VCdWZm
ZXIoc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCisgICAgOiBtX2ltYWdlSWRlbnRpZmllcihp
bWFnZUlkZW50aWZpZXIpCisgICAgLCBtX3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3Qp
CisgICAgLCBtX2ZpbHRlcihmaWx0ZXIpCisgICAgLCBtX2dlb21ldHJ5KGdlb21ldHJ5KQorewor
fQorCitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKQoreworICAgIGNv
bnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBtX3NvdXJjZUltYWdlUmVj
dCwgbV9maWx0ZXIsIG1fZ2VvbWV0cnkpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZpbHRlckltYWdlQnVmZmVyJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UtaWRlbnRpZmllciIsIGl0ZW0uaW1hZ2VJZGVu
dGlmaWVyKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLWltYWdlLXJlY3QiLCBpdGVt
LnNvdXJjZUltYWdlUmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKIHZvaWQgRHJhd1JlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRy
YXdSZWN0KG1fcmVjdCwgbV9ib3JkZXJUaGlja25lc3MpOwpAQCAtMTA3NSw2ICsxMTAwLDcgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5
cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB0cyA8PCAiZHJhdy1pbWFn
ZS1idWZmZXIiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRz
IDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXR0ZXJuOiB0cyA8PCAiZHJhdy1wYXR0ZXJuIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZpbHRlckltYWdlQnVmZmVyOiB0cyA8PCAiZHJhdy1maWx0ZXItaW1hZ2UtYnVmZmVyIjsg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHRzIDw8ICJkcmF3LXJlY3QiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogdHMgPDwgImRyYXctbGluZSI7IGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHRzIDw8ICJkcmF3LWxp
bmVzLWZvci10ZXh0IjsgYnJlYWs7CkBAIC0xMjA0LDYgKzEyMzAsOSBAQCBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdHRlcm46CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigp
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZm
ZXI6CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdSZWN0PigpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCmluZGV4IGNlYmYzNjliZmEyZWYwZjY3ZjEzMWZiODUyMzZlOWFhODk3ZDQ0
ODAuLmI3MmE3YTRhYmI4YjBkNWU0ZTZiMDFiYzI4ODQ4NmZkYmI5ODU4ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXJJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpA
QCAtMTEwMCw2ICsxMTAyLDMwIEBAIHByaXZhdGU6CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMg
bV9vcHRpb25zOwogfTsKIAorY2xhc3MgRHJhd0ZpbHRlckltYWdlQnVmZmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdG
aWx0ZXJJbWFnZUJ1ZmZlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
OworCisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdl
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJZGVudGlmaWVyOyB9CisgICAgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0
OyB9CisKKyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JiwgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxv
cHQ7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKworcHJp
dmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9p
bWFnZUlkZW50aWZpZXI7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworICAgIFJl
ZjxGaWx0ZXI+IG1fZmlsdGVyOworICAgIEZpbHRlckdlb21ldHJ5IG1fZ2VvbWV0cnk7Cit9Owor
CiBjbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI7CkBAIC0yNDQzLDYgKzI0NjksNyBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZh
cmlhbnQKICAgICAsIENvbmNhdGVuYXRlQ1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyCiAgICAgLCBEcmF3RWxsaXBzZQorICAgICwgRHJhd0ZpbHRlckltYWdlQnVmZmVyCiAgICAg
LCBEcmF3Rm9jdXNSaW5nUGF0aAogICAgICwgRHJhd0ZvY3VzUmluZ1JlY3RzCiAgICAgLCBEcmF3
R2x5cGhzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggNDc3
OTQyMWY0M2Q2Y2E5MDkzZmJjNWY1ZjMzMmZmNDA5OWE1M2E2MS4uOGE1OTZjZWYwOTIzZjg2NmMx
MzVlOTJjMmI2Yjg5YjZkZTMwZTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiU1ZHRkVJbWFnZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0xODIsNiArMTgzLDUxIEBAIHZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0CiAgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdGaWx0ZXJJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisKKyAgICBpZiAoIXNvdXJjZUltYWdlKSB7CisgICAgICAgIHJlY29yZERyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcih7IH0sIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFjYW5EcmF3SW1hZ2VCdWZmZXIoKnNvdXJj
ZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVj
dHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAgICAgICBib29sIGlz
UmVtb3RlSW1hZ2UgPSBXVEY6OnN3aXRjaE9uKGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQo
KSkuc291cmNlSW1hZ2UoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1h
Z2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRp
dmVJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKCpuYXRp
dmVJbWFnZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgWyZdIChjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeworICAg
ICAgICAgICAgICAgIGlmIChjYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICApOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc1JlbW90
ZUltYWdlKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlY29yZFJlc291cmNl
VXNlKCpzb3VyY2VJbWFnZSk7CisgICAgcmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJj
ZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2VSZWN0LCBm
aWx0ZXIsIGdlb21ldHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVj
b3JkU2F2ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggMDYw
NWQ2ZjI0YmY0NTMyNDdhNGE4ZTg4ZmUzYmRjMjYwNzc2MDc0NC4uZjk2YmI4ZjMzM2JhYzA0MDlk
MzM5NTE5ZjExYWVkYjc0NjQ0MzE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCkBAIC05Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcj4sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKQEAgLTIyOSw2ICsyMzAs
OCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
ZmluYWw7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKaW5kZXggZjQ3NDMyNGZkNzMxYjJjNzk1
ZmZjMTY4M2VhZmUxOGMxNjhmYjdhNS4uNzhjMGM0NzNjNDM2YTk4MGRhZmUxYjlkNThlYzNhMGEw
ZTA0OTYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwu
Y3BwCkBAIC0yMjgsNiArMjI4LDExIEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0
dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyCiAgICAgYXBw
ZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkKK3sKKyAgICBhcHBlbmQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPihpbWFnZUlk
ZW50aWZpZXIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
CiB7CiAgICAgYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCBiZWQ3MWY2NDg1MWQ3
YmUxMzAxOThkYTIwZDQ4YWEzZGI2YjM5NDE5Li4xMTYzMGExYWRlYjFhOTIzMWMxZWUwZmMzZTVj
MDczNGFhY2UzMDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlcklt
cGwuaApAQCAtOTAsNiArOTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdl
QnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdOYXRp
dmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTVmYjFmZjY2NWQzZWIwN2Y0OGVlMWQwMmJiZmZjYzZiMDQ0MWY4OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAy
MDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKLQotI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIERpc3Rh
bnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZCht
X2F6aW11dGgpOwotICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwot
ICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yID0gewotICAg
ICAgICBzdGQ6OmNvcyhhemltdXRoKSAqIHN0ZDo6Y29zKGVsZXZhdGlvbiksCi0gICAgICAgIHN0
ZDo6c2luKGF6aW11dGgpICogc3RkOjpjb3MoZWxldmF0aW9uKSwKLSAgICAgICAgc3RkOjpzaW4o
ZWxldmF0aW9uKQotICAgIH07Ci0gICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGggPSAxOwotfQotCi1MaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGlu
Z0RhdGEgRGlzdGFudExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3Qg
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCwgaW50LCBmbG9hdCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGE7Ci19Ci0KLWJvb2wgRGlz
dGFudExpZ2h0U291cmNlOjpzZXRBemltdXRoKGZsb2F0IGF6aW11dGgpCi17Ci0gICAgaWYgKG1f
YXppbXV0aCA9PSBhemltdXRoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9hemltdXRo
ID0gYXppbXV0aDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEaXN0YW50TGlnaHRTb3Vy
Y2U6OnNldEVsZXZhdGlvbihmbG9hdCBlbGV2YXRpb24pCi17Ci0gICAgaWYgKG1fZWxldmF0aW9u
ID09IGVsZXZhdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZWxldmF0aW9uID0g
ZWxldmF0aW9uOwotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0U3RyZWFtJiBEaXN0YW50TGln
aHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17
Ci0gICAgdHMgPDwgIlt0eXBlPURJU1RBTlQtTElHSFRdICI7Ci0gICAgdHMgPDwgIlthemltdXRo
PVwiIiA8PCBhemltdXRoKCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwgIltlbGV2YXRpb249XCIiIDw8
IGVsZXZhdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGMxZTMwZWRlNzU5ODM3MjhhNjMyYmNjZmZiMDk5NzNhM2E0ZTcyZmQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRo
ZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGlzdGFudExpZ2h0U291cmNlIDogcHVi
bGljIExpZ2h0U291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERpc3RhbnRMaWdodFNv
dXJjZT4gY3JlYXRlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpc3RhbnRMaWdodFNvdXJjZShhemltdXRoLCBlbGV2
YXRpb24pKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVzZSBhcmUgaW4gZGVncmVlcy4KLSAgICBmbG9h
dCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoOyB9Ci0gICAgZmxvYXQgZWxldmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbGV2YXRpb247IH0KLQotICAgIGJvb2wgc2V0QXppbXV0
aChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpIG92ZXJyaWRlOwotICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0IGZpbmFsOwotCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIERp
c3RhbnRMaWdodFNvdXJjZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCi0gICAgICAg
IDogTGlnaHRTb3VyY2UoTFNfRElTVEFOVCkKLSAgICAgICAgLCBtX2F6aW11dGgoYXppbXV0aCkK
LSAgICAgICAgLCBtX2VsZXZhdGlvbihlbGV2YXRpb24pCi0gICAgewotICAgIH0KLQotICAgIGZs
b2F0IG1fYXppbXV0aDsKLSAgICBmbG9hdCBtX2VsZXZhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MSUdIVFNPVVJDRShEaXN0YW50
TGlnaHRTb3VyY2UsIExTX0RJU1RBTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2VEYXRh
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZGNiM2FiZmU3NTI5YzEzZTBjNGUzN2FiODViMmY2NDM2ODU2OGM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2VEYXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2VE
YXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRGlzdGFudExpZ2h0U291cmNlRGF0YTo6RGlzdGFudExpZ2h0U291cmNlRGF0
YShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCisgICAgOiBtX2F6aW11dGgoYXppbXV0
aCkKKyAgICAsIG1fZWxldmF0aW9uKGVsZXZhdGlvbikKK3sKK30KKworTGlnaHRTb3VyY2VQYWlu
dERhdGEgRGlzdGFudExpZ2h0U291cmNlRGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRh
KGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3IpIGNvbnN0Cit7CisgICAgZmxvYXQgYXpp
bXV0aCA9IGRlZzJyYWQobV9hemltdXRoKTsKKyAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFk
KG1fZWxldmF0aW9uKTsKKworICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvciA9IHsKKyAgICAg
ICAgc3RkOjpjb3MoYXppbXV0aCkgKiBzdGQ6OmNvcyhlbGV2YXRpb24pLAorICAgICAgICBzdGQ6
OnNpbihhemltdXRoKSAqIHN0ZDo6Y29zKGVsZXZhdGlvbiksCisgICAgICAgIHN0ZDo6c2luKGVs
ZXZhdGlvbikKKyAgICB9OworCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgcGFpbnREYXRhID0g
eyB9OworICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhID0geyBjb2xvclZlY3Rvciwg
bGlnaHRWZWN0b3IsIDEgfTsKKyAgICByZXR1cm4gcGFpbnREYXRhOworfQorCitMaWdodFNvdXJj
ZVBpeGVsRGF0YSBEaXN0YW50TGlnaHRTb3VyY2VEYXRhOjpjb21wdXRlTGlnaHRTb3VyY2VQaXhl
bERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmIHBhaW50RGF0YSwgaW50LCBpbnQsIGZs
b2F0KSBjb25zdAoreworICAgIHJldHVybiBwYWludERhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YTsK
K30KKworVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9RElTVEFO
VC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW2F6aW11dGg9XCIiIDw8IG1fYXppbXV0aCA8PCAiXCJd
IjsKKyAgICB0cyA8PCAiW2VsZXZhdGlvbj1cIiIgPDwgbV9lbGV2YXRpb24gPDwgIlwiXSI7Cisg
ICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiYWI5MzI3MWIyNjZkOWM1ZDhiZDM1ZGYy
Zjg5M2E0NjEzODIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJMaWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXN0
YW50TGlnaHRTb3VyY2VEYXRhIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXN0YW50
TGlnaHRTb3VyY2VEYXRhKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbik7CisKKyAgICB2
b2lkIHNldEF6aW11dGgoZmxvYXQgYXppbXV0aCkgeyBtX2F6aW11dGggPSBhemltdXRoOyB9Cisg
ICAgdm9pZCBzZXRFbGV2YXRpb24oZmxvYXQgZWxldmF0aW9uKSB7IG1fZWxldmF0aW9uID0gZWxl
dmF0aW9uOyB9CisKKyAgICBMaWdodFNvdXJjZVBhaW50RGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQ
YWludERhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBjb2xvclZlY3RvcikgY29uc3Q7CisgICAgTGln
aHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0
U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdDsKKworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxEaXN0YW50TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgor
ICAgIC8vIFRoZXNlIGFyZSBpbiBkZWdyZWVzLgorICAgIGZsb2F0IG1fYXppbXV0aDsKKyAgICBm
bG9hdCBtX2VsZXZhdGlvbjsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERp
c3RhbnRMaWdodFNvdXJjZURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9hemltdXRoOworICAgIGVuY29kZXIgPDwgbV9lbGV2YXRpb247Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERpc3RhbnRMaWdodFNv
dXJjZURhdGE+IERpc3RhbnRMaWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGF6aW11dGg7CisgICAgZGVjb2RlciA+PiBh
emltdXRoOworICAgIGlmICghYXppbXV0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGVsZXZhdGlvbjsKKyAgICBkZWNvZGVyID4+IGVs
ZXZhdGlvbjsKKyAgICBpZiAoIWVsZXZhdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhKCphemltdXRoLCAqZWxldmF0
aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2
NzA0Y2Q2N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uOGI4MDIzY2YzNjJjZDYwYTY3NDczODMy
Y2JhODhkZjgyOGNiZTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICog
Q29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiwzMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRO
RU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0
ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVu
ZE1vZGUgbW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQotICAg
ICwgbV9tb2RlKG1vZGUpCitSZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBt
b2RlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCi1S
ZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9k
ZSkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVCbGVuZCkKKyAgICAsIG1fbW9kZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2RlKSk7CiB9CiAKLWJvb2wgRkVCbGVuZDo6c2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZSBtb2RlKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVCbGVuZDo6dGFrZUlu
cHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgaWYgKG1fbW9kZSA9
PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7
IHN0YWNrLnRha2VMYXN0KCksIHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAotI2lmICFIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
Ci17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4t
PmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGlu
Mi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlcjIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKLX0KLSNlbmRpZgotCi1UZXh0
U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJs
ZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICB0cyA8PCAiIG1vZGU9XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAi
bm9ybWFsIiA6IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
T3ZlciwgbV9tb2RlKSkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3Bl
IGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
CmluZGV4IDcwZTg0MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjJkYjY1YjJk
MmE4YzljMDM4NWQ1YTA5OTJjZTU2MTNkMmI0MTRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMyArMjQsNDggQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKKworICAgIHZvaWQgc2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZSBtb2RlKSB7IG1fbW9kZSA9IG1vZGU7IH0KIAotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIHNldEJsZW5k
TW9kZShCbGVuZE1vZGUpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSZWY8RkVCbGVuZD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5k
IjsgfQorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVu
c2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5
QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRh
a2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChG
aWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2RlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRkVCbGVuZDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX21vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6
Om9wdGlvbmFsPFJlZjxGRUJsZW5kPj4gRkVCbGVuZDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit7CisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBt
b2RlOworICAgIGlmICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHJldHVybiBGRUJsZW5kOjpjcmVhdGUoKm1vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUJsZW5kKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2
OGE1NC4uNTZmMDJlOWM0MzI2YjJhYzBmYjVkNDY2ZDAxODA5MDQzYjM3ZjQ4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMDMgKzI0LDY1IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYm
IHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQot
ICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCi17Ci19
Ci0KLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3Zl
KHZhbHVlcykpKTsKLX0KLQotYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRUeXBlKENvbG9yTWF0cml4
VHlwZSB0eXBlKQotewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVD
b2xvck1hdHJpeDo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKK1JlZjxG
RUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUs
IFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7Ci0gICAgaWYgKG1fdmFsdWVzID09IHZhbHVlcykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmFsdWVzID0gdmFsdWVzOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RG
TW92ZSh2YWx1ZXMpKSk7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9h
dCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcykKLXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAg
ICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxwaGE7Ci0KLSAgICByZWQgICAgID0g
dmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVz
WyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICog
ciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZh
bHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzEx
XSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1
NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVl
c1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxp
bmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZs
b2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykKK0ZFQ29sb3JNYXRyaXg6OkZFQ29s
b3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlIGNvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYm
IHZhbHVlcykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbG9yTWF0cml4KQorICAgICwg
bV9jb2xvck1hdHJpeFR5cGUoY29sb3JNYXRyaXhUeXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwot
ICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsg
ZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAq
IGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwot
ICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAq
IGNvbXBvbmVudHNbOF07CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWlu
YW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
KQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsg
MC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4g
PSAwOwotICAgIGJsdWUgPSAwOworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAq
IHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7Cisg
ICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVu
dHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAu
NzE1ICsgMC4yODUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcy
ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsK
KyAgICBjb21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9u
ZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBw
bHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0
aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhN
dWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUg
bGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBp
cyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZh
bHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1
ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29u
c3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5
LmRhdGEoKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZl
clNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAg
ICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0g
ZGF0YTsKLSAgICAKLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1
ZmZlclNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7
Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5k
YXRhID0gZGF0YTsKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICog
NF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAw
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
Nl0gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgN10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sxM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0
cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0
ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRd
ID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
MF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9u
ZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzddICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29y
KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzhdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwK
LSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywg
JmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3Mp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0g
ICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAg
ICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAm
ZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQg
c2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9
IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRz
WzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBv
bmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAg
Y29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsK
KyAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAu
MTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVl
ICogMC4yODM7CisgICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBz
aW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcx
NSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAq
IDAuOTI4ICsgc2luSHVlICogMC4wNzI7CiB9Ci0jZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRy
aXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXpl
KQorYm9vbCBGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImKSBjb25zdAogewotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVy
VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRy
aXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwot
ICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkK
LSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21w
b25lbnRzLCB2YWx1ZXNbMF0pOwotCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBp
eGVsQXJyYXkubGVuZ3RoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoZWZmZWN0
QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVu
dHMsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShidWZmZXJTaXplKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0
IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAg
ICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1ZXMpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAg
ICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKLSAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQToKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhl
bEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewot
ICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7
Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAx
LCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAy
LCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMs
IGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1f
Y29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJ
bWFnZVZlY3RvciBGRUNvbG9yTWF0cml4Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEltYWdlQnVm
ZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmIChpbkJ1ZmZl
cikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgp
IH07Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
ICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwotCi0g
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKLSAg
ICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VO
S05PV046Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFy
cmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IAotICAgICAgICBlZmZlY3RUeXBlPEZF
Q09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5
RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9U
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIHNldElzQWxw
aGFJbWFnZSh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0SW1hZ2Ut
PnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JN
YXRyaXhUeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgY29sb3JNYXRyaXhUeXBlKQogewotICAgIHN3
aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29sb3JNYXRyaXhUeXBlKSB7CiAgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAg
ICAgICBicmVhazsKQEAgLTMzOSwxMSArMTAyLDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiAgICAg
cmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZUNvbG9yTWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHR5cGU9
XCIiIDw8IG1fdHlwZSA8PCAiXCIiOworICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgbV9jb2xvck1h
dHJpeFR5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAg
ICB0cyA8PCAiIHZhbHVlcz1cIiI7CiAgICAgICAgIFZlY3RvcjxmbG9hdD46OmNvbnN0X2l0ZXJh
dG9yIHB0ciA9IG1fdmFsdWVzLmJlZ2luKCk7CkBAIC0zNTcsOSArMTE5LDYgQEAgVGV4dFN0cmVh
bSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1c
biI7Ci0gICAgCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwot
ICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRh
dGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThh
ZWQxZTRmMGI1Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLjlhNDQ2NDZhM2JiNDQ1YzMxOWU0NjM1
MDY4ZDk5Y2U3ZDRlZDc2ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2
MiArMzcsNzcgQEAgZW51bSBDb2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9y
TWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3JlYXRlKENv
bG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKIAotICAgIENvbG9yTWF0cml4VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0
cml4VHlwZSk7CisgICAgdm9pZCBzZXRDb2xvck1hdHJpeFR5cGUoQ29sb3JNYXRyaXhUeXBlIGNv
bG9yTWF0cml4VHlwZSkgeyBtX2NvbG9yTWF0cml4VHlwZSA9IGNvbG9yTWF0cml4VHlwZTsgfQor
ICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykgeyBtX3ZhbHVl
cyA9IHZhbHVlczsgfQogCi0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KLSAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0
KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVl
Um90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0
YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYg
dmFsdWVzKTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBv
bmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5l
IHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZWY8RkVDb2xvck1hdHJpeD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb2xvck1hdHJpeChGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4m
Jik7CisgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7
CisKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
KSBjb25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmls
dGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb2xvck1hdHJpeCI7IH0KKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisjaWYgVVNFKENP
UkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKKyNlbmRpZgogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IENvbG9yTWF0cml4VHlwZSBtX3R5cGU7CisgICAgQ29sb3JNYXRyaXhUeXBlIG1fY29sb3JNYXRy
aXhUeXBlOwogICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7CiB9OwogCi1pbmxpbmUgdm9pZCBG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVu
dHMsIGZsb2F0IHZhbHVlKQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVDb2xvck1h
dHJpeDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgY29tcG9uZW50c1sw
XSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUg
LSAwLjcxNSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2
YWx1ZSk7Ci0gICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAg
IGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIx
MyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbG9yTWF0cml4VHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fdmFsdWVz
OwogfQogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUNvbG9yTWF0cml4Pj4gRkVDb2xvck1hdHJpeDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9h
dCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBz
aW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcx
NSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAq
IDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29z
SHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUg
KyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAw
LjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2
XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25l
bnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNv
bXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19
CisgICAgc3RkOjpvcHRpb25hbDxDb2xvck1hdHJpeFR5cGU+IGNvbG9yTWF0cml4VHlwZTsKKyAg
ICBkZWNvZGVyID4+IGNvbG9yTWF0cml4VHlwZTsKKyAgICBpZiAoIWNvbG9yTWF0cml4VHlwZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PGZsb2F0Pj4gdmFsdWVzOworICAgIGRlY29kZXIgPj4gdmFsdWVzOworICAgIGlmICghdmFsdWVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCisgICAgcmV0dXJuIEZFQ29sb3JNYXRy
aXg6OmNyZWF0ZSgqY29sb3JNYXRyaXhUeXBlLCBXVEZNb3ZlKCp2YWx1ZXMpKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NU
eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JNYXRyaXhUeXBlPiB7CisgICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q29sb3JNYXRyaXhUeXBlLAor
CisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOLAorICAgICAgICBX
ZWJDb3JlOjpGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLAorICAgICAgICBXZWJDb3JlOjpGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUsCisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUsCisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9MVU1J
TkFOQ0VUT0FMUEhBCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IDg0N2VhNThmNWY5YjAzODY2ZDllYWM1N2YxMGNjZjU3
NDAyZjllNjMuLjU4NGVkOTBmZjg5OTg4YmY5NTlkMTZlZTFlNWIzYmVkODllNmE4MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitS
ZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFs
cGhhRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFu
c2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0
aW9uKSk7Cit9CisKK0ZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5j
dGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpA
QCAtNDMsMTE5ICs0NCwxMCBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlcgogewogfQogCi1SZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAg
ICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb21wb25lbnRUcmFuc2ZlcihmaWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9u
LCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsKLX0KLQotdm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVDb21wb25lbnRUcmFuc2Zl
cjo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci19Ci0KLXZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYg
dmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9u
KQotewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5j
dGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwot
ICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMg
PSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVW
YWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsg
MSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAo
biAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0
ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWdu
ZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4w
KTsKLSAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9
IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6
bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5j
dGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAg
ICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZh
bHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRv
ZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90
ZSB0aGlzIHRvIGRvdWJsZQotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJG
dW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVy
RnVuY3Rpb24ub2Zmc2V0KTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigy
NTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZh
bCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBU
YWJsZSBncmVlblRhYmxlOwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBU
YWJsZSBhbHBoYVRhYmxlOwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVu
VGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJy
YXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgo
KTsKLSAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlv
blBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhl
bE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAg
ICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAy
XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhl
bE9mZnNldCArIDNdXTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVl
blRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHJlZFRhYmxlW2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhh
VGFibGVbaV0gPSBpOwotCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJU
eXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5
VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNv
bXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQot
ICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAv
LyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9u
LnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24u
dHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5
cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlw
ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9y
ZWRGdW5jdGlvbi50eXBlXShyZWRUYWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVj
dFttX2dyZWVuRnVuY3Rpb24udHlwZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAg
ICBjYWxsRWZmZWN0W21fYmx1ZUZ1bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rp
b24pOwotICAgIGNhbGxFZmZlY3RbbV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1f
YWxwaGFGdW5jdGlvbik7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVy
biB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVudFRyYW5zZmVyVHlwZSB0eXBlKQpAQCAtMjA5LDEw
ICsxMDEsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZgogICAgIHJldHVybiB0czsKIH0KIAot
VGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbZmVDb21wb25lbnRUcmFuc2ZlciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIlxuIjsK
ICAgICB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzLCAy
KTsKQEAgLTIyMSw5ICsxMTIsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbgogICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIntibHVlOiAiIDw8IG1fYmx1ZUZ1bmN0aW9uIDw8ICJ9XG4iOwogICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgInthbHBoYTogIiA8PCBtX2FscGhhRnVuY3Rpb24gPDwgIn1d
XG4iOwogICAgIH0KLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRz
KTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aAppbmRleCAyYjU4NmRlZjdmYjQyYTM3YjJlMTIzZWRhODcxMTljNGViMzQ4YTUxLi40NjM2ZTkz
YjBhMDQ3ZWRmY2FkZDAxYmFhMTRiNDIxMjYwYzQ3NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksMzcgKzQ4LDMxIEBAIHN0cnVjdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHsKICAgICBmbG9hdCBvZmZzZXQgeyAwIH07CiAKICAgICBWZWN0b3I8
ZmxvYXQ+IHRhYmxlVmFsdWVzOworICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBkZWNvZGUoRGVj
b2RlciYpOwogfTsKIAogY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3Jl
YXRlKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNy
ZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
cmVkRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmVl
bkZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBibHVlRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2JsdWVGdW5jdGlvbjsgfQotICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5jdGlvbjsg
fQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAg
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsK
LQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29tcG9uZW50VHJhbnNmZXIiOyB9Ci0KLSAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PjsKKyAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBi
bHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rp
b24pOwogCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUm
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29t
cHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJs
ZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBj
b21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUm
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgRmlsdGVySW1hZ2VWZWN0
b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9yZWRGdW5jdGlv
bjsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fZ3JlZW5GdW5jdGlvbjsKQEAgLTg3
LDggKzgwLDExMSBAQCBwcml2YXRlOgogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9h
bHBoYUZ1bmN0aW9uOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCB0eXBlOworICAgIGVuY29kZXIgPDwgc2xvcGU7CisgICAgZW5jb2RlciA8
PCBpbnRlcmNlcHQ7CisgICAgZW5jb2RlciA8PCBhbXBsaXR1ZGU7CisgICAgZW5jb2RlciA8PCBl
eHBvbmVudDsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IHRhYmxlVmFs
dWVzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uPiBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyVHlw
ZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2xvcGU7Cisg
ICAgZGVjb2RlciA+PiBzbG9wZTsKKyAgICBpZiAoIXNsb3BlKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gaW50ZXJjZXB0OworICAgIGRl
Y29kZXIgPj4gaW50ZXJjZXB0OworICAgIGlmICghaW50ZXJjZXB0KQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYW1wbGl0dWRlOworICAg
IGRlY29kZXIgPj4gYW1wbGl0dWRlOworICAgIGlmICghYW1wbGl0dWRlKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZXhwb25lbnQ7Cisg
ICAgZGVjb2RlciA+PiBleHBvbmVudDsKKyAgICBpZiAoIWV4cG9uZW50KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAg
IGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8ZmxvYXQ+PiB0YWJsZVZhbHVl
czsKKyAgICBkZWNvZGVyID4+IHRhYmxlVmFsdWVzOworICAgIGlmICghdGFibGVWYWx1ZXMpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgcmV0dXJuIHsgeyAqdHlwZSwg
KnNsb3BlLCAqaW50ZXJjZXB0LCAqYW1wbGl0dWRlLCAqZXhwb25lbnQsICpvZmZzZXQsIFdURk1v
dmUoKnRhYmxlVmFsdWVzKSB9IH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9yZWRGdW5jdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fZ3JlZW5GdW5j
dGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fYmx1ZUZ1bmN0aW9uOworICAgIGVuY29kZXIgPDwgbV9h
bHBoYUZ1bmN0aW9uOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25h
bDxSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbj4gcmVkRnVuY3Rpb247CisgICAgZGVjb2RlciA+PiByZWRGdW5jdGlvbjsKKyAgICBp
ZiAoIXJlZEZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3Rk
OjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBncmVlbkZ1bmN0aW9uOworICAg
IGRlY29kZXIgPj4gZ3JlZW5GdW5jdGlvbjsKKyAgICBpZiAoIWdyZWVuRnVuY3Rpb24pCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24+IGJsdWVGdW5jdGlvbjsKKyAgICBkZWNvZGVyID4+IGJsdWVGdW5jdGlv
bjsKKyAgICBpZiAoIWJsdWVGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gYWxwaGFGdW5j
dGlvbjsKKyAgICBkZWNvZGVyID4+IGFscGhhRnVuY3Rpb247CisgICAgaWYgKCFhbHBoYUZ1bmN0
aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNyZWF0ZSgqcmVkRnVuY3Rpb24sICpncmVlbkZ1bmN0aW9uLCAqYmx1ZUZ1
bmN0aW9uLCAqYWxwaGFGdW5jdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI7IH0KLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkNvbXBvbmVudFRyYW5zZmVyVHlwZT4geworICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkNvbXBvbmVudFRyYW5zZmVyVHlwZSwK
KworICAgICAgICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTiwKKyAg
ICAgICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZLAorICAgICAg
ICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUsCisgICAgICAgIFdlYkNv
cmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURSwKKyAgICAgICAgV2ViQ29yZTo6
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUiwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFu
c2ZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggOGI1OWU2NmRlOWZlOGQ2MzkxNmNiZTVjZTZkZDQw
MzhmYTRjYjJhOC4uMjg1ZDRiMmM3MmU1NWFmZjQ0MGFlMjFhN2IxNzg1MzJiNWI0MTc3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCwxNyArMjUsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNv
bXBvc2l0ZS5oIgogCi0jaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9z
aXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAg
OiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlw
ZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVP
cGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRl
KEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBr
MiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9z
aXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAs
IG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDcs
MzAgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21w
b3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBG
RUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBr
MiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHR5cGUpCitGbG9hdFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dAogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgLy8gRm9yIEluIGFuZCBB
dG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAv
LyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qg
b2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRvciA9
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQ
cmltaXRpdmVTdWJyZWdpb24oaW5wdXRzWzFdLT5pbWFnZVJlY3QoKSwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzEoZmxvYXQgazEpCi17Ci0gICAgaWYgKG1f
azEgPT0gazEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2sxID0gazE7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUg
ZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0CisgICAgLy8gb3B0aW1pemUgdGhl
IHBhaW50IHJlZ2lvbiBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlw
VG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0ZTo6
c2V0SzIoZmxvYXQgazIpCi17Ci0gICAgaWYgKG1fazIgPT0gazIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2syID0gazI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZpbHRl
ckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGlucHV0cywgZ2VvbWV0cnksIHByaW1pdGl2ZVN1
YnJlZ2lvbik7CiB9CiAKLWJvb2wgRkVDb21wb3NpdGU6OnNldEszKGZsb2F0IGszKQotewotICAg
IGlmIChtX2szID09IGszKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMyA9IGszOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkK
LXsKLSAgICBpZiAobV9rNCA9PSBrNCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazQg
PSBrNDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZp
bHRlclJlc3VsdElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVN
dWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5
dGUoaW50IGMpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbXBvc2l0ZTo6dGFrZUlucHV0cyhGaWx0
ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10g
PSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25l
ZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAm
IH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwg
aW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAg
ICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAg
ICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRL
NCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsg
azMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsx
ICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAg
ICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8g
aXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6
YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50
IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
LXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEp
Ci0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBz
Y2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+
PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNp
Z25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAq
IGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9
IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytz
b3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUo
dW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBp
eGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQot
ewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgw
LjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0
ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4w
ZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBl
ckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAw
LjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAg
ICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNs
YW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsy
LCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJy
YXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGsz
LCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxl
bmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJp
dGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3Ro
LCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAg
ICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBw
aXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQorICAgIEFTU0VSVChzdGFj
ay5zaXplKCkgPj0gMik7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSwgc3RhY2sudGFr
ZUxhc3QoKSB9OwogfQotI2VuZGlmCiAKLWlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9y
bUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMs
IGZsb2F0IGs0KQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGlu
dCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBo
ZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseS4KLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0gICAgQVNTRVJUKCEobGVuZ3RoICYgMHgzKSk7Ci0gICAgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotI2Vsc2UKLSAgICBhcml0aG1ldGljU29mdHdhcmUoc291cmNl
LmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNl
bmRpZgotfQotCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKLSAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0
ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29s
dXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAg
ICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAgICAgIC8vIEFyaXRobWV0aWMgbWF5
IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4n
dAotICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCi0gICAgICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBv
ZiBib3RoIGlucHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgx
KTsKLQotICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykg
ewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgICAgICBJ
bnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxB
cnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0KLSAgICAg
ICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBH
cmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewotICAgICAgICAv
LyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KLSAgICAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgZGVz
dGluYXRpb25SZWN0LmludGVyc2VjdChpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAg
ICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAg
ICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBJbnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0g
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigp
OwotICAgICAgICBJbnRSZWN0IHNvdXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2UyUmVjdCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2VSZWN0KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
SW4gfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlhPUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfTElHSFRFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSks
IENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5
cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRv
cikgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMg
PDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTMyOCwxOCArOTksMTMgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29t
cG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb21wb3NpdGUiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwot
ICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX3R5cGUgPDwgIlwiIjsKLSAgICBpZiAobV90
eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgdHMgPDwgIiBvcGVy
YXRpb249XCIiIDw8IG1fY29tcG9zaXRlT3BlcmF0b3IgPDwgIlwiIjsKKyAgICBpZiAobV9jb21w
b3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQogICAgICAg
ICB0cyA8PCAiIGsxPVwiIiA8PCBtX2sxIDw8ICJcIiBrMj1cIiIgPDwgbV9rMiA8PCAiXCIgazM9
XCIiIDw8IG1fazMgPDwgIlwiIGs0PVwiIiA8PCBtX2s0IDw8ICJcIiI7CiAgICAgdHMgPDwgIl1c
biI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3
MTA3YjRiOTY4YzU4ZTNhMzdjMzJhZTJmNzZhZWEwYzMuLmMzYzk2MGY3YzNmZGViMTM0M2EwNjMx
NmI2Y2I1OWJmYzM3MzEyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEyICsyNCw5IEBACiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSB7CitlbnVtIEZFQ29tcG9zaXRlT3BlcmF0b3IgewogICAgIEZFQ09NUE9T
SVRFX09QRVJBVE9SX1VOS05PV04gICAgPSAwLCAKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9P
VkVSICAgICAgID0gMSwKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiAgICAgICAgID0gMiwK
QEAgLTQxLDUyICszOSw5OCBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFz
cyBGRUNvbXBvc2l0ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29s
IHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsKLQotICAgIGZsb2F0IGsxKCkg
Y29uc3QgeyByZXR1cm4gbV9rMTsgfQotICAgIGJvb2wgc2V0SzEoZmxvYXQpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJh
dG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICBmbG9h
dCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazI7IH0KLSAgICBib29sIHNldEsyKGZsb2F0KTsKKyAg
ICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IpIHsgbV9jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdG9yOyB9Cisg
ICAgdm9pZCBzZXRLMShmbG9hdCBrMSkgeyBtX2sxID0gazE7IH0KKyAgICB2b2lkIHNldEsyKGZs
b2F0IGsyKSB7IG1fazIgPSBrMjsgfQorICAgIHZvaWQgc2V0SzMoZmxvYXQgazMpIHsgbV9rMyA9
IGszOyB9CisgICAgdm9pZCBzZXRLNChmbG9hdCBrNCkgeyBtX2s0ID0gazQ7IH0KIAotICAgIGZs
b2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMzsgfQotICAgIGJvb2wgc2V0SzMoZmxvYXQpOwot
Ci0gICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9Ci0gICAgYm9vbCBzZXRLNChm
bG9hdCk7Ci0KLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUM7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmVmPEZFQ29tcG9zaXRlPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToK
LSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBvc2l0
ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CiAKLSAgICB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0
d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAg
ICBib29sIGFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICBi
b29sIGFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICAK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICB0ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
TmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZs
b2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKLSNlbmRpZgotCi0gICAgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSBtX3R5cGU7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBtX2Nv
bXBvc2l0ZU9wZXJhdG9yOwogICAgIGZsb2F0IG1fazE7CiAgICAgZmxvYXQgbV9rMjsKICAgICBm
bG9hdCBtX2szOwogICAgIGZsb2F0IG1fazQ7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBGRUNvbXBvc2l0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbXBvc2l0ZU9wZXJhdG9yOworICAgIGVuY29kZXIgPDwgbV9rMTsK
KyAgICBlbmNvZGVyIDw8IG1fazI7CisgICAgZW5jb2RlciA8PCBtX2szOworICAgIGVuY29kZXIg
PDwgbV9rNDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVm
PEZFQ29tcG9zaXRlPj4gRkVDb21wb3NpdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIHN0ZDo6b3B0aW9uYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3BlcmF0b3I7
CisgICAgZGVjb2RlciA+PiBjb21wb3NpdGVPcGVyYXRvcjsKKyAgICBpZiAoIWNvbXBvc2l0ZU9w
ZXJhdG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxmbG9hdD4gazE7CisgICAgZGVjb2RlciA+PiBrMTsKKyAgICBpZiAoIWsxKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazI7CisgICAg
ZGVjb2RlciA+PiBrMjsKKyAgICBpZiAoIWsyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazM7CisgICAgZGVjb2RlciA+PiBrMzsKKyAg
ICBpZiAoIWszKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4gazQ7CisgICAgZGVjb2RlciA+PiBrNDsKKyAgICBpZiAoIWs0KQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFQ29tcG9zaXRlOjpjcmVhdGUo
KmNvbXBvc2l0ZU9wZXJhdG9yLCAqazEsICprMiwgKmszLCAqazQpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkZFQ29tcG9zaXRlT3BlcmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGRUNvbXBvc2l0ZU9wZXJhdG9yLAorCisg
ICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV04sCisgICAgICAgIFdl
YkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIsCisgICAgICAgIFdlYkNvcmU6OkZFQ09N
UE9TSVRFX09QRVJBVE9SX0lOLAorICAgICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVVQsCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1AsCisgICAg
ICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUiwKKyAgICAgICAgV2ViQ29yZTo6
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQywKKyAgICAgICAgV2ViQ29yZTo6RkVDT01Q
T1NJVEVfT1BFUkFUT1JfTElHSFRFUgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9zaXRlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5OGQ3MDkzNWE5NWM2ZjE1NmVjMjkz
M2MwZTk5ZjA1MC4uYmE4MjYxOTJkZTU0NjdiNDE3ZThhZmM0YTFjM2VkYjdlNzEwZWFlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjQsMTggKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252
b2x2ZU1hdHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXIm
IGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVz
ZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi0gICAgOiBGaWx0
ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb252b2x2ZU1hdHJpeCkKK1JlZjxGRUNvbnZvbHZlTWF0
cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUs
IGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgs
IHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQorCitGRUNvbnZvbHZlTWF0cml4OjpG
RUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3Is
IGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2
ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVDb252b2x2ZU1hdHJpeCkKICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxT
aXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBtX2JpYXMoYmlhcykKQEAgLTQ5
LDM4OSArNTEsMTUgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXIm
IGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxT
aXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZl
TWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
Ci0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9m
ZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5l
bFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2Vy
bmVsTWF0cml4KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgo
ZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2Rl
LCBrZXJuZWxVbml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgp
KTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNp
emUmIGtlcm5lbFNpemUpCi17Ci0gICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwot
ICAgIEFTU0VSVChrZXJuZWxTaXplLmhlaWdodCgpID4gMCk7Ci0gICAgbV9rZXJuZWxTaXplID0g
a2VybmVsU2l6ZTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWwoY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsKQotewotICAgIG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyAK
LX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpCi17
Ci0gICAgQVNTRVJUKGRpdmlzb3IpOwotICAgIGlmIChtX2Rpdmlzb3IgPT0gZGl2aXNvcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGl2aXNvciA9IGRpdmlzb3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0QmlhcyhmbG9hdCBiaWFzKQot
ewotICAgIGlmIChtX2JpYXMgPT0gYmlhcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
YmlhcyA9IGJpYXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJp
eDo6c2V0VGFyZ2V0T2Zmc2V0KGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQpCi17Ci0gICAg
aWYgKG1fdGFyZ2V0T2Zmc2V0ID09IHRhcmdldE9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0OwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKLXsKLSAgICBpZiAobV9lZGdlTW9kZSA9PSBlZGdlTW9kZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEZsb2F0
UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6Y2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLSAgICBBU1NFUlQoa2VybmVsVW5pdExlbmd0aC54KCkgPiAwKTsKLSAgICBBU1NFUlQo
a2VybmVsVW5pdExlbmd0aC55KCkgPiAwKTsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoID09
IGtlcm5lbFVuaXRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2tlcm5lbFVu
aXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
Ym9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBo
YSkKK0ZpbHRlckltYWdlVmVjdG9yIEZFQ29udm9sdmVNYXRyaXg6OnRha2VJbnB1dHMoRmlsdGVy
SW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEgPT0g
cHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcHJlc2VydmVBbHBo
YSA9IHByZXNlcnZlQWxwaGE7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVt
ZW50YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRo
ZSBpbWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwg
ICB8Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAg
ICAgfCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAg
IEUgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUg
cmVnaW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBj
YWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQot
ICAgRXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0g
ICAgICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAg
ICBUYXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRo
ZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAg
ICAuLi4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlz
IGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBh
bmQgKHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4
MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9u
bHkgdGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwg
eTIKLQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAg
UmVnaW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgx
OiAxLCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywg
eDI6IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHky
OiAxMCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5z
IG1vc3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0
byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgot
ICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBj
YWxscyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBp
bWFnZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmln
Z2VyIHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAg
IGZ1bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGlu
IGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3Ig
dGhlbSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdv
dWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5z
aWduZWQgY2hhciBtYXggPSAyNTUpCi17Ci0gICAgaWYgKGNoYW5uZWwgPD0gMCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5uZWwgPj0gbWF4KQotICAgICAgICByZXR1cm4gbWF4Owot
ICAgIHJldHVybiBjaGFubmVsOwotfQotCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMs
IGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMpCi17
Ci0gICAgdW5zaWduZWQgY2hhciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUg
OiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNs
YW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0g
ICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4
ZWwsIHNvdXJjZVBpeGVscy5pdGVtKHBpeGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKLX0KLQotI2lm
IENPTVBJTEVSKE1TVkMpCi0vLyBJbmNvcnJlY3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBvZiBz
dGFjayBpbiB8dG90YWxzfCBkdWUgdG8gfHByZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdtYSB3
YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgotCi0v
LyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgot
QUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0
b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBh
ZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAgaW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIG1fdGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwotICAgIGludCBr
ZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tl
cm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJn
YihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVl
cyA/IDAgOiAxKV07Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0g
ICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCknIGxpbmVzCi0gICAgcGl4
ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkg
KiA0KTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAo
eEluY3JlYXNlICsgKGNsaXBSaWdodCArIDEpICogNCk7Ci0KLSAgICBmb3IgKGludCB5ID0geUVu
ZCArIDE7IHkgPiB5U3RhcnQ7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0
ICsgMTsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRp
bmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBp
eGVsID0gc3RhcnRLZXJuZWxQaXhlbDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVs
U2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAg
dG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBp
ZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsK
LQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAg
ICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQ
aXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFs
c1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKysp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKLSAgICAgICAg
ICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAg
ICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxz
PHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0Rh
dGEuYmlhcyk7Ci0gICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9
IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRy
aXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQg
eSkKLXsKLSAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeSA+PSAw
ICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICByZXR1cm4gKHkgKiBwYWludGlu
Z0RhdGEud2lkdGggKyB4KSA8PCAyOwotCi0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Ci0gICAg
ZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY2FzZSBF
REdFTU9ERV9EVVBMSUNBVEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgIHggPSAw
OwotICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKLSAgICAgICAgICAg
IHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOwotICAgICAgICBpZiAoeSA8IDApCi0gICAgICAg
ICAgICB5ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQot
ICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwotICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNhc2UgRURHRU1PREVfV1JB
UDoKLSAgICAgICAgd2hpbGUgKHggPCAwKQotICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEu
d2lkdGg7Ci0gICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB3aGlsZSAo
eSA8IDApCi0gICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHkg
JT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRh
LndpZHRoICsgeCkgPDwgMjsKLSAgICB9Ci19Ci0KLS8vIEZvciBvdGhlciByZWdpb25zIHRoYW4g
QwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwotICAg
IGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBt
X3RhcmdldE9mZnNldC54KCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJu
ZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3RhcmdldE9mZnNl
dC55KCk7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkg
KiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBm
bG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8v
IG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJl
cyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gaGVpZ2h0
OyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkg
ewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVs
UGl4ZWxYOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZ
OwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAg
ICAgICAgIHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAg
ICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVl
cykKLSAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0
UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKLSAg
ICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAg
dG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRl
eCArIDIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2
ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgdG90
YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCAr
IDMpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgICAgICAt
LWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAg
ICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAg
ICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVs
LCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOwotICAgICAgICAgICAgKytz
dGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7
Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgICAg
ICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgfQotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNw
cmFnbWEgd2FybmluZyhwb3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3Rh
cnQsIGludCB5RW5kKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2Ug
aXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBk
ZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgZWxzZQotICAgICAg
ICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBj
bGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1
bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJl
Ci0gICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhl
cmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8
dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBm
YXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwot
fQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQot
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBzb3VyY2VQaXhlbEFycmF5OwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0g
ICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERy
YXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGVsc2UKLSAgICAgICAgc291
cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewotICAgICAgICAqc291cmNlUGl4
ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAotICAgICAgICBwYWludFNp
emUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2JpYXMg
KiAyNTUsCi0gICAgICAgIG5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCi0gICAgfTsK
LQotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0
ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xp
cEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKLQot
ICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJh
cmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnQgaXRlcmF0aW9u
cyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhl
aWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKLSAgICAgICAgaW50IHN0cmlkZSA9
IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlw
Qm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0KLSAgICAgICAgQ29uY3VycmVudFdvcmtR
dWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAg
aW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0gICAgICAgICAgICBpbnQgeUVuZCA9IHN0
ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0b20pOwotCi0gICAgICAg
ICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldElu
dGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBjbGlw
Qm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwotICAg
IGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAgICBpZiAobV90YXJnZXRP
ZmZzZXQueSgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICBpZiAoY2xpcEJv
dHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRp
bmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdo
dCgpKTsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0
LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNsaXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgp
KQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJn
ZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRvbSk7CisgICAgQVNTRVJU
KCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVk
Z2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCArODEsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7
CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMg
PDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5l
bE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJcIiAiCiAgICAgICAgPDwgImRpdmlz
b3I9XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgpAQCAtNDY1LDkgKzkyLDYgQEAgVGV4dFN0cmVh
bSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1vZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVu
Z3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZlQWxwaGE9XCIiIDw8IG1fcHJlc2VydmVB
bHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2Nv
cGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjEzMzliYTdh
NmI2ZmVkMTFiZTE0YThiYzIyNjBhOWQxNjlkM2ZlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNSw2IEBACiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOCw3MCArMzgsMzAgQEAgZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZv
bHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAg
ICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25z
dCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShj
b25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25z
dCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQm
IGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYga2VybmVsTWF0cml4KTsKIAotICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2VybmVsU2l6ZTsgfQotICAgIHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpIHsg
bV9rZXJuZWxTaXplID0ga2VybmVsU2l6ZTsgfQorICAgIHZvaWQgc2V0RGl2aXNvcihmbG9hdCBk
aXZpc29yKSB7IG1fZGl2aXNvciA9IGRpdmlzb3I7IH0KKyAgICB2b2lkIHNldEJpYXMoZmxvYXQg
YmlhcykgeyBtX2JpYXMgPSBiaWFzOyB9CisgICAgdm9pZCBzZXRUYXJnZXRPZmZzZXQoY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCkgeyBtX3RhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldDsg
fQorICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1v
ZGUgPSBlZGdlTW9kZTsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoKSB7IG1fa2VybmVsVW5pdExlbmd0aCA9IGtlcm5lbFVu
aXRMZW5ndGg7IH0KKyAgICB2b2lkIHNldFByZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhh
KSB7IG1fcHJlc2VydmVBbHBoYSA9IHByZXNlcnZlQWxwaGE7IH0KKyAgICB2b2lkIHNldEtlcm5l
bE1hdHJpeChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpIHsgbV9rZXJuZWxNYXRy
aXggPSBrZXJuZWxNYXRyaXg7IH0KIAotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsTWF0cml4OyB9Ci0gICAgdm9pZCBzZXRLZXJuZWwoY29u
c3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgZmxvYXQgZGl2aXNvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZGl2aXNvcjsgfQotICAgIGJvb2wgc2V0RGl2aXNvcihmbG9hdCk7Ci0KLSAgICBmbG9hdCBi
aWFzKCkgY29uc3QgeyByZXR1cm4gbV9iaWFzOyB9Ci0gICAgYm9vbCBzZXRCaWFzKGZsb2F0KTsK
LQotICAgIEludFBvaW50IHRhcmdldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0T2Zm
c2V0OyB9Ci0gICAgYm9vbCBzZXRUYXJnZXRPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKLQotICAg
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KLSAg
ICBib29sIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBGbG9hdFBvaW50IGtlcm5l
bFVuaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IH0KLSAgICBi
b29sIHNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgYm9vbCBw
cmVzZXJ2ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyB9Ci0gICAgYm9v
bCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVDb252b2x2ZU1hdHJpeD4+IGRlY29kZShEZWNvZGVy
Jik7CiAKIHByaXZhdGU6CisgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJu
ZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0
T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsK
IAotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAg
ZmxvYXQgYmlhczsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsK
LQotICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBm
bG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4Ijsg
fQotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhh
VmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFp
bnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGlu
dCB5RW5kKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRp
bmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTMsNSArNzMsODAgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8ZmxvYXQ+IG1fa2VybmVsTWF0cml4OwogfTsKIAordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbFNpemU7CisgICAgZW5jb2RlciA8PCBt
X2Rpdmlzb3I7CisgICAgZW5jb2RlciA8PCBtX2JpYXM7CisgICAgZW5jb2RlciA8PCBtX3Rhcmdl
dE9mZnNldDsKKyAgICBlbmNvZGVyIDw8IG1fZWRnZU1vZGU7CisgICAgZW5jb2RlciA8PCBtX2tl
cm5lbFVuaXRMZW5ndGg7CisgICAgZW5jb2RlciA8PCBtX3ByZXNlcnZlQWxwaGE7CisgICAgZW5j
b2RlciA8PCBtX2tlcm5lbE1hdHJpeDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8UmVmPEZFQ29udm9sdmVNYXRyaXg+PiBGRUNvbnZvbHZlTWF0cml4OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IGtlcm5l
bFNpemU7CisgICAgZGVjb2RlciA+PiBrZXJuZWxTaXplOworICAgIGlmICgha2VybmVsU2l6ZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IGRpdmlzb3I7CisgICAgZGVjb2RlciA+PiBkaXZpc29yOworICAgIGlmICghZGl2aXNvcikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJp
YXM7CisgICAgZGVjb2RlciA+PiBiaWFzOworICAgIGlmICghYmlhcykKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IHRhcmdldE9mZnNl
dDsKKyAgICBkZWNvZGVyID4+IHRhcmdldE9mZnNldDsKKyAgICBpZiAoIXRhcmdldE9mZnNldCkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8RWRnZU1v
ZGVUeXBlPiBlZGdlTW9kZTsKKyAgICBkZWNvZGVyID4+IGVkZ2VNb2RlOworICAgIGlmICghZWRn
ZU1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UG9pbnQ+IGtlcm5lbFVuaXRMZW5ndGg7CisgICAgZGVjb2RlciA+PiBrZXJuZWxVbml0
TGVuZ3RoOworICAgIGlmICgha2VybmVsVW5pdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gcHJlc2VydmVBbHBoYTsKKyAgICBk
ZWNvZGVyID4+IHByZXNlcnZlQWxwaGE7CisgICAgaWYgKCFrZXJuZWxVbml0TGVuZ3RoKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8Zmxv
YXQ+PiBrZXJuZWxNYXRyaXg7CisgICAgZGVjb2RlciA+PiBrZXJuZWxNYXRyaXg7CisgICAgaWYg
KCFrZXJuZWxNYXRyaXgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKCprZXJuZWxTaXplLCAqZGl2aXNvciwgKmJpYXMs
ICp0YXJnZXRPZmZzZXQsICplZGdlTW9kZSwgKmtlcm5lbFVuaXRMZW5ndGgsICpwcmVzZXJ2ZUFs
cGhhLCBXVEZNb3ZlKCprZXJuZWxNYXRyaXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpFZGdlTW9kZVR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
ICAgICBXZWJDb3JlOjpFZGdlTW9kZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVf
VU5LTk9XTiwKKyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVfRFVQTElDQVRFLAorICAgICAgICBX
ZWJDb3JlOjpFREdFTU9ERV9XUkFQLAorICAgICAgICBXZWJDb3JlOjpFREdFTU9ERV9OT05FCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVDb252b2x2ZU1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHAKaW5kZXggZWViMTcyOGRiMzVlOGFjMzAyYjI3ZTRjM2ZmMzRjYjg4NTViOWQwOS4uNWI1M2Qz
NTY2YTlhODY2ZjY0ZDk4OGU4ODcyNWJiZWJjZjE0ZjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjcsMzYgKzI4LDI3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaWZmdXNl
TGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIERpZmZ1
c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQs
IDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdo
dFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKK1JlZjxGRURpZmZ1c2VMaWdodGluZz4g
RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlKQogeworICAgIHJl
dHVybiBjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBr
ZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSk7CiB9
CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxG
RURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlKQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBk
aWZmdXNlQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAK
LUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJv
b2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29u
c3RhbnQpCitGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3Im
IGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmIHNvdXJjZSkK
KyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBz
cGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcp
CiB7Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50
OwotICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAg
ICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwi
ICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8
PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRM
ZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0
dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYz
ZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4uMjBjNzgwYzUyMmZjOTlkZjM4ZmI5MTE1ZDJhMGMw
ZmY2YmY0ZDc2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwyMSArMjYsMjUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMaWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNl
TGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVE
aWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQo
ZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBD
b2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0
ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYp
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFRGlmZnVzZUxpZ2h0
aW5nPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJik7CisgICAgCisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRURpZmZ1c2VMaWdodGluZz4+IEZFRGlmZnVzZUxp
Z2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGlu
Zzo6ZGVjb2RlPERlY29kZXIsIEZFRGlmZnVzZUxpZ2h0aW5nPihkZWNvZGVyKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0
NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNmYTEuLjliMTljNzY5ZDM2MGI2YzRm
ZjI5YmIwYmZlNTFhMzk2ZjFkZjQ2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBA
IC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMzIgKzI1LDQ2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIK
IAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYgZmlsdGVyLCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpEaXNwbGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxT
ZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQotICAg
ICwgbV9zY2FsZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRN
YXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5u
ZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3Bs
YWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhD
aGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCBzY2FsZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVu
dE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7
Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3Qg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3hDaGFu
bmVsU2VsZWN0b3IgPT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29u
c3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3lD
aGFubmVsU2VsZWN0b3IgPT0geUNoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxl
KQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5
cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCBzY2FsZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRURpc3BsYWNlbWVudE1h
cCkKKyAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV95
Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBtX3NjYWxlKHNjYWxlKQog
ewotICAgIGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9zY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
Citjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjppbWFnZUNv
bG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKICAgICAv
LyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycgcHJvcGVydHkgb25seSBh
cHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBw
bHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCBy
ZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4KICAgICAvLyBUaGUgcmVz
dWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2Vt
ZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JT
cGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsKLX0KLQotdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGlu
LCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3Qg
cHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAg
ICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwor
ICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmNv
bG9yU3BhY2UoKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhl
bCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKK0Zsb2F0UmVjdCBG
RURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBp
eGVsID0gNDsKLSAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
OwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQor
RmlsdGVySW1hZ2VWZWN0b3IgRkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMoRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwot
Ci0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2FsY3Vs
YXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1l
ZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFj
ZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7
Ci0gICAgCi0gICAgaWYgKCFpbnB1dEltYWdlIHx8ICFkaXNwbGFjZW1lbnRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNl
bWVudEltYWdlLT5sZW5ndGgoKSk7Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRl
cigpOwotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEZsb2F0
U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3NjYWxlLCBt
X3NjYWxlIH0pOwotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1
NS4wOwotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsK
LSAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKLSAg
ICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7Ci0gICAg
Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOwotICAgIGlu
dCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKLQotICAgIGludCByb3dC
eXRlcyA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
cGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9
IHkgKiByb3dCeXRlczsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53
aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0
YXJ0T2Zmc2V0ICsgeCAqIDQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBzcmNYID0g
eCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zm
c2V0WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRp
c3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwotCi0gICAgICAgICAgICB1bnNp
Z25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwg
MCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvblBpeGVsUHRyID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNy
Y1gsIHNyY1ksIHJvd0J5dGVzKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKHN0YWNr
LnNpemUoKSA+PSAyKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpLCBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpAQCAtMTc0LDE3ICs4OSwxMiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hh
bm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBG
RURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
RmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVE
aXNwbGFjZW1lbnRNYXAiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc2NhbGU9XCIiIDw8IG1fc2NhbGUg
PDwgIlwiICIKICAgICAgICA8PCAieENoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV94Q2hhbm5lbFNl
bGVjdG9yIDw8ICJcIiAiCiAgICAgICAgPDwgInlDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feUNo
YW5uZWxTZWxlY3RvciA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBkZDczMmE4ODEwNzNlMjY2YmM4NDZhZmU2ODE5ZTY3
NTE2MjNhM2EyLi5jZjA0NmVlYjAwOTY4NGIzNWQzZGZmMDU3MjE5YWM4YjA5MGRiY2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIzLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMzggKzM2LDgx
IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNzIEZFRGlzcGxhY2VtZW50TWFw
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpc3Bs
YWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2Fs
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3Jl
YXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0
b3I7IH0KLSAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9y
VHlwZSk7CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvcikgeyBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNl
bGVjdG9yOyB9CisgICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcikgeyBtX3lDaGFubmVsU2VsZWN0b3IgPSB5Q2hhbm5l
bFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSkgeyBtX3NjYWxlID0g
c2NhbGU7IH0KIAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvcjsgfQotICAgIGJvb2wgc2V0WUNoYW5uZWxT
ZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKLQotICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwotCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVEaXNwbGFjZW1lbnRNYXA+PiBkZWNvZGUoRGVjb2Rl
ciYpOwogCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5l
bFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9y
VHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0
b3IsIGZsb2F0IHNjYWxlKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVEaXNwbGFjZW1lbnRNYXAiOyB9CisgICAgaW50IHhDaGFubmVsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlD
aGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rv
ciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5u
ZWxTZWxlY3RvciAtIDE7IH0KKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRl
ckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29m
dHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxl
Y3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feUNoYW5uZWxTZWxlY3RvcjsKICAgICBm
bG9hdCBtX3NjYWxlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yOworICAgIGVuY29kZXIgPDwgbV95Q2hhbm5lbFNlbGVj
dG9yOworICAgIGVuY29kZXIgPDwgbV9zY2FsZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRGlzcGxhY2VtZW50TWFwPj4gRkVEaXNwbGFjZW1lbnRN
YXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhbm5l
bFNlbGVjdG9yVHlwZT4geENoYW5uZWxTZWxlY3RvcjsKKyAgICBkZWNvZGVyID4+IHhDaGFubmVs
U2VsZWN0b3I7CisgICAgaWYgKCF4Q2hhbm5lbFNlbGVjdG9yKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDaGFubmVsU2VsZWN0b3JUeXBlPiB5Q2hh
bm5lbFNlbGVjdG9yOworICAgIGRlY29kZXIgPj4geUNoYW5uZWxTZWxlY3RvcjsKKyAgICBpZiAo
IXlDaGFubmVsU2VsZWN0b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBzY2FsZTsKKyAgICBkZWNvZGVyID4+IHNjYWxlOworICAgIGlm
ICghc2NhbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVE
aXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSgqeENoYW5uZWxTZWxlY3RvciwgKnlDaGFubmVsU2VsZWN0
b3IsICpzY2FsZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q2hhbm5lbFNlbGVj
dG9yVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNv
cmU6OkNoYW5uZWxTZWxlY3RvclR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9VTktO
T1dOLAorICAgICAgICBXZWJDb3JlOjpDSEFOTkVMX1IsCisgICAgICAgIFdlYkNvcmU6OkNIQU5O
RUxfRywKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9CLAorICAgICAgICBXZWJDb3JlOjpDSEFO
TkVMX0EKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURpc3BsYWNlbWVudE1hcCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3ODlmNmJiZGQ4Li5lYmI4YTNi
NmRjNWVmMGExMjdlYjdkMDAxNjNkNDhmYTQ2YmUyOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIy
LDE5ICsyMywyMyBAQAogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJ
bWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0
ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwgbV9z
dGRZKHN0ZFkpCisKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0
IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGREZXZpYXRpb25YLCBzdGREZXZpYXRp
b25ZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNo
YWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlv
blksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBz
aGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRvdykKKyAg
ICAsIG1fc3RkRGV2aWF0aW9uWChzdGREZXZpYXRpb25YKQorICAgICwgbV9zdGREZXZpYXRpb25Z
KHN0ZERldmlhdGlvblkpCiAgICAgLCBtX2R4KGR4KQogICAgICwgbV9keShkeSkKICAgICAsIG1f
c2hhZG93Q29sb3Ioc2hhZG93Q29sb3IpCkBAIC00MiwxMDAgKzQ3LDQ2IEBAIEZFRHJvcFNoYWRv
dzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBm
bG9hdCBkeCwgZmxvCiB7CiB9CiAKLVJlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKK0lu
dE91dHNldHMgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwg
ZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Ci19Ci0KLXZvaWQgRkVEcm9wU2hhZG93
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0
aGlzLT5maWx0ZXIoKTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9m
ZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWlu
dFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9
KSk7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3Qp
OwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtl
cm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgLy8gV2UgdGFrZSB0
aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3
ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0
ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xp
cHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1h
eEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2
aWF0aW9uWSB9KTsKKyAgICByZXR1cm4geworICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNl
dFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRT
aXplLndpZHRoKCkgKyBtX2R4KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXpl
LmhlaWdodCgpICsgbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53
aWR0aCgpIC0gbV9keCkKKyAgICB9OwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEp
OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotICAgIEZp
bHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgaW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0
cnkucmVzb2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIAotICAgIEZsb2F0U2l6
ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fZHgsIG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5n
UmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFk
b3dPcGFjaXR5KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1h
Z2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhh
KDEpOwotCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwg
bV9zaGFkb3dDb2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3Vs
dENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1
bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdElt
YWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBw
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291
cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZl
ci0+c2l6ZSgpLndpZHRoKCkpOworICAgIGltYWdlUmVjdC51bml0ZShpbnB1dHNbMF0tPmltYWdl
UmVjdCgpKTsKICAgICAKLSAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBzaGFkb3dBcmVhKTsKLQotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxs
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSks
IG1fc2hhZG93Q29sb3IpOwotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOworICAgIEludFNpemUga2VybmVs
U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKHsgbV9zdGREZXZpYXRp
b25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgCisgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCisgICAgaW1hZ2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUu
aGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7CisgICAgcmV0dXJuIGdlb21ldHJ5
LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lv
bik7CiB9CiAKLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKK0ZpbHRl
ckltYWdlVmVjdG9yIEZFRHJvcFNoYWRvdzo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICByZXR1cm4gewot
ICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKLSAg
ICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKLSAgICAg
ICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpICsgbV9keSksCi0gICAgICAg
IHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCkKLSAgICB9OworICAg
IEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgp
IH07CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIi
IDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxv
b2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5l
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkRGV2aWF0aW9uWCA8PCAiLCAiIDw8IG1fc3RkRGV2aWF0
aW9uWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBm
bG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFk
b3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmRmOTAxNzQ3OGEwMjBmNGVhMWZhODRj
ZWJjYjM2ODg3NGRmYTBlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw1MyArMjEsOTIgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZp
YXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7
CiAKLSAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9Ci0g
ICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQot
Ci0gICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCBzdGRZKSB7IG1fc3RkWSA9IHN0ZFk7IH0KLQot
ICAgIGZsb2F0IGR4KCkgY29uc3QgeyByZXR1cm4gbV9keDsgfQorICAgIHZvaWQgc2V0U3RkRGV2
aWF0aW9uWChmbG9hdCBzdGREZXZpYXRpb25YKSB7IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlh
dGlvblg7IH0KKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkg
eyBtX3N0ZERldmlhdGlvblkgPSBzdGREZXZpYXRpb25ZOyB9CiAgICAgdm9pZCBzZXREeChmbG9h
dCBkeCkgeyBtX2R4ID0gZHg7IH0KLQotICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9k
eTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9Ci0KLSAgICBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9yOyB9IAog
ICAgIHZvaWQgc2V0U2hhZG93Q29sb3IoY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKSB7IG1fc2hh
ZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsgfQotCi0gICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0
eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7
IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZWY8RkVEcm9wU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBGRURy
b3BTaGFkb3coRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
JiwgZmxvYXQpOworICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBz
dGREZXZpYXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3Bh
Y2l0eSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFRHJvcFNoYWRvdyI7IH0KKyAgICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBmbG9hdCBtX3N0ZFg7Ci0gICAgZmxvYXQgbV9zdGRZOworICAgIGZs
b2F0IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBmbG9hdCBtX3N0ZERldmlhdGlvblk7CiAgICAgZmxv
YXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwogICAgIENvbG9yIG1fc2hhZG93Q29sb3I7CiAgICAg
ZmxvYXQgbV9zaGFkb3dPcGFjaXR5OwogfTsKLSAgICAKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KK3ZvaWQgRkVEcm9wU2hhZG93OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2
aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5OworICAg
IGVuY29kZXIgPDwgbV9zaGFkb3dDb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fc2hhZG93T3BhY2l0
eTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRHJv
cFNoYWRvdz4+IEZFRHJvcFNoYWRvdzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWDsKKyAgICBkZWNvZGVyID4+IHN0ZERl
dmlhdGlvblg7CisgICAgaWYgKCFzdGREZXZpYXRpb25YKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWTsKKyAgICBk
ZWNvZGVyID4+IHN0ZERldmlhdGlvblk7CisgICAgaWYgKCFzdGREZXZpYXRpb25ZKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHg7Cisg
ICAgZGVjb2RlciA+PiBkeDsKKyAgICBpZiAoIWR4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHk7CisgICAgZGVjb2RlciA+PiBkeTsK
KyAgICBpZiAoIWR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxDb2xvcj4gc2hhZG93Q29sb3I7CisgICAgZGVjb2RlciA+PiBzaGFkb3dDb2xvcjsK
KyAgICBpZiAoIXNoYWRvd0NvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hhZG93T3BhY2l0eTsKKyAgICBkZWNvZGVyID4+IHNo
YWRvd09wYWNpdHk7CisgICAgaWYgKCFzaGFkb3dPcGFjaXR5KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCpzdGREZXZpYXRp
b25YLCAqc3RkRGV2aWF0aW9uWSwgKmR4LCAqZHksICpzaGFkb3dDb2xvciwgKnNoYWRvd09wYWNp
dHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBiNDIzNTUzNGMzOGIx
ZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi45MWE4ODU3NmQzMzVlYjFlOTA4YjQ0M2VjMmUx
OWUwZDkzMzUwNTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNTYg
KzI1LDMzIEBACiAjaW5jbHVkZSAiRkVGbG9vZC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxp
emF0aW9uLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkK
LSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENv
bG9yKGZsb29kQ29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCi17Ci19
Ci0KLVJlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVGbG9v
ZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChjb2xvciwgb3BhY2l0eSkpOwog
fQogCi1ib29sIEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX2Zsb29kQ29sb3IgPSBjb2xvcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUZs
b29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQorRkVGbG9vZDo6RkVGbG9v
ZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFRmxvb2QpCisgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikK
KyAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKLSAgICBpZiAobV9mbG9vZE9w
YWNpdHkgPT0gZmxvb2RPcGFjaXR5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9v
ZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUZsb29kOjpjYWxjdWxh
dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAog
ewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBj
b2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNp
dHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1
cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8
PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAg
ICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAg
ICB0cyA8PCAiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChtX2Zsb29kQ29sb3IpIDw8ICJcIiAiIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBtX2Zs
b29kT3BhY2l0eSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0
ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2MTczNDhlLi43YTVkY2JkMzc5MWUxODAxNjQw
NWZlOGI0MWZjODBlM2Q3YjhkYTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0MiArMjMsNjIgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVh
dGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAot
ICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9y
OyB9Ci0gICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRG
bG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2Zsb29kQ29sb3IgPSBjb2xvcjsgfQor
ICAgIHZvaWQgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkgeyBtX2Zsb29kT3Bh
Y2l0eSA9IGZsb29kT3BhY2l0eTsgfQogCi0gICAgZmxvYXQgZmxvb2RPcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mbG9vZE9wYWNpdHk7IH0KLSAgICBib29sIHNldEZsb29kT3BhY2l0eShmbG9h
dCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJl
ZjxGRUZsb29kPj4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBGRUZsb29kKGNv
bnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxv
b2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0
aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJl
Z2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAg
ICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRS
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBv
dmVycmlkZSB7IH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29u
c3QgQ29sb3ImLCBmbG9hdCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIkZFRmxvb2QiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3IgbV9mbG9vZENvbG9yOwogICAgIGZsb2F0
IG1fZmxvb2RPcGFjaXR5OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVG
bG9vZDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBt
X2Zsb29kQ29sb3I7CisgICAgZW5jb2RlciA8PCBtX2Zsb29kT3BhY2l0eTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRmxvb2Q+PiBGRUZsb29kOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmbG9v
ZENvbG9yOworICAgIGRlY29kZXIgPj4gZmxvb2RDb2xvcjsKKyAgICBpZiAoIWZsb29kQ29sb3Ip
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBmbG9vZE9wYWNpdHk7CisgICAgZGVjb2RlciA+PiBmbG9vZE9wYWNpdHk7CisgICAgaWYgKCFm
bG9vZE9wYWNpdHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
RkVGbG9vZDo6Y3JlYXRlKCpmbG9vZENvbG9yLCAqZmxvb2RPcGFjaXR5KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2Yz
NmViYjZiYmI4YWIzNjM5NDM2NS4uYmQzNGMwMmQyMTc5NjU5MGVjY2ZiYzRmNWQ5ZjIzYjczZGRj
YzIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjYsNDUwICsyNiw0MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAg
ICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0
IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxp
bmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1
cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4g
RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZp
YXRpb25ZLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRl
dGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAg
ICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8g
MiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAg
ICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAg
ICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAy
KSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFR2F1c3NpYW5CbHVyKHN0ZERldmlhdGlvblgsIHN0ZERldmlhdGlvblksIGVkZ2VNb2RlKSk7
CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxv
YXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQotICAgICwgbV9zdGRYKHgpCi0gICAgLCBtX3N0
ZFkoeSkKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCBzdGREZXZpYXRpb25Y
LCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0
ZXJFZmZlY3QoVHlwZTo6RkVHYXVzc2lhbkJsdXIpCisgICAgLCBtX3N0ZERldmlhdGlvblgoc3Rk
RGV2aWF0aW9uWCkKKyAgICAsIG1fc3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKQogICAgICwg
bV9lZGdlTW9kZShlZGdlTW9kZSkKIHsKIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNz
aWFuQmx1cjo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJs
dXIoZmlsdGVyLCB4LCB5LCBlZGdlTW9kZSkpOwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpCi17Ci0gICAgbV9zdGRYID0geDsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQotewotICAgIG1fc3RkWSA9
IHk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Ci19Ci0KLS8vIFRoaXMgZnVu
Y3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFubmVsLgotaW5saW5lIHZvaWQgYm94Qmx1
ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhD
bGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0
LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0
V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCi17Ci0g
ICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVp
bnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKLSAgICAvLyBNZW1vcnkgYWxp
Z25tZW50IGlzOiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgotICAgIGNvbnN0IGludCBjaGFubmVs
ID0gMzsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAg
ICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAgICAgICAgaW50IHN1bSA9IDA7Ci0K
LSAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1heEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGlu
ZSArIGkgKiBzdHJpZGU7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgb2Zmc2V0OwotICAgICAgICAgICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IGxpbmUgKyB4ICogc3RyaWRlICsgY2hhbm5lbDsKLSAgICAgICAgICAgIHVpbnQ4X3QqIGRz
dFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0gICAgICAgICAgICAqZHN0UHRyID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtIC8gZHgpOwotCi0gICAgICAgICAgICAvLyBTaGlmdCBr
ZXJuZWwuCi0gICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zm
c2V0OwotICAgICAgICAgICAgICAgIHN1bSAtPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0
cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsg
cmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtICs9ICpzcmNQdHI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhl
bEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0
cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwg
Ym9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgY29uc3QgaW50
IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7Ci0gICAgaWYg
KGFscGhhSW1hZ2UpCi0gICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQXJy
YXksIGRzdFBpeGVsQXJyYXksIGR4LCBkeExlZnQsIGR4UmlnaHQsIHN0cmlkZSwgc3RyaWRlTGlu
ZSwgIGVmZmVjdFdpZHRoLCBlZmZlY3RIZWlnaHQsIG1heEtlcm5lbFNpemUpOwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVpbnQ4X3Qq
IGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIC8vIENvbmNlcm5pbmcgdGhl
IGFycmF5IHdpZHRoL2xlbmd0aDogaXQgaXMgRWxlbWVudCBzaXplICsgTWFyZ2luICsgQm9yZGVy
LiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3aWxsIGJlCi0gICAgLy8gUCA9IHdpZHRoICogaGVpZ2h0
ICogY2hhbm5lbHMuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkg
ewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtUiA9
IDAsIHN1bUcgPSAwLCBzdW1CID0gMCwgc3VtQSA9IDA7Ci0KLSAgICAgICAgaWYgKGVkZ2VNb2Rl
ID09IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAg
ICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1HICs9ICpz
cmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAg
ICAgICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJs
dXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4
KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHgg
KiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBp
eGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIg
PSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8g
U2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhM
ZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIg
PSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQ
dHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAt
PSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHgg
KyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBz
cmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgaGVyZS4KLSAgICAgICAgICAgIC8v
IEdldCBlZGdlIHZhbHVlcyBmb3IgZWRnZU1vZGUgJ2R1cGxpY2F0ZScuCi0gICAgICAgICAgICBj
b25zdCB1aW50OF90KiBlZGdlVmFsdWVMZWZ0ID0gc3JjRGF0YSArIGxpbmU7Ci0gICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVSaWdodCAgPSBzcmNEYXRhICsgKGxpbmUgKyAoZWZm
ZWN0V2lkdGggLSAxKSAqIHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5l
bC4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBkeExlZnQgKiAtMTsgaSA8IGR4UmlnaHQ7ICsr
aSkgewotICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgcmlnaHQgZm9yIG5lZ2F0aXZlIHZhbHVl
cyBvZiAnaSc/Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBz
dHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IG9mZnNldDsKLQotICAgICAgICAgICAgICAgIGlmIChpIDwgMCkgewotICAgICAgICAgICAgICAg
ICAgICBzdW1SICs9IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
Kz0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFs
dWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZUxlZnRbM107
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID49IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIg
Kz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZh
bHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0
cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhl
bEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICB1aW50OF90
KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotCi0gICAgICAgICAgICAgICAg
KmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAg
ICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOwotICAgICAg
ICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0g
ICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYg
KHggPCBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBlZGdlVmFsdWVMZWZ0
WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUIgLT0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQSAtPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZz
ZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1S
IC09IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BIC09IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoeCArIGR4UmlnaHQgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
c3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBl
ZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVS
aWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
aWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNy
Y1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94Qmx1cihVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQp
Ci17Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGVmZmVjdFdpZHRoIDw9IDAgfHwgZWZmZWN0SGVpZ2h0IDw9IDAgfHwgc3RyaWRlIDw9
IDApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBtdXN0IGFsd2F5cyB1c2UgYW4gb2RkIHJhZGl1cy4KLSAgICBpZiAo
a2VybmVsU2l6ZSAlIDIgIT0gMSkKLSAgICAgICAga2VybmVsU2l6ZSArPSAxOwotCi0gICAgdklt
YWdlX0J1ZmZlciBlZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KGlvQnVmZmVyLmRhdGEoKSk7Ci0gICAgZWZmZWN0SW5CdWZmZXIud2lk
dGggPSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWln
aHQ7Ci0gICAgZWZmZWN0SW5CdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsKLSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBC
dWZmZXIuZGF0YSgpOwotICAgIGVmZmVjdE91dEJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwot
ICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0T3V0
QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzaXplIG9m
IGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBmaXJzdCB3aXRoIGEg
c3BlY2lhbCBmbGFnLiB2SW1hZ2Ugd2lsbCByZXR1cm4KLSAgICAvLyB0aGUgc2l6ZSBuZWVkZWQs
IG9yIGFuIGVycm9yICh3aGljaCBhcmUgYWxsIG5lZ2F0aXZlKS4KLSAgICBzaXplX3QgdG1wQnVm
ZmVyU2l6ZSA9IHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVm
ZmVjdE91dEJ1ZmZlciwgMCwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQgfCBrdkltYWdlR2V0VGVtcEJ1ZmZlclNpemUpOwotICAgIGlmICh0bXBCdWZm
ZXJTaXplIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIHRtcEJ1ZmZlciA9IGZh
c3RNYWxsb2ModG1wQnVmZmVyU2l6ZSk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgo
JmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5l
bFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0T3V0QnVmZmVyLCAmZWZmZWN0SW5CdWZmZXIsIHRtcEJ1
ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQp
OwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVj
dE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgV1RGOjpmYXN0RnJlZSh0bXBCdWZmZXIpOwotCi0gICAg
Ly8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIEFT
U0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0aCgpKTsKLSAgICBtZW1j
cHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkp
OwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBh
aW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAg
ICBpbnQgZHhMZWZ0ID0gMDsKLSAgICBpbnQgZHhSaWdodCA9IDA7Ci0gICAgaW50IGR5TGVmdCA9
IDA7Ci0gICAgaW50IGR5UmlnaHQgPSAwOwotICAgIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBm
cm9tQnVmZmVyID0gJmlvQnVmZmVyOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9
ICZ0ZW1wQnVmZmVyOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAg
ICAgaWYgKGtlcm5lbFNpemVYKSB7Ci0gICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJu
ZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
Ci0gICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKLSAgICAgICAgICAgICAgICBib3hCbHVy
TkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0
LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1
ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUu
d2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAg
ICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6
OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtl
cm5lbFNpemVZKSB7Ci0gICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0KTsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgICAg
ICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKLSAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJv
bUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUs
IDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2Vy
bmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCks
IHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAgICAgICAgICAg
Ym94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlz
QWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6OnN3YXAoZnJv
bUJ1ZmZlciwgdG9CdWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGZpbmFs
IHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIGlmICgmaW9CdWZmZXIg
IT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJv
bUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9t
QnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLSAgICB9Ci19Ci0KLWlubGluZSB2
b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKLXsK
LSAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0gICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChtX2VkZ2VNb2Rl
ID09IEVER0VNT0RFX05PTkUgfHwgbV9lZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7
Ci0gICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhbmRhcmRCb3hCbHVyKGlv
QnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwg
cGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7Ci19Ci0KLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCi17Ci0gICAgSW50U2l6ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBh
cmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5
R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxB
cnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBw
YWludFNpemUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBs
eShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhl
bEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNp
emUmIHBhaW50U2l6ZSkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3NpYW5LZXJuZWxGYWN0b3Io
KQogewotI2lmICFVU0UoQUNDRUxFUkFURSkKLSAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRT
aXplLndpZHRoKCk7Ci0gICAgaW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41
ZjsKLSAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBh
aW50U2l6ZS5oZWlnaHQoKSkgLyAoc19taW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0
ICogcGFpbnRTaXplLndpZHRoKCkpOwotCi0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAx
KSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBw
YXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwot
Ci0gICAgICAgIGludCBqb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAg
ICBpZiAoam9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiYmxv
Y2tIZWlnaHQiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJl
IHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8gYmxvY2tIZWlnaHQgKiBqb2Jz
IDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIg
ImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IGJsb2NrSGVpZ2h0ID0gcGFp
bnRTaXplLmhlaWdodCgpIC8gam9iczsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4
dHJhID0gcGFpbnRTaXplLmhlaWdodCgpICUgam9iczsKLQotICAgICAgICAgICAgaW50IGN1cnJl
bnRZID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IDA7IGpvYiA8IGpvYnM7IGpvYisr
KSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVy
ID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGludCBzdGFydFkgPSAham9iID8gMCA6IGN1cnJl
bnRZIC0gZXh0cmFIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9i
c1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotICAgICAgICAgICAg
ICAgIGludCBlbmRZID0gam9iID09IGpvYnMgLSAxID8gY3VycmVudFkgOiBjdXJyZW50WSArIGV4
dHJhSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZSA9IChlbmRZIC0gc3Rh
cnRZKSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGlmICgham9iKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9CdWZmZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBpeGVsQXJyYXk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9
IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVt
Y3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSwgaW9CdWZmZXIuZGF0YSgpICsgc3RhcnRZ
ICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtl
cm5lbFNpemVYID0ga2VybmVsU2l6ZVg7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNp
emVZID0ga2VybmVsU2l6ZVk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIENvcHkgdG9nZXRoZXIgdGhlIHBhcnRz
IG9mIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIGN1cnJlbnRZID0gMDsKLSAgICAgICAgICAgIGZv
ciAoaW50IGpvYiA9IDE7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9i
KTsKLSAgICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0OwotICAgICAgICAgICAgICAgIGlu
dCBkZXN0aW5hdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAg
ICAgICAgICBpbnQgYWRqdXN0ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBi
bG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnRZ
ICs9IGFkanVzdGVkQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0g
ZXh0cmFIZWlnaHQgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNl
dCA9IGN1cnJlbnRZICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVk
QmxvY2tIZWlnaHQgKiBzY2FubGluZTsKLQotICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZl
ci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgp
ICsgc291cmNlT2Zmc2V0LCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9k
ZS4KLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5
IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgcGxhdGZv
cm1BcHBseUdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJu
ZWxTaXplWSwgcGFpbnRTaXplKTsKKyAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZs
b2F0KTsKIH0KIAogc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQog
ewogICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3
b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0CiAgICAg
Ly8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29t
cGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgorICAgIHN0YXRpYyBjb25zdCBpbnQgZ01h
eEtlcm5lbFNpemUgPSA1MDA7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVk
PigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxG
YWN0b3IoKSArIDAuNWYpKSk7CiAgICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXpl
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUpKSk7CiB9Ci0gICAgCi1JbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXpl
IHN0ZERldmlhdGlvbikKKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIEFTU0VS
VChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAw
KTsKICAgICBJbnRTaXplIGtlcm5lbFNpemU7CkBAIC00ODMsMTIgKzc0LDEyIEBAIEludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQogICAgIHJldHVybiBrZXJuZWxTaXplOwogfQogCi1JbnRTaXplIEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVs
U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3Vs
YXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3Rk
RGV2aWF0aW9uKSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24gLypmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikq
Lyk7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgYXV0byBrZXJu
ZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7CiAKQEAg
LTQ5Niw3MiArODcsNDMgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0
U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorSW50T3V0c2V0cyBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9z
dGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgcmV0dXJuIHsgb3V0c2V0U2l6
ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCkgfTsKK30KIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9
IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworRmxvYXRSZWN0IEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+
aW1hZ2VSZWN0KCk7CiAgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3Qg
aW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBF
REdFTU9ERV9OT05FKSB7Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAobV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKQorICAgICAgICByZXR1cm4gaW1hZ2VSZWN0
OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQg
d2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJz
b2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwot
ICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICog
MC41Zik7CisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRy
eS5yZXNvbHZlSW1hZ2VTaXplKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSkp
OwogCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3Qu
aW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBh
aW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgorICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6
ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7CiAKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01h
eFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFR2F1
c3NpYW5CbHVyOjppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykg
Y29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsK
LQotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNp
emUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAga2VybmVsU2l6ZS5zY2FsZShm
aWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRl
clNjYWxlKCkpOwotICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1w
SW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJ
bWFnZSgpOwogfQogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QK
K0ZpbHRlckltYWdlVmVjdG9yIEZFR2F1c3NpYW5CbHVyOjp0YWtlSW5wdXRzKEZpbHRlckltYWdl
VmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxh
dGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsgb3V0c2V0U2l6
ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCkgfTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlR2F1c3NpYW5CbHVyIjsKLSAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
LSAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRYIDw8ICIsICIgPDwgbV9zdGRZ
IDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGREZXZpYXRp
b25YIDw8ICIsICIgPDwgbV9zdGREZXZpYXRpb25ZIDw8ICJcIl1cbiI7CiAgICAgcmV0dXJuIHRz
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFh
YTE3NjQ3Y2JiMmQzZS4uMGU4ZTQ5ZDc4ZGEyNmQzY2ViNWZkZGI4ZWVjOTNjMTc2NGEyN2U3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiw2NCArMjMsNzMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5C
bHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdh
dXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxv
YXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgRWRnZU1vZGVUeXBlKTsKIAot
ICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2
b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChm
bG9hdCBzdGREZXZpYXRpb25YKSB7IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlhdGlvblg7IH0K
KyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkgeyBtX3N0ZERl
dmlhdGlvblkgPSBzdGREZXZpYXRpb25ZOyB9CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyB9CiAKLSAgICBmbG9hdCBz
dGREZXZpYXRpb25ZKCkgY29uc3QgeyByZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGRE
ZXZpYXRpb25ZKGZsb2F0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxj
dWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwor
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBz
dGREZXZpYXRpb24pOwogCi0gICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9lZGdlTW9kZTsgfQotICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKLQot
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxv
YXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXpl
IGNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUdhdXNzaWFuQmx1
cj4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmls
dGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KLQotICAg
IHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8g
RW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBGRUdhdXNzaWFuQmx1
cihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUp
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxs
ZWxKb2JzOworICAgIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVz
c2lhbkJsdXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1Bp
eGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJh
eTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNp
Z25lZCBrZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsK
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLQotICAgIGZsb2F0IG1fc3Rk
WDsKLSAgICBmbG9hdCBtX3N0ZFk7CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25YOworICAgIGZs
b2F0IG1fc3RkRGV2aWF0aW9uWTsKICAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKIH07CiAK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFR2F1c3NpYW5CbHVyOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWDsK
KyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8IG1fZWRnZU1v
ZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUdh
dXNzaWFuQmx1cj4+IEZFR2F1c3NpYW5CbHVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25YOworICAgIGRlY29kZXIgPj4g
c3RkRGV2aWF0aW9uWDsKKyAgICBpZiAoIXN0ZERldmlhdGlvblgpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25ZOwor
ICAgIGRlY29kZXIgPj4gc3RkRGV2aWF0aW9uWTsKKyAgICBpZiAoIXN0ZERldmlhdGlvblkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEVkZ2VNb2Rl
VHlwZT4gZWRnZU1vZGU7CisgICAgZGVjb2RlciA+PiBlZGdlTW9kZTsKKyAgICBpZiAoIWVkZ2VN
b2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFR2F1c3Np
YW5CbHVyOjpjcmVhdGUoKnN0ZERldmlhdGlvblgsICpzdGREZXZpYXRpb25ZLCAqZWRnZU1vZGUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRUdhdXNzaWFuQmx1cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjg4M2Q2YzVmYTJkZjE4N2JlMmFkOTgx
ZGZlNDc4M2VhYmExZTI1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsMzMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYgZmls
dGVyLCBMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291
cmNlLCBUeXBlIHR5cGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCB0eXBlKQotICAgICwg
bV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9saWdodFNvdXJjZShXVEZNb3Zl
KGxpZ2h0U291cmNlKSkKLSAgICAsIG1fbGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQorRkVM
aWdodGluZzo6RkVMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlLCBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkK
KyAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1f
c3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1
c2VDb25zdGFudCkKICAgICAsIG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQog
ICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5l
bFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3Ro
WShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsK
IH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxl
KQorRmxvYXRSZWN0IEZFTGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3VyZmFjZVNjYWxl
ID09IHN1cmZhY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zdXJmYWNl
U2NhbGUgPSBzdXJmYWNlU2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdo
dGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKLXsKLSAg
ICBpZiAobV9saWdodGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2Vy
bmVsVW5pdExlbmd0aFgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5p
dExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSkKLXsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3RleHByIGlu
dCBjUGl4ZWxTaXplID0gNDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZz
ZXQgPSAzOwotc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDB4RkYpOwotCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNv
ZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25z
dGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjQgPSAtMSAvIDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYz
ID0gLTIgLyAzLmY7Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICog
Y2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICog
Y2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
b2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0
b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIgKiBs
ZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9t
UmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0y
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIg
KyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07CisgICAgcmV0dXJuIGdl
b21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBv
ZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9y
IEZFTGlnaHRpbmc6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAog
ewotICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQ7Ci0gICAgCi0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSkpOwotCi0gICAgaW50IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExl
ZnQgPSBhbHBoYVdpbmRvdy50b3BMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRv
cCgpOwotCi0gICAgaW50IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0g
ICAgaW50IGJvdHRvbSA9IGFscGhhV2luZG93LmJvdHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhh
V2luZG93IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNv
bHVtbi4KLSAgICBhbHBoYVdpbmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhh
V2luZG93LmFscGhhWzFdWzJdID0gcmlnaHQ7Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0g
PSBib3R0b21SaWdodDsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBp
cyB3b3JraW5nIHdpdGggc29tZSBzcG90LWNoZWNrcy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cu
dG9wTGVmdCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAg
ICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQot
ICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIg
KiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAy
ICogdG9wIC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpy
aWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9w
IC0gMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAg
LXRvcExlZnQgLSAyICogdG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQot
Ci1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICog
Y2VudGVyICsgMiAqIHJpZ2h0LAotICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNl
bnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQg
cmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdo
dCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNl
bnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGlu
dCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9m
ZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAg
ICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExl
ZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKLSAgICB9OwotfQotCi12b2lkIEZFTGln
aHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17
Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
ZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFs
cGhhKQotewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExp
Z2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291
cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQot
ICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygp
KSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVp
dGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRp
bmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1
c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2lu
dDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgp
LAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGlu
Z0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9h
dCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAg
ICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5
VmVjdG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFs
ZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAg
ICBmYWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAot
ICAgICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJm
YWNlU2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5v
cm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAo
bV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndh
eVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3Vs
YXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAg
IGxpZ2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxp
Z2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5j
b2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+
c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKLX0KLQotLy8gVGhpcyBhcHBlYXJzIHRv
IHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25s
eSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5u
ZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZ
IGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4K
LSAgICBBU1NFUlQoc3RhcnRZKTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBm
b3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFy
dE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBp
bnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0
ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdp
bmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0
aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBj
ZW50ZXIgY29sdW1uLgotICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCBy
b3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cg
YWxwaGFXaW5kb3c7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRl
bShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBo
YVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRv
dy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5p
dGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJv
d1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRC
b3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9m
ZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0
aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAg
ICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQs
IGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNl
bnRlcigpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
aW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVy
cy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCByb3dzVG9Q
cm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7Ci0gICAgdW5zaWduZWQgbWF4
TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJl
YWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUg
LSAxKSAqIHJvd3NUb1Byb2Nlc3MpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhy
ZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIC8vIElu
aXRpYWxpemUgcGFyYWxsZWwgam9icwotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9y
bUFwcGx5R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBh
cmFtZXRlciBhcnJheQotICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9i
cygpOwotICAgICAgICBpZiAoam9iID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpv
YiBpbnRvICJ5U3RlcCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQg
dG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMg
PCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAi
am9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9j
ZXNzIC8gam9iOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Q
cm9jZXNzICUgam9iOwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAgICAgICAgICAg
IGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihq
b2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdE
YXRhID0gcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3Rh
cnQ7Ci0gICAgICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3Rl
cCArIDEgOiB5U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUuCi0gICAgfQotCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRh
LCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUpOwotfQotCi1pbmxp
bmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAg
IC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2Fs
bHkgb24gc29tZSBwbGF0Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJ
VElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVv
bihkYXRhLCBwYWludGluZ0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhk
YXRhLCBwYWludGluZ0RhdGEpOwotI2VuZGlmCi19Ci0KLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
LXsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdo
dGluZ0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3Ig
aGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90
IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAo
d2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNl
U2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdp
ZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAt
IDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29s
b3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFs
TGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwotCi0gICAg
bV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKLQot
ICAgIC8vIFRvcCBsZWZ0LgotICAgIGludCBvZmZzZXQgPSAwOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gVG9wIHJpZ2h0LgotICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFs
KG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAg
c2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3Jt
YWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMs
IGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICBpZiAod2lkdGggPj0gMykg
ewotICAgICAgICAvLyBUb3Agcm93LgotICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBv
ZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BS
b3dOb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gQm90dG9tIHJvdy4KLSAgICAgICAgb2Zm
c2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAg
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dO
b3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7Ci0gICAgICAg
IC8vIExlZnQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUp
Ci0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwg
Y0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQp
KTsKLQotICAgICAgICAvLyBSaWdodCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IDIgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChp
bnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0Zh
Y3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7
Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKLSAgICAgICAg
Ly8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBhaW50aW5n
RGF0YSk7Ci0gICAgfQotCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VM
aWdodGluZykgewotICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8
IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNl
dChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3Qg
YTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRh
LnBpeGVscy0+aXRlbShpICsgMSk7Ci0gICAgICAgICAgICB1aW50OF90IGEzID0gZGF0YS5waXhl
bHMtPml0ZW0oaSArIDIpOwotICAgICAgICAgICAgLy8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgo
YTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEy
ID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7
Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11
bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0
TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwot
ICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93
c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91
cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUu
Ci0gICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1w
bGVtZW50YXRpb24KLQotICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5
LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VM
YXN0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCAwZmZm
Y2QwNjQzOTZkOGY0YjY0MDgyMjY5Y2MyMDc0ZjdjOWRiZGJjLi5hMWZkYzMzMDQwMDYyMGI1YmQy
OTc3ZThlMjg0ZDA2YTA4YjlkYzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3LDE0MiArMjgsMTA0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAi
TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8v
IENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxp
Z2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGlu
Z0RhdGFGb3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQotCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNl
U2NhbGU7IH0KLSAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CisgICAgdm9pZCBzZXRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisgICAgdm9pZCBz
ZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3Vy
ZmFjZVNjYWxlOyB9CisgICAgdm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNv
bnN0YW50KSB7IG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OyB9CiAKLSAgICBj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xv
cjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQg
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3VsYXJD
b25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxh
ckV4cG9uZW50OyB9CiAKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhY
KGZsb2F0KTsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYKSB7IG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsgfQorICAg
IHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpIHsgbV9r
ZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOyB9CiAKLSAgICBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KLSAg
ICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKKyAgICBjb25zdCBMaWdodFNvdXJj
ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KIAotICAgIGNvbnN0IExpZ2h0
U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7
IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2RlciwgY2xhc3MgQ2xhc3NOYW1lPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8Q2xhc3NOYW1lPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVu
dW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVj
dWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAg
ICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBp
bXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFz
aWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQo
KSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4
X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0g
ICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhh
WzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsg
cmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1
ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2Vu
dGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAg
ICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFs
dWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFs
cGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVl
KSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9t
UmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAg
IHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhh
WzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3co
YWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVj
dHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAg
ICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERl
Y3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5k
b3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7
Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlF
bmQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2Vy
KFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAg
ICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5
cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRUxpZ2h0aW5nIjsgfQotCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJy
YXkmLCBpbnQsIGludCk7Ci0KLSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50
IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsK
LSAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQg
ZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhh
KTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSYpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQg
c3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lm
IENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NP
TVBBVElCTEUpCi0gICAgc3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBv
bmVudCk7Ci0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdE
YXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBM
aWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0
U291cmNlOwotCi0gICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOworICAgIEZFTGlnaHRpbmcoY29u
c3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmLCBGaWx0
ZXJFZmZlY3Q6OlR5cGUpOworCisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZp
bHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgQ29sb3IgbV9jb2xvcjsKICAgICBmbG9hdCBtX3N1cmZh
Y2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1
bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1f
a2VybmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBM
aWdodFNvdXJjZSBtX3NvdXJjZTsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFTGlnaHRpbmc6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1f
c3VyZmFjZVNjYWxlOworICAgIGVuY29kZXIgPDwgbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAgZW5j
b2RlciA8PCBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAgZW5jb2RlciA8PCBtX3NwZWN1bGFyRXhw
b25lbnQ7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYOworICAgIGVuY29kZXIg
PDwgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBlbmNvZGVyIDw8IG1fc291cmNlOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyLCBjbGFzcyBDbGFzc05hbWU+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxDbGFzc05hbWU+PiBGRUxpZ2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAg
IGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzdXJmYWNlU2NhbGU7CisgICAgZGVjb2RlciA+PiBzdXJmYWNlU2NhbGU7
CisgICAgaWYgKCFzdXJmYWNlU2NhbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAgZGVjb2RlciA+
PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAgaWYgKCFkaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzcGVjdWxhckNv
bnN0YW50OworICAgIGRlY29kZXIgPj4gc3BlY3VsYXJDb25zdGFudDsKKyAgICBpZiAoIXNwZWN1
bGFyQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzcGVjdWxhckV4cG9uZW50OworICAgIGRlY29kZXIgPj4gc3BlY3VsYXJF
eHBvbmVudDsKKyAgICBpZiAoIXNwZWN1bGFyRXhwb25lbnQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBrZXJuZWxVbml0TGVuZ3RoWDsK
KyAgICBkZWNvZGVyID4+IGtlcm5lbFVuaXRMZW5ndGhYOworICAgIGlmICgha2VybmVsVW5pdExl
bmd0aFgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBrZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBkZWNvZGVyID4+IGtlcm5lbFVuaXRMZW5n
dGhZOworICAgIGlmICgha2VybmVsVW5pdExlbmd0aFkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPExpZ2h0U291cmNlPiBzb3VyY2U7CisgICAgZGVj
b2RlciA+PiBzb3VyY2U7CisgICAgaWYgKCFzb3VyY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4gQ2xhc3NOYW1lOjpjcmVhdGUoKmNvbG9yLCAqc3VyZmFjZVNj
YWxlLCAqZGlmZnVzZUNvbnN0YW50LCAqc3BlY3VsYXJDb25zdGFudCwgKnNwZWN1bGFyRXhwb25l
bnQsICprZXJuZWxVbml0TGVuZ3RoWCwgKmtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKCpzb3Vy
Y2UpKTsKK30KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIx
NzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uNGI0Njk1NTAyNjVlZDI1YTVjMDM3NzNk
Y2RmMTNjOGVlODFmYTkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsMzggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRU1lcmdlOjpGRU1lcmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6TWVyZ2UpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKHVuc2lnbmVk
IG51bWJlck9mRWZmZWN0SW5wdXRzKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVy
Z2UobnVtYmVyT2ZFZmZlY3RJbnB1dHMpKTsKIH0KIAotUmVmPEZFTWVyZ2U+IEZFTWVyZ2U6OmNy
ZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZFTWVyZ2U6OkZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZF
ZmZlY3RJbnB1dHMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVNZXJnZSkKKyAgICAsIG1f
bnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVm
ZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K0ZpbHRlckltYWdlVmVjdG9yIEZFTWVyZ2U6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdAogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSBt
X251bWJlck9mRWZmZWN0SW5wdXRzKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFZlY3RvcjxSZWY8RmlsdGVySW1hZ2U+PiBpbnB1dHM7CisgICAgZm9y
IChhdXRvIGlucHV0c1NpemUgPSBtX251bWJlck9mRWZmZWN0SW5wdXRzOyBpbnB1dHNTaXplLS07
ICkKKyAgICAgICAgaW5wdXRzLmFwcGVuZChzdGFjay50YWtlTGFzdCgpKTsKIAotCi0gICAgR3Jh
cGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgfQorICAgIHJldHVybiBpbnB1dHM7CiB9CiAK
LVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwot
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFT
U0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJc
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZl
Y3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0
cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3
YjAxOTRlYmNmMThmMjYwNy4uYjEwMzFmMDQ5NjQ5YThhMzFlOTU2MTRmOGQ1ZmI2M2ZkODRlYjc0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIyLDIzICsyMyw0NSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU1lcmdlPiBjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU1l
cmdlPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYp
OworICAgIEZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQor
ICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0
IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBGRU1lcmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU1lcmdlPj4gRkVNZXJnZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbnVtYmVyT2ZFZmZl
Y3RJbnB1dHM7CisgICAgZGVjb2RlciA+PiBudW1iZXJPZkVmZmVjdElucHV0czsKKyAgICBpZiAo
IW51bWJlck9mRWZmZWN0SW5wdXRzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgcmV0dXJuIEZFTWVyZ2U6OmNyZWF0ZSgqbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VG
RkVDVChGRU1lcmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5
MGUzODM4NjM5MzU2MmI5ZDhkZjUuLjAwMGY5YzM1M2Y0ZmVmZTRiNGJlNTY5ODRlMGExMjg0ZDFm
ZWFjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjY1ICsyNSw1MCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25l
bnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVN
b3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIFR5cGU6Ok1vcnBob2xvZ3kpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAs
IG1fcmFkaXVzWChyYWRpdXNYKQotICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCi17Ci19Ci0KLVJl
ZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFk
aXVzWCwgcmFkaXVzWSkpOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9w
ZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV90eXBlID09
IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWChmbG9hdCByYWRp
dXNYKQotewotICAgIGlmIChtX3JhZGl1c1ggPT0gcmFkaXVzWCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fcmFkaXVzWCA9IHJhZGl1c1g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgaWYgKG1f
cmFkaXVzWSA9PSByYWRpdXNZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNZ
ID0gcmFkaXVzWTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
aW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIg
PSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlw
c1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3
aWR0aCkKLXsKLSAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKLX0KLQotaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFs
dWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGFzU1JHQkEocGl4ZWwpKTsKLX0KLQotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGNvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFr
ZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OwotfQotCi10ZW1w
bGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYikKLXsKLSAgICBp
ZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBw
ZXJDb21wb25lbnRNaW4oYSwgYik7Ci0KLSAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIp
OwotfQotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5M
SU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5k
LCBpbnQgd2lkdGgpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNm
cm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0
YXJ0LCB3aWR0aCkpIH0pOwotCi0gICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5k
OyArK3kpIHsKLSAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4
ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgp
KSB9KTsKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwp
OwotICAgIH0KLSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0
aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3Jw
aG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKIHsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lk
dGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9E
SUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2lu
ZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+
OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5F
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5F
eHRyZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVt
dW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBl
eHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
a2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAg
Y29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsK
LSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5Owot
Ci0gICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25z
dCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0
aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdE
YXRhLmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0g
aGVpZ2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3Rh
cnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5
ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBz
dGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjpt
aW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDAp
OwotCi0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0
cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11
bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5
cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0
IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAg
ICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEu
YXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVz
U3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHgg
PiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRz
dFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAg
ICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtl
cm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neShtb3JwaG9sb2d5T3BlcmF0b3Is
IHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQorRkVNb3JwaG9sb2d5OjpG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQg
cmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1vcnBo
b2xvZ3kpCisgICAgLCBtX21vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IpCisg
ICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewotICAg
IHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRh
LCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmxvYXRSZWN0
IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRp
bWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3
aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0
KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0
c1swXS0+aW1hZ2VSZWN0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0g
KDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0g
ICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4
OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
KHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3Ip
IC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+
IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQg
am9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2Vy
IHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNl
IGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAg
ICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFk
czsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAl
IG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsK
LSAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXpl
OwotICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAg
fQorICAgIGltYWdlUmVjdC5pbmZsYXRlKGdlb21ldHJ5LnJlc29sdmVJbWFnZVNpemUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGlu
Z0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlw
VG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwog
fQogCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFt
cGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKQorYm9vbCBGRU1vcnBob2xvZ3k6OmlzQWxwaGFJbWFnZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIGlmIChyYWRpdXNYIDwg
MCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU1vcnBob2xv
Z3k6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRT
aXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFw
cGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBy
YWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJl
c29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBz
dGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwot
ICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAx
LCByYWRpdXMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsK
LSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7
Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5
OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRo
KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNl
aWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Cisg
ICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0
KCkgfTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3Jw
aG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChtb3Jw
aG9sb2d5T3BlcmF0b3IpIHsKICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dO
OgogICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk3LDE1ICs4
MiwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4
dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFt
JiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTW9y
cGhvbG9neSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9w
ZXJhdG9yKCkgPDwgIlwiICIKLSAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwg
IiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNj
b3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8
IG1fbW9ycGhvbG9neU9wZXJhdG9yIDw8ICJcIiAiIDw8ICJyYWRpdXM9XCIiIDw8IG1fcmFkaXVz
WCA8PCAiLCAiIDw8IG1fcmFkaXVzWSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWEx
MS4uNzZjOWU2ODE0MjYwNTQ1MTMzNWU2ZWRlMjExZTFjNzA2ZjVhMzVhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwxMSArMjMsMTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKK2VudW0gTW9ycGhvbG9neU9wZXJhdG9yIHsKICAgICBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFID0gMSwKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgpAQCAt
MzQsNTUgKzM0LDc2IEBAIGVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZF
TW9ycGhvbG9neSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwg
ZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9s
b2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICB2b2lkIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKSB7IG1f
bW9ycGhvbG9neU9wZXJhdG9yID0gbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAgdm9pZCBzZXRS
YWRpdXNYKGZsb2F0IHJhZGl1c1gpIHsgbV9yYWRpdXNYID0gcmFkaXVzWDsgfQorICAgIHZvaWQg
c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKSB7IG1fcmFkaXVzWSA9IHJhZGl1c1k7IH0KIAotICAg
IGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KLSAgICBib29sIHNl
dFJhZGl1c1goZmxvYXQpOwotCi0gICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFkaXVzWTsgfQotICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU1vcnBob2xvZ3k+PiBkZWNv
ZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVNb3JwaG9sb2d5IjsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUlt
YWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZpbHRl
ckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJh
ZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkq
IHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5
OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCBy
YWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OworICAgIE1vcnBob2xvZ3lPcGVy
YXRvciBtX21vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBmbG9hdCBtX3JhZGl1c1g7CisgICAgZmxv
YXQgbV9yYWRpdXNZOworfTsKIAotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7
Ci0gICAgICAgIEZFTW9ycGhvbG9neSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAg
ICAgICBpbnQgZW5kWTsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7
Ci0gICAgfTsKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFTW9ycGhvbG9neTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX21vcnBob2xv
Z3lPcGVyYXRvcjsKKyAgICBlbmNvZGVyIDw8IG1fcmFkaXVzWDsKKyAgICBlbmNvZGVyIDw8IG1f
cmFkaXVzWTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVm
PEZFTW9ycGhvbG9neT4+IEZFTW9ycGhvbG9neTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgc3RkOjpvcHRpb25hbDxNb3JwaG9sb2d5T3BlcmF0b3I+IG1vcnBob2xvZ3lPcGVyYXRv
cjsKKyAgICBkZWNvZGVyID4+IG1vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBpZiAoIW1vcnBob2xv
Z3lPcGVyYXRvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IHJhZGl1c1g7CisgICAgZGVjb2RlciA+PiByYWRpdXNYOworICAgIGlmICgh
cmFkaXVzWCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IHJhZGl1c1k7CisgICAgZGVjb2RlciA+PiByYWRpdXNZOworICAgIGlmICghcmFk
aXVzWSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRU1vcnBo
b2xvZ3k6OmNyZWF0ZSgqbW9ycGhvbG9neU9wZXJhdG9yLCAqcmFkaXVzWCwgKnJhZGl1c1kpOwor
fQogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFy
YW1ldGVycyopOworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworbmFtZXNwYWNlIFdU
RiB7CiAKLSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKLSAgICBmbG9hdCBtX3Jh
ZGl1c1g7Ci0gICAgZmxvYXQgbV9yYWRpdXNZOwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpNb3JwaG9sb2d5T3BlcmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpNb3JwaG9sb2d5T3BlcmF0b3IsCisKKyAgICAgICAg
V2ViQ29yZTo6RkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6
OkZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSwKKyAgICAgICAgV2ViQ29yZTo6RkVNT1JQSE9M
T0dZX09QRVJBVE9SX0RJTEFURQorICAgID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cit9IC8vIG5hbWVzcGFjZSBXVEYKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFTW9ycGhvbG9neSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5
MTdjMmQ2NWFhNDE0MGY2OS4uNjEyMjE4MmI4M2E2MWFhY2I5NmViYTg2MTU3ZjMzNjdmOTM2MTU3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCw3MSArMjUsNTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU9m
ZnNldC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFT2Zmc2V0OjpGRU9mZnNldChG
aWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBk
eSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAg
ICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6
OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9m
ZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9h
dFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIG1fZHggPSBkeDsKLX0KKyAgICBB
U1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1sw
XS0+aW1hZ2VSZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQotewotICAg
IG1fZHkgPSBkeTsKKyAgICBpbWFnZVJlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlSW1hZ2VTaXpl
KHsgbV9keCwgbV9keSB9KSk7CisKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0
aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBG
RU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorYm9vbCBGRU9mZnNldDo6aXNB
bHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1v
dmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAg
IGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RS
ZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKLXZvaWQg
RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU9m
ZnNldDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciog
aW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
IHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGlu
LT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24p
OworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CitUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVPZmZzZXQiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwi
IGR5PVwiIiA8PCBkeSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIGR4PVwiIiA8PCBtX2R4IDw8
ICJcIiBkeT1cIiIgPDwgbV9keSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLjFhYWFlZGJj
OGFjMGI5ZmJjZmUwOTVhZTUxNmMzMGY3NWZhMjA1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw1OSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgZmxvYXQgZHgo
KSBjb25zdCB7IHJldHVybiBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9p
ZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KKyAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9
Ci0gICAgdm9pZCBzZXREeShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHBy
aXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBG
RU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFj
aykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2Um
IG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9OwogCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwgbV9k
eTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zm
c2V0Pj4gRkVPZmZzZXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5Owor
ICAgIGRlY29kZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggNTk5NzIzMDY4
ODZhNjNmYTQxMmI1YjcxNDFmNzRmOWM0ODdhMTQ0Yy4uNDI0OWEzN2E0N2RiZTUzZmUwNWQwZDI1
ZWQxOTBjY2U3OTZmZjk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDkgKzIz
LDMxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVTcGVjdWxhckxpZ2h0aW5n
LmgiCiAKLSNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZF
U3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5n
KGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAw
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxp
Z2h0aW5nKQorUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7CisgICAg
cmV0dXJuIGNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBz
cGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUoc291cmNlKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJM
aWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGln
aHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbG9yLCBzdXJm
YWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBv
bmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJj
ZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBk
ZWZhdWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChm
bG9hdCBzcGVjdWxhckNvbnN0YW50KQorRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGln
aHRpbmcoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdo
dFNvdXJjZSYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwg
ZGlmZnVzZUNvbnN0YW50LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6
RkVTcGVjdWxhckxpZ2h0aW5nKQogewotICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3Bl
Y3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJF
eHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxh
ckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1f
c3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNi
MjQ5NThhLi40ZGJhYjQ0YjliMmFmMWFlNTQzYThjZjk0MzM1NWQ1ZDNlODQ3ZmE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3Vy
Y2UmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291
cmNlJiYpOwogCi0gICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3BlY3VsYXJDb25zdGFudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7
Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxh
ckV4cG9uZW50OyB9Ci0gICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKLQotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0
ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmKTsKKworICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPj4gRkVTcGVjdWxhckxp
Z2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGlu
Zzo6ZGVjb2RlPERlY29kZXIsIEZFU3BlY3VsYXJMaWdodGluZz4oZGVjb2Rlcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFl
N2RjYTBjNWRiMmZjYWMyMGFkLi4yNzNhZTE3YzI3ODQ2Zjk5MjkzZTNmZjlmOWZjNTNmOGRlNTcw
NzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBB
bGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIxLDgwICsyMiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
VGlsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgot
I2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZp
bHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK1Jl
ZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RVRpbGUoKSk7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
KQorRkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVGlsZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVU
aWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFVGlsZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsK
LS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBh
IGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdl
KGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBh
dHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0
aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBw
YXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0
IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZm
ZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZm
ZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZp
bHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAg
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBm
aWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0
ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQo
KSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRl
eHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0
ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0g
ICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7Ci0gICAg
aWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1h
eEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOwotCi0gICAgYXV0byBwYXR0ZXJu
ID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVl
LCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmaWx0ZXJDb250ZXh0LnNl
dEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KyAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3MgZHJhd2luZ1JlY3QgZm9yIDxmZVRpbGU+Lgor
ICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKIH0KIAotVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0Citib29s
IEZFVGlsZTo6aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNv
bnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
XVxuIjsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKK30KIAotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworRmlsdGVySW1h
Z2VWZWN0b3IgRkVUaWxlOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29u
c3QKK3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2su
dGFrZUxhc3QoKSB9OworfQogCitUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAoreworICAg
IHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZV1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRl
eCA0OWJkOTlmMDk0NDdkYWUxY2YwOWFmMTIzNThjNmRlODQwNjg3NzE0Li43YmUyNWUyODFkNTM0
Y2FhYTNmOGJlYmU1YTMwZDU2NDFiYjk0MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI3ICsyMywyNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXImKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAKIHByaXZh
dGU6Ci0gICAgRkVUaWxlKEZpbHRlciYpOworICAgIEZFVGlsZSgpOwogCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CisgICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9Cisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRl
OworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0
YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4
RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVS
X0VGRkVDVChGRVRpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYWMyMzQ2ZThhNGJhNThhYWE5
MjRhNmQ2N2JkNWU0Yjc3ZGQyMjY4Zi4uN2EzYmQ4ZjFmZTk3NGY4NmI2NDFkMjU3NDY0OWM2MmNh
OGM5ZGViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwzMSArMjYsMTkgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnku
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAy
XS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1w
bGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0
NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMx
IG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNo
b3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBn
ZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNv
bnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1h
eGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5k
QW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBj
b25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19y
YW5kUiA9IDI4MzY7IC8vIG0gJSBhCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNy
ZWF0ZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJl
cXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7
Cit9CiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKLSAgICAsIG1fdHlwZSh0eXBlKQor
RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUs
IGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2
ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVUdXJidWxlbmNlKQorICAgICwgbV90dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkK
ICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVx
dWVuY3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBA
IC01OSw0MDUgKzQ3LDkgQEAgRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0
ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWUKIHsKIH0KIAotUmVmPEZF
VHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVu
Y2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwg
aW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwotfQot
Ci1ib29sIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxlbmNlVHlwZSB0eXBlKQotewotICAg
IGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9
IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNl
RnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKLXsKLSAgICBpZiAobV9iYXNlRnJlcXVl
bmN5WSA9PSBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFz
ZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQot
ewotICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYID09IGJhc2VGcmVxdWVuY3lYKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVk
KQotewotICAgIGlmIChtX3NlZWQgPT0gc2VlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fc2VlZCA9IHNlZWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNl
OjpzZXROdW1PY3RhdmVzKGludCBudW1PY3RhdmVzKQotewotICAgIGlmIChtX251bU9jdGF2ZXMg
PT0gbnVtT2N0YXZlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbnVtT2N0YXZlcyA9
IG51bU9jdGF2ZXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKLXsKLSAgICBpZiAobV9zdGl0Y2hUaWxlcyA9PSBz
dGl0Y2gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0aXRjaFRpbGVzID0gc3RpdGNo
OwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBj
b2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEg
c3BlY2lmaWNhdGlvbjoKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRt
bCNmZVR1cmJ1bGVuY2UKLQotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGlu
ZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcg
cmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAo
c2VlZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9
IHNfcmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gdCAq
IHQgKiAoMyAtIDIgKiB0KTsKLX0KLQotaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24o
ZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEp
OwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQotewotICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0KLSAgICAvLyBUaGUg
c2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KLSAg
ICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQg
PSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlm
IChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQotICAgICAgICBwYWludGlu
Z0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOwotCi0gICAgZmxvYXQqIGdyYWRpZW50Owot
ICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgewotICAgICAgICAgICAg
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7Ci0gICAgICAgICAgICBncmFkaWVu
dCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRp
bmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19i
bG9ja1NpemU7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tT
aXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYm
ICFncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpo
eXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgZ3JhZGllbnRbMF0g
Lz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1h
bGl6YXRpb25GYWN0b3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gc19i
bG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9t
KCkgJSBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VS
VChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwotICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV07Ci0gICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsg
KytjaGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
c19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsw
XTsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6
ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1GRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpj
b21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdAotewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGZsb2F0IHRpbGVXaWR0aCA9IHRpbGVTaXplLndp
ZHRoKCk7Ci0gICAgZmxvYXQgdGlsZUhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpOwotICAgIEFT
U0VSVCh0aWxlV2lkdGggPiAwICYmIHRpbGVIZWlnaHQgPiAwKTsKLQotICAgIC8vIFdoZW4gc3Rp
dGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVk
Ci0gICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KLSAg
ICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxv
b3JmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgZmxv
YXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRp
bGVXaWR0aDsKLSAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZl
IGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WCAv
IGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAg
ICAgIGJhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBiYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotICAgIGlmIChiYXNl
RnJlcXVlbmN5WSkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGhpZ2hG
cmVxdWVuY3kgPSBjZWlsZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdo
dDsKLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1
ZW5jeSAvIGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBsb3dG
cmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gaGln
aEZyZXF1ZW5jeTsKLSAgICB9Ci0KLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgc3Rp
dGNoRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAg
c3RpdGNoRGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwotICAg
IHN0aXRjaERhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7
Ci0gICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdo
dDsKLQotICAgIHJldHVybiBzdGl0Y2hEYXRhOwotfQotCi0vLyBUaGlzIGlzIHRha2VuIDE6MSBm
cm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVU
dXJidWxlbmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNl
Ojpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hE
YXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKLXsK
LSAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7Ci0gICAgICAgIGludCBpbmRleDsgLy8gYngwLCBi
eTAgaW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgaW50IG5leHRJbmRleDsgLy8gYngxLCBieTEg
aW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgZmxvYXQgZnJhY3Rpb247IC8vIHJ4MCwgcnkwIGlu
IHRoZSBzcGVjIHRleHQuCi0KLSAgICAgICAgTm9pc2VQb3NpdGlvbihmbG9hdCBjb21wb25lbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vICB0ID0gdmVjWzBdICsgUGVybGluTjsKLSAgICAg
ICAgICAgIC8vICBieDAgPSAoaW50KXQ7Ci0gICAgICAgICAgICAvLyAgYngxID0gYngwKzE7Ci0g
ICAgICAgICAgICAvLyAgcngwID0gdCAtIChpbnQpdDsKLSAgICAgICAgICAgIGZsb2F0IHBvc2l0
aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIGluZGV4ID0gc3Rh
dGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleCAr
IDE7Ci0gICAgICAgICAgICBmcmFjdGlvbiA9IHBvc2l0aW9uIC0gaW5kZXg7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc3RpdGNoKGludCBzaXplLCBpbnQgd3JhcFNpemUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIChieDAgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkK
LSAgICAgICAgICAgIC8vICAgYngwIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAg
ICBpZiAoaW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgaW5kZXggLT0gc2l6ZTsK
LQotICAgICAgICAgICAgLy8gaWYgKGJ4MSA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAg
ICAgICAgLy8gICBieDEgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChu
ZXh0SW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgbmV4dEluZGV4IC09IHNpemU7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVgobm9pc2VWZWN0
b3IueCgpKTsKLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lzZVZlY3Rvci55KCkpOwotCi0g
ICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0g
ICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRh
LndpZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hE
YXRhLmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJN
OwotICAgIC8vIGJ4MSAmPSBCTTsKLSAgICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJN
OwotICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4
ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2Vs
ZWN0b3JbYngwXTsKLSAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBs
YXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07
Ci0gICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9y
W25vaXNlWC5uZXh0SW5kZXhdOwotCi0gICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsK
LSAgICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3Ro
Q3VydmUobm9pc2VYLmZyYWN0aW9uKTsKLSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNl
WS5mcmFjdGlvbik7Ci0KLSAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5l
bCkgewotICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAg
IGludCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5v
aXNlWS5pbmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAw
XTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0g
bm9pc2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAg
ICAgLy8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5p
bmRleF07Ci0gICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3Jh
ZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwot
ICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAg
IGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9u
ICogcVsxXTsKLSAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBh
ID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxh
dHRpY2VTZWxlY3RvcltpICsgYnkxXTsKLSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAg
IC8vIHJ5MSA9IHJ5MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hh
bm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJh
Y3Rpb24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAv
LyBiMTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJ
bmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9
IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW2IxMV07Ci0gICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBx
WzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAo
c3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwg
dik7Ci0KLSAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4g
bGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0g
ICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAot
ICAgICAgICBub2lzZUZvckNoYW5uZWwoMiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQot
ICAgIH07Ci19Ci0KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
VHVyYnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21w
b25lbnRzLgotLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWlu
dDg+PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KLXN0YXRpYyBpbmxp
bmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQorRmxvYXRS
ZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6OmNs
YW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwg
MCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZs
b2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUp
LAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21w
b25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OwotfQotCi1Db2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBDb2xvckNvbXBvbmVudHM8
ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKLSAgICBGbG9hdFBvaW50IG5vaXNl
VmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgp
ICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0g
ICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkg
ewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0g
ICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0Rh
dGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwotCi0gICAgICAgIG5vaXNl
VmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNl
dFkobm9pc2VWZWN0b3IueSgpICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0KLSAgICAgICAg
aWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVz
LiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5k
Ci0gICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJh
Y3RpbmcgaXQgb25jZS4KLSAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKLSAgICAg
ICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGlu
Tm9pc2U7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOwotICAgICAgICAgICAg
c3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAy
NTUpIC8gMiBieSBmcmFjdGFsTm9pc2UKLSAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4KLSAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VU
eXBlOjpGcmFjdGFsTm9pc2UpCi0gICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwotCi0gICAgcmV0dXJuIHRvSW50
QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKLX0KLQotdm9p
ZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXks
IGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEs
IGludCBzdGFydFksIGludCBlbmRZKSBjb25zdAotewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZ
KTsKLQotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAg
ICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQ
b2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhP
ZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJh
bnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZv
ciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShw
b2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0g
ICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQ
b2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAg
ICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBh
aW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFy
cmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hh
bm5lbCk7Ci0gICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdp
b25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+Zmls
bFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0
YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJz
LT5lbmRZKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
Ci17Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVy
U2NhbGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVz
dGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJl
cXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFz
ZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsK
LSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNp
emUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9u
LCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFk
TnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAg
YXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAo
bnVtSm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFki
LXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAi
am9ic1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0
IC8gbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQg
JSBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAg
ICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdo
dCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAg
ICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21h
bGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVy
UmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpAQCAtNDc2LDE1ICs2
OCwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVy
YnVsZW5jZVR5cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFVHVy
YnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNl
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImJh
c2VGcmVxdWVuY3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVl
bmN5WSgpIDw8ICJcIiAiCi0gICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgot
ICAgICAgIDw8ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKLSAgICAg
ICA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxuIjsKKyAgICB0
cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHVyYnVsZW5jZVR5cGUgPDwgIlwiICIgPDwgImJhc2VGcmVx
dWVuY3k9XCIiIDw8IG1fYmFzZUZyZXF1ZW5jeVggPDwgIiwgIiA8PCBtX2Jhc2VGcmVxdWVuY3lZ
IDw8ICJcIiAiIDw8ICJzZWVkPVwiIiA8PCBtX3NlZWQgPDwgIlwiICIgPDwgIm51bU9jdGF2ZXM9
XCIiIDw8IG1fbnVtT2N0YXZlcyA8PCAiXCIgIiA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IG1fc3Rp
dGNoVGlsZXMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmlu
ZGV4IDRkNTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjdlMDM4NzQyMjY3
N2NiNjVkZTBjNjBmYWI0NTcwYzhlNTczODE1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI0LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zOCw5MSArMzYsMjggQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAK
IGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUs
IGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2Vl
ZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKKyAg
ICB2b2lkIHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlKSB7
IG1fdHVyYnVsZW5jZVR5cGUgPSB0dXJidWxlbmNlVHlwZTsgfQorICAgIHZvaWQgc2V0QmFzZUZy
ZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpIHsgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VG
cmVxdWVuY3lYOyB9CisgICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVl
bmN5WSkgeyBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7IH0KKyAgICB2b2lkIHNl
dE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpIHsgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsg
fQorICAgIHZvaWQgc2V0U2VlZChmbG9hdCBzZWVkKSB7IG1fc2VlZCA9IHNlZWQ7IH0KKyAgICB2
b2lkIHNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoVGlsZXMpIHsgbV9zdGl0Y2hUaWxlcyA9IHN0
aXRjaFRpbGVzOyB9CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFzZUZyZXF1ZW5jeVg7IH0KLSAgICBib29sIHNldEJhc2VGcmVxdWVuY3lYKGZsb2F0KTsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZF
VHVyYnVsZW5jZT4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVk7IH0KLSAgICBib29sIHNldEJhc2VG
cmVxdWVuY3lZKGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VU
eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1P
Y3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIGZsb2F0IHNlZWQo
KSBjb25zdCB7IHJldHVybiBtX3NlZWQ7IH0KLSAgICBib29sIHNldFNlZWQoZmxvYXQpOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtT2N0YXZlczsgfQotICAgIGJvb2wgc2V0TnVtT2N0YXZlcyhpbnQpOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBzdGl0Y2hUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RpdGNoVGlsZXM7IH0K
LSAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3Qgb3ZlcnJpZGU7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Js
b2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9j
a1NpemUgLSAxOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9u
ID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2Jz
LgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25n
IHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRp
bmdTZWVkKQotICAgICAgICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAg
ICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VG
cmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBsb25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXpl
ICsgMl07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJd
OwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9u
ZyByYW5kb20oKTsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBT
dGl0Y2hEYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93
IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3Jh
cFggeyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7
IDAgfTsKLSAgICAgICAgaW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5n
RGF0YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAg
ICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
dm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KLSAgICBGRVR1
cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9h
dCwgYm9vbCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
dm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3Rp
dGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJh
c2VGcmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNl
MkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRB
cnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBl
bmRZKSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwot
Ci0gICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOworICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHVyYnVs
ZW5jZVR5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBtX2Jhc2VG
cmVxdWVuY3lZOwogICAgIGludCBtX251bU9jdGF2ZXM7CkBAIC0xMzAsNSArNjUsNjcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fc3RpdGNoVGlsZXM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgordm9pZCBGRVR1cmJ1bGVuY2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV90dXJidWxlbmNlVHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fYmFz
ZUZyZXF1ZW5jeVg7CisgICAgZW5jb2RlciA8PCBtX2Jhc2VGcmVxdWVuY3lZOworICAgIGVuY29k
ZXIgPDwgbV9udW1PY3RhdmVzOworICAgIGVuY29kZXIgPDwgbV9zZWVkOworICAgIGVuY29kZXIg
PDwgbV9zdGl0Y2hUaWxlczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8UmVmPEZFVHVyYnVsZW5jZT4+IEZFVHVyYnVsZW5jZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxUdXJidWxlbmNlVHlwZT4gdHVyYnVsZW5jZVR5
cGU7CisgICAgZGVjb2RlciA+PiB0dXJidWxlbmNlVHlwZTsKKyAgICBpZiAoIXR1cmJ1bGVuY2VU
eXBlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IGJhc2VGcmVxdWVuY3lYOworICAgIGRlY29kZXIgPj4gYmFzZUZyZXF1ZW5jeVg7
CisgICAgaWYgKCFiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBiYXNlRnJlcXVlbmN5WTsKKyAgICBkZWNv
ZGVyID4+IGJhc2VGcmVxdWVuY3lZOworICAgIGlmICghYmFzZUZyZXF1ZW5jeVkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gbnVtT2N0YXZl
czsKKyAgICBkZWNvZGVyID4+IG51bU9jdGF2ZXM7CisgICAgaWYgKCFudW1PY3RhdmVzKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2Vl
ZDsKKyAgICBkZWNvZGVyID4+IHNlZWQ7CisgICAgaWYgKCFzZWVkKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzdGl0Y2hUaWxlczsKKyAg
ICBkZWNvZGVyID4+IHN0aXRjaFRpbGVzOworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUo
KnR1cmJ1bGVuY2VUeXBlLCAqYmFzZUZyZXF1ZW5jeVgsICpiYXNlRnJlcXVlbmN5WSwgKm51bU9j
dGF2ZXMsICpzZWVkLCAqc3RpdGNoVGlsZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlR1cmJ1bGVuY2VUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICAgICAgV2ViQ29yZTo6VHVyYnVsZW5jZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6VHVyYnVs
ZW5jZVR5cGU6OlVua25vd24sCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpGcmFj
dGFsTm9pc2UsCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpUdXJidWxlbmNlCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVUdXJidWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNzY5NjUwMjg5
NDYyMGIwMjdhODI0YzY0MmY2NGMwNDNhMDFhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVy
OjphcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAg
RmlsdGVySW1hZ2VWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyUmVzdWx0IHJlc3VsdChyZW5kZXJp
bmdNb2RlKCkpOworCisgICAgaWYgKHNvdXJjZUltYWdlKSB7CisgICAgICAgIGF1dG8gaW1hZ2Ug
PSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGdlb21ldHJ5LmZpbHRlclJlZ2lvbigpLCBzb3VyY2VJbWFn
ZVJlY3QsIHsgKnNvdXJjZUltYWdlIH0pOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgc3RhY2suYXBwZW5kKGltYWdlLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIH0KKworICAgIGlmICghYXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAg
ICBhdXRvIGltYWdlID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBpbWFnZS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4geyBp
bWFnZS0+aW1hZ2VCdWZmZXIoKSwgZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlLT5pbWFnZVJl
Y3QoKSkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRi
MjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uYmQ5ZDBlODNjOWUwNTZkYTg4MzJkOTljNWE2
MDAzMmVjZTY2YmZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIwLDU5ICsyMSwyNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01v
ZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0
aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7
CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIHZpcnR1
YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VmVjdG9yIGVm
ZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNl
dFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJj
ZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9Ci0KLSAgICBGbG9hdFNpemUg
ZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQot
ICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29s
dXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQotCi0gICAg
ZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9Ci0gICAg
dm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gc2NhbGU7
IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Ci0KLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KLSAgICB2b2lk
IHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVy
aW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVy
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAq
IG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJj
ZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdp
b24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2Vy
U3BhY2UoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBsZTxSZWZQdHI8
SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJS
ZXNvbHV0aW9uKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBtX3NvdXJjZUltYWdlOwotICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07Ci0gICAg
ZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6Rmls
dGVyRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5k
YXJ5U2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJlNzdkZWNkMzFmMjhlNWUyNTgwMmRlM2ZjY2Y4ZDQxM2Q0
MzY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldCB7CitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBGbGFncyB7CisgICAgICAgIEhhc1ggICAgICA9IDEgPDwgMCwKKyAgICAgICAg
SGFzWSAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNXaWR0aCAgPSAxIDw8IDIsCisgICAgICAg
IEhhc0hlaWdodCA9IDEgPDwgMworICAgIH07CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCgpID0g
ZGVmYXVsdDsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRh
cmllcywgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICAgICAgOiBtX2JvdW5kYXJpZXMoYm91
bmRhcmllcykKKyAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgIHsKKyAgICB9CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiB4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdz
LmNvbnRhaW5zKEZsYWdzOjpIYXNYKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMu
eCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFp
bnMoRmxhZ3M6Okhhc1kpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy55KCk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gd2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMo
RmxhZ3M6Okhhc1dpZHRoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMud2lkdGgo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlv
bmFsPGZsb2F0PiBoZWlnaHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29u
dGFpbnMoRmxhZ3M6Okhhc0hlaWdodCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVz
LmhlaWdodCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJCb3VuZGFy
eVNldD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3Vu
ZGFyaWVzOworICAgIE9wdGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fYm91bmRhcmllczsKKyAgICBlbmNvZGVy
IDw8IG1fZmxhZ3M7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PEZpbHRlckJvdW5kYXJ5U2V0PiBGaWx0ZXJCb3VuZGFyeVNldDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGJvdW5kYXJpZXM7CisgICAg
ZGVjb2RlciA+PiBib3VuZGFyaWVzOworICAgIGlmICghYm91bmRhcmllcykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8T3B0aW9uU2V0PEZsYWdzPj4g
ZmxhZ3M7CisgICAgZGVjb2RlciA+PiBmbGFnczsKKyAgICBpZiAoIWZsYWdzKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZpbHRlckJvdW5kYXJ5U2V0KCpib3Vu
ZGFyaWVzLCAqZmxhZ3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckJv
dW5kYXJ5U2V0OjpGbGFncz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncywKKworICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRh
cnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlT
ZXQ6OkZsYWdzOjpIYXNIZWlnaHQKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKaW5kZXggZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5Mjdk
YjEwOC4uNDc5MWM5YTNmNWE0NWJiZDdkZmM5M2IyMzU4ZmNkYjdhMWRmZjZlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcApAQCAtMjQsNjYwICsyNCwxMDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJS
ZXN1bHQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25l
b24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXJF
ZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRlciwgVHlwZSB0eXBlKQotICAgIDogbV9m
aWx0ZXIoZmlsdGVyKQotICAgICwgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGUodHlwZSkKLXsKLX0K
LQotRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkgPSBkZWZhdWx0OwotCi12b2lkIEZpbHRl
ckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIG1fYWJzb2x1dGVQYWludFJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKLSAg
ICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotfQorICAgIC8vIFRoaXMgZnVuY3Rp
b24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMtMS8jRmls
dGVyUHJpbWl0aXZlU3ViUmVnaW9uLgorICAgIEZsb2F0UmVjdCBkZWZhdWx0UHJpbWl0aXZlU3Vi
cmVnaW9uOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxl
IENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1
dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0lu
dFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBj
b25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFj
ZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7Ci19Ci0KLUludFJlY3QgRmls
dGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVj
dCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1
dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFTU0VS
VChoYXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0KLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJh
bnNsYXRlKC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFu
c2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVy
YnVsZW5jZSwgRkVGbG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRl
ciByZWdpb24gYXMgdW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlm
ICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkg
ewotICAgICAgICBzdWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1i
ZXJPZklucHV0RWZmZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZl
U3VicmVnaW9uID0gaW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotICAgICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVn
aW9uKTsKLSAgICAgICAgfQorICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24g
Zm9yIDxmZVRpbGU+LgorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkgIT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlu
cHV0cykKKyAgICAgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXQt
PnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0g
bV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxp
bmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0
LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVy
RWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24g
PSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFy
aWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJl
Z2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJy
ZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWln
aHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsK
LQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwotCi0gICAgYXV0
byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVj
dChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0
aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQg
dG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5h
dGVzLgotICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9u
KTsKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRlclJl
Z2lvbigpOwogCi0gICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIg
cmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2ZpbHRlci5m
aWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0
ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVT
Y2FsZWRGaWx0ZXJSZWdpb24pOworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb247CiAK
LSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3Vi
cmVnaW9uOwotfQorICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJ5U2V0LngoKS52
YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLngoKSkpOworICAgIHByaW1pdGl2ZVN1
YnJlZ2lvbi5zZXRZKGJvdW5kYXJ5U2V0LnkoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3Vi
cmVnaW9uLnkoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyeVNl
dC53aWR0aCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ud2lkdGgoKSkpOwor
ICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcnlTZXQuaGVpZ2h0KCkudmFs
dWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi5oZWlnaHQoKSkpOwogCi1GaWx0ZXJFZmZl
Y3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewot
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZl
Y3RzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7
Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3Qq
ZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAg
IGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVt
YmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkp
OwotICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJl
dHVybiBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRl
ckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFs
bEVmZmVjdHMpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
IHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBz
aXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3Rz
LmF0KGkpLmdldCgpOwotICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVu
aXRlKGlucHV0LT5pbWFnZVJlY3QoKSk7CiAKLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1
bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKLSAgICB9Ci0KLSAgICBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNw
YWNlKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVm
ZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8
ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFi
c29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lv
biA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAi
XG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2Nh
bGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpIDw8ICJcbiAgZmlsdGVyIHJlc29sdXRpb24g
IiA8PCBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQ
YWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVj
dEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0Zm9y
bSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFBy
aW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK2Jvb2wg
RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25zdAogewotICAgIC8vIE11c3Qgb3BlcmF0
ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGlu
dmFsaWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0
YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQot
ICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBp
eGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAg
ICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGgg
JiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxE
YXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0
cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsx
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
Ml0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAg
ICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFz
dFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisjaWYgVVNF
KENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhcHBseUNvcmVJbWFnZShvdXRwdXQsIGlucHV0cywg
Z2VvbWV0cnkpOwogI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0
aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEg
YW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgt
LW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBh
IHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8v
IENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBs
b2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwot
ICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50
IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5
U29mdHdhcmUob3V0cHV0LCBpbnB1dHMsIGdlb21ldHJ5KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseShGaWx0ZXJSZXN1bHQm
IHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gYXBwbHkocmVz
dWx0LCBzdGFjaywgZ2VvbWV0cnksIEZpbHRlckJvdW5kYXJ5U2V0KCkpOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKK2Jvb2wgRmlsdGVyRWZmZWN0Ojph
cHBseShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3Vu
ZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0
aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQg
aWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0
KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNp
dmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQo
KQotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVj
dCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0
KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkg
PDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8gaW5wdXRzID0gdGFrZUlucHV0cyhzdGFjayk7CiAKLSAgICBpZiAo
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAq
IDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxB
cnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0
KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwot
ICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBj
aGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAg
aWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJl
Y3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
LSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAg
IGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICBpZiAoYXV0byBpbWFnZSA9IHJlc3VsdC5pbWFnZXMoKS5nZXQoeyAq
dGhpcyB9KSkgeworICAgICAgICBzdGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAg
IGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKTsKIAotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7
Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURl
c3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5k
ID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisgICAgYXV0
byBwcmltaXRpdmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRz
LCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0g
eE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53
aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lk
dGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRh
dGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBz
Y2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisgICAgYXV0byBpbWFnZVJl
Y3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKKyAgICBhdXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0
KGltYWdlUmVjdCk7CiAKLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCAr
PSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KKyAgICBpZiAo
YWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6
ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRl
cyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMt
PmlzQWxwaGFJbWFnZShpbnB1dHMpOworICAgIGF1dG8gaW1hZ2VDb2xvclNwYWNlID0gdGhpcy0+
aW1hZ2VDb2xvclNwYWNlKGlucHV0cyk7CiAKLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBz
cmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisgICAgYXV0byBpbWFnZSA9
IHJlc3VsdC5jcmVhdGVGaWx0ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwg
aXNBbHBoYUltYWdlLCBhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCksIGltYWdlQ29sb3JTcGFjZSk7
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdkltYWdlX0J1
ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0
LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0
ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24u
ZGF0YSgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBs
eSgpOiIKKyAgICAgICAgPDwgIlxuICBwcmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVT
dWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBtYXhQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBnZW9t
ZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICAgICA8PCAi
XG4gIGltYWdlUmVjdCAiIDw8IGltYWdlUmVjdAorICAgICAgICA8PCAiXG4gIGFic29sdXRlSW1h
Z2VnUmVjdCAiIDw8IGFic29sdXRlSW1hZ2VSZWN0KTsKIAotICAgIHZJbWFnZVByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCku
dmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9u
LmRhdGEoKTsKKyAgICBpZiAoIWFwcGx5UGxhdGZvcm0oKmltYWdlLCBpbnB1dHMsIGdlb21ldHJ5
LCByZXN1bHQucmVuZGVyaW5nTW9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MV0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRp
ZgotfQotCi1zdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVf
dCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAg
c3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRl
c3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAg
ICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNv
dXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBd
KSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAg
ICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZp
bHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
KQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0
bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZl
ci5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1
ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0
KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9y
U3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxw
aGFGb3JtYXQpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVs
QnVmZmVyQ29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VC
dWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5k
bGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIHN0YWNrLmFwcGVuZCh7ICppbWFnZSB9KTsKKyAgICByZXN1bHQuaW1hZ2VzKCku
YWRkKHsgKnRoaXMgfSwgUmVmPEZpbHRlckltYWdlPigqaW1hZ2UpKTsKIAotICAgIC8vIENvbG9y
IHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9u
ZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
dGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgcmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCitUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBj
b25zdAogewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVy
UmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBz
YXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29s
b3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0K
LQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQot
ewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1i
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0
aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgot
ICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Ig
c3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVy
IGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRp
b25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNw
YWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25D
b2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgotfQotCi1UZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVu
dCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRh
cmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgeworICAgIGlmIChyZXByZXNlbnRhdGlvbiA9PSBGaWx0
ZXJSZXByZXNlbnRhdGlvbjo6RGVidWdnaW5nKSB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBp
bWFnZSIsIG1fYWxwaGFJbWFnZSk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5n
IGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICAgICAg
dHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXIpCi17Ci0gICAgLy8gVXNlIGEgbmV3IHN0cmVhbSBiZWNhdXNlIHdlIHdhbnQgbXVsdGlsaW5l
IG1vZGUgZm9yIGxvZ2dpbmcgZmlsdGVycy4KLSAgICBUZXh0U3RyZWFtIGZpbHRlclN0cmVhbTsK
LSAgICBmaWx0ZXIuZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihmaWx0ZXJTdHJlYW0sIEZpbHRlckVm
ZmVjdDo6UmVwcmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpOwotICAgIAotICAgIHJldHVybiB0
cyA8PCBmaWx0ZXJTdHJlYW0ucmVsZWFzZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAppbmRleCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0
NzFjLi4yYWQ2YzYyNmQwYTZkODc4ZThiZGQ2ZWE5MzY1NTIwN2ExNjE3ZDlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKQEAgLTIyLDIzNyArMjIsNTggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19CisjaW5jbHVkZSAiUmVuZGVyaW5nTW9k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgRmlsdGVyOwotY2xhc3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci0K
LXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7
Ci0KLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24s
Ci0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAot
ICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dAotfTsKK2NsYXNzIEZpbHRlckJvdW5kYXJ5
U2V0OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZl
Y3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJs
aWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAg
ICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENv
bXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGlu
ZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAg
ICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAg
TGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBP
ZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAg
IFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGlj
Ci0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJS
ZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0gICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVu
bXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxv
cHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBp
bnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNp
Z25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGltYWdlQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIAot
ICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBt
YW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCi0g
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAg
RmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgLy8g
U29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgotICAgIGJvb2wg
aXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0gICAgdm9pZCBz
ZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1h
Z2U7IH0KLQotICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2Fic29sdXRlUGFpbnRSZWN0OyB9Ci0gICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJz
b2x1dGVQYWludFJlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZl
Y3RSZWN0OyB9IAotCi0gICAgdm9pZCBhcHBseSgpOwotCi0gICAgLy8gQ29ycmVjdCBhbnkgaW52
YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZpbHRlciBvcGVy
YXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFsaWQgcGl4ZWwg
dmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCi0gICAgLy8gT25s
eSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBj
b3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwot
Ci0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCB7
IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmlydHVhbCBJbnRPdXRz
ZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0KLQotICAgIGVudW0g
Y2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07Ci0gICAg
dmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0
cHV0KSBjb25zdDsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcgc3Bl
Y2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4K
LSAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NTYxNC4KLSAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hhc1g7IH0KLSAgICB2b2lk
IHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNZ
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJvb2wgdmFsdWUp
IHsgbV9oYXNZID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2hhc1dpZHRoOyB9Ci0gICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZhbHVlKSB7IG1faGFz
V2lkdGggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2hhc0hlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNI
ZWlnaHQgPSB2YWx1ZTsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0gICAgdm9p
ZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29u
c3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3Vu
ZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5k
YXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRB
YnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBl
ZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJT
cGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVyRWZm
ZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0K
LQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBG
aWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29sIGNs
aXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lk
IHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsg
fQotCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1
bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7
Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1h
bGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9
IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZh
bHVlczsKLSAgICB9CisgICAgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQmLCBGaWx0ZXJJbWFnZVZl
Y3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlT
ZXQmKSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKIHByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwgVHlwZSk7CisgICAgdXNp
bmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogICAgIAotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25z
dDsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUg
Y29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEgaW4gWzAs
MjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGll
ZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5l
Y2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAg
dmlydHVhbCBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwor
ICAgIHZpcnR1YWwgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3Rv
ciYpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdl
QnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVk
QXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252
ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwg
UGl4ZWxCdWZmZXImKTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0ID0gMDsKICAgICAKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmLCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNl
bmRpZgogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9p
bnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAv
LyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMg
dGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAg
ICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4g
bV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0g
ICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRo
ZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8g
VGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOworICAgIGJvb2wgYXBwbHlQbGF0Zm9ybShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIFJlbmRlcmlu
Z01vZGUpIGNvbnN0OwogCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0
dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBv
ZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0Jiwg
RmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZp
bmFsOwogICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBtYXBwZWQgdG8gYWJz
b2x1dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgotICAgIEZsb2F0UmVjdCBtX2Fic29s
dXRlVW5jbGlwcGVkU3VicmVnaW9uOwotCi0gICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9oYXNYIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc1dpZHRoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzSGVpZ2h0IHsg
ZmFsc2UgfTsKLQotICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2
ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5w
dXRzLgotICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwotCi0jaWYgRU5BQkxFKERF
U1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVh
clNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdD
b2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RD
bGFzc1R5cGU7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0
ZXJFZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3QoKTsgfQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QudHlwZSgpID09
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1lOyB9IFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUzNTY3ZmMzMWU1Yjll
OWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNy
ZWF0ZShib29sIGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwgRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlmIChhY2NlbGVyYXRl
ZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAgICBVTlVTRURfUEFS
QU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotCi19IC8v
IG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcxMzIyYjc1YTc1NzNl
OWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVy
RWZmZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAg
ICAKLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSA9IDA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NWY0YzgzMmNlM2FlMTZkOWVhOTIwOWNmODcyZWRiNzhjMGNiNzkzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RWZWN0b3IuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKwor
dXNpbmcgRmlsdGVyRWZmZWN0VmVjdG9yID0gVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OGMzMDAzYmUyNzdhNTdiMmM5MzRlM2Q1YzFiOTExMWQ2ZDY4NDgxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlv
bi5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSB0eXBl
KQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgYXV0byYgZmlsdGVy
TmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRlck5hbWVNYXAgPSBIYXNoTWFwPEZpbHRlckZ1bmN0
aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6OkludEhhc2g8RmlsdGVyRnVuY3Rpb246OlR5cGU+
LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1bmN0aW9uOjpUeXBlPj47CisKKyAg
ICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CisgICAg
ICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFtZXMgPSB7CisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAgICAgICAgICAiQ1NTRmlsdGVyIl9zICAgICAgICAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyLCAgICAg
ICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwgICAgICAgICAgICAgIkZFQmxlbmQi
X3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9yTWF0cml4Il9zICAgICAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyLCAiRkVDb21wb25l
bnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVD
b21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9zaXRlIl9zICAgICAgICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgsICAgICJGRUNvbnZvbHZl
TWF0cml4Il9zICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNlTGlnaHRpbmciX3MgICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsICAgIkZFRGlzcGxhY2Vt
ZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJv
cFNoYWRvdywgICAgICAgICJGRURyb3BTaGFkb3ciX3MgICAgICAgIH0sCisgICAgICAgICAgICB7
IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLCAgICAgICAgICAgICAiRkVGbG9vZCJfcyAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVz
c2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5CbHVyIl9zICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsICAgICAgICAgICAgICJGRUltYWdlIl9zICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdl
LCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAgICAgICAgIkZFTW9ycGhvbG9neSJf
cyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0
LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsICAiRkVTcGVjdWxhckxpZ2h0
aW5nIl9zICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLCAg
ICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAgICAgICJGRVR1cmJ1bGVuY2UiX3Mg
ICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFs
cGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJfcyAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljLCAgICAgICAiU291cmNlR3JhcGhpYyJf
cyAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGZpbHRlck5hbWVzOworICAg
IH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZpbHRlck5hbWVzLmdldCgpOworfQorCitBdG9tU3Ry
aW5nIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4g
ZmlsdGVyTmFtZXMoKS5nZXQodHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTBlMWMyYTQ0ZjI3ODQwMTQxYzFlNDUwNTM1MTE2
MTc1NzU3NWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXByZXNlbnRh
dGlvbi5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdU
RiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyUmVzdWx0OworY2xhc3MgSW1hZ2VCdWZmZXI7
CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rp
b24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAg
Q1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAgRkVNaW5pbXVtLAorCisg
ICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29sb3JNYXRyaXgsCisgICAg
ICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9zaXRlLAorICAgICAgICBG
RUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGluZywKKyAgICAgICAgRkVE
aXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAgICAgICAgRkVGbG9vZCwK
KyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2UsCisgICAgICAgIEZFTWVy
Z2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZzZXQsCisgICAgICAgIEZF
U3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAgICBGRVR1cmJ1bGVuY2Us
CisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFwaGljLAorCisgICAgICAg
IEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAgRmlsdGVyRnVuY3Rpb24o
VHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGJvb2wgaXNDU1NGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9v
bCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7
IH0KKyAgICBib29sIGlzRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkNT
U0ZpbHRlciB8fCBtX3R5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRl
ckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV90
eXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIEF0b21TdHJpbmcgZmlsdGVy
TmFtZShUeXBlKTsKKyAgICBzdGF0aWMgQXRvbVN0cmluZyBzb3VyY2VBbHBoYU5hbWUoKSB7IHJl
dHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUFscGhhKTsgfQorICAgIHN0YXRpYyBBdG9tU3Ry
aW5nIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VH
cmFwaGljKTsgfQorICAgIEF0b21TdHJpbmcgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZp
bHRlck5hbWUobV90eXBlKTsgfQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyNlbmRpZgorCisgICAgdmlydHVhbCBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25z
dCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQm
LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24gPSBGaWx0ZXJSZXByZXNl
bnRhdGlvbjo6VGVzdE91dHB1dCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIFR5cGUgbV90
eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpT
VkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxl
bmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFu
c2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRl
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJp
eCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0
aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFk
b3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21l
dHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTc4ZDM2MzZhZjk3Nzk4MDdmNTZlZGNhYWMyMmM3N2E3Nzll
MzMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmls
dGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBmbG9hdCBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDog
bV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICwgbV9maWx0ZXJTY2FsZShGbG9hdFNp
emUoZmlsdGVyU2NhbGUsIGZpbHRlclNjYWxlKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlw
T3BlcmF0aW9uKQoreworfQorCitGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYgdGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8
RmlsdGVyQm91bmRhcnlTZXQ+JiYgZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKQorICAgIDogRmls
dGVyR2VvbWV0cnkoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgdGFyZ2V0Qm91bmRpbmdTaXpl
LCBXVEZNb3ZlKGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyksIENsaXBPcGVyYXRpb246OkludGVy
c2VjdCkKK3sKK30KKworRmlsdGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0
UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4mIHRhcmdldEJvdW5kaW5nU2l6ZSwgVmVjdG9yPEZpbHRl
ckJvdW5kYXJ5U2V0PiYmIGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cywgQ2xpcE9wZXJhdGlvbiBj
bGlwT3BlcmF0aW9uKQorICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICwg
bV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAsIG1fdGFyZ2V0Qm91bmRpbmdTaXplKHRh
cmdldEJvdW5kaW5nU2l6ZSkKKyAgICAsIG1fZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFdURk1v
dmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlw
T3BlcmF0aW9uKQoreworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6OmNhbGN1bGF0ZUZp
bHRlclNjYWxlKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFNp
emUmIGFic29sdXRlU2NhbGUpCit7CisgICAgYXV0byBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdCA9
IHNvdXJjZUltYWdlUmVjdDsKKyAgICBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdC5zY2FsZShhYnNv
bHV0ZVNjYWxlKTsKKyAgICBhdXRvIGNsYW1waW5nU2NhbGUgPSBGbG9hdFNpemUgeyAxLCAxIH07
CisgICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlU291cmNlSW1hZ2VS
ZWN0LnNpemUoKSwgY2xhbXBpbmdTY2FsZSk7CisgICAgcmV0dXJuIGFic29sdXRlU2NhbGUgKiBj
bGFtcGluZ1NjYWxlOworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJbWFn
ZVNpemUoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlt
YWdlU2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdTaXplLnZhbHVlX29yKEZsb2F0U2l6ZSgxLCAxKSk7
Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXJHZW9tZXRyeTo6bWFwSW1hZ2VTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBpbWFnZVNpemUgKiBtX2ZpbHRl
clNjYWxlOworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6Om1hcFJlc29sdmVkSW1hZ2VT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBtYXBJ
bWFnZVNpemUocmVzb2x2ZUltYWdlU2l6ZShpbWFnZVNpemUpKTsKK30KKworCitGbG9hdFJlY3Qg
RmlsdGVyR2VvbWV0cnk6Om1hcEltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkg
Y29uc3QKK3sKKyAgICBhdXRvIHNjYWxlZEltYWdlUmVjdCA9IGltYWdlUmVjdDsKKyAgICBzY2Fs
ZWRJbWFnZVJlY3Quc2NhbGUobV9maWx0ZXJTY2FsZSk7CisgICAgcmV0dXJuIHNjYWxlZEltYWdl
UmVjdDsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXBJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0SW1hZ2VSZWN0KSBj
b25zdAoreworICAgIGF1dG8gbW92ZWRJbWFnZVJlY3QgPSBpbWFnZVJlY3Q7CisgICAgbW92ZWRJ
bWFnZVJlY3QubW92ZUJ5KC10YXJnZXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJu
IG1hcEltYWdlUmVjdChtb3ZlZEltYWdlUmVjdCk7Cit9CisKK0ZpbHRlckJvdW5kYXJ5U2V0IEZp
bHRlckdlb21ldHJ5Ojpib3VuZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSwgdW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VHcmFwaGljIHx8IHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaW5kZXggPj0gbV9m
aWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMuc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBtX2ZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0c1tpbmRleF07Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvRmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdAoreworICAgIHJldHVybiBpbnRlcnNlY3Rpb24ocHJpbWl0aXZlU3VicmVnaW9uLCBt
X2ZpbHRlclJlZ2lvbik7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGlwT3BlcmF0
aW9uID09IENsaXBPcGVyYXRpb246OkludGVyc2VjdCA/IGludGVyc2VjdGlvbihpbWFnZVJlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbikgOiB1bmlvblJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6OmNsaXBUb01heFByaW1pdGl2
ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGNsaXBUb1ByaW1pdGl2ZVN1
YnJlZ2lvbihpbWFnZVJlY3QsIGNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU3NzNkNWZhODc4MzYzNGYzZjM0NDg0NDJmNGViOGYxYzNlOTA0NGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdl
b21ldHJ5LmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJCb3VuZGFy
eVNldC5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXJHZW9tZXRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZW51bSBjbGFzcyBDbGlwT3BlcmF0aW9uIHsgSW50ZXJzZWN0LCBVbml0ZSB9OworCisg
ICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGZsb2F0IGZp
bHRlclNjYWxlID0gMSwgQ2xpcE9wZXJhdGlvbiA9IENsaXBPcGVyYXRpb246OkludGVyc2VjdCk7
CisgICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYg
dGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+JiYpOworCisgICAg
c3RhdGljIEZsb2F0U2l6ZSBjYWxjdWxhdGVGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRTaXplJiBhYnNvbHV0ZVNjYWxlKTsKKworICAgIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQor
ICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7
IH0KKworICAgIEZsb2F0U2l6ZSByZXNvbHZlSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplKSBjb25zdDsKKworICAgIEZsb2F0U2l6ZSBtYXBJbWFnZVNpemUoY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBtYXBSZXNvbHZlZEltYWdlU2l6
ZShjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbWFw
SW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0KSBjb25zdDsKKyAgICBGbG9hdFJl
Y3QgbWFwSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmVndEltYWdlUmVjdCkgY29uc3Q7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCBib3Vu
ZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUsIHVuc2lnbmVkKSBjb25zdDsKKworICAgIEZsb2F0
UmVjdCBjbGlwVG9GaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworCisgICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworICAgIEZsb2F0UmVjdCBjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxGaWx0ZXJHZW9tZXRyeT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxG
bG9hdFNpemU+JiB0YXJnZXRCb3VuZGluZ1NpemUsIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4m
JiwgQ2xpcE9wZXJhdGlvbik7CisKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAg
RmxvYXRTaXplIG1fZmlsdGVyU2NhbGU7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4g
bV90YXJnZXRCb3VuZGluZ1NpemU7CisgICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBtX2Zp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKworICAgIENsaXBPcGVyYXRpb24gbV9jbGlwT3BlcmF0
aW9uIHsgQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0IH07Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBlbmNvZGVyIDw8IG1f
ZmlsdGVyU2NhbGU7CisKKyAgICBlbmNvZGVyIDw8IG1fdGFyZ2V0Qm91bmRpbmdTaXplOworICAg
IGVuY29kZXIgPDwgbV9maWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisKKyAgICBlbmNvZGVyIDw8
IG1fY2xpcE9wZXJhdGlvbjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8RmlsdGVyR2VvbWV0cnk+IEZpbHRlckdlb21ldHJ5OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZmlsdGVyUmVnaW9uOworICAg
IGRlY29kZXIgPj4gZmlsdGVyUmVnaW9uOworICAgIGlmICghZmlsdGVyUmVnaW9uKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IGZp
bHRlclNjYWxlOworICAgIGRlY29kZXIgPj4gZmlsdGVyU2NhbGU7CisgICAgaWYgKCFmaWx0ZXJT
Y2FsZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjpvcHRpb25hbDxGbG9hdFNpemU+PiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgZGVjb2Rl
ciA+PiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgaWYgKCF0YXJnZXRCb3VuZGluZ1NpemUpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxG
aWx0ZXJCb3VuZGFyeVNldD4+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKyAgICBkZWNvZGVy
ID4+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKyAgICBpZiAoIWZpbHRlckVmZmVjdEJvdW5k
YXJ5U2V0cykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Q2xpcE9wZXJhdGlvbj4gY2xpcE9wZXJhdGlvbjsKKyAgICBkZWNvZGVyID4+IGNsaXBPcGVy
YXRpb247CisgICAgaWYgKCFjbGlwT3BlcmF0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIEZpbHRlckdlb21ldHJ5KCpmaWx0ZXJSZWdpb24sICpmaWx0ZXJT
Y2FsZSwgKnRhcmdldEJvdW5kaW5nU2l6ZSwgV1RGTW92ZSgqZmlsdGVyRWZmZWN0Qm91bmRhcnlT
ZXRzKSwgKmNsaXBPcGVyYXRpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24sCisK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2Vj
dCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OlVuaXRl
CisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jYmE1MTAwMjQ2Y2Y5OTc2NTAwZmU5NGNlODY1MWQ5ODFmNjQwMjkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVNvZnR3YXJlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VD
b3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2lu
Y2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9v
bCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5p
c0VtcHR5KCkgfHwgaW1hZ2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6
ZSkpOworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0
ZXJJbWFnZUNvcmVJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgaXNBbHBoYUlt
YWdlLCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZVNvZnR3
YXJlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGxvZ2ljYWxT
aXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKwor
UmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgUmVmPEltYWdl
QnVmZmVyPiYmIGltYWdlQnVmZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRl
ckltYWdlU29mdHdhcmUocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIFdURk1vdmUoaW1h
Z2VCdWZmZXIpKSk7Cit9CisKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wg
aXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0
aXZlU3VicmVnaW9uKQorICAgICwgbV9pbWFnZVJlY3QoaW1hZ2VSZWN0KQorICAgICwgbV9pc0Fs
cGhhSW1hZ2UoaXNBbHBoYUltYWdlKQorICAgICwgbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkK
KyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9u
U2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7
Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCBy
b3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3Jj
OworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBp
bnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3Jj
LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Cisg
ICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9
IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3Rp
bmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291
cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBz
b3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAg
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisg
ICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBz
b3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBv
bmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNl
bmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNp
emVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Cisg
ICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKwor
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRo
KCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3Qq
IGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRh
KCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxw
aGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7
CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
Ml0gPSAwOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxw
aGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiYgRmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlciA6IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmls
dGVySW1hZ2U6OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQp
Cit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9y
bWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIu
dmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBp
bWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUo
bV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOwor
ICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAg
IHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIg
PSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAocGl4ZWxCdWZm
ZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAg
ICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRh
dGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgY29weVVucHJlbXVs
dGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUp
OworCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZs
b3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rp
b24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Ig
c3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJz
aW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8v
IEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJu
IGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAv
LyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24t
Q0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Cisg
ICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRTaXplIHNj
YWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBzY2FsZWRQYWludFNpemUuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24g
dG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3Vy
Y2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwg
c2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0
Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3Rp
bmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkg
cmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisg
ICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8
fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0
LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBp
ZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9y
aWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAg
aWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsK
KyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVz
dCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQg
PSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGlu
dCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2Nhbmxp
bmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVs
ID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4
RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEo
KSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsK
KworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRp
b25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9
IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5s
aW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sK
KyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVj
dC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0
IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJz
aW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVydGVk
SW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29sb3Ig
c3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25l
IGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3Bh
Y2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdl
OjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlKSBjb25zdAoreworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZl
ci5zaXplKCkpOworICAgIHJlY3Quc2NhbGUoMSAvIG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXpl
KCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBp
eGVsQnVmZmVyCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxl
LCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOwor
fQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK3sKKyAgICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMo
YWxwaGFGb3JtYXQpID8gJnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkg
OiBudWxscHRyOworCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWly
ZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAg
ICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7
CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZShtX2xvZ2ljYWxTaXplKSB9OworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZv
cm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VC
eXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAg
fQorCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAg
ICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAg
IGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9u
LCBzcmNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVz
KHBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBG
aWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8g
TXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fu
bm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJy
YXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBp
eGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0g
aW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBl
ciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5n
dGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVs
QXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxE
YXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4
NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4
dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVl
blBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsy
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRh
LCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAg
fSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVu
Z3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5
TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBh
bHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hp
bGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRl
IGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAg
ICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBp
eGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9
IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNy
ZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBG
aWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNl
IGFkanVzdG1lbnRzIGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOwor
I2Vsc2UKKyAgICBpZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vz
c2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNl
IHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAg
ICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGlt
YWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNwYWNlKG1fY29sb3JTcGFjZSwgY29sb3JTcGFjZSk7
CisKKyAgICBtX2NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVk
UGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXIgPSBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0ZmE4N2MwNzJiYjc2YzVjYjY4OTA5MzAwYThmMGNiZjA1
ZWJkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Rmls
dGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1h
Z2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxv
YXRSZWN0JiBpbWFnZVJlY3QsIFJlZjxJbWFnZUJ1ZmZlcj4mJik7CisKKyAgICB2aXJ0dWFsIH5G
aWx0ZXJJbWFnZSgpID0gZGVmYXVsdDsKKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlUmVjdDsgfQorICAgIGJvb2wgaXNB
bHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KKworICAgIEZsb2F0
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlQnVmZmVy
KiBpbWFnZUJ1ZmZlcigpID0gMDsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIFBpeGVsQnVm
ZmVyKiBwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0
ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICAK
KyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAgICB2b2lkIHRy
YW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcm90ZWN0ZWQ6
CisgICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQ
aXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKworICAgIEZs
b2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFJlY3QgbV9pbWFnZVJlY3Q7
CisgICAgYm9vbCBtX2lzQWxwaGFJbWFnZSB7IGZhbHNlIH07CisKKyAgICBGbG9hdFNpemUgbV9s
b2dpY2FsU2l6ZTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9h
dCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNw
YWNlOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2VWZWN0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1h
Z2VWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTc1MzU5MmE3YzZhOWQyZjZmYzU0OWU0ZDdlZjk0Y2Y3
MjAwOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZVZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVySW1hZ2U7CisKK3VzaW5nIEZpbHRlckltYWdlVmVjdG9yID0gVmVjdG9yPFJlZjxGaWx0ZXJJ
bWFnZT4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGRiZmY3ZDgwNDdjZWY5ZWY2M2EzNmVjYzM1ZTVlOWIyMDExY2Vl
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBGaWx0ZXJSZXByZXNlbnRhdGlvbiA6IHVpbnQ4
X3QgeworICAgIFRlc3RPdXRwdXQsCisgICAgRGVidWdnaW5nCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQyODdkMTUzYzA0MWIyOTk4
MWE2OWRhZmUzYTY0OWU5NzU0YzMyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdChSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKK3sKK30KKwor
UmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUZpbHRlckltYWdlKGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdS
ZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBGaWx0
ZXJJbWFnZTo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGlzQWxwaGFJ
bWFnZSwgbG9naWNhbFNpemUsIG1fcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkYzg4MzRm
NzdmZjlkM2VkY2NmMGFiMjgxZjgyMTIzM2U4OGM3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJGdW5j
dGlvbjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVySW1hZ2U7CisKK2NsYXNz
IEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAgdXNpbmcgSW1hZ2VzID0gSGFzaE1hcDxSZWY8
Y29uc3QgRmlsdGVyRnVuY3Rpb24+LCBSZWY8RmlsdGVySW1hZ2U+PjsKKworICAgIEZpbHRlclJl
c3VsdChSZW5kZXJpbmdNb2RlKTsKKworICAgIEltYWdlcyYgaW1hZ2VzKCkgeyByZXR1cm4gbV9p
bWFnZXM7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmluZ01vZGU7IH0KKworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlRmls
dGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgZHJhd2luZ1JlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworcHJpdmF0ZToKKyAg
ICBJbWFnZXMgbV9pbWFnZXM7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUy
ZjBlYjk0ODJjNjEwZjU1ZGJiMzIzNGZhNjJlY2RlZTdhMjc4OTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNw
cApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5h
dGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMaWdodFNvdXJjZTo6TGlnaHRTb3VyY2UoRGF0
YSYmIGRhdGEpCisgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKK3sKK30KKwordm9pZCBMaWdo
dFNvdXJjZTo6c2V0QXppbXV0aChmbG9hdCBhemltdXRoKQoreworICAgIGlmIChhdXRvKiBkYXRh
ID0gc3RkOjpnZXRfaWY8RGlzdGFudExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpCisgICAgICAg
IGRhdGEtPnNldEF6aW11dGgoYXppbXV0aCk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldEVs
ZXZhdGlvbihmbG9hdCBlbGV2YXRpb24pCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6Omdl
dF9pZjxEaXN0YW50TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0
RWxldmF0aW9uKGVsZXZhdGlvbik7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFgoZmxvYXQg
eCkKK3sKKyAgICBpZiAoYXV0byogZGF0YSA9IHN0ZDo6Z2V0X2lmPFBvaW50TGlnaHRTb3VyY2VE
YXRhPigmbV9kYXRhKSkgeworICAgICAgICBkYXRhLT5zZXRYKHgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3Vy
Y2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0WCh4KTsKK30KKwordm9pZCBMaWdo
dFNvdXJjZTo6c2V0WShmbG9hdCB5KQoreworICAgIGlmIChhdXRvKiBkYXRhID0gc3RkOjpnZXRf
aWY8UG9pbnRMaWdodFNvdXJjZURhdGE+KCZtX2RhdGEpKSB7CisgICAgICAgIGRhdGEtPnNldFko
eSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXV0byogZGF0YSA9IHN0ZDo6
Z2V0X2lmPFNwb3RMaWdodFNvdXJjZURhdGE+KCZtX2RhdGEpKQorICAgICAgICBkYXRhLT5zZXRZ
KHkpOworfQorCit2b2lkIExpZ2h0U291cmNlOjpzZXRaKGZsb2F0IHopCit7CisgICAgaWYgKGF1
dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxQb2ludExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpIHsK
KyAgICAgICAgZGF0YS0+c2V0Wih6KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdXRvKiBkYXRhID0gc3RkOjpnZXRfaWY8U3BvdExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkp
CisgICAgICAgIGRhdGEtPnNldFooeik7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50
c0F0WChmbG9hdCBwb2ludHNBdFgpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9p
ZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRz
QXRYKHBvaW50c0F0WCk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WShmbG9h
dCBwb2ludHNBdFkpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGln
aHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRZKHBvaW50
c0F0WSk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WihmbG9hdCBwb2ludHNB
dFopCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VE
YXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRaKHBvaW50c0F0Wik7Cit9
CisgICAgCit2b2lkIExpZ2h0U291cmNlOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGln
aHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0U3BlY3VsYXJFeHBvbmVu
dChzcGVjdWxhckV4cG9uZW50KTsKK30KKwordm9pZCBMaWdodFNvdXJjZTo6c2V0TGltaXRpbmdD
b25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCit7CisgICAgaWYgKGF1dG8qIGRhdGEg
PSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0
YS0+c2V0TGltaXRpbmdDb25lQW5nbGUobGltaXRpbmdDb25lQW5nbGUpOworfQorCitMaWdodFNv
dXJjZVBhaW50RGF0YSBMaWdodFNvdXJjZTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNv
bnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9kYXRhLAorICAgICAgICBbJl0gKGNvbnN0IERpc3RhbnRMaWdodFNvdXJjZURh
dGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXB1dGVMaWdodFNvdXJjZVBh
aW50RGF0YShjb2xvclZlY3Rvcik7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUG9p
bnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXB1
dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb2xvclZlY3Rvcik7CisgICAgICAgIH0sCisgICAgICAg
IFsmXSAoY29uc3QgU3BvdExpZ2h0U291cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0
dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbG9yVmVjdG9yKTsKKyAgICAg
ICAgfQorICAgICk7Cit9CisKK0xpZ2h0U291cmNlUGl4ZWxEYXRhIExpZ2h0U291cmNlOjpjb21w
dXRlTGlnaHRTb3VyY2VQaXhlbERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdAoreworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25zdCBEaXN0YW50TGlnaHRTb3VyY2VE
YXRhJiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5jb21wdXRlTGlnaHRTb3VyY2VQ
aXhlbERhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZd
IChjb25zdCBQb2ludExpZ2h0U291cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJu
IGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7
CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgU3BvdExpZ2h0U291cmNlRGF0YSYgZGF0
YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRh
KHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CisgICAgICAgIH0KKyAgICApOworfQorCitUZXh0U3Ry
ZWFtJiBMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykg
Y29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAo
Y29uc3QgRGlzdGFudExpZ2h0U291cmNlRGF0YSYgZGF0YSkgLT4gVGV4dFN0cmVhbSYgeworICAg
ICAgICAgICAgcmV0dXJuIGRhdGEuZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgICAg
IH0sCisgICAgICAgIFsmXSAoY29uc3QgUG9pbnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIC0+IFRl
eHRTdHJlYW0mIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFNwb3RMaWdodFNvdXJjZURh
dGEmIGRhdGEpIC0+IFRleHRTdHJlYW0mIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICB9CisgICAgKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1
NWQyMzVhNzM4OWY1ZDUuLmQ1ZTYxYjkzMDBjMDhjMmIxZjNhZTAyN2RkMjhiNjViNmY3ZTVkYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmgKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOCArMjQs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRGlzdGFudExpZ2h0U291cmNlRGF0YS5o
IgorI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiU3BvdExpZ2h0
U291cmNlRGF0YS5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CkBAIC0z
Miw2NiArMzQsNjEgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1lbnVtIExpZ2h0VHlwZSB7Ci0gICAgTFNfRElTVEFOVCwKLSAgICBMU19QT0lOVCwKLSAgICBM
U19TUE9UCi19OworY2xhc3MgTGlnaHRTb3VyY2UgeworcHVibGljOgorICAgIHVzaW5nIERhdGEg
PSBzdGQ6OnZhcmlhbnQ8CisgICAgICAgIERpc3RhbnRMaWdodFNvdXJjZURhdGEsCisgICAgICAg
IFBvaW50TGlnaHRTb3VyY2VEYXRhLAorICAgICAgICBTcG90TGlnaHRTb3VyY2VEYXRhCisgICAg
PjsKIAotY2xhc3MgRmlsdGVyRWZmZWN0OworICAgIFdFQkNPUkVfRVhQT1JUIExpZ2h0U291cmNl
KERhdGEmJik7CisKKyAgICB2b2lkIHNldEF6aW11dGgoZmxvYXQpOworICAgIHZvaWQgc2V0RWxl
dmF0aW9uKGZsb2F0KTsKKyAgICAKKyAgICAvLyBUaGVzZSBhcmUgaW4gdXNlciBzcGFjZSBjb29y
ZGluYXRlcy4KKyAgICB2b2lkIHNldFgoZmxvYXQpOworICAgIHZvaWQgc2V0WShmbG9hdCk7Cisg
ICAgdm9pZCBzZXRaKGZsb2F0KTsKKyAgICB2b2lkIHNldFBvaW50c0F0WChmbG9hdCk7CisgICAg
dm9pZCBzZXRQb2ludHNBdFkoZmxvYXQpOworICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZsb2F0KTsK
KyAgICAKKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworICAgIHZvaWQgc2V0
TGltaXRpbmdDb25lQW5nbGUoZmxvYXQpOworCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgY29t
cHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3Ip
IGNvbnN0OwogCi1jbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291
cmNlPiB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IENvbXB1dGVkTGlnaHRpbmdEYXRhIHsKLSAgICAg
ICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yOwotICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JW
ZWN0b3I7Ci0gICAgICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgaW5pdGlh
bExpZ2h0aW5nRGF0YTsKLSAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKLSAg
ICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OwotICAgICAgICBmbG9hdCBjb25lRnVsbExpZ2h0
OwotICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKLSAgICB9OwotCi0gICAgTGlnaHRTb3Vy
Y2UoTGlnaHRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgeyB9Ci0KLSAg
ICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgpID0gZGVmYXVsdDsKLQotICAgIExpZ2h0VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFp
bnRpbmdEYXRhJikgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlz
IHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJm
YWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3Rh
bmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0
ZXJFZmZlY3QncyBidWZmZXIuCi0gICAgdmlydHVhbCBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21w
dXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCB6KSBjb25zdCA9IDA7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0
U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5
LCBmbG9hdCB6KSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzZXRBemltdXRoKGZsb2F0KSB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgLy8gVGhlc2UgYXJlIGluIHVzZXIgc3BhY2UgY29v
cmRpbmF0ZXMuCi0gICAgdmlydHVhbCBib29sIHNldFgoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIHNldFkoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNldFooZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IHNldFBvaW50c0F0WChmbG9hdCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2V0UG9pbnRzQXRZKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
ZXRQb2ludHNBdFooZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgdmlydHVhbCBi
b29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxMaWdodFNvdXJjZT4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBM
aWdodFR5cGUgbV90eXBlOworICAgIERhdGEgbV9kYXRhOwogfTsKIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgTGlnaHRTb3VyY2U6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9kYXRhOworfQog
Ci0jZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElHSFRTT1VSQ0UoQ2xhc3NOYW1lLCBU
eXBlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNsYXNzTmFtZSkg
XAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpMaWdodFNvdXJjZSYgc291
cmNlKSB7IHJldHVybiBzb3VyY2UudHlwZSgpID09IFdlYkNvcmU6OlR5cGU7IH0gXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8TGlnaHRTb3VyY2U+IExpZ2h0U291cmNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOwor
ICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBMaWdodFNvdXJjZShXVEZNb3ZlKCpkYXRhKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
TGlnaHRTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0xpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjOGMwYTc2ZWZjODE4ZDdmYzc5MTQ0
ZDcyYWMwNDFiZjVkY2E1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlRGF0YS5oCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWlu
Ym9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZsb2F0UG9pbnQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBMaWdodFNv
dXJjZVBpeGVsRGF0YSB7CisgICAgRmxvYXRQb2ludDNEIGNvbG9yVmVjdG9yOworICAgIEZsb2F0
UG9pbnQzRCBsaWdodFZlY3RvcjsKKyAgICBmbG9hdCBsaWdodFZlY3Rvckxlbmd0aDsKK307CisK
K3N0cnVjdCBMaWdodFNvdXJjZVBhaW50RGF0YSB7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEg
aW5pdGlhbExpZ2h0aW5nRGF0YTsKKyAgICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uVmVjdG9yOwor
ICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKKyAgICBmbG9hdCBjb25lRnVsbExpZ2h0OworICAg
IGludCBzcGVjdWxhckV4cG9uZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYjVl
MTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBI
ZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJl
bmlAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBv
aW50TGlnaHRTb3VyY2UuaCIKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFBv
aW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCi17Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3Np
dGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20g
bV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBv
aW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
eyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVk
Wi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci19Ci0KLUxpZ2h0U291cmNlOjpDb21wdXRl
ZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikg
Y29uc3QKLXsKLSAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7Ci0gICAgICAgIG1fYnVm
ZmVyUG9zaXRpb24ueCgpIC0geCwKLSAgICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAot
ICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKLSAgICB9OwotCi0gICAgcmV0dXJuIHsg
bGlnaHRWZWN0b3IsIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9y
LCBsaWdodFZlY3Rvci5sZW5ndGgoKSB9OwotfQotCi1ib29sIFBvaW50TGlnaHRTb3VyY2U6OnNl
dFgoZmxvYXQgeCkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi54KCkgPT0geCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WCh4KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQb2ludExpZ2h0U291cmNlOjpzZXRZKGZsb2F0IHkp
Ci17Ci0gICAgaWYgKG1fdXNlclNwYWNlUG9zaXRpb24ueSgpID09IHkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFkoeSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUG9pbnRMaWdodFNvdXJjZTo6c2V0WihmbG9hdCB6KQotewotICAgIGlm
IChtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSA9PSB6KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV91c2VyU3BhY2VQb3NpdGlvbi5zZXRaKHopOwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBQb2ludExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKLSAg
ICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVy
biB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5ODU5
NmQ3MTE1ZjRiYjk1YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBvaW50
TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb2ludExpZ2h0U291cmNlKHBv
c2l0aW9uKSk7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlclNwYWNlUG9zaXRpb247IH0KLSAgICBib29sIHNldFgoZmxvYXQp
IG92ZXJyaWRlOwotICAgIGJvb2wgc2V0WShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRa
KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKLSAgICBDb21wdXRlZExpZ2h0aW5n
RGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgs
IGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQot
cHJpdmF0ZToKLSAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRp
b24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQpCi0gICAgICAgICwgbV91c2VyU3Bh
Y2VQb3NpdGlvbihwb3NpdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1f
dXNlclNwYWNlUG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElH
SFRTT1VSQ0UoUG9pbnRMaWdodFNvdXJjZSwgTFNfUE9JTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxNDhlZWNjZDNjNjkzM2I5ZTIyNDI4OGI4MjQ5ZGQ3
ZGViZTEyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8
emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2ludExpZ2h0U291
cmNlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BvaW50TGlnaHRTb3VyY2VEYXRhOjpQb2ludExpZ2h0U291cmNlRGF0
YShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQorICAgIDogbV9wb3NpdGlvbihwb3NpdGlv
bikKK3sKK30KKworTGlnaHRTb3VyY2VQYWludERhdGEgUG9pbnRMaWdodFNvdXJjZURhdGE6OmNv
bXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9y
KSBjb25zdAoreworICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkobV9wb3NpdGlvbi54eSgpKTsK
KyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBv
c2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9
IHsgbV9wb3NpdGlvbi54KCkgKyBtX3Bvc2l0aW9uLnooKSwgbV9wb3NpdGlvbi55KCkgfTsKKyAg
ICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngo
KSk7CisgICAgCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgcGFpbnREYXRhID0geyB9OworICAg
IHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gY29sb3JWZWN0b3I7
CisgICAgcmV0dXJuIHBhaW50RGF0YTsKK30KKworTGlnaHRTb3VyY2VQaXhlbERhdGEgUG9pbnRM
aWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdodFNvdXJjZVBpeGVsRGF0YShjb25zdCBMaWdodFNv
dXJjZVBhaW50RGF0YSYgcGFpbnREYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0Cit7
CisgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yID0geworICAgICAgICBtX2J1ZmZlclBvc2l0
aW9uLngoKSAtIHgsCisgICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueSgpIC0geSwKKyAgICAgICAg
bV9idWZmZXJQb3NpdGlvbi56KCkgLSB6CisgICAgfTsKKworICAgIHJldHVybiB7IHBhaW50RGF0
YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLCBsaWdodFZlY3RvciwgbGlnaHRWZWN0
b3IubGVuZ3RoKCkgfTsKK30KKworVGV4dFN0cmVhbSYgUG9pbnRMaWdodFNvdXJjZURhdGE6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwg
Ilt0eXBlPVBPSU5ULUxJR0hUXSAiOworICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IG1fcG9z
aXRpb24gPDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNDFmMWNmZTI4
YWNmMWQwMjA2MThhMTc2NTZmNzhhOWFjNTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZURhdGEuaApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8
cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJMaWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQb2ludExpZ2h0U291cmNlRGF0YSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgUG9pbnRMaWdodFNvdXJjZURhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbik7CisK
KyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3Bvc2l0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lk
IHNldFkoZmxvYXQgeSkgeyBtX3Bvc2l0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFooZmxv
YXQgeikgeyBtX3Bvc2l0aW9uLnNldFkoeik7IH0KKworICAgIExpZ2h0U291cmNlUGFpbnREYXRh
IGNvbXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVj
dG9yKSBjb25zdDsKKyAgICBMaWdodFNvdXJjZVBpeGVsRGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQ
aXhlbERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0
IHopIGNvbnN0OworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBvaW50TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2Rl
ciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIG11dGFi
bGUgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBQb2ludExpZ2h0U291cmNlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3Bvc2l0aW9uOworfQorCit0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxQb2ludExpZ2h0U291cmNlRGF0YT4gUG9pbnRM
aWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRQb2ludDNEPiBwb3NpdGlvbjsKKyAgICBkZWNvZGVyID4+IHBvc2l0aW9uOwor
ICAgIGlmICghcG9zaXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gUG9pbnRMaWdodFNvdXJjZURhdGEoKnBvc2l0aW9uKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3
ZmZmOTA5MGFkNmNmM2EzLi4xZDM3MzEwN2QzYmQzZGFmZGNhMzViMmVlOGQzYzk5ODU0ZDMxNzVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsNjAgKzIxLDMyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNl
QWxwaGEuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgi
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVm
ZmVjdCYgc291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRl
KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3Qp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYSgpKTsKIH0KIAotY29uc3Qg
QXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJj
ZUFscGhhKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0
TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQorRmlsdGVySW1hZ2VWZWN0b3IgU291cmNlQWxwaGE6OnRha2VJ
bnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0
KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi12
b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVy
Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIGZpbHRlckNv
bnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwotICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OkRlc3RpbmF0aW9uSW4pOwotfQotCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFs
cGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRl
ckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAg
IHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFh
ZGU2NGM1NjFlODY0YTM5NDkwZi4uZmI2NmRiOGRjZGM5N2ZiMTQwMGVjMjY0NjNlYjZlZjVmZWVl
N2Y3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUo
RmlsdGVyRWZmZWN0Jik7Ci0KLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFt
ZSgpOworICAgIHN0YXRpYyBSZWY8U291cmNlQWxwaGE+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIFNvdXJjZUFscGhhKCk7CisKKyAgICBGaWx0ZXJJ
bWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIlNvdXJjZUFscGhhIjsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYg
b3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXgg
ODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzExMDdkNzgzOTJlOS4uZTYyMmVhOWQzNzliNWU2
MDkwYzYyNzJiZWJiYjAyNTI2Y2M5MzRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0NyArMjEsMzQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNv
dXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxT
b3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhp
Yzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpTb3VyY2VHcmFwaGljKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFk
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VHcmFw
aGljIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2Vm
ZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwot
ICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQg
U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlckltYWdlVmVjdG9y
IFNvdXJjZUdyYXBoaWM6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghcmVz
dWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkp
OworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRT
dHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W1NvdXJjZUdyYXBoaWNdXG4iOwogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXgg
MzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uOGRkY2JkZTAyNzQ2YjQx
NzcyYzY3ZDY0NTk5M2Q3NmRjYjMyNjQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVu
Z3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOCw0MSArMTksMzEgQEAKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlR3JhcGhp
Y19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsK
LQotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxTb3VyY2VHcmFwaGljPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToK
LSAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQotICAgICAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCi0gICAgewotICAgICAgICBzZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdy
YXBoaWMiOyB9CisgICAgU291cmNlR3JhcGhpYygpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVy
RWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3Vy
Y2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlcklt
YWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29y
ZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBo
aWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYg
ZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJ
bWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29s
IGFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5k
aWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0j
ZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjA3YWIwMGZm
OWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYzNDhkMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWlu
Ym9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
VW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3Zh
biA8cmVuaUB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU3BvdExpZ2h0U291cmNlLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
c3BvdC1saWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFuIGFic29sdXRlIHRyZXNob2xk
Ci0vLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwot
c3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwotCi12b2lkIFNw
b3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
ckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgbV9idWZmZXJQb3Np
dGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91
c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQg
b2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4K
LSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRp
b24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFp
bnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJT
cGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXpl
KCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxp
bWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0g
LWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4w
ZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdD
b25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGlu
Z0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAg
Ly8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBp
ZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAg
ICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBp
cyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAyOwotfQotCi1MaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgU3BvdExp
Z2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKLXsKLSAgICBGbG9hdFBv
aW50M0QgbGlnaHRWZWN0b3IgPSB7Ci0gICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwK
LSAgICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAotICAgICAgICBtX2J1ZmZlclBvc2l0
aW9uLnooKSAtIHoKLSAgICB9OwotICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRW
ZWN0b3IubGVuZ3RoKCk7Ci0KLSAgICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9y
ICogcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKLSAg
ICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKLSAg
ICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQK
LSAgICAgICAgcmV0dXJuIHsgbGlnaHRWZWN0b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5ndGggfTsK
LSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbAotICAgIGZsb2F0IGxp
Z2h0U3RyZW5ndGg7Ci0gICAgc3dpdGNoIChwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCkg
ewotICAgIGNhc2UgMDoKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVP
ZkFuZ2xlIF4gMCA9PSAxCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICAgbGln
aHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNv
c2luZU9mQW5nbGUKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRh
LmNvbmVGdWxsTGlnaHQpCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50aW5nRGF0YS5j
b25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0IC0gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpOwotCi0gICAgaWYgKGxpZ2h0U3Ry
ZW5ndGggPiAxLjBmKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKLQotICAgIHJldHVy
biB7Ci0gICAgICAgIGxpZ2h0VmVjdG9yLAotICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExp
Z2h0aW5nRGF0YS5jb2xvclZlY3RvciAqIGxpZ2h0U3RyZW5ndGgsCi0gICAgICAgIGxpZ2h0VmVj
dG9yTGVuZ3RoCi0gICAgfTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFgoZmxvYXQg
eCkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi54KCkgPT0geCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WCh4KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFkoZmxvYXQgeSkKLXsKLSAgICBp
ZiAobV91c2VyU3BhY2VQb3NpdGlvbi55KCkgPT0geSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WSh5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFooZmxvYXQgeikKLXsKLSAgICBpZiAobV91c2VyU3Bh
Y2VQb3NpdGlvbi56KCkgPT0geikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNw
YWNlUG9zaXRpb24uc2V0Wih6KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90TGln
aHRTb3VyY2U6OnNldFBvaW50c0F0WChmbG9hdCBwb2ludHNBdFgpCi17Ci0gICAgaWYgKG1fdXNl
clNwYWNlUG9pbnRzQXQueCgpID09IHBvaW50c0F0WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdXNlclNwYWNlUG9pbnRzQXQuc2V0WChwb2ludHNBdFgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0UG9pbnRzQXRZKGZsb2F0IHBvaW50c0F0
WSkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb2ludHNBdC55KCkgPT0gcG9pbnRzQXRZKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV91c2VyU3BhY2VQb2ludHNBdC5zZXRZKHBvaW50c0F0
WSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3BvdExpZ2h0U291cmNlOjpzZXRQb2lu
dHNBdFooZmxvYXQgcG9pbnRzQXRaKQotewotICAgIGlmIChtX3VzZXJTcGFjZVBvaW50c0F0Lnoo
KSA9PSBwb2ludHNBdFopCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3VzZXJTcGFjZVBv
aW50c0F0LnNldFoocG9pbnRzQXRaKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90
TGlnaHRTb3VyY2U6OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkK
LXsKLSAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9u
ZW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0TGlt
aXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCi17Ci0gICAgaWYgKG1fbGlt
aXRpbmdDb25lQW5nbGUgPT0gbGltaXRpbmdDb25lQW5nbGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX2xpbWl0aW5nQ29uZUFuZ2xlID0gbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9U1BP
VC1MSUdIVF0gIjsKLSAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJc
Il0iOwotICAgIHRzIDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsK
LSAgICB0cyA8PCAiW3NwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8
PCAiXCJdIjsKLSAgICB0cyA8PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0Nv
bmVBbmdsZSgpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZhZTQ0MmE1ZWE1MzRmZDFmM2JmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vz
c2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJj
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uLAotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRp
cmVjdGlvbiwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTcG90TGlnaHRTb3VyY2UocG9z
aXRpb24sIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBvbmVudCwgbGltaXRpbmdDb25lQW5nbGUpKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV91c2VyU3BhY2VQb3NpdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3BhY2VQb2ludHNBdDsgfQotICAgIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAg
ICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25l
QW5nbGU7IH0KLQotICAgIGJvb2wgc2V0WChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRZ
KGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwotICAgIGJv
b2wgc2V0UG9pbnRzQXRYKGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29sIHNldFBvaW50c0F0WShm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRQb2ludHNBdFooZmxvYXQpIG92ZXJyaWRlOwot
Ci0gICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29s
IHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5pdFBh
aW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsK
LSAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKLQotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBTcG90TGlnaHRTb3VyY2UoY29uc3Qg
RmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgICAgICA6
IExpZ2h0U291cmNlKExTX1NQT1QpCi0gICAgICAgICwgbV91c2VyU3BhY2VQb3NpdGlvbihwb3Np
dGlvbikKLSAgICAgICAgLCBtX3VzZXJTcGFjZVBvaW50c0F0KGRpcmVjdGlvbikKLSAgICAgICAg
LCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgLCBtX2xpbWl0
aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9h
dFBvaW50M0QgbV91c2VyU3BhY2VQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV91c2VyU3Bh
Y2VQb2ludHNBdDsKLQotICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOwotCi0gICAg
ZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwotICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TElHSFRTT1VSQ0UoU3BvdExpZ2h0U291cmNlLCBMU19TUE9UKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2VEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVlNzlmODc2YmVmMmU0NjFmMzFjZjU2NmNmNDIwMTk4
NmQ3MWM5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9i
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8
cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Bv
dExpZ2h0U291cmNlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nwb3RMaWdodFNvdXJjZURhdGE6OlNwb3RMaWdodFNv
dXJjZURhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNE
JiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFu
Z2xlKQorICAgIDogbV91c2VyU3BhY2VQb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fdXNlclNw
YWNlUG9pbnRzQXQoZGlyZWN0aW9uKQorICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFy
RXhwb25lbnQpCisgICAgLCBtX2xpbWl0aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQor
eworfQorCisvLyBzcG90LWxpZ2h0IGVkZ2UgZGFya2VuaW5nIGRlcGVuZHMgb24gYW4gYWJzb2x1
dGUgdHJlc2hvbGQKKy8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNz
aW9uIHRlc3RzCitzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7
CisKK0xpZ2h0U291cmNlUGFpbnREYXRhIFNwb3RMaWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdo
dFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9yKSBjb25zdAor
eworICAgIExpZ2h0U291cmNlUGFpbnREYXRhIHBhaW50RGF0YTsKKyAgICAKKyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSk7CisgICAgLy8gVG8gc2Nh
bGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUg
eCBkaXJlY3Rpb24gYnkgei4KKyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSB7IG1fdXNlclNwYWNl
UG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRp
b24ueSgpIH07CisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZm
ZXJQb3NpdGlvbi54KCkpOworICAgIAorICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRh
LmNvbG9yVmVjdG9yID0gY29sb3JWZWN0b3I7CisKKyAgICBwYWludERhdGEuZGlyZWN0aW9uVmVj
dG9yID0gbV91c2VyU3BhY2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRpb247CisgICAgcGFp
bnREYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKworICAgIGlmICghbV9saW1pdGlu
Z0NvbmVBbmdsZSkgeworICAgICAgICBwYWludERhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsK
KyAgICAgICAgcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5n
Q29uZUFuZ2xlOworICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQorICAgICAg
ICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAgIGlm
IChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorICAgICAgICAgICAgbGltaXRpbmdDb25lQW5n
bGUgPSA5MC4wZjsKKyAgICAgICAgcGFpbnREYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVn
MnJhZCgxODAuMGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOworICAgICAgICBwYWludERhdGEuY29u
ZUZ1bGxMaWdodCA9IHBhaW50RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9s
ZDsKKyAgICB9CisKKyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9u
ZW50IHZhbHVlcworICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQorICAgICAgICBwYWludERh
dGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7CisgICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50
ID09IDEuMGYpCisgICAgICAgIHBhaW50RGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKKyAgICBl
bHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgorICAgICAgICBwYWludERhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9IDI7CisgICAgCisgICAgcmV0dXJuIHBhaW50RGF0YTsKK30KKworTGln
aHRTb3VyY2VQaXhlbERhdGEgU3BvdExpZ2h0U291cmNlRGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNl
UGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCB4LCBp
bnQgeSwgZmxvYXQgeikgY29uc3QKK3sKKyAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7
CisgICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwKKyAgICAgICAgbV9idWZmZXJQb3Np
dGlvbi55KCkgLSB5LAorICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKKyAgICB9Owor
ICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRWZWN0b3IubGVuZ3RoKCk7CisKKyAg
ICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9yICogcGFpbnREYXRhLmRpcmVjdGlv
blZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKKyAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBh
aW50RGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKKyAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVj
ZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKKyAgICAgICAgcmV0dXJuIHsgbGlnaHRWZWN0
b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5ndGggfTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNv
bG9yIG9mIHRoZSBwaXhlbAorICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgc3dpdGNoIChw
YWludERhdGEuc3BlY3VsYXJFeHBvbmVudCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVPZkFuZ2xlIF4gMCA9PSAxCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMToKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAv
LyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNvc2luZU9mQW5nbGUKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUs
IG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChj
b3NpbmVPZkFuZ2xlID4gcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQpCisgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggKj0gKHBhaW50RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChw
YWludERhdGEuY29uZUN1dE9mZkxpbWl0IC0gcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQpOworCisg
ICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxLjBmKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4w
ZjsKKworICAgIHJldHVybiB7CisgICAgICAgIGxpZ2h0VmVjdG9yLAorICAgICAgICBwYWludERh
dGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciAqIGxpZ2h0U3RyZW5ndGgsCisgICAg
ICAgIGxpZ2h0VmVjdG9yTGVuZ3RoCisgICAgfTsKK30KKworVGV4dFN0cmVhbSYgU3BvdExpZ2h0
U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QK
K3sKKyAgICB0cyA8PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9u
PVwiIiA8PCBtX3VzZXJTcGFjZVBvc2l0aW9uIDw8ICJcIl0iOworICAgIHRzIDw8ICJbZGlyZWN0
aW9uPVwiIiA8PCBtX3VzZXJTcGFjZVBvaW50c0F0IDw8ICJcIl0iOworICAgIHRzIDw8ICJbc3Bl
Y3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJcIl0iOworICAgIHRz
IDw8ICJbbGltaXRpbmdDb25lQW5nbGU9XCIiIDw8IG1fbGltaXRpbmdDb25lQW5nbGUgPDwgIlwi
XSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZmRiOTM0MmI2ZDUwOGE5YjA4YzljMzhm
NDg2NzAzMTA2YmJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3Vp
bmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJM
aWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTcG90TGln
aHRTb3VyY2VEYXRhIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBTcG90TGlnaHRTb3Vy
Y2VEYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQzRCYg
ZGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmds
ZSk7CisKKyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFgo
eCk7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFko
eSk7IH0KKyAgICB2b2lkIHNldFooZmxvYXQgeikgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFoo
eik7IH0KKworICAgIHZvaWQgc2V0UG9pbnRzQXRYKGZsb2F0IHBvaW50c0F0WCkgeyBtX3VzZXJT
cGFjZVBvaW50c0F0LnNldFgocG9pbnRzQXRYKTsgfQorICAgIHZvaWQgc2V0UG9pbnRzQXRZKGZs
b2F0IHBvaW50c0F0WSkgeyBtX3VzZXJTcGFjZVBvaW50c0F0LnNldFkocG9pbnRzQXRZKTsgfQor
ICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZsb2F0IHBvaW50c0F0WikgeyBtX3VzZXJTcGFjZVBvaW50
c0F0LnNldFoocG9pbnRzQXRaKTsgfQorCisgICAgdm9pZCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQpIHsgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBv
bmVudDsgfQorICAgIHZvaWQgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25l
QW5nbGUpIHsgbV9saW1pdGluZ0NvbmVBbmdsZSA9IGxpbWl0aW5nQ29uZUFuZ2xlOyB9CisKKyAg
ICBMaWdodFNvdXJjZVBhaW50RGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoY29uc3Qg
RmxvYXRQb2ludDNEJiBjb2xvclZlY3RvcikgY29uc3Q7CisgICAgTGlnaHRTb3VyY2VQaXhlbERh
dGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTcG90TGlnaHRTb3Vy
Y2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQzRCBt
X3VzZXJTcGFjZVBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvaW50c0F0
OworCisgICAgbXV0YWJsZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKworICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOwor
fTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU3BvdExpZ2h0U291cmNlRGF0YTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3VzZXJT
cGFjZVBvc2l0aW9uOworICAgIGVuY29kZXIgPDwgbV91c2VyU3BhY2VQb2ludHNBdDsKKyAgICBl
bmNvZGVyIDw8IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBlbmNvZGVyIDw8IG1fbGltaXRpbmdD
b25lQW5nbGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNw
b3RMaWdodFNvdXJjZURhdGE+IFNwb3RMaWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludDNEPiB1c2VyU3BhY2VQb3Np
dGlvbjsKKyAgICBkZWNvZGVyID4+IHVzZXJTcGFjZVBvc2l0aW9uOworICAgIGlmICghdXNlclNw
YWNlUG9zaXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UG9pbnQzRD4gdXNlclNwYWNlUG9pbnRzQXQ7CisgICAgZGVjb2RlciA+PiB1
c2VyU3BhY2VQb2ludHNBdDsKKyAgICBpZiAoIXVzZXJTcGFjZVBvaW50c0F0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3BlY3VsYXJF
eHBvbmVudDsKKyAgICBkZWNvZGVyID4+IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgaWYgKCFzcGVj
dWxhckV4cG9uZW50KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gbGltaXRpbmdDb25lQW5nbGU7CisgICAgZGVjb2RlciA+PiBsaW1pdGlu
Z0NvbmVBbmdsZTsKKyAgICBpZiAoIWxpbWl0aW5nQ29uZUFuZ2xlKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNwb3RMaWdodFNvdXJjZURhdGEoKnVzZXJTcGFj
ZVBvc2l0aW9uLCAqdXNlclNwYWNlUG9pbnRzQXQsICpzcGVjdWxhckV4cG9uZW50LCAqbGltaXRp
bmdDb25lQW5nbGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRT
b2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVlYjA3MmQ1ZjZiNzIwZDE3
NDFmOGU1MzRjZDE2MjgzNTM2YTMwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVCbGVuZC5oIgorCisjaW5jbHVkZSAi
RmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKK2Jvb2wgRkVCbGVuZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0g
Mik7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW5wdXQy
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBhdXRvIGlucHV0MkltYWdlID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFpbnB1dEltYWdlIHx8ICFpbnB1dDJJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VS
ZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1h
Z2VSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VSZWN0MiA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChp
bnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIAorICAg
IG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW1hZ2VSZWN0Mik7
CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGltYWdlUmVj
dCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjMzZGRiYjI2ZGUxZTdkOTZkMWY1Njgx
YmU0MDc3ZWM5MzkwYzI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYg
Ymx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAg
ZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7
CisgICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsg
dmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVz
WyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICog
ZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1Owor
ICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEy
XSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9
IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVl
c1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVB
bmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3Qg
ZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0g
Z3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVu
dHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVu
ICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVu
dHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNb
N10gKyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0
aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2
b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiAr
IDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9
IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBm
aWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVu
dHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5n
dGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBl
ID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4
TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhl
IGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8g
aXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2
YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3Ig
PSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdklt
YWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAg
IHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1
ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwor
ICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVz
ID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAg
c3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
OiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKwor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2
aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTog
eworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10g
KiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Cisg
ICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAg
IHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlz
b3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0
ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXpl
IGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
KQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNv
bXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZl
Y3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9u
ZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsg
cGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVl
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxv
YXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAg
ICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBw
aXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBw
aXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJh
eS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUg
PSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9h
dCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAg
ICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBp
eGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7
CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MywgYWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworVmVjdG9y
PGZsb2F0PiBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcykKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVz
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ld
KTsKKyAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4
OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1sw
XS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIp
IHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQu
aW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisgICAgICAgIG91dHB1dEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICB9
CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2Uo
KSB9OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIG91dHB1dEltYWdlLT5sb2dp
Y2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRh
dGEoKTsKKyAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUo
KTsKKworICAgIGF1dG8gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisKKyAg
ICBzd2l0Y2ggKG1fY29sb3JNYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBp
eGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6
CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBpbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThmN2VmYWEyM2NkNjNiODU5MjhhNzQ2M2Q2ZTc5NWJh
YzZiYjFkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApAQCAt
MCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgorCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgTG9va3VwVGFi
bGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
Cit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZh
bHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikK
K3sKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rp
b24udGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAg
ICBpZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOwor
ICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsK
KyAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107CisgICAgICAgIGRvdWJsZSB2MiA9
IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKKyAgICAgICAgZG91Ymxl
IHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOworICAg
ICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAg
dmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVz
OworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQor
ICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChp
ICogbikgLyAyNTUuMCk7CisgICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21wdXRlTGlu
ZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0
aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OworICAgICAg
ICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFs
dWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgZXhwb25l
bnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNz
aW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJs
ZQorICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1
ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0
KTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Cisg
ICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQor
CitzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAg
ICAgdGFibGVbaV0gPSBpOworCisgICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgVHJhbnNm
ZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisg
ICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLAorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxl
LAorICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwKKyAgICAgICAgY29tcHV0ZUxpbmVhclRh
YmxlLAorICAgICAgICBjb21wdXRlR2FtbWFUYWJsZQorICAgIH07CisKKyAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVm
ZmVjdCkpOworICAgIGNhbGxFZmZlY3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsK
KworICAgIHJldHVybiB0YWJsZTsKK30KKworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQo
KTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dFBp
eGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVm
ZmVyLT5kYXRhKCk7CisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFn
ZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1
dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KG91dHB1dEltYWdlUmVjdCksIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisKKyAgICBMb29rdXBUYWJsZSByZWRUYWJsZSA9IGNvbXB1dGVMb29rdXBU
YWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlID0gY29tcHV0
ZUxvb2t1cFRhYmxlKG1fZ3JlZW5GdW5jdGlvbik7CisgICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
ID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1ZUZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBh
bHBoYVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYWxwaGFGdW5jdGlvbik7CisKKyAgICB1
bnNpZ25lZCBvdXRwdXRQaXhlbEFycmF5TGVuZ3RoID0gb3V0cHV0UGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICB1aW50OF90KiBkYXRhID0gb3V0cHV0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBvdXRwdXRQaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRd
ID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0
ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CisgICAgICAgIGRhdGFb
cGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOworICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQg
KyAzXV07CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMGQ2ZjNhZTk0ZTdjN2Q4MDhiNTdjMWZjYzQ0MjRjYjg4MTBiMTAwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
RUNvbXBvc2l0ZS5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2ln
bmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0g
eyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQg
dWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+
MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGlu
dCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25l
ZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAg
ZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAg
ICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQg
PSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgewor
ICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hh
ciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGsz
ICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAq
IGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRL
NDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSBjbGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAg
Kytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRpb247CisgICAgfQorfQorCisvLyBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlz
IG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0
aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlvbi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBi
ND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7
CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQor
ICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2Nh
bGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0g
MCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBp
MSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2Fs
ZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBz
Y2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSByZXN1bHQ7CisgICAgICAgICsrc291
cmNlOworICAgICAgICArK2Rlc3RpbmF0aW9uOworICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVu
c2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhl
bEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sK
KyAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3RkOjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4w
ZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMpICsgazQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9
IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYs
IGszKSArIGs0OworICAgIGlmICgoazQgPj0gMC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJM
aW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQgPD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4w
ZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7CisgICAgICAgIGlmIChrNCkgeworICAgICAgICAg
ICAgaWYgKGsxKQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoazEpCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8
MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGs0KSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgs
IGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAg
ICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4
ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0KK30KKyNlbmRpZgorCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291
cmNlLmxlbmd0aCgpOworICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0
aW5hdGlvbi5sZW5ndGgoKSkpOworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5
IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQorICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4MykpOworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05l
b24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKKyNlbHNlCisgICAgYXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3Rp
bmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisjZW5kaWYKK30KKworYm9v
bCBGRUNvbXBvc2l0ZTo6YXBwbHlBcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAg
IGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0
c1sxXS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0
cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIG91
dHB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCks
IGlucHV0LmltYWdlUmVjdCgpKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0Lmdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJl
Y3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIWlu
cHV0UGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXQy
SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5w
dXQyLmltYWdlUmVjdCgpKTsKKyAgICBpbnB1dDIuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0
cHV0MkltYWdlUmVjdCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBwbGF0Zm9ybUFy
aXRobWV0aWNTb2Z0d2FyZSgqaW5wdXRQaXhlbEFycmF5LCBvdXRwdXRQaXhlbEFycmF5LCBtX2sx
LCBtX2syLCBtX2szLCBtX2s0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBv
c2l0ZTo6YXBwbHlOb25Bcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8m
IGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0c1sxXS5n
ZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAg
YXV0byBpbnB1dDJJbWFnZSA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJ
bWFnZSB8fCAhaW5wdXQySW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
b3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVj
dCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdl
UmVjdCgpKTsKKyAgICBhdXRvIGlucHV0MkltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBzd2l0Y2gg
KG1fY29tcG9zaXRlT3BlcmF0b3IpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VO
S05PV046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewor
ICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAg
ICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICAgICAgYXV0byBpbWFn
ZVJlY3QyID0gaW5wdXQyLmltYWdlUmVjdCgpOworICAgICAgICBhdXRvIG91dHB1dFJlY3QgPSBv
dXRwdXQuaW1hZ2VSZWN0KCk7CisKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbWFn
ZVJlY3Q7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0Mik7Cisg
ICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qob3V0cHV0UmVjdCk7CisgICAgICAgIGlm
IChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgYXV0byBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAg
ICAgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5KC1vdXRwdXRSZWN0LmxvY2F0aW9uKCkp
OworICAgICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCk7CisKKyAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0g
ZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2VSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0Lmxv
Y2F0aW9uKCkpOworICAgICAgICBzb3VyY2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KHNv
dXJjZVJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7
CisgICAgICAgIHNvdXJjZTJSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0Mi5sb2NhdGlvbigpKTsKKyAg
ICAgICAgc291cmNlMlJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qoc291cmNlMlJlY3QpOwor
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgYWRq
dXN0ZWREZXN0aW5hdGlvblJlY3QsIHNvdXJjZTJSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBz
b3VyY2VSZWN0LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3Qp
OworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlu
cHV0MkltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dDJJbWFnZS0+bG9naWNhbFNp
emUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0MkltYWdlLCBpbnB1dDJJbWFnZVJlY3QpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFn
ZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW5wdXRJbWFnZS0+bG9naWNhbFNpemUoKSksIENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0LCBJbnRSZWN0
KEludFBvaW50KCksIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRv
cjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgorICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dElt
YWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0
ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJl
dHVybiBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOwor
ICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2Vv
bWV0cnkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdkNDJk
MTcwZmYyMTU2MDlkMjgzZjY5YzY2YWZmMGNmNmIxZDg3MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKKworI2lu
Y2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVu
dGF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUg
aW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwKKyAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAg
fAorICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAgICAg
IHwgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBF
ICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIHJl
Z2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUgY2Fs
Y3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisKKyAg
IEV4YW1wbGU6CisgICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKworICAg
ICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAgICAg
VGFyZ2V0OiB4OjEsIHk6MworCisgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUg
dGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAgICAg
Li4uCisgICAgICAgIC4uLgorICAgICAgICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhpcyBj
YXNlIGFyZSB0aGUgZm9sbG93aW5nOgorICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQgYW5k
ICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cgeDIg
YW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBvbmx5
IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8IHky
CisKKyAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAgIFJl
Z2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4MTog
MSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKKyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMsIHgy
OiAxMCwgeTI6IDEwCisgICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5Mjog
MTAgKGVtcHR5IHJlZ2lvbikKKworICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlucyBt
b3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0gdG8g
Y2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4KKyAg
IEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2ggY2Fs
bHMgZ2V0UGl4ZWxWYWx1ZSwKKyAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUgaW1h
Z2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJpZ2dl
ciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisgICBm
dW5jdGlvbi4KKworICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBpbiBj
b21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9yIHRo
ZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3b3Vs
ZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCisqLworCisvLyBQYXJhbGxlbGl6
YXRpb24gcGFydHMKK3N0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMK
Kworc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNy
Y1BpeGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAg
aW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXpl
OworICAgIGZsb2F0IGRpdmlzb3I7CisgICAgZmxvYXQgYmlhczsKKyAgICBJbnRQb2ludCB0YXJn
ZXRPZmZzZXQ7CisgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgIGJvb2wgcHJlc2VydmVB
bHBoYTsKKyAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKK307CisKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5z
aWduZWQgY2hhciBtYXggPSAyNTUpCit7CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKGNoYW5uZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4gbWF4Owor
ICAgIHJldHVybiBjaGFubmVsOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldERl
c3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCB0b3RhbHNbNF0s
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcykKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6
IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xh
bXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CisKKyAg
ICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgeworICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhl
bCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKKyAgICAgICAgKytwaXhlbDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOworfQorCitzdGF0
aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50
IHlFbmQpCit7CisgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMK
KyAgICBpbnQgcGl4ZWwgPSAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGlu
Z0RhdGEud2lkdGggKyBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGlu
dCBrZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChw
YWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAgIC8vIENvbnRhaW5z
IHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAgICBmbG9hdCB0b3RhbHNbNF07CisKKyAg
ICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVu
c3VyZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICAvLyBT
a2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKKyAgICBwaXhlbCArPSAo
Y2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwor
ICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVh
c2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKKworICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsg
eSA+IHlTdGFydDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4
ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBz
dGFydEtlcm5lbFBpeGVsOworICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAg
ICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAg
ICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDAp
IHsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOworICAg
ICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5w
cmVzZXJ2ZUFscGhhKQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWw7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwg
Kz0ga2VybmVsSW5jcmVhc2U7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdE
YXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRp
bmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVB
bHBoYSk7CisgICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAg
ICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZh
bHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYg
KHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRp
bmdEYXRhLmhlaWdodCkKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsg
eCkgPDwgMjsKKworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7CisgICAgZGVm
YXVsdDogLy8gRURHRU1PREVfTk9ORQorICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBFREdF
TU9ERV9EVVBMSUNBVEU6CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHggPSAwOwor
ICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgICAgIHgg
PSBwYWludGluZ0RhdGEud2lkdGggLSAxOworICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAg
ICB5ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAg
ICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOworICAgICAgICByZXR1cm4gKHkg
KiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIGNhc2UgRURHRU1PREVfV1JBUDoK
KyAgICAgICAgd2hpbGUgKHggPCAwKQorICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lk
dGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB3aGlsZSAoeSA8
IDApCisgICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHkgJT0g
cGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndp
ZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CisKKy8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwor
c3RhdGljIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwor
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhl
bFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAt
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFp
bnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9m
IHJnYihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gbV9kaXZp
c29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMK
KyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOworCisgICAgZm9yIChpbnQgeSA9IGhl
aWdodDsgeSA+IDA7IC0teSkgeworICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAt
LXgpIHsKKyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxN
YXRyaXguc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtl
cm5lbFBpeGVsWDsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBp
eGVsWTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndp
ZHRoKCk7CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNb
MV0gPSAwOworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sz
XSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2Vy
bmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOworICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4
ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVs
SW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAg
ICArK2tlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAg
ICAgICAgICAgIGlmICghLS13aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhl
bFggPSBzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhl
bFk7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUu
d2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAg
ICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsK
KyAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKKyAgICB9Cit9CisKK2Jvb2wgRkVDb252b2x2
ZU1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBp
bnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBp
eGVsQnVmZmVyKG1fcHJlc2VydmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
IGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1
dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAg
YXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdl
UmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGlucHV0UGl4ZWxBcnJheTsKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICBp
bnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0
LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIElu
dFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIGlm
ICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRTaXpl
IHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworCisgICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKKyAgICAgICAgKmlucHV0UGl4ZWxBcnJheSwKKyAgICAg
ICAgb3V0cHV0UGl4ZWxBcnJheSwKKyAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCisgICAgICAg
IHBhaW50U2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rp
dmlzb3IsCisgICAgICAgIG1fYmlhcyAqIDI1NSwKKyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisg
ICAgICAgIG1fZWRnZU1vZGUsCisgICAgICAgIG1fcHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVD
b2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICB9OworCisg
ICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBw
YWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90
dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworCisgICAg
aWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8gUmFyZSBz
aXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaW50IGl0ZXJhdGlv
bnMgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbikgeworICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJh
dGlvbnM7CisgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAx
KSAvIHN0cmlkZTsKKworICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0Nv
dW50LCBbJl0oc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlk
ZSAqIGluZGV4KTsKKyAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUg
KiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRp
bmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xp
cFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBtX3Rh
cmdldE9mZnNldC55KCkgKyAxOworICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgp
LCBtX3RhcmdldE9mZnNldC55KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0
b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX3Rh
cmdldE9mZnNldC54KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsK
KyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9OyAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM5MDMyOWQ2N2JiMTkxOTA0N2Ni
MjBiOWRhNGFhYWZhMjU5MGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHks
IHVuc2lnbmVkIHJvd0J5dGVzKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwg
PSA0OworICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKK30KKwor
Ym9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFO
TkVMX1VOS05PV04pOworICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9V
TktOT1dOKTsKKyAgICAKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRv
JiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0u
Z2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0
UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBp
eGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJ
bWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1
dC5pbWFnZVJlY3QoKSk7CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5jbG9zaW5n
SW50UmVjdChvdXRwdXRJbWFnZVJlY3QpKTsKKyAgICAKKyAgICBhdXRvIG91dHB1dDJJbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dDIuaW1h
Z2VSZWN0KCkpOworICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVl
cyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNv
bG9yIHZhbHVlcy4KKyAgICBhdXRvIGlucHV0MlBpeGVsQnVmZmVyID0gaW5wdXQyLmdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5n
SW50UmVjdChvdXRwdXQySW1hZ2VSZWN0KSk7CisKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIg
fHwgIWlucHV0MlBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NF
UlQoaW5wdXRQaXhlbEJ1ZmZlci0+bGVuZ3RoKCkgPT0gaW5wdXQyUGl4ZWxCdWZmZXItPmxlbmd0
aCgpKTsKKworICAgIGF1dG8gcGFpbnRTaXplID0gZXhwYW5kZWRJbnRTaXplKG91dHB1dC5sb2dp
Y2FsU2l6ZSgpKTsKKworICAgIGF1dG8gc2NhbGUgPSBnZW9tZXRyeS5tYXBJbWFnZVNpemUoeyBt
X3NjYWxlLCBtX3NjYWxlIH0pOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lk
dGgoKSAvIDI1NS4wOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkg
LyAyNTUuMDsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAq
IDAuNTsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAw
LjU7CisgICAgCisgICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgp
OworICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKworICAg
IGludCByb3dCeXRlcyA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKKworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgaW50IGxpbmVTdGFy
dE9mZnNldCA9IHkgKiByb3dCeXRlczsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBh
aW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4
ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlu
dCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBpbnB1dDJQaXhl
bEJ1ZmZlci0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsg
c2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JZICogaW5wdXQyUGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25J
bmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOworCisgICAgICAg
ICAgICB1bnNpZ25lZCogb3V0cHV0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAw
IHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgKm91dHB1
dFBpeGVsUHRyID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBz
cmNZLCByb3dCeXRlcykpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURy
b3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA0ZTllZWEyZjlmMWZjYjcwMTI0N2Jj
ZGYzZGI5N2FiZjU2NWZkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBibHVyUmFkaXVzID0gMiAqIGdlb21ldHJ5Lm1hcFJlc29sdmVkSW1hZ2VTaXpl
KHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgYXV0byBvZmZzZXQg
PSBnZW9tZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSk7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW5wdXRJbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXRJbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJl
Y3QoKSk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCA9IGlucHV0SW1hZ2VS
ZWN0OworICAgIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBh
dXRvJiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRD
b250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCk7CisgICAg
b3V0cHV0Q29udGV4dC5zZXRBbHBoYSgxKTsKKworICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRv
dyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOworCisgICAgYXV0byBmb3JtYXQg
PSBQaXhlbEJ1ZmZlckZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIGF1dG8g
c2hhZG93QXJlYSA9IEludFJlY3QgeyBJbnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+bG9naWNhbFNp
emUoKSB9OworICAgIGF1dG8gc2hhZG93UGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXNoYWRvd1BpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJyYXkg
PSBzaGFkb3dQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVy
SW1hZ2Uoc2hhZG93UGl4ZWxBcnJheS5kYXRhKCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCks
IDQgKiBzaGFkb3dQaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworCisgICAgb3V0cHV0SW1h
Z2UtPnB1dFBpeGVsQnVmZmVyKCpzaGFkb3dQaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAg
ICBvdXRwdXRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlSW4pOworICAgIG91dHB1dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgb3V0cHV0LmxvZ2ljYWxTaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICBvdXRwdXRD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRp
b25PdmVyKTsKKworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdl
LCBpbnB1dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MmJlYWUxMGJlNTBlZWNmMTk5NGI3ZWY1Yzk0YWQ1MWY2MDk1ODk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgRkVGbG9vZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICBhdXRv
IG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fZmxvb2RDb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShtX2Zsb29kT3BhY2l0eSk7CisgICAgb3V0cHV0
SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRJ
bWFnZS0+bG9naWNhbFNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU1MTQ2MGY3OGQ1ZDZiNDJiNmU2MWE5MDg4
NTM2NWNmNDc1NGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAg
LTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSwgUy5MLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB2b2lkIGtlcm5l
bFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRh
TGVmdCwgaW50JiBkZWx0YVJpZ2h0KQoreworICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgor
ICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgeworICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCEo
cmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOwor
ICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDI7CisgICAgICAgICAgICBk
ZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAg
IGRlbHRhTGVmdCsrOworICAgICAgICAgICAgZGVsdGFSaWdodC0tOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAg
ICAgICAgICAgIGRlbHRhUmlnaHQrKzsKKyAgICAgICAgICAgIHJhZGl1cysrOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCitzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25s
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJy
YXkmIGRzdFBpeGVsQXJyYXksCisgICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4
UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGlu
dCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCit7CisgICAgY29uc3Qg
dWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOworICAgIHVpbnQ4X3QqIGRz
dERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKKyAgICAvLyBNZW1vcnkgYWxpZ25tZW50IGlz
OiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgorICAgIGNvbnN0IGludCBjaGFubmVsID0gMzsKKwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50
IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bSA9IDA7CisKKyAgICAgICAg
Ly8gRmlsbCB0aGUga2VybmVsLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5l
bFNpemU7ICsraSkgeworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBz
dHJpZGU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zm
c2V0OworICAgICAgICAgICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEJsdXJyaW5nLgorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdp
ZHRoOyArK3gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUg
KyB4ICogc3RyaWRlICsgY2hhbm5lbDsKKyAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRz
dERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7CisgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4oc3VtIC8gZHgpOworCisgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisg
ICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
ZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAg
ICAgICAgICAgICAgIHN1bSAtPSAqc3JjUHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAg
ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgc3VtICs9ICpzcmNQdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheSwKKyAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJp
ZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJv
b2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIGNvbnN0IGludCBt
YXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOworICAgIGlmIChh
bHBoYUltYWdlKQorICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5
LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUs
ICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKKworICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBk
c3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICAvLyBDb25jZXJuaW5nIHRoZSBh
cnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4g
VGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQorICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAq
IGNoYW5uZWxzLgorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsK
KyAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bVIgPSAw
LCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOworCisgICAgICAgIGlmIChlZGdlTW9kZSA9
PSBFREdFTU9ERV9OT05FKSB7CisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgc3VtRyArPSAqc3Jj
UHRyKys7CisgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAg
ICAgc3VtQSArPSAqc3JjUHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCbHVy
cmluZy4KKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkg
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICog
c3RyaWRlOworICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhl
bEJ5dGVPZmZzZXQ7CisKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1SIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKKworICAgICAgICAgICAgICAgIC8vIFNo
aWZ0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVm
dCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0g
c3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRy
WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0g
c3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh4ICsg
ZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJp
Z2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0
OworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtRyArPSBzcmNQdHJbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3Jj
UHRyWzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUuCisgICAgICAgICAgICAvLyBH
ZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUnLgorICAgICAgICAgICAgY29u
c3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOworICAgICAgICAgICAg
Y29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVj
dFdpZHRoIC0gMSkgKiBzdHJpZGUpOworCisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwu
CisgICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMg
b2YgJ2knPworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3Ry
aWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBv
ZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9
IGVkZ2VWYWx1ZUxlZnRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVl
TGVmdFsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgeworICAgICAgICAg
ICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOworICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9
IGVkZ2VWYWx1ZVJpZ2h0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1
ZVJpZ2h0WzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHN1bVIgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIr
KzsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAg
ICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIEJsdXJyaW5nLgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgdWludDhfdCog
ZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKKworICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7CisgICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKKyAgICAgICAg
ICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOworICAg
ICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwor
CisgICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAgICAgIGlmICh4
IDwgZHhMZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFsw
XTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOworICAgICAg
ICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0
IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBz
cmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAt
PSBzcmNQdHJbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOworICAg
ICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAg
c3VtQSAtPSBzcmNQdHJbM107CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRn
ZVZhbHVlUmlnaHRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmln
aHRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmln
aHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAg
ICAgICBzdW1HICs9IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQ
dHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIFVTRShB
Q0NFTEVSQVRFKQorc3RhdGljIGlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhl
aWdodCkKK3sKKyAgICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJp
ZGUgPD0gMCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgorICAg
IGlmIChrZXJuZWxTaXplICUgMiAhPSAxKQorICAgICAgICBrZXJuZWxTaXplICs9IDE7CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVmZmVyOworICAgIGVmZmVjdEluQnVmZmVyLmRhdGEg
PSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKKyAgICBlZmZlY3RJbkJ1ZmZl
ci53aWR0aCA9IGVmZmVjdFdpZHRoOworICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVj
dEhlaWdodDsKKyAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIHZJ
bWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVyOworICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0g
dGVtcEJ1ZmZlci5kYXRhKCk7CisgICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lk
dGg7CisgICAgZWZmZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZl
Y3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHNp
emUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdp
dGggYSBzcGVjaWFsIGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgorICAgIC8vIHRoZSBzaXplIG5l
ZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgorICAgIHNpemVfdCB0
bXBCdWZmZXJTaXplID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVy
LCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7CisgICAgaWYgKHRt
cEJ1ZmZlclNpemUgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogdG1wQnVmZmVy
ID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJTaXplKTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdC
ODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwg
a2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFn
ZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwg
dG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCk7CisgICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAm
ZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUs
IDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7CisK
KyAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisg
ICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOworICAg
IG1lbWNweShpb0J1ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5n
dGgoKSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUs
IEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKK3sKKyAgICBpbnQgZHhMZWZ0ID0gMDsKKyAgICBpbnQgZHhSaWdodCA9IDA7CisgICAg
aW50IGR5TGVmdCA9IDA7CisgICAgaW50IGR5UmlnaHQgPSAwOworICAgIAorICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKKyAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CisgICAgICAgICAgICBrZXJuZWxQb3Np
dGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAg
ICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21C
dWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRl
LCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7
CisjZWxzZQorICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJu
ZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBw
YWludFNpemUuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAg
ICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGtlcm5lbFNpemVZKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBr
ZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJ
Q1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hC
bHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0
b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNp
emUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQor
ICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
LndpZHRoKCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBz
dGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIGlm
ICgmaW9CdWZmZXIgIT0gZnJvbUJ1ZmZlcikgeworICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVu
Z3RoKCkgPT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICBtZW1jcHkoaW9CdWZmZXIu
ZGF0YSgpLCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwg
Ym9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgc3Ry
aWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAg
aWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9O
T05FIHx8IGVkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKKyAgICAgICAgYWNjZWxl
cmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUs
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKKyAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVs
QXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxw
aGFJbWFnZSwgZWRnZU1vZGUpOworfQorCisjaWYgIVVTRShBQ0NFTEVSQVRFKQorc3RhdGljIHZv
aWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKK3sKKyAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVy
cy0+aGVpZ2h0KTsKKyAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWlu
dFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisjaWYg
IVVTRShBQ0NFTEVSQVRFKQorICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgo
KTsKKyAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworICAgIGlu
dCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhl
aWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNp
emUud2lkdGgoKSk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAg
aW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChqb2Jz
ID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCIt
c2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkg
bGFyZ2VyIHNpbmNlCisgICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBz
aXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhF
eHRyYSIuCisgICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVp
Z2h0KCkgLyBqb2JzOworICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWlu
dFNpemUuaGVpZ2h0KCkgJSBqb2JzOworCisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwor
ICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAg
ICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2Jz
LnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwor
CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRy
YUhlaWdodDsKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJh
ID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7CisgICAgICAgICAgICAgICAgaW50IGVu
ZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7
CisKKyAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICogc2Nh
bmxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFt
cGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5p
bml0aWFsaXplZChibG9ja1NpemUpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1z
LmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGlu
ZSwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYXJh
bXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuaGVp
Z2h0ID0gZW5kWSAtIHN0YXJ0WTsKKyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVgg
PSBrZXJuZWxTaXplWDsKKyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJu
ZWxTaXplWTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1
dGUoKTsKKworICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGlt
YWdlLgorICAgICAgICAgICAgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9i
ID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAg
ICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0
aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgICAgIGlu
dCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0
ICsgMSA6IGJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0
ZWRCbG9ja0hlaWdodDsKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdo
dCAqIHNjYW5saW5lOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVu
dFkgKiBzY2FubGluZTsKKyAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdo
dCAqIHNjYW5saW5lOworCisgICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSAr
IGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VP
ZmZzZXQsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0K
KyNlbmRpZgorCisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhh
cHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBw
YWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworfQorCitib29sIEZFR2F1c3NpYW5C
bHVyOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0
cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgCisgICAgYXV0
byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVj
dCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0
cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
UmVjdChvdXRwdXRJbWFnZVJlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICgh
bV9zdGREZXZpYXRpb25YICYmICFtX3N0ZERldmlhdGlvblkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRyeS5t
YXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25ZIH0p
KTsKKyAgICBhdXRvIHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOwor
CisgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7CisgICAgaWYgKCF0bXBJbWFnZURhdGEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBsYXRmb3JtQXBwbHkob3V0cHV0UGl4ZWxB
cnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdo
dCgpLCBwYWludFNpemUsIG91dHB1dC5pc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGlu
Z1NvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjZlMDM1YTU2ODc5
NTc5YTRkNWViNTNiMTllZTIwMmJkZjk3ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKwor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkxpZ2h0aW5nRGF0YS5oIgor
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKKyAgICBMaWdodGluZ0RhdGEg
ZGF0YTsKKyAgICBMaWdodFNvdXJjZVBhaW50RGF0YSBwYWludERhdGE7CisgICAgaW50IHlTdGFy
dDsKKyAgICBpbnQgeUVuZDsKK307CisKKy8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3JtYWwg
Y29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lgorc3RhdGljIGNv
bnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKK3N0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGNG
YWN0b3IxZGl2NCA9IC0xIC8gNC5mOworc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRp
djMgPSAtMiAvIDMuZjsKKworc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50
RGF0YSYgcGFpbnREYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rv
clksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQoreworICAgIGZsb2F0IHog
PSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOworICAgIExpZ2h0U291cmNlUGl4ZWxEYXRhIHBp
eGVsRGF0YSA9IGRhdGEuc291cmNlLT5jb21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEocGFpbnRE
YXRhLCB4LCB5LCB6KTsKKworICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgaWYgKG5vcm1h
bDJEVmVjdG9yLmlzWmVybygpKSB7CisgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAs
IDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KKyAgICAgICAgaWYgKGRhdGEudHlw
ZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogcGl4ZWxEYXRhLmxpZ2h0VmVj
dG9yLnooKSAvIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKKyAgICAgICAgICAgICAg
ICBwaXhlbERhdGEubGlnaHRWZWN0b3IueCgpLAorICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5s
aWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLnoo
KSArIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aAorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwor
ICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9y
LnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndh
eVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZl
Y3RvciA9IHsKKyAgICAgICAgICAgIGZhY3RvclggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICog
ZGF0YS5zdXJmYWNlU2NhbGUsCisgICAgICAgICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3Iu
aGVpZ2h0KCkgKiBkYXRhLnN1cmZhY2VTY2FsZSwKKyAgICAgICAgICAgIDEuMGYKKyAgICAgICAg
fTsKKyAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0
aCgpOworCisgICAgICAgIGlmIChkYXRhLnR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VD
b25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBwaXhlbERhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CisgICAgICAg
ICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLngoKSwKKyAgICAgICAgICAgICAgICBwaXhl
bERhdGEubGlnaHRWZWN0b3IueSgpLAorICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5saWdodFZl
Y3Rvci56KCkgKyBwaXhlbERhdGEubGlnaHRWZWN0b3JMZW5ndGgKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5n
dGgoKTsKKyAgICAgICAgICAgIGlmIChkYXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAg
ICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogKG5vcm1h
bFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlW
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxm
d2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwg
ZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7CisgICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKKworICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIHBpeGVsRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAorICAgICAgICBzdGF0
aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogcGl4ZWxEYXRhLmNvbG9yVmVjdG9yLnko
KSAqIDI1NS4wZiksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGgg
KiBwaXhlbERhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQorICAgIH07CisgICAgCisgICAg
ZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCB4LCBpbnQgeSwg
ZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK3sK
KyAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCB4LCB5LCBmYWN0
b3JYLCBmYWN0b3JZLCBub3JtYWwyRFZlY3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCisvLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9t
IGFuZCB3cml0ZSB0byB0aGUgc2FtZSBwaXhlbCBidWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRo
ZSBhbHBoYSBjaGFubmVsLCBhbmQgd3JpdGVzIHRoZSBub24tYWxwaGEgY2hhbm5lbHMuCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCBzdGFy
dFksIGludCBlbmRZKQoreworICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdl
IHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgorICAgIEFTU0VSVChzdGFy
dFkpOworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIGZvciAoaW50IHkgPSBzdGFy
dFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgaW50IHJvd1N0YXJ0T2Zmc2V0ID0geSAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBwcmV2aW91c1Jvd1N0
YXJ0ID0gcm93U3RhcnRPZmZzZXQgLSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgICAgICBpbnQgbmV4dFJvd1N0YXJ0ID0gcm93U3RhcnRPZmZzZXQgKyBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOworCisgICAgICAgIC8vIGFscGhhV2luZG93IGlzIGEgbG9jYWwg
Y2FjaGUgb2YgYWxwaGEgdmFsdWVzLgorICAgICAgICAvLyBGaWxsIHRoZSB0d28gcmlnaHQgY29s
dW1ucyBwdXR0aW5nIHRoZSBsZWZ0IGVkZ2UgdmFsdWUgaW4gdGhlIGNlbnRlciBjb2x1bW4uCisg
ICAgICAgIC8vIEZvciBlYWNoIHBpeGVsLCB3ZSBzaGlmdCBlYWNoIHJvdyBsZWZ0IHRoZW4gZmls
bCB0aGUgcmlnaHQgY29sdW1uLgorICAgICAgICBBbHBoYVdpbmRvdyBhbHBoYVdpbmRvdzsKKyAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0VG9wKGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3Rh
cnQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldFRvcFJp
Z2h0KGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGFscGhhV2luZG93LnNldENlbnRlcihkYXRh
LnBpeGVscy0+aXRlbShyb3dTdGFydE9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGFscGhh
V2luZG93LnNldEJvdHRvbShkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldEJvdHRvbVJpZ2h0KGRhdGEu
cGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisKKyAgICAgICAgaW50IG9mZnNldCA9IHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6
ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7
ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIGFscGhhV2luZG93LnNo
aWZ0KCk7CisgICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRE
YXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1h
bChvZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOworICAgICAgICB9
CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAgIHBs
YXRmb3JtQXBwbHlHZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFp
bnREYXRhLCBwYXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBk
YXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSBwYWludERhdGEpCit7CisgICAgdW5zaWdu
ZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOworICAgIHVu
c2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKKyAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24s
IG1heE51bVRocmVhZHMpOworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAg
ICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3Jt
QXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKworICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKKyAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKKyAgICAgICAgaWYgKGpvYiA+IDEpIHsKKyAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMg
dGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQorICAgICAgICAgICAgLy8geVN0
ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSBy
ZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0g
cm93c1RvUHJvY2VzcyAvIGpvYjsKKyAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJh
ID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKKworICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Cisg
ICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKKyAgICAgICAgICAgICAg
ICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnBhaW50RGF0YSA9IHBhaW50RGF0YTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OworICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2Ig
PCBqb2JzV2l0aEV4dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7CisgICAgICAgICAgICAgICAgcGFy
YW1zLnlFbmQgPSB5U3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0KKworICAgIHBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnREYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSYgcGFpbnREYXRhKQor
eworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHlu
YW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCisjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJN
X1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyAgICBwbGF0Zm9ybUFw
cGx5TmVvbihkYXRhLCBwYWludERhdGEpOworI2Vsc2UKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJp
YyhkYXRhLCBwYWludERhdGEpOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIGRyYXdMaWdodGlu
Zyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBk
YXRhLmNvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0Nv
bG9yU3BhY2UpOworICAgIExpZ2h0U291cmNlUGFpbnREYXRhIHBhaW50RGF0YSA9IGRhdGEuc291
cmNlLT5jb21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoRmxvYXRQb2ludDNEKHIsIGcsIGIpKTsK
KworICAgIC8vIFRvcCBsZWZ0LgorICAgIGludCBvZmZzZXQgPSAwOworICAgIHNldFBpeGVsKG9m
ZnNldCwgZGF0YSwgcGFpbnREYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOworCisgICAgLy8gVG9wIHJpZ2h0LgorICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9m
ZnNldCkpOworCisgICAgLy8gQm90dG9tIGxlZnQuCisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zm
c2V0KSk7CisKKyAgICAvLyBCb3R0b20gcmlnaHQuCisgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2
MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOworCisgICAg
aWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyKSB7CisgICAgICAgIC8vIFRvcCByb3cu
CisgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQor
ICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIHgsIDAsIGNGYWN0
b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKKworICAg
ICAgICAvLyBCb3R0b20gcm93LgorICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Cisg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IG9mZnNldCArPSBjUGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRh
LCBwYWludERhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2Mywg
Y0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAg
ICBpZiAoZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA+PSAyKSB7CisgICAgICAgIC8vIExlZnQg
Y29sdW1uLgorICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7
ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAg
ICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50RGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYy
LCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKworICAgICAg
ICAvLyBSaWdodCBjb2x1bW4uCisgICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludERhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFj
dG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CisgICAgfQorCisgICAg
aWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyICYmIGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUgPj0gMikgeworICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCisgICAgICAgIHBsYXRm
b3JtQXBwbHkoZGF0YSwgcGFpbnREYXRhKTsKKyAgICB9CisKKyAgICBpbnQgbGFzdFBpeGVsID0g
KGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgaWYgKGRhdGEudHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0
OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCisgICAgICAgICAgICBkYXRhLnBpeGVs
cy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgdWlu
dDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOworICAgICAgICAgICAgdWludDhfdCBhMiA9
IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKKyAgICAgICAgICAgIHVpbnQ4X3QgYTMgPSBkYXRh
LnBpeGVscy0+aXRlbShpICsgMik7CisgICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRv
IG1heChhMSwgYTIsIGEzKQorICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEg
Pj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZFTGlnaHRpbmc6
OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBd
LmdldCgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1
dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQ
aXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0
SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5w
dXQuaW1hZ2VSZWN0KCkpOworCisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0
cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIC8vIEZJWE1FOiBz
dXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJl
IGlzIHRoYXQgdGhlIFczCisgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhl
bSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8g
b3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0
aGV5IGFyZSByZWxpYWJsZS4KKyAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxk
IGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgSW50U2l6ZSBzaXplID0gSW50U2l6
ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlm
IHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMgc3Bl
YyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMu
CisgICAgaWYgKHNpemUud2lkdGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmNvbG9y
ID0gbV9jb2xvcjsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1
LjBmOworICAgIGRhdGEuZGlmZnVzZUNvbnN0YW50ID0gbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAg
ZGF0YS5zcGVjdWxhckNvbnN0YW50ID0gbV9zcGVjdWxhckNvbnN0YW50OworICAgIGRhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBkYXRhLnNvdXJjZSA9ICZt
X3NvdXJjZTsKKyAgICBkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UgPSAmb3BlcmF0aW5nQ29sb3JT
cGFjZSgpOworICAgIGRhdGEudHlwZSA9IHR5cGUoKTsKKworICAgIGRhdGEucGl4ZWxzID0gJm91
dHB1dFBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHNp
emUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0g
c2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gc2l6ZS5o
ZWlnaHQoKSAtIDE7CisKKyAgICBkcmF3TGlnaHRpbmcoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJn
ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDQ4NTJjOTRlZmJhMzEzYzdmYzlhYTg3YTAwZWE5
MjFiMmUwYjIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1l
cmdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgcmVzdWx0LCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpbnB1dHMuaXNFbXB0eSgpKTsKKworICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworCisgICAgZm9yIChhdXRvJiBpbnB1
dCA6IGlucHV0cykgeworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gaW5wdXQtPmltYWdlQnVm
ZmVyKCk7CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5w
dXQtPmltYWdlUmVjdCgpLCByZXN1bHQuaW1hZ2VSZWN0KCkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3Jw
aG9sb2d5U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzMWVi
OTM1ZGM3N2M1ZjgxMjhjN2Q0NDhkNjAyN2I3NTk1MWVhOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9s
b2d5U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5o
IgorCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5o
IgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHsKKyAg
ICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yOworICAgIGludCByYWRpdXNY
OworICAgIGludCByYWRpdXNZOworCisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1Bp
eGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgaW50
IHdpZHRoOworICAgIGludCBoZWlnaHQ7Cit9OworCitzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMgeworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBNb3JwaG9sb2d5UGFpbnRpbmdE
YXRhJiwgaW50LCBpbnQpPiBmaWxsUmVnaW9uOworICAgIGludCBzdGFydFk7CisgICAgaW50IGVu
ZFk7CisgICAgY29uc3QgTW9ycGhvbG9neVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworfTsK
KwordXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4sIDE2PjsKKworc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoKQoreworICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OworfQorCitp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKK3sKKyAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOworfQorCitpbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Cit9
CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiYgYikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKKwor
ICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Cit9CisKK3RlbXBsYXRlPE1vcnBob2xv
Z3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCit7
CisgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQ
YWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3Jj
UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0p
OworCisgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKKyAgICAg
ICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAg
ZXh0cmVtdW0gPSBtaW5Pck1heDxtb3JwaG9sb2d5T3BlcmF0b3I+KGV4dHJlbXVtLCBwaXhlbCk7
CisgICAgfQorICAgIHJldHVybiBleHRyZW11bTsKK30KKworQUxXQVlTX0lOTElORSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRo
LCBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQoreworICAgIGlmIChtb3Jw
aG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQorICAgICAgICBy
ZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhl
bEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKKworICAgIHJldHVybiBjb2x1bW5FeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3Rh
cnQsIHlFbmQsIHdpZHRoKTsKK30KKwordGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK3sKKyAgICBhdXRv
IGV4dHJlbXVtID0ga2VybmVsWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVs
LnNpemUoKTsgKytpKQorICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PG1vcnBob2xvZ3lPcGVy
YXRvcj4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7CisKKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisK
K0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVt
KGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xv
Z3lPcGVyYXRvcikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKKworICAgIHJldHVybiBrZXJuZWxFeHRyZW11
bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOworfQorCitzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uKGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisg
ICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eTsKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
OworCisgICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKKyAgICBj
b25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOworICAgIGNvbnN0IGludCB3
aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRp
bmdEYXRhLmhlaWdodDsKKworICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kg
PD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYg
c3RhcnRZIDwgZW5kWSk7CisKKyAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7CisgICAgZXh0cmVt
YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7CisKKyAgICBmb3IgKGlu
dCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIGludCB5UmFkaXVzU3RhcnQg
PSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7CisgICAgICAgIGludCB5UmFkaXVzRW5kID0gc3Rk
OjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOworCisgICAgICAgIGV4dHJlbWEuc2hyaW5r
KDApOworCisgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUg
ZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCByYWRpdXNYOyArK3gpCisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRy
ZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yKSk7CisKKyAgICAgICAgLy8gS2VybmVsIGlz
IGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVz
WCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhl
bEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFp
bnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpOworCisgICAgICAgICAgICBpZiAoeCA+IHJh
ZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4
ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAgICAgICAg
ICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVs
RXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpLnZhbHVl
OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2Vy
KFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKK3sKKyAgICBwYXJhbS0+ZmlsbFJlZ2lv
bigqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworfQor
CitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKK3sKKyAgICAvLyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hp
bWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBv
ZiBhYm91dCAwLjY1LgorICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRh
LnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1OworCisgICAgc3RhdGljIGNv
bnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworICAgIAorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBw
YWludGluZ0RhdGEuaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVy
ID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEu
aGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKKyAg
ICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4g
MSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKKyAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2Ug
ZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAg
ICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRz
OworICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUg
bnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAg
IGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgeworICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbS5maWxsUmVnaW9uID0gZmls
bFJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEg
OiBqb2JTaXplOworICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1v
ZGVsCisgICAgfQorCisgICAgZmlsbFJlZ2lvbihwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0
YS5oZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShGaWx0
ZXJJbWFnZSYgaW4sIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
aW50IHJhZGl1c1gsIGludCByYWRpdXNZKQoreworICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRp
dXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7CisgICAgICAgIGluLmNvcHlQaXhl
bEJ1ZmZlcihkc3RQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBpbWFnZVJlY3QsIGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZFTW9ycGhvbG9neTo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0
cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBJ
bnRSZWN0KGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0Lmlt
YWdlUmVjdCgpKSk7CisKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0
U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5l
cmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCksIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgb3V0cHV0SW1hZ2VS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShnZW9t
ZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAg
ICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKG91dHB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFk
aXVzLndpZHRoKCkpOworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4ob3V0cHV0SW1hZ2VSZWN0
LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCksIHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yID0gbV9tb3JwaG9sb2d5T3BlcmF0b3I7Cisg
ICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0Rh
dGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOworCisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkgPSBpbnB1dFBpeGVsQXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVs
QXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWls
ZihvdXRwdXRJbWFnZVJlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNl
aWxmKG91dHB1dEltYWdlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBwbGF0Zm9ybUFwcGx5KHBhaW50
aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
ZmIwYjhhYWFkMGE1YTU1Mjg4ZDE3ZWVjNDA4MDEyZTZlN2VmYjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zm
c2V0U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlu
cHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9
IGlucHV0LmltYWdlUmVjdCgpOworICAgIGlucHV0SW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVz
b2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2Vv
bWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0SW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOwor
CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2Us
IGlucHV0SW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mY2EwNTM1Y2MyN2M0MzQyMmM2OGIxZWM5ZjY4MGIzMGIzMTAxOWI4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVRpbGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2Uu
aCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQg
PSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0
cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJl
Y3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbnB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1h
cEltYWdlUmVjdChpbnB1dEltYWdlUmVjdCk7CisKKyAgICBhdXRvIHRpbGVSZWN0ID0gZ2VvbWV0
cnkuY2xpcFRvRmlsdGVyUmVnaW9uKGlucHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICB0
aWxlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdCh0aWxlUmVjdCk7CisKKyAgICBhdXRvIG91
dHB1dEltYWdlUmVjdCA9IG91dHB1dC5pbWFnZVJlY3QoKTsKKyAgICBvdXRwdXRJbWFnZVJlY3Qg
PSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0SW1hZ2VSZWN0KTsKKworICAgIGF1dG8gbWF4
T3V0cHV0UmVjdCA9IGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihvdXRwdXQucHJpbWl0aXZl
U3VicmVnaW9uKCkpOworICAgIG1heE91dHB1dFJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qo
bWF4T3V0cHV0UmVjdCk7CisKKyAgICBhdXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAx
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIXRpbGVJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3Jh
cGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0
KCk7CisgICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkp
OworICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1
dEltYWdlUmVjdC5sb2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBp
ZiAoIXRpbGVJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5lVHJhbnNm
b3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGls
ZVJlY3QubG9jYXRpb24oKSAtIG1heE91dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRv
IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsg
dHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
b3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4
dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKyAgICAKKyAgICBvdXRwdXRDb250
ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dEltYWdlUmVjdC5zaXpl
KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45OTdiNDAxNTFlNDc2MGRlNWNlZmJmOTFiMDkwMmViM2ZmNWQyZDI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdl
ZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdHVyYnVs
ZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVh
cnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKKworLyoKKyAgICBQcm9kdWNlcyByZXN1
bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAo
YSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9
IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2Vl
IFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgK
KyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0
MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmln
aW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5
NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKioz
MSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7
IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3Mzsg
Ly8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0
YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOworCitzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJl
Y3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBh
cmFsbGVsIGpvYnMuCisKK3N0cnVjdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhIHsKKyAgICBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25n
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAg
ICAgICAgOiB0dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkKKyAgICAgICAgLCBiYXNlRnJl
cXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJl
cXVlbmN5WSkKKyAgICAgICAgLCBudW1PY3RhdmVzKG51bU9jdGF2ZXMpCisgICAgICAgICwgc2Vl
ZChzZWVkKQorICAgICAgICAsIHN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKQorICAgICAgICAsIHBh
aW50aW5nU2l6ZShwYWludGluZ1NpemUpCisgICAgeworICAgIH0KKworICAgIC8vIENvbXB1dGUg
cHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgaW5saW5lIGxvbmcgcmFuZG9tKCkKKyAgICB7Cisg
ICAgICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAt
IHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApCisg
ICAgICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKKyAgICAgICAgc2VlZCA9IHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUdXJidWxlbmNlVHlwZSB0
dXJidWxlbmNlVHlwZTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WTsKKyAgICBpbnQgbnVtT2N0YXZlczsKKyAgICBsb25nIHNlZWQ7CisgICAgYm9v
bCBzdGl0Y2hUaWxlczsKKyAgICBJbnRTaXplIHBhaW50aW5nU2l6ZTsKKworICAgIGludCBsYXR0
aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07CisgICAgZmxvYXQgZ3JhZGllbnRbNF1b
MiAqIHNfYmxvY2tTaXplICsgMl1bMl07Cit9OworCitzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAg
U3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKKworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11
Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAg
fTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAg
aW50IHdyYXBZIHsgMCB9OworfTsKKworc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0aXRjaERh
dGEsIGludCwgaW50KT4gZmlsbFJlZ2lvbjsKKyAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxB
cnJheTsKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2Nh
bGU7CisgICAgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgIFN0aXRj
aERhdGEgc3RpdGNoRGF0YTsKKyAgICBpbnQgc3RhcnRZOworICAgIGludCBlbmRZOworfTsKKwor
aW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCit7CisgICAgcmV0dXJuIHQgKiB0ICog
KDMgLSAyICogdCk7Cit9CisKK2lubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0
IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKK30K
Kworc3RhdGljIHZvaWQgaW5pdFBhaW50KFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSkKK3sKKyAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOworCisgICAgLy8gVGhlIHNl
ZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAg
aWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0g
LShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBpZiAo
cGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdE
YXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKworICAgIGZsb2F0KiBncmFkaWVudDsKKyAg
ICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAgICAgIHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOworICAgICAgICAgICAgZ3JhZGllbnQg
PSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5n
RGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxv
Y2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6
ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAh
Z3JhZGllbnRbMV0pOworICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlw
b3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGdyYWRpZW50WzBdIC89
IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxp
emF0aW9uRmFjdG9yOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IHNfYmxv
Y2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgp
ICUgc19ibG9ja1NpemU7CisgICAgICAgIEFTU0VSVChqID49IDApOworICAgICAgICBBU1NFUlQo
aiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKKyAgICAgICAgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CisgICAgfQorCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsr
Y2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3Nf
YmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07
CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUg
KyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKKyAgICAgICAg
fQorICAgIH0KK30KKworc3RhdGljIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwg
Ym9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKKyAgICBm
bG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgQVNTRVJUKHRpbGVXaWR0
aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOworCisgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQg
dHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAvLyBzbyB0
aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgorICAgIGlmIChiYXNlRnJl
cXVlbmN5WCkgeworICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICBmbG9hdCBoaWdoRnJlcXVl
bmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAg
ICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRv
IHRoZSBzdGFuZGFyZC4KKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5
IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAgICAgYmFzZUZyZXF1
ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKKyAgICB9CisgICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7
CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZy
ZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNl
aWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZy
ZXF1ZW5jeVkpCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5Owor
ICAgIH0KKworICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKKyAgICBzdGl0Y2hEYXRhLndy
YXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgc3RpdGNoRGF0YS5o
ZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICBzdGl0Y2hE
YXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OworCisgICAgcmV0
dXJuIHN0aXRjaERhdGE7Cit9CisKKy8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6
IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVt
ZW50Lgorc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQoreworICAgIHN0cnVjdCBOb2lz
ZVBvc2l0aW9uIHsKKyAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0
ZXh0LgorICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0
LgorICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4K
KworICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOworICAgICAgICAgICAgLy8gIGJ4MCA9
IChpbnQpdDsKKyAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKKyAgICAgICAgICAgIC8vICBy
eDAgPSB0IC0gKGludCl0OworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQg
KyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAg
IGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQorICAgICAgICAgICAgLy8g
ICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSB3
cmFwU2l6ZSkKKyAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOworCisgICAgICAgICAgICAv
LyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAgICAvLyAgIGJ4MSAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFw
U2l6ZSkKKyAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOworICAgIE5v
aXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7CisKKyAgICAvLyBJZiBzdGl0Y2hp
bmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAocGFpbnRpbmdE
YXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0
aCwgc3RpdGNoRGF0YS53cmFwWCk7CisgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5o
ZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOworICAgIH0KKworICAgIC8vIGJ4MCAmPSBCTTsKKyAg
ICAvLyBieDEgJj0gQk07CisgICAgLy8gYnkwICY9IEJNOworICAgIC8vIGJ5MSAmPSBCTTsKKyAg
ICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VYLm5leHRJbmRleCAmPSBz
X2Jsb2NrTWFzazsKKyAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZ
Lm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKworICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9y
W2J4MF07CisgICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKKyAgICBpbnQgbGF0dGlj
ZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOworICAg
IGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lz
ZVgubmV4dEluZGV4XTsKKworICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7CisgICAg
Ly8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKKyAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZl
KG5vaXNlWC5mcmFjdGlvbik7CisgICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJh
Y3Rpb24pOworCisgICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsK
KyAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQorICAgICAgICBpbnQg
YjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVku
aW5kZXhdOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUg
PSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKKyAgICAgICAgZmxvYXQgdSA9IG5vaXNl
WC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOworCisgICAgICAgIC8v
IGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07CisgICAgICAgIGludCBiMTAgPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhd
OworICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50
W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOworICAgICAgICBmbG9h
dCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFb
MV07CisgICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYSA9IGxp
bmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworCisgICAgICAgIC8vIGIwMSA9IHVMYXR0aWNl
U2VsZWN0b3JbaSArIGJ5MV07CisgICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyBy
eTEgPSByeTAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxd
W2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOworICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9u
ICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisKKyAgICAgICAgLy8gYjEx
ID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKKyAgICAgICAgaW50IGIxMSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhd
OworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEg
KiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMTFdOworICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSAr
IChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisgICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1
LCB2KTsKKyAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwor
CisgICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKKyAgICAgICAgcmV0dXJuIGxpbmVh
ckludGVycG9sYXRpb24oc3ksIGEsIGIpOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAg
ICBub2lzZUZvckNoYW5uZWwoMCksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKKyAgICAg
ICAgbm9pc2VGb3JDaGFubmVsKDIpLAorICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKKyAgICB9
OworfQorCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50
cy4KKy8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4o
U1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCitzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKK3sKKyAgICByZXR1
cm4geworICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90
PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCisg
ICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVu
dHNbMl0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRp
Y19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKKyAgICB9Owor
fQorCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0IFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKKyAg
ICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJl
cXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKKyAgICBm
bG9hdCByYXRpbyA9IDE7CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRp
bmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEu
dHVyYnVsZW5jZVR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87CisKKyAgICAgICAgbm9pc2VWZWN0b3Iu
c2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lz
ZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8gKj0gMjsKKworICAgICAgICBpZiAocGFp
bnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZh
bHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9u
IGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1
YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Cisg
ICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Bl
cmxpbk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAg
ICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9p
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUp
ICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCisgICAgaWYgKHBhaW50aW5nRGF0YS50dXJi
dWxlbmNlVHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsg
MC41ZjsKKworICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKQorewor
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmls
dGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBz
dGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7CisKKyAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsg
MSk7CisgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAg
cG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IHBvaW50LnNjYWxlZCgxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNj
YWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsK
KyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgp
LCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKKyAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5u
ZWwgKz0gNDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldv
cmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBwYXJhbWV0ZXJz
LT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5maWx0ZXJS
ZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRh
LCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMt
PmVuZFkpOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0
LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7Cisg
ICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAg
ICBJbnRTaXplIG91dHB1dFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworICAgIEludFNpemUg
dGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6
ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKKyAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBtX3N0aXRjaFRpbGVzKTsKKworICAgIFR1cmJ1bGVuY2VQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhKG1fdHVyYnVsZW5jZVR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbV9udW1PY3RhdmVzLCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMsIHRpbGVTaXpl
KTsKKyAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKworICAgIGF1dG8gYXJlYSA9IG91dHB1
dFNpemUuYXJlYSgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGhlaWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CisKKyAg
ICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRp
bWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0
RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgp
KSk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQ
YXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmZmlsbFJlZ2lv
bldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFy
YW1ldGVyIGFycmF5CisgICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKKyAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxp
dCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJh
IHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCisgICAgICAgICAgICB1
bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBq
b2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0WSA9IDA7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2Jz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0g
cGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsbFJl
Z2lvbiA9IHN0YXRpY19jYXN0PHZvaWQoKikoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEsIGludCwgaW50KT4oJmZpbGxSZWdpb24pOworICAgICAgICAgICAgICAgIHBhcmFt
cy5waXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LmZpbHRlclJlZ2lvbiA9IG91dHB1dEltYWdlUmVjdDsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
ZmlsdGVyU2NhbGUgPSBnZW9tZXRyeS5maWx0ZXJTY2FsZSgpOworICAgICAgICAgICAgICAgIHBh
cmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZ
ID0gc3RhcnRZOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgam9iSGVpZ2h0ID0gKGkgPCBq
b2JzV2l0aEV4dHJhKSA/IHN0ZXBZICsgMSA6IHN0ZXBZOworICAgICAgICAgICAgICAgIHBhcmFt
cy5lbmRZID0gcGFyYW1zLnN0YXJ0WSArIGpvYkhlaWdodDsKKyAgICAgICAgICAgICAgICBzdGFy
dFkgKz0gam9iSGVpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBu
byByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgor
ICAgIGZpbGxSZWdpb24ob3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBnZW9tZXRy
eS5maWx0ZXJTY2FsZSgpLCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
SW1hZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNWZmYzJl
OGUzYTUzNzE3MGZhMjk4YzlmNGQyYzg3YzZhNzZiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdl
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlU29mdHdhcmUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJJbWFnZVNvZnR3YXJlOjpGaWx0ZXJJbWFnZVNvZnR3
YXJlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IGltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAgIDogRmlsdGVy
SW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGZhbHNlLCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSwgaW1hZ2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIt
PnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci0+Y29sb3JTcGFjZSgpKQorICAgICwgbV9p
bWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIEZp
bHRlckltYWdlU29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9n
aWNhbFNpemUpIH07CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4
ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCksIHJlY3QpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFn
ZVNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTYyN2U4ZWRkZWQ3ZTJl
OTU3YjE3ZTkzZGUyMGQ0MmViMTBiOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJl
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUg
bWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmlsdGVySW1hZ2VTb2Z0d2FyZSA6IHB1YmxpYyBGaWx0ZXJJbWFnZSB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlOworICAgIEZpbHRlckltYWdlU29mdHdh
cmUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
aW1hZ2VSZWN0LCBSZWY8SW1hZ2VCdWZmZXI+JiYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBvdmVycmlkZSB7IHJldHVybiBtX2lt
YWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVySW1hZ2VTb2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0xpZ2h0aW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdodGluZ0RhdGEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MTQ5ZDRhYmM4NTJlYjBiMTQxMzAyN2MwNGEzY2NlNDZlMjliYTBjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdo
dGluZ0RhdGEuaApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29u
c3RleHByIGludCBjUGl4ZWxTaXplID0gNDsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNo
YW5uZWxPZmZzZXQgPSAzOworc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOworCitzdHJ1Y3QgQWxwaGFXaW5kb3cgeworICAg
IHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OworICAgIAorICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlv
bnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgorICAgIHVp
bnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9
CisgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFb
MV1bMF07IH0KKyAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVy
biBhbHBoYVsyXVswXTsgfQorCisgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAg
ICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KKyAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAg
ICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQorICAgIHVpbnQ4X3QgYm90dG9tKCkg
Y29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICB2b2lkIHNl
dFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAg
ICB2b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFs
dWU7IH0KKyAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJd
WzFdID0gdmFsdWU7IH0KKworICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAg
IHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1
ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0Qm90dG9tUmln
aHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQorCisgICAgc3RhdGlj
IHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAgICB7CisgICAgICAgIGFscGhhWzBd
ID0gYWxwaGFbMV07CisgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2hpZnQoKQorICAgIHsKKyAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOworICAg
ICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBj
b250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAgICBDb2xvciBjb2xvcjsK
KyAgICBmbG9hdCBzdXJmYWNlU2NhbGU7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAg
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7CisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAg
ICBjb25zdCBMaWdodFNvdXJjZSogc291cmNlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKyAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZTsK
KworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAgaW50IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOworICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOworICAgIGludCBoZWln
aHREZWNyZWFzZWRCeU9uZTsKKworICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0OworICAgIAorICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNl
dCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21M
ZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJv
d05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKK307CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5n
RGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBp
bnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAg
IC0yICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAg
IC0yICogY2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9Owor
fQorCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2Vu
dGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0
ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLTIgKiBsZWZ0ICsg
MiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAorICAgICAgICAtbGVmdCAtIDIg
KiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQK
KyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50
ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBi
b3R0b21MZWZ0ICsgMiAqIGJvdHRvbQorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIExpZ2h0
aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBj
ZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZz
ZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSAyICogd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10
b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21S
aWdodCwKKyAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21S
aWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6aW50ZXJpb3JO
b3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoreworICAg
IGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQ7CisgICAgCisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ocmlnaHRBbHBoYU9mZnNldCkpOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSkpOworICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwor
CisgICAgaW50IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7CisgICAgaW50IHRvcExlZnQgPSBh
bHBoYVdpbmRvdy50b3BMZWZ0KCk7CisgICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwor
CisgICAgaW50IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7CisgICAgaW50
IGJvdHRvbSA9IGFscGhhV2luZG93LmJvdHRvbSgpOworCisgICAgLy8gVGhlIGFscGhhV2luZG93
IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4K
KyAgICBhbHBoYVdpbmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OworICAgIGFscGhhV2luZG93
LmFscGhhWzFdWzJdID0gcmlnaHQ7CisgICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0
b21SaWdodDsKKyAgICAKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3Jr
aW5nIHdpdGggc29tZSBzcG90LWNoZWNrcy4KKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVm
dCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKKyAgICBBU1NF
UlQoYWxwaGFXaW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKKworICAgIHJl
dHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdo
dCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9w
IC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAg
fTsKK30KKworaW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAg
IGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICog
Y2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9w
ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBM
aWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAg
b2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3AgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAg
ICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAorICAgICAgICAt
MiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5s
aW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICog
bGVmdCArIDIgKiByaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQg
KyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUg
TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAg
IGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAg
ICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKKyAgICAgICAgLXRv
cExlZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKKyAgICB9OworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMTc0MjhlNzY0ZGNjZmMxNTdkOTgwYTBjOTc5ZGJlZTc1ZDYx
ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgU291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVj
dCgpKTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0IHsg
eyB9LCBpbnB1dEltYWdlUmVjdC5zaXplKCkgfSwgQ29sb3I6OmJsYWNrKTsKKyAgICBvdXRwdXRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgSW50UG9pbnQoKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291
cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWQwMTUyYjEyNDUyMWY5ODMyNzU4
NTI2M2YzNzMzYmZjN2JmNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUdy
YXBoaWMuaCIKKworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6
YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
cHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisK
KyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5w
dXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9
IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbnB1dEltYWdlLCBGbG9hdFBvaW50KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0KaW5kZXggN2E3ZTQ3ZjMyNjdlZmM4
OTQ0NWFjZDhhM2M4NTZlZDJjMTdjOGMyNy4uYzU0MzEzNmUyMDA0ZjBkOTJlZTk1ZDgxZjMwNjAw
YjA2YjM3MjA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9y
dCAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW1wb3J0ICJTY3JvbGxBbmltYXRpb25SdWJiZXJC
YW5kLmgiCiAjaW1wb3J0ICJTY3JvbGxFeHRlbnRzLmgiCisjaW1wb3J0ICJTY3JvbGxhYmxlQXJl
YS5oIgogI2ltcG9ydCAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCiAjaW1wb3J0IDxwYWwvc3Bp
L21hYy9OU1Njcm9sbFZpZXdTUEkuaD4KICNpbXBvcnQgPHN5cy9zeXNjdGwuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggZjQ0YWUxMjlkMDczOGQzMGM3NmU3MTA4
NWIyYWVjMDVhN2I2ZjFkYS4uODJhNzIzNGRjMjFkNDFmNTBiN2ViMjFmZTAzMDBjZmU0NmFkOTUz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEsNiArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTIgKzI4LDM1NiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVk
ZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZS5oIgotI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JN
YXRyaXguaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVE
cm9wU2hhZG93LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGRU1l
cmdlLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgogI2luY2x1ZGUgIlJlZmVyZW5jZWRTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi0jaWYg
VVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikK
K3sKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIob3BlcmF0aW9ucykp
OworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25z
LCBjbGlwT3BlcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisjaWYgVVNF
KENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgJiYgIWZpbHRlci0+c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSkKKyAgICAg
ICAgcmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYK
KyAgICAgICAgCisgICAgZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwor
ICAgIHJldHVybiBmaWx0ZXI7Cit9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK1JlZlB0cjxDU1NG
aWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1
bmN0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTRmlsdGVyKFdURk1vdmUoZnVuY3Rpb25zKSwgcmVuZGVyaW5nTW9kZSkpOwor
fQogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitDU1NGaWx0ZXI6OkNTU0Zp
bHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQorICAgIDogRmlsdGVyKFR5
cGU6OkNTU0ZpbHRlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIpOwor
ICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMoKTsKKyAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNl
Y3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbigpOwogfQogCi1DU1NGaWx0ZXI6OkNTU0ZpbHRlcigpCi0gICAgOiBG
aWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgqdGhpcykpCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihWZWN0b3I8UmVmPEZp
bHRlckZ1bmN0aW9uPj4mJiBmdW5jdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkK
KyAgICA6IEZpbHRlcihUeXBlOjpDU1NGaWx0ZXIpCisgICAgLCBtX2Z1bmN0aW9ucyhXVEZNb3Zl
KGZ1bmN0aW9ucykpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKIHsKIH0K
IAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1
ck9wZXJhdGlvbiwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikK
K3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVy
YXRpb24uc3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3Jl
YXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjbGlwT3BlcmF0aW9uID09IEZpbHRlckdl
b21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9E
VVBMSUNBVEUpOworfQogCi1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0
KCkKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uKQogewotICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdl
KCktPmNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgbnVsbEZ1bmN0aW9uKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVy
OjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZm
ZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVy
YXRpb24pCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3Qo
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVu
c3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5k
ZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOwotICAgIGlmICghZmlsdGVyRWxlbWVu
dCkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0
ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZp
bHRlciByZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRp
b24uZnJhZ21lbnQoKSk7Ci0gICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUg
cmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4K
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxo
dHRwczovL3dlYmtpdC5vcmcvYi8xMzEwODU+Ci0gICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlm
IHRoaXMgZG9lcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSByZW5kZXJl
ci5lbGVtZW50KCkpCi0gICAgICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCks
ICplbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3Vu
dCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFu
c2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQogCi0gICAgYXV0byBidWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotICAgIG1fc291cmNl
QWxwaGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkp
Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoY29u
c3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikKK3sKKyAg
ICBmbG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOworICAgIHJl
dHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGQsIHN0ZCwgZHJvcFNoYWRvd09wZXJhdGlvbi54
KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCks
IDEpOworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVz
QW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwg
MS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUv
dGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGlu
Zm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1l
dGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAt
IDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsg
MC4yODQ4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAg
ICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAg
IGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVj
dCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBp
ZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWls
ZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlSHVlUm90YXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICAgICAg
ZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAg
ICAgaWYgKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElP
Tl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUo
KS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5l
YXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0g
ICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVm
ZmVjdCk7Ci0gICAgICAgIHJlZmVyZW5jZUVmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0K
LSAgICAKLSAgICBtX2VmZmVjdHMuYXBwZW5kVmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0
cykpOwotICAgIHJldHVybiBlZmZlY3Q7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25z
dW1lciBjb25zdW1lcikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5
RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
ID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0
aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFt
b3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJh
bnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZShudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uKTsKK30KIAotICAgIG1fZWZmZWN0cy5jbGVhcigpOwotICAgIG1fb3V0c2V0cyA9IHsgfTsK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1cmF0ZUVmZmVjdChjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sK
KyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQ
YXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTZXBp
YUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJp
eE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0
dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1s
I3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgor
CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91
bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAg
ICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJz
KSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoY29uc3Qg
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQoreworICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJl
ci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVu
dCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVy
ZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6
Y3JlYXRlKCpmaWx0ZXJFbGVtZW50KTsKK30KKworYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRnVuY3Rp
b25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVy
YXRpb25zLCBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorewor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgp
OworICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKICAgICBm
b3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Ci0gICAgICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0
aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgp
KSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAg
ICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVm
ZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJhdGlv
bik7CisgICAgICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNv
bG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNs
YW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAg
ICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlw
L2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBm
b3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNsaXBPcGVyYXRpb24pOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBk
b3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLncz
Lm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFs
ZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwK
LSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVz
QW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0g
MC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJ
R0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVh
dGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgYXV0
byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBp
bnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFy
YW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAg
ICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAg
ICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OwotICAgICAgICAgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21w
b25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVH
cmF5U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVz
ZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SFVFX1JPVEFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJ
VFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5j
dGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlv
bjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhp
cywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewot
ICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRpb24g
PSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwot
ICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3RkRGV2
aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQ
cm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworCisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0
ZVNlcGlhRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICAgICAgYXV0byYgZHJvcFNo
YWRvd09wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZSgq
dGhpcywgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwKLSAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9u
LngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3Io
KSwgMSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAg
ICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcihkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlcik7CisgICAgICAgICAgICBlZmZlY3QgPSBu
dWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZWZmZWN0KSB7
Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywg
ZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBh
cHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25z
LgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRl
ckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJPcGVy
YXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0gICAgICAgICAgICAgICAgbV9lZmZl
Y3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByZXZpb3Vz
RWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAg
ICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAgIG1fZnVuY3Rp
b25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQorCisgICAgICAgIGlmIChlZmZlY3QpCisgICAgICAgICAgICBtX2Z1bmN0
aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgIH0KIAogICAgIC8vIElmIHdlIGRpZG4ndCBt
YWtlIGFueSBlZmZlY3RzLCB0ZWxsIG91ciBjYWxsZXIgd2UgYXJlIG5vdCB2YWxpZC4KLSAgICBp
ZiAobV9lZmZlY3RzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mdW5jdGlvbnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2VmZmVjdHMuc2hyaW5rVG9GaXQoKTsKLQot
ICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENP
UkVfSU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJl
bmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5n
cygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMu
bGFzdCgpLmdldCgpKTsKLSNlbmRpZgorICAgIG1fZnVuY3Rpb25zLnNocmlua1RvRml0KCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCkKKyNpZiBVU0UoQ09SRV9JTUFHRSkKK2Jv
b2wgQ1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0CiB7Ci0gICAg
aWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChm
aWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVyUmVjdCk7CisgICAgZm9yIChhdXRvJiBmdW5j
dGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlmICghZnVuY3Rpb24tPnN1cHBvcnRzQ29y
ZUltYWdlUmVuZGVyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAg
IHJldHVybiB0cnVlOwogfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8g
QXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0g
ICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUg
Z3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAg
IGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIElu
dFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAg
aWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9n
aWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdlKElt
YWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENv
bnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhl
bEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250
ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRT
b3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJT
Y2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KSk7CiAjZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsK
LX0KIAotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
CitJbnRPdXRzZXRzIENTU0ZpbHRlcjo6Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0CiB7Ci0gICAg
YXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVj
dC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3Vi
UmVnaW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25l
IEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBl
ZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7
Ci0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgp
LCBzY2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAg
IGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQot
fQorICAgIGlmICghbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgICAgIHJldHVybiB7
IH07CiAKLXZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQotewotICAg
IG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9zb3VyY2VBbHBoYSkK
LSAgICAgICAgbV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIElu
dE91dHNldHMgb3V0c2V0czsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMp
CisgICAgICAgIG91dHNldHMgKz0gZnVuY3Rpb24tPmNhbGN1bGF0ZU91dHNldHMoKTsKKyAgICAK
KyAgICByZXR1cm4gb3V0c2V0czsKIH0KIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKK0ZpbHRl
ckVmZmVjdFZlY3RvciBDU1NGaWx0ZXI6OmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBl
IHR5cGUpIGNvbnN0CiB7Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQo
KTsKLSAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikgewotICAgICAgICBtX2ZpbHRlclJlbmRlcmVy
LT5hcHBseUVmZmVjdHMoZWZmZWN0KTsKLSAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXItPmhh
c1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVjdHM7CisKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9u
IDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLT50eXBlKCkgPT0gdHlwZSkg
eworICAgICAgICAgICAgZWZmZWN0cy5hcHBlbmQoeyBkb3duY2FzdDxGaWx0ZXJFZmZlY3Q+KGZ1
bmN0aW9uLmdldCgpKSB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIGZpbHRlciA9IGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpOworICAg
ICAgICAgICAgZWZmZWN0cy5hcHBlbmRWZWN0b3IoZmlsdGVyLmVmZmVjdHNPZlR5cGUodHlwZSkp
OwogICAgICAgICB9CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVjdC50cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLX0K
IAotTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGly
dHlSZWN0KQotewotICAgIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGUgYXJl
YSBpbiB0aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLCBzbyB0
aGF0IHdlIGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0Ii4KLSAgICBhdXRvIHJlY3RGb3JSZXBh
aW50ID0gZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKLSAg
ICAgICAgcmVjdEZvclJlcGFpbnQgKz0gb3V0c2V0cygpOwotICAgIHJlY3RGb3JSZXBhaW50Lmlu
dGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKLSAgICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7CisgICAg
cmV0dXJuIGVmZmVjdHM7CiB9CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNv
bnN0Citib29sIENTU0ZpbHRlcjo6YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZpbHRlcklt
YWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAog
ewotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7Ci0gICAgCi0g
ICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci19Ci0KLXZv
aWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QpCi17Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0
OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgc2V0RmlsdGVy
UmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9h
dFJlY3QmIGVmZmVjdFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMp
Ci0gICAgICAgIGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RSZWN0KTsKLX0KLQotSW50
UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKSBjb25zdAotewotICAgIGF1dG8mIGxhc3RFZmZl
Y3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhh
c1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jl
c3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICByZXR1
cm4geyB9OworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAg
ICBpZiAoIWZ1bmN0aW9uLT5hcHBseShyZXN1bHQsIHN0YWNrLCBnZW9tZXRyeSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1JbnRPdXRz
ZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CitUZXh0U3RyZWFtJiBDU1NGaWx0ZXI6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
IHJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIGlmICghbV9oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoIW1fb3V0c2V0cy5pc1plcm8o
KSkKLSAgICAgICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICBhdXRvIGVuZCA9IG1fZnVuY3Rpb25z
LnJlbmQoKTsKKyAgICB1bnNpZ25lZCBsZXZlbCA9IDA7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBt
X2Z1bmN0aW9ucy5yYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1dG8gZnVu
Y3Rpb24gPSAqaXQ7CisgICAgICAgIGlmIChmdW5jdGlvbi0+dHlwZSgpID09IEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlQWxwaGEpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdCAhPSBlbmQpOwor
ICAgICAgICAgICAgKytpdDsKKyAgICAgICAgfQorICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRT
Y29wZSBpbmRlbnRTY29wZSh0cywgbGV2ZWwrKyk7CisgICAgICAgIGZ1bmN0aW9uLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgfQogCi0gICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91
dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIHJldHVybiB0czsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4
IDAwYjkxOTE3YjgwNGM5MmQ5NDA4Yjc1OGUzNzVjMjUyZjI5ZGIwYzUuLjYyMmJlMjUzYTJhOGMz
NzAwZTJkZGJkNTA5N2MzMjRmZmQ2OGM3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw4MiArMjYsNTIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnku
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXI7CiBjbGFzcyBGaWx0
ZXJPcGVyYXRpb25zOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uOwogY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFNvdXJjZUFscGhhOwot
Y2xhc3MgU291cmNlR3JhcGhpYzsKLQotZW51bSBjbGFzcyBGaWx0ZXJDb25zdW1lciB7IEZpbHRl
clByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwogCiBjbGFzcyBDU1NGaWx0ZXIgZmluYWwgOiBw
dWJsaWMgRmlsdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRmls
dGVyPiBjcmVhdGUoKTsKLQotICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOwotICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBJbWFnZUJ1
ZmZlciogb3V0cHV0KCkgY29uc3Q7CiAKLSAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZvaWQgY2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgdm9pZCBhcHBseSgpOworcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVhdGUoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24gPSBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9w
ZXJhdGlvbjo6SW50ZXJzZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPENT
U0ZpbHRlcj4gY3JlYXRlKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdN
b2RlKTsKIAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9p
ZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFs
IH5DU1NGaWx0ZXIoKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mIGZ1
bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9CiAKLSAgICBib29sIGlzQ1NT
RmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgc2V0UmVuZGVy
aW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0g
cmVuZGVyaW5nTW9kZTsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQogCi0gICAgRmxvYXRSZWN0IHNvdXJj
ZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlRHJhd2luZ1JlZ2lvbjsg
fQorICAgIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCi0gICAg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVn
aW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZp
b3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mKTsKLQotICAgIHZvaWQgc2V0TWF4
RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGlu
cHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NGaWx0ZXIoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIENTU0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1
bmN0aW9uPj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBj
b25zdDsKKyAgICBib29sIGJ1aWxkRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24pOwogCi0gICAgTGF5
b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisjaWYgVVNF
KENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0
IGZpbmFsOworI2VuZGlmCiAKLSAgICBGbG9hdFJlY3QgbV9zb3VyY2VEcmF3aW5nUmVnaW9uOwot
ICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZWZm
ZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+
IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhh
OworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZpbmFsOwogCi0gICAgbXV0YWJsZSBJbnRP
dXRzZXRzIG1fb3V0c2V0czsKKyAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICBi
b29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKLSAgICAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IG1fZmlsdGVyUmVuZGVyZXI7CisK
KyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisgICAgUmVuZGVy
aW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCBlOGMwMzgzY2U5ZTExMDRjZWQzNTE4YmM2Mjg2YjQyZmJkYzU0
MDYyLi4xYTNlYmIxZWRiNWU1NDk5MjQzOGM3NjIyZDgyNWZkMzAyNWQwMDE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTU1NjcsNyArNTU2Nyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogSW50T3V0c2V0
cyBSZW5kZXJMYXllcjo6ZmlsdGVyT3V0c2V0cygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZmlsdGVy
cykKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVycy0+ZmlsdGVyKCkgPyBtX2ZpbHRlcnMtPmZpbHRl
cigpLT5vdXRzZXRzKCkgOiBJbnRPdXRzZXRzKCk7CisgICAgICAgIHJldHVybiBtX2ZpbHRlcnMt
PmZpbHRlcigpID8gbV9maWx0ZXJzLT5maWx0ZXIoKS0+Y2FsY3VsYXRlT3V0c2V0cygpIDogSW50
T3V0c2V0cygpOwogICAgIHJldHVybiByZW5kZXJlcigpLnN0eWxlKCkuZmlsdGVyT3V0c2V0cygp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGViOTY3YjUz
OWQwMmM2MGZiNDE1ZGQ4M2JmMjYzNzMzYWUxMTNjZTYuLjMwMjJhN2E3NjNiNTFkMWU3ZGFlNWRk
MjU4M2ZlZWNmMmU4Njk2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgQ2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3Rz
Q2FjaGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5
MGM4MThiNjFhMDVmOTViOTY0YTQuLmRlNWQxNmYyZGEwY2NkMTIwYmY3MjcxOTc2OTc0YjJjM2U1
YjRiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1
ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgorI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMTE4LDM3ICsxMjAsNTUgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OnJl
bW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQogCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6
YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikgewotICAg
ICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmlsdGVyLT5z
ZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJp
bmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZpbHRlclNj
YWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxl
KHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0
cygpOwotICAgIH0KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCBy
ZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBGaWx0ZXJHZW9tZXRyeTo6
Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOworICAgIG1fc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsK
K30KKworR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCgp
Cit7CisgICAgcmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+Y29udGV4dCgp
IDogbnVsbHB0cjsKK30KIAotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJl
bW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0gICAgLy8g
Z28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2
ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGly
ZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgot
ICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRl
cigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2ZpbHRlciA9
IG51bGxwdHI7Cit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCgpCit7CisgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEludFNpemUgc2l6ZSB7IG1fc291cmNlSW1hZ2VSZWN0LnNpemUo
KSAqIG1fc2NhbGVGYWN0b3IgfTsKKyAgICBhdXRvIGhvc3RXaW5kb3cgPSBtX2xheWVyLnJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnJvb3QoKSA/IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkucm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworCisgICAgbV9z
b3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgbV9maWx0ZXItPnJlbmRlcmlu
Z01vZGUoKSwgU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJpbmdQdXJwb3NlOjpET00s
IDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgsIGhv
c3RXaW5kb3cpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBpbWFnZUNvbnRleHQgPSBtX3NvdXJj
ZUltYWdlLT5jb250ZXh0KCk7CisgICAgaW1hZ2VDb250ZXh0LnNjYWxlKG1fc2NhbGVGYWN0b3Ip
OworICAgIAorICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
clJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2lu
RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5
ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKLSAgICBhdXRvIGZpbHRlclNv
dXJjZVJlY3QgPSBmaWx0ZXIuY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChmaWx0
ZXJCb3hSZWN0LCBkaXJ0eVJlY3QpOworICAgIAorICAgIGF1dG8gZmlsdGVyU291cmNlUmVjdCA9
IGRpcnR5UmVjdDsKKyAgICBpZiAoZmlsdGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQor
ICAgICAgICBmaWx0ZXJTb3VyY2VSZWN0ICs9IGZpbHRlci5jYWxjdWxhdGVPdXRzZXRzKCk7Cisg
ICAgZmlsdGVyU291cmNlUmVjdC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7CisKICAgICBpZiAo
ZmlsdGVyU291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYm9vbCBoYXNVcGRhdGVkQmFja2luZ1N0b3JlID0gZmlsdGVyLnVwZGF0ZUJhY2tpbmdTdG9y
ZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7CisgICAgCisgICAgaWYgKGZpbHRlclNvdXJjZVJlY3Qg
IT0gbV9zb3VyY2VJbWFnZVJlY3QpIHsKKyAgICAgICAgbV9zb3VyY2VJbWFnZVJlY3QgPSBmaWx0
ZXJTb3VyY2VSZWN0OworICAgICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsK
KyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkp
CiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgZWxzZSB7Ci0gICAgICAg
IGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlKQorICAgICAgICBpZiAoIW1fZ3JhcGhpY3NCdWZm
ZXJBdHRhY2hlZCkKICAgICAgICAgICAgIG1fcmVwYWludFJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7
CkBAIC0xNTksMTEgKzE3OSw5IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJz
OjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0CiAgICAgbV9wYWlu
dE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3QubG9jYXRpb24oKTsKICAgICByZXNldERpcnR5U291
cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOwotCi0gICAgZmlsdGVyLmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoZGVzdGluYXRp
b25Db250ZXh0KTsKLSAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBmaWx0ZXIuaW5w
dXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQgfHwgZmlsdGVyLmZp
bHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
ZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUoKSkpCisgICAgYWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCgpOworICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGlucHV0Q29udGV4
dCgpOworICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBjb250ZW50
cyBvZiB0aGUgbGF5ZXIgaXMgY2FwdHVyZWQgaW4gdGhlIG9mZnNjcmVlbiBtZW1vcnkgYnVmZmVy
LgpAQCAtMTc3LDIzICsxOTUsMTkgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRl
cnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKIAogdm9pZCBS
ZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXRpb25Db250ZXh0KQogewotICAgIEFTU0VSVChtX2ZpbHRlci0+aW5wdXRDb250ZXh0KCkp
OworICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJcblJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRoaXMgPDwgIiBhcHBs
eUZpbHRlckVmZmVjdCIpOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGZp
bHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwotCi0gICAgZmlsdGVyLmFwcGx5KCk7Cisg
ICAgaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAotICAgIC8vIEdldCB0aGUgZmlsdGVyZWQg
b3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBm
aWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCks
IG1fcGFpbnRPZmZzZXQueSgpKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoMSAvIG1f
c2NhbGVGYWN0b3IpOwogCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRw
dXQoKSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0
QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgRmlsdGVyR2VvbWV0cnkg
Z2VvbWV0cnkobV9zb3VyY2VJbWFnZVJlY3QsIG1fc2NhbGVGYWN0b3IsIEZpbHRlckdlb21ldHJ5
OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcihtX3NvdXJjZUltYWdlLmdldCgpLCBtX3NvdXJjZUltYWdlUmVjdCwgZmls
dGVyLCBnZW9tZXRyeSk7CiAKLSAgICBmaWx0ZXIuY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7
CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKG1fc2NhbGVGYWN0b3IpOwogCiAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwg
dGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMx
OTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjkyZWYyZmY5ZDg3NjI2NjQ4MWNkYzcwOGQzOTExNDBm
YzMwYmJhNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENh
Y2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNz
IEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5
ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMjAgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0
d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgp
IHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRl
eHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRl
ZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVs
ZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAor
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9z
b3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CisgICAgZmxv
YXQgbV9zY2FsZUZhY3RvciB7IDEgfTsKICAgICBMYXlvdXRSZWN0IG1fZGlydHlTb3VyY2VSZWN0
OworICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICAKICAg
ICAvLyBEYXRhIHVzZWQgcGVyIHBhaW50CiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcAppbmRleCA1MDc4ZjljYWVmYjUwNmY5MjIzN2YyY2U3YWI2ZjZlNTky
MDg2N2IxLi5jMjlmMjE0MGRhNWQwMmM3ODQ5ZmZjN2E3ZDFmNmFkZGU5ZmQwOWMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAog
ICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJl
bmRlcmVyKTsKICAgICBpZiAoIWNsaXBwZXJEYXRhLmlzVmFsaWRGb3JHZW9tZXRyeShvYmplY3RC
b3VuZGluZ0JveCwgY2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtKSkgewog
ICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBi
ZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250
ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgYXV0byBtYXNrSW1h
Z2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjbGlwcGVkQ29udGVu
dEJvdW5kcywgYWJzb2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CisgICAgICAgIGF1dG8g
bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY2xpcHBl
ZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghbWFz
a0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4
IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjc1ZDEzNDU3MWIyMmY3
MjZhODkzNzEwNmJiMDcwNTY4NDcwMjhmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNyw3IEBACiAKICNpbmNs
dWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zNyw2ICsz
OSw4IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1
ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtODIs
NDcgKzg2LDExIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUNsaWVudEZy
b21DYWNoZShSZW5kZXJFbGVtZW50JiBjbGllbnQsIGJvb2wKICAgICBtYXJrQ2xpZW50Rm9ySW52
YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlk
YXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNW
R0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMo
U1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1h
eENvdW50Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBpZiAoZmlsdGVyRWxlbWVudCgpLmNvdW50Q2hp
bGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci50YXJnZXRCb3VuZGlu
Z0JveCgpOwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKLSAgICBhdXRvIGJ1
aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZShmaWx0ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50
KCkucHJpbWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVpbGRlci0+c2V0VGFyZ2V0Qm91bmRpbmdCb3go
dGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIAotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxk
cmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxl
bWVudCgpKSkgewotICAgICAgICBhdXRvIGVmZmVjdCA9IGVsZW1lbnQuYnVpbGQoYnVpbGRlci5n
ZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIGJ1aWxk
ZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dC5jb3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7Ci0gICAgICAgIGVsZW1lbnQuc2V0U3Rh
bmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0
Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmlt
aXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAgICBpZiAoZWxlbWVudC5y
ZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQu
cmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMo
KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UK
LSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5h
ZGQoZWxlbWVudC5yZXN1bHQoKSwgV1RGTW92ZShlZmZlY3QpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGJ1aWxkZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3Vy
Y2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3Vy
Y2VNb2RlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291
cmNlTW9kZSwgIXJlc291cmNlTW9kZSk7CiAKLSAgICBMT0coRmlsdGVycywgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyICVwIGFwcGx5UmVzb3VyY2UgcmVuZGVyZXIgJXAiLCB0aGlzLCAmcmVuZGVy
ZXIpOwotCiAgICAgaWYgKG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJl
cikpIHsKICAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IG1fcmVuZGVyZXJGaWx0ZXJE
YXRhTWFwLmdldCgmcmVuZGVyZXIpOwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgPT0g
RmlsdGVyRGF0YTo6UGFpbnRpbmdTb3VyY2UgfHwgZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVy
RGF0YTo6QXBwbHlpbmcpCkBAIC0xMzAsMTAxICs5OCw1NSBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFscmVhZHkgYnVpbHQsIG9yIHdlJ3JlIGlu
IGEgY3ljbGUsIG9yIHdlJ3JlIG1hcmtlZCBmb3IgcmVtb3ZhbC4gUmVnYXJkbGVzcywganVzdCBk
byBub3RoaW5nIG1vcmUgbm93LgogICAgIH0KIAorICAgIC8vIEJ1aWxkIHRoZSBTVkdGaWx0ZXIK
ICAgICBhdXRvIGZpbHRlckRhdGEgPSBtYWtlVW5pcXVlPEZpbHRlckRhdGE+KCk7Ci0gICAgRmxv
YXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsK
LQotICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZl
UmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJFbGVtZW50KCksIGZpbHRlckVsZW1l
bnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgaWYgKGZpbHRlckRh
dGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpKQorICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0Zp
bHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSk7CisgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdXRvIHRhcmdldEJvdW5kaW5n
Qm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVt
ZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFy
Z2V0Qm91bmRpbmdCb3gpOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFu
c2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0
ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7Ci0gICAgaWYgKCFhYnNvbHV0ZVRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRWxp
bWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJl
IGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KLSAgICBm
aWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShh
YnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFuc2Zvcm0ueVNjYWxl
KCksIDAsIDApOwotCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIGJvdW5kYXJpZXMgb2YgdGhl
IGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgorICAgIC8vIENhbGN1bGF0ZSB0aGUgc291
cmNlSW1hZ2VSZWN0CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0
cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNl
Y3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2lu
Z1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qo
ZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRl
ciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVt
ZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVh
dGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2lu
Z1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1p
dGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRl
ciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMo
KmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBm
aWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJl
IGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVj
dCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0g
ICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwg
c2NhbGUpOwotICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKIAotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgotICAg
IGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKLSAgICBG
aWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0
KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRvdGFsTnVtYmVyT2ZFZmZl
Y3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisgICAgLy8gQ2FsY3VsYXRlIHRo
ZSBhYnNvbHV0ZVRyYW5zZm9ybQorICAgIGF1dG8gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0
ZVN5c3RlbShyZW5kZXJlcik7CisgICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2VcbiIg
PDwgKmZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKSk7Ci0KLSAgICBsYXN0RWZmZWN0
LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3Vi
UmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0IG9u
ZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAotICAgIC8vIHJlY2FsY3Vs
YXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewot
ICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwot
ICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBpcyBlbXB0eSwgd2UgaGF2ZSBz
b21ldGhpbmcgbGlrZSA8ZyBmaWx0ZXI9Ii4uIi8+LgotICAgIC8vIEV2ZW4gaWYgdGhlIHRhcmdl
dCBvYmplY3RCb3VuZGluZ0JveCgpIGlzIGVtcHR5LCB3ZSBzdGlsbCBoYXZlIHRvIGRyYXcgdGhl
IGxhc3QgZWZmZWN0IHJlc3VsdCBpbWFnZSBpbiBwb3N0QXBwbHlSZXNvdXJjZS4KLSAgICBpZiAo
ZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKCFt
X3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKLSAgICAgICAgZmls
dGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0
ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQg
dGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KKyAgICBhdXRvIGFic29sdXRlU2NhbGUgPSBGbG9hdFNp
emUoYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgp
KTsKKyAgICBmaWx0ZXJEYXRhLT5zY2FsZSA9IEZpbHRlckdlb21ldHJ5OjpjYWxjdWxhdGVGaWx0
ZXJTY2FsZShmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBhYnNvbHV0ZVNjYWxlKTsKIAotICAg
IC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBm
aWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4K
LSAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKKyAgICBhdXRvIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNm
b3JtKGZpbHRlckRhdGEtPnNjYWxlLndpZHRoKCksIDAsIDAsIGZpbHRlckRhdGEtPnNjYWxlLmhl
aWdodCgpLCAwLCAwKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRp
bmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5B
VElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAgICAgYXV0byBjb2xvclNw
YWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKLSAgICBhdXRvIHNv
dXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIGNvbnRleHQpOworCisgICAgYXV0byBob3N0V2luZG93ID0gcmVuZGVyZXIu
dmlldygpLmZyYW1lVmlldygpLnJvb3QoKSA/IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5y
b290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisKKyAgICBhdXRvIHNvdXJjZUdyYXBoaWMg
PSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3
aW5nUmVnaW9uLCBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgaG9zdFdpbmRvdyk7CiAgICAgaWYgKCFzb3VyY2VHcmFw
aGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMo
JnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7
CiAgICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUo
ZmlsdGVyRGF0YSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIC8v
IFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZp
bHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKIAorICAg
IC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdy
YXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNl
R3JhcGhpYy0+Y29udGV4dCgpOwotICAKKwogICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNC
dWZmZXIgPSBXVEZNb3ZlKHNvdXJjZUdyYXBoaWMpOwogICAgIGZpbHRlckRhdGEtPnNhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7CiAKICAgICBjb250ZXh0ID0gJnNvdXJjZUdyYXBoaWNDb250ZXh0Owog
Ci0gICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIp
KTsKICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZp
bHRlckRhdGEpKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjksMzggKzE5MSwyMiBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBG
aWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3Qo
KTsKLQotICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0
eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4g
SXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCi0gICAgICAgIC8vIGluaXRpYWwgZmls
dGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24g
YQotICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4KLSAgICAgICAgaWYgKGZpbHRlckRhdGEuc3Rh
dGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCi0gICAgICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+
c2V0U291cmNlSW1hZ2UoV1RGTW92ZShmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIpKTsK
LQotICAgICAgICAvLyBBbHdheXMgdHJ1ZSBpZiBmaWx0ZXJEYXRhIGlzIGp1c3QgYnVpbHQgKGZp
bHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkJ1aWx0KS4KLSAgICAgICAgaWYgKCFsYXN0
RWZmZWN0LT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZp
bHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAg
ICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWZpbHRlckRhdGEuYm91
bmRhcmllcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRh
dGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZl
Y3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAg
ICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgICAg
IGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5zY2FsZS53aWR0aCgpLCAx
IC8gZmlsdGVyRGF0YS5zY2FsZS5oZWlnaHQoKSkpOwogCi0gICAgICAgICAgICBjb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCku
d2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0
KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2Us
IGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+
c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgICAgIGlmIChm
aWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgICAgICAgICB0YXJnZXRCb3VuZGluZ1NpemUg
PSByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLnNpemUoKTsKIAotICAgICAgICAgICAgY29u
dGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51
bGxwdHI7CisgICAgICAgIGF1dG8gZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzID0gU1ZHRmlsdGVy
QnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoZmlsdGVyRWxlbWVudCgpLCBy
ZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgRmlsdGVyR2VvbWV0cnkgZ2Vv
bWV0cnkoZmlsdGVyRGF0YS5ib3VuZGFyaWVzLCBmaWx0ZXJEYXRhLnNjYWxlLCB0YXJnZXRCb3Vu
ZGluZ1NpemUsIFdURk1vdmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKSk7CisKKyAgICAgICAg
Y29udGV4dC0+ZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1
ZmZlci5nZXQoKSwgZmlsdGVyRGF0YS5kcmF3aW5nUmVnaW9uLCAqZmlsdGVyRGF0YS5maWx0ZXIs
IGdlb21ldHJ5KTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RBcHBseVJlc291cmNlIGRv
bmVcbiIpOworICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICB9
CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwOCwyNyArMjE0LDEzIEBAIEZs
b2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25z
dCBSZW5kZXJPYmplY3QmIG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxl
bWVudCgpLmZpbHRlclVuaXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGluZ0JveCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCi0gICAgTE9HKEZp
bHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZvciAoY29uc3QgYXV0byYg
b2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewogICAgICAg
ICBjb25zdCBhdXRvJiBmaWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0YVBhaXIudmFsdWU7CiAg
ICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIqIGJ1aWxkZXIgPSBm
aWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJFZmZlY3QqIGVmZmVjdCA9
IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAgICAgaWYgKCFlZmZlY3Qp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gU2luY2UgYWxsIGVmZmVjdHMgc2hh
cmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAgIC8vIG9yIG5vbmUgb2Yg
dGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0dmUtPnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3QpOwotCiAgICAgICAg
IC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgIG1hcmtDbGllbnRG
b3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVwYWludEludmFsaWRh
dGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDhjZTBjN2FiYzE0M2JkYjY1Mzg1MGM5M2Uz
MjkyYWM5ZGE0OWJiYzcuLjhjMGYwZmMxMzYyZjlmMGUwNDQ2Mjg1YmU5OTc2ZDIzMTFiNDNhNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsMTEg
KzQyLDkgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRGF0YSgpID0gZGVmYXVsdDsKIAotICAgIFJl
ZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVp
bGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXI7CiAgICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4dCogc2F2
ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwotICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKICAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFNpemUgc2NhbGU7CkBAIC03Miw4ICs2OSw2IEBAIHB1
YmxpYzoKIAogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9i
amVjdCYpIG92ZXJyaWRlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+
IGJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImKSBjb25zdDsKLQogICAgIGlubGluZSBTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3Q7CiAgICAgaW5saW5lIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAppbmRleCBhZGQ3MWE2NjM3YWIyNDVhOWNjNDQyYWUwYmYz
Yzk4NzBlNGM5MWJjLi5lNDI3NzQyZjUxZjkyM2JkMGM3Y2RkOTkzYzc0YTZhNTljNWNkODQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcApAQCAtNTUsMjIgKzU1LDE4IEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zCiB7CiAgICAgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpz
dHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKLSAgICBhdXRvKiBmaWx0ZXIgPSBwYXJl
bnQoKTsKLSAgICBpZiAoIWZpbHRlcikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKGRpZmYg
PT0gU3R5bGVEaWZmZXJlbmNlOjpFcXVhbCB8fCAhb2xkU3R5bGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUo
KTsKICAgICBpZiAoaXM8U1ZHRkVGbG9vZEVsZW1lbnQ+KGZpbHRlclByaW1pdGl2ZUVsZW1lbnQo
KSkpIHsKICAgICAgICAgaWYgKG5ld1N0eWxlLmZsb29kQ29sb3IoKSAhPSBvbGRTdHlsZS0+c3Zn
U3R5bGUoKS5mbG9vZENvbG9yKCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCh0aGlzLCBTVkdO
YW1lczo6Zmxvb2RfY29sb3JBdHRyKTsKKyAgICAgICAgICAgIGZpbHRlclByaW1pdGl2ZUVsZW1l
bnQoKS5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFNWR05hbWVzOjpmbG9vZF9jb2xvckF0dHIp
OwogICAgICAgICBpZiAobmV3U3R5bGUuZmxvb2RPcGFjaXR5KCkgIT0gb2xkU3R5bGUtPnN2Z1N0
eWxlKCkuZmxvb2RPcGFjaXR5KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCh0aGlzLCBTVkdO
YW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpOworICAgICAgICAgICAgZmlsdGVyUHJpbWl0aXZlRWxl
bWVudCgpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlB
dHRyKTsKICAgICB9IGVsc2UgaWYgKGlzPFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudD4oZmls
dGVyUHJpbWl0aXZlRWxlbWVudCgpKSB8fCBpczxTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
PihmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkpKSB7CiAgICAgICAgIGlmIChuZXdTdHlsZS5saWdo
dGluZ0NvbG9yKCkgIT0gb2xkU3R5bGUtPnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKQotICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXIpLnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQodGhpcywgU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cik7
CisgICAgICAgICAgICBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkucHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZChTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5jcHAKaW5kZXggYjIzODc4NjJkZGYyMjIxNzFlNGE1ZDljMmRmNTVmNmM5ODM5YmI2Mi4u
NmE1M2FmYTFlYmQxNGY3MDMxMzk2NzU4MDRmZjdiMjg1YzdlNTJiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlS
ZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICNlbmRpZgogCiAg
ICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRl
eHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0
ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYzY1MDIxYmVlMDM1NTY1YWFiMzFjNjdmYjkzMTlmODhl
NjE4MDdjNy4uNjllN2E1Y2UwNjk5Y2JhNmFmNWZjOGViZjM3MmYyYzAyOTM1YWU5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgog
CiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC01Miw2ICs1Myw3IEBACiAjaW5jbHVk
ZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5o
IgogI2luY2x1ZGUgIlNWR0VsbGlwc2VFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgi
CiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveElubGluZXMuaCIKICNpbmNsdWRlICJTVkdMaW5l
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCkBAIC00MzEsMTMgKzQzMyw5
IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0
cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkpOwogICAgICAgICB0
cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGlj
aCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7
Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFu
c2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAg
IGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdl
dCgpKSkgeworICAgICAgICBpZiAoUmVmUHRyPEZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0
ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpKSkgewogICAgICAgICAgICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotCi0gICAgICAgICAgICBpZiAoRmls
dGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQotICAgICAgICAg
ICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICAg
ICAgZHVtbXlGaWx0ZXItPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVzb3VyY2VU
eXBlKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNsaXBwZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXImPihyZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyMGI4YjVl
N2IwN2IzMWExMmM1YWFjYmEzODU4OTJmYmYzYTIzNTczLi4xNjM3MDJhYWIwYzQxNTk1ZTRiMzdh
YTYyZWEzZDVmYmVjYmNmOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTIyOCw3ICsyMjgsNyBAQCBBZmZpbmVU
cmFuc2Zvcm0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091
dGVybW9zdENvb3JkaW5hdAogICAgIHJldHVybiBhYnNvbHV0ZVRyYW5zZm9ybTsKIH0KIAotUmVm
UHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
CitSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
YnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cpCiB7CiAgICAgSW50UmVjdCBwYWludFJlY3QgPSBjYWxjdWxhdGVJbWFnZUJ1ZmZlclJlY3Qo
dGFyZ2V0UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0
eSBJbWFnZUJ1ZmZlcnMuCkBAIC0yMzgsMTIgKzIzOCw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0
YXJnCiAgICAgRmxvYXRTaXplIHNjYWxlOwogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShwYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7CiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEsIGNvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVy
aW5nTW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbmRpZgorICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5k
ZXJpbmdNb2RlLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRlcmluZ1B1cnBvc2U6OkRP
TSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBob3N0V2luZG93KTsKICAgICBp
ZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCA1OTY1
OTdiZTEyNDdhOTZhNjA0YWNjZjQ1N2UwOTI5ZmQwZjUwYTBlLi5jMzlmYjEwMmViZDFmNjljODFi
NDI3ZTc4MTNmM2E4ZDg0YjM5YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlckVsZW1lbnQmLCBQYWludElu
Zm8mLCBOZWVkc0dyYXBoaWNzQ29udGV4dFNhdmUgPSBEb250U2F2ZUdyYXBoaWNzQ29udGV4dCk7
CiAgICAgYm9vbCBpc1JlbmRlcmluZ1ByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJp
bmdGbGFncyAmIFJlbmRlcmluZ1ByZXBhcmVkOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxs
cHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CiAKICAgICBz
dGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRl
ckVsZW1lbnQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJkNmQw
NjQzMWY2ODYuLjJlZjA3ZTRkOGRhMWZiZDc4ODEzZGJmMTFlNTc5MTMwOTcyM2RiZjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtNzMsMTYgKzczLDYgQEAg
dm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbVN0cmkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRUJs
ZW5kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRUJsZW5kKiBibGVuZCA9
IHN0YXRpY19jYXN0PEZFQmxlbmQqPihlZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bW9kZUF0dHIpCi0gICAgICAgIHJldHVybiBibGVuZC0+c2V0QmxlbmRNb2RlKG1vZGUo
KSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2Rl
QXR0cikgewpAQCAtMTAwLDIwICs5MCwyNyBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3ZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAg
YXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBG
RUJsZW5kJiBibGVuZCA9IGRvd25jYXN0PEZFQmxlbmQ+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjptb2RlQXR0cikKKyAgICAgICAgYmxlbmQuc2V0QmxlbmRNb2RlKG1v
ZGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7Cisg
ICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlu
cHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogCiAgICAgaWYgKCFpbnB1dDEgfHwg
IWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZF
QmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIG1vZGUoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5y
ZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAg
IGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAg
IHNldEZpbHRlckVmZmVjdChGRUJsZW5kOjpjcmVhdGUobW9kZSgpKSk7CisKKyAgICByZXR1cm4g
eyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJlbGVh
c2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLjY1MDg4
MWZlMjI2ZTVkYWZiNTgzN2U5MWM0MjBjNTcxNDI1NWMyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw4ICs2OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJF
ZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCAwNTI0ODU3OGMy
NzRjOGZhMmIzZTFmMjQ0ZTQzNjc4NjhmNDJiYTljLi42OTM0YzhlMmZjNTU5MDY0NmVmMjY0ZDk5
NzdhN2NlMmVjMTdlODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHAKQEAgLTcxLDE4ICs3MSw2IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnNldEZp
bHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVDb2xvck1hdHJpeCogY29sb3JNYXRyaXggPSBzdGF0
aWNfY2FzdDxGRUNvbG9yTWF0cml4Kj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnR5cGVBdHRyKQotICAgICAgICByZXR1cm4gY29sb3JNYXRyaXgtPnNldFR5cGUodHlw
ZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpCi0gICAgICAg
IHJldHVybiBjb2xvck1hdHJpeC0+c2V0VmFsdWVzKHZhbHVlcygpKTsKLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7CkBAIC0xMDAsNTAgKzg4LDYzIEBAIHZvaWQg
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRUNvbG9yTWF0cml4
RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVj
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQotICAgIGlmICghaW5wdXQxKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiBjb2xvck1hdHJpeCA9IGRvd25jYXN0
PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0
eXBlQXR0cikgeworICAgICAgICBjb2xvck1hdHJpeC5zZXRDb2xvck1hdHJpeFR5cGUodHlwZSgp
KTsKKyAgICAgICAgY29sb3JNYXRyaXguc2V0VmFsdWVzKGZpbHRlclZhbHVlcygpKTsKKyAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQorICAgICAgICBjb2xv
ck1hdHJpeC5zZXRWYWx1ZXMoZmlsdGVyVmFsdWVzKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IGZpbHRlclZhbHVlczsK
LSAgICBDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZSA9IHR5cGUoKTsKK1ZlY3RvcjxmbG9hdD4g
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlclZhbHVlcygpIGNvbnN0Cit7CisgICAgVmVj
dG9yPGZsb2F0PiBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMoKTsKKyAgICB1bnNpZ25lZCBzaXplID0g
dmFsdWVzKCkuc2l6ZSgpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF0cml4VmFs
dWVDb3VudCA9IDIwOwogCiAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHZhbHVlcyBpcyBlbXB0eSAo
U1ZHIDEuMSAxNS4xMCkuCi0gICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0
dHIpKSB7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgICAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF0cml4VmFsdWVDb3VudCA9IDIwOwotICAgICAgICAgICAgZmlsdGVyVmFsdWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobWF0cml4VmFsdWVDb3VudCk7CisgICAgc3dpdGNoICh0eXBl
KCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGlmICgh
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB8fCBzaXplICE9IG1hdHJpeFZhbHVl
Q291bnQpIHsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlcy5jbGVhcigpOwogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRyaXhWYWx1ZUNvdW50OyBpKyspCi0gICAgICAgICAg
ICAgICAgZmlsdGVyVmFsdWVzLnVuY2hlY2tlZEFwcGVuZCgoaSAlIDYpID8gMCA6IDEpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVzLmFwcGVuZCgoaSAl
IDYpID8gMCA6IDEpOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6CisgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNB
dHRyKSB8fCBzaXplICE9IDEpCiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB7IDAgfTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RToKKyAgICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHx8IHNp
emUgIT0gMSkKICAgICAgICAgICAgIGZpbHRlclZhbHVlcyA9IHsgMSB9OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSB2YWx1ZXMoKS5zaXplKCk7Ci0K
LSAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYg
c2l6ZSAhPSAyMCkKLSAgICAgICAgICAgIHx8IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAxKQotICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIGZpbHRlclZhbHVlcyA9IHZhbHVl
cygpOwotICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmls
dGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBy
ZXR1cm4gZmlsdGVyVmFsdWVzOworfQorCisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVp
bGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFpbnB1dDEpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJF
ZmZlY3QoRkVDb2xvck1hdHJpeDo6Y3JlYXRlKHR5cGUoKSwgZmlsdGVyVmFsdWVzKCkpKTsKKwor
ICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0g
fTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5OGIxMmU3N2JlMjA2
YjljNWM0MTAyM2ZkLi5mOGRlYTUyMWI5MWEzNTcwOTVjMTFiNTgzYTYzYjc0MDA4MmUyMzkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaApAQCAtODUs
OCArODUsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPGZsb2F0PiBmaWx0
ZXJWYWx1ZXMoKSBjb25zdDsKKworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdl
ZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAppbmRl
eCA5MGE1NWI3ZWZmZjdhM2ZlNjA2YTllMDU3OWE3NmVkZTlmOTY4MDExLi45ZDQ4NDcxMTAwZGMy
OTU1NTMxZDVlZmM3MzUxMmQzZjU1NTNjMDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKQEAgLTYzLDEyICs2MywxNCBA
QCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwotICAgIAorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAg
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OworCisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0
ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiAKICAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuOwpAQCAtODUsMTAgKzg3LDEwIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0CiAgICAgICAg
IGVsc2UgaWYgKGlzPFNWR0ZFRnVuY0FFbGVtZW50PihjaGlsZCkpCiAgICAgICAgICAgICBhbHBo
YSA9IGRvd25jYXN0PFNWR0ZFRnVuY0FFbGVtZW50PihjaGlsZCkudHJhbnNmZXJGdW5jdGlvbigp
OwogICAgIH0KLSAgICAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNy
ZWF0ZShmaWx0ZXIsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworCisgICAgc2V0Rmls
dGVyRWZmZWN0KEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZl
OGI5OTNhNGRkNTQ4NjMuLjY1ZjY5NjExMGMzMWEyN2JiNmRjZWEzMTEzMDQwZmM5MTA2NjQzZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJp
YnV0ZUNoYW5nZWQgbWlzc2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNj
YTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgyMzUuLmJkMDQwMDk2MDQ0NWVkNzI4
ZGExYjRkYzZlOTE5YTMyZDllMTY3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlS
ZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVDb21wb3Np
dGVFbGVtZW50OjptX2luMT4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQ
cm9wZXJ0eTxTVkdOYW1lczo6aW4yQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjI+
KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6
Om9wZXJhdG9yQXR0ciwgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSwgJlNWR0ZFQ29tcG9zaXRlRWxl
bWVudDo6bV9zdmdPcGVyYXRvcj4oKTsKKyAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0
ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBGRUNvbXBvc2l0ZU9wZXJhdG9yLCAm
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2NvbXBvc2l0ZU9wZXJhdG9yPigpOwogICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMUF0dHIsICZTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJl
Z2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmsyQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6
bV9rMj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdO
YW1lczo6azNBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2szPigpOwpAQCAtNTYsOSAr
NTYsOSBAQCBSZWY8U1ZHRkVDb21wb3NpdGVFbGVtZW50PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21T
dHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIp
IHsKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJv
cGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwor
ICAgICAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlm
IChwcm9wZXJ0eVZhbHVlID4gMCkKLSAgICAgICAgICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VW
YWxJbnRlcm5hbDxDb21wb3NpdGVPcGVyYXRpb25UeXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAg
ICAgICAgIG1fY29tcG9zaXRlT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxGRUNvbXBvc2l0
ZU9wZXJhdG9yPihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
OTUsMjUgKzk1LDYgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b20KICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0K
IAotYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0g
ICAgRkVDb21wb3NpdGUqIGNvbXBvc2l0ZSA9IHN0YXRpY19jYXN0PEZFQ29tcG9zaXRlKj4oZWZm
ZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAgICAg
ICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0T3BlcmF0aW9uKHN2Z09wZXJhdG9yKCkpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRl
LT5zZXRLMShrMSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKLSAg
ICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzIoazIoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprM0F0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEszKGszKCkp
OwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKQotICAgICAgICByZXR1cm4g
Y29tcG9zaXRlLT5zZXRLNChrNCgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotCiB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6azFBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprMkF0dHIgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmszQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKSB7CkBAIC0x
MzEsMjAgKzExMiwzNSBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9p
ZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAg
YXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAgICAK
KyAgICBhdXRvJiBjb21wb3NpdGUgPSBkb3duY2FzdDxGRUNvbXBvc2l0ZT4oZWZmZWN0KTsKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICAgICAgY29tcG9z
aXRlLnNldENvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9yKCkpOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRL
MShrMSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azJBdHRyKQorICAg
ICAgICBjb21wb3NpdGUuc2V0SzIoazIoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmszQXR0cikKKyAgICAgICAgY29tcG9zaXRlLnNldEszKGszKCkpOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprNEF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRL
NChrNCgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIp
Cit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOworCiAgICAgaWYgKCFpbnB1
dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVj
dCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigp
LCBrMygpLCBrNCgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgy
KTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFw
cGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9
OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0
KEZFQ29tcG9zaXRlOjpjcmVhdGUoY29tcG9zaXRlT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMo
KSwgazQoKSkpOworICAgIAorICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5y
ZWxlYXNlTm9uTnVsbCgpLCBpbnB1dDIucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3
YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3OTcyMmY2Li5lZmJjZjVkMTM2MDI5Yzc1N2NhMWJhODFk
ZTk4ODA0MDRmNGE3M2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxl
bWVudC5oCkBAIC0yNywxNSArMjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxh
dGU8PgotaW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzsgfQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8RkVD
b21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4geworc3RydWN0IFNWR1Byb3Bl
cnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGln
aGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI7IH0K
IAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBl
KQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvcikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0
Y2ggKGNvbXBvc2l0ZU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfVU5LTk9XTjoKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb21wb3NpdGVPcGVyYXRpb25U
eXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgRkVDb21wb3Np
dGVPcGVyYXRvciBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAodmFsdWUgPT0gIm92ZXIiKQogICAgICAgICAgICAgcmV0dXJuIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX09WRVI7CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbjEo
KSBjb25zdCB7IHJldHVybiBtX2luMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBTdHJpbmcgaW4y
KCkgY29uc3QgeyByZXR1cm4gbV9pbjItPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3It
PmN1cnJlbnRWYWx1ZTxDb21wb3NpdGVPcGVyYXRpb25UeXBlPigpOyB9CisgICAgRkVDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRl
T3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxGRUNvbXBvc2l0ZU9wZXJhdG9yPigpOyB9CiAgICAgZmxv
YXQgazEoKSBjb25zdCB7IHJldHVybiBtX2sxLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0
IGsyKCkgY29uc3QgeyByZXR1cm4gbV9rMi0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBr
MygpIGNvbnN0IHsgcmV0dXJuIG1fazMtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC05Myw3ICs5Myw3
IEBAIHB1YmxpYzoKIAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0
dXJuIG1faW4xOyB9CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMkFuaW1hdGVkKCkgeyByZXR1
cm4gbV9pbjI7IH0KLSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1h
dGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRp
b24mIGNvbXBvc2l0ZU9wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJh
dG9yOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIGsxQW5pbWF0ZWQoKSB7IHJldHVybiBtX2sx
OyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIGsyQW5pbWF0ZWQoKSB7IHJldHVybiBtX2syOyB9
CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIGszQW5pbWF0ZWQoKSB7IHJldHVybiBtX2szOyB9CkBA
IC0xMDgsMTMgKzEwOCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0g
ICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRl
ckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0
ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBTVkdBbmltYXRl
ZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+
IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV9jb21wb3NpdGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0
aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51
bWJlcj4gbV9rMSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8
U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMp
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0ZWROdW1iZXI6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9zaXRlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmlkbAppbmRleCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJiNDUyZGUwLi5m
YzY3MGM5ZWM1NmM0MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgsNyBAQAogCiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4xOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAgICBbSW1wbGVt
ZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3BlcmF0b3JdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVkZWNhYmI0ZWEz
NGI0MzViNDdlYTVhODBjNmEyNmRmMS4uNjQ4MjMyMTA1YjlmZTRjMzc1M2JiODQ5MTc5NTZiZTQy
MGY2OTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuY3BwCkBAIC0xMzgsMjggKzEzOCw2IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVDb252b2x2ZU1hdHJpeCogY29udm9sdmVNYXRy
aXggPSBzdGF0aWNfY2FzdDxGRUNvbnZvbHZlTWF0cml4Kj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZl
TWF0cml4LT5zZXRFZGdlTW9kZShlZGdlTW9kZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmRpdmlzb3JBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldERp
dmlzb3IoZGl2aXNvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJpYXNBdHRy
KQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldEJpYXMoYmlhcygpKTsKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKQotICAgICAgICByZXR1cm4gY29u
dm9sdmVNYXRyaXgtPnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFko
KSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpCi0gICAgICAg
IHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdldFgo
KSwgdGFyZ2V0WSgpKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0
TGVuZ3RoQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRLZXJuZWxVbml0
TGVuZ3RoKEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCi0g
ICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFs
cGhhKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzZXRPcmRlcihmbG9hdCB4LCBm
bG9hdCB5KQogewogICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7CkBAIC0xOTEs
MTMgKzE2OSwzNiBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3ZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNo
YW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEo
KSk7CisgICAgYXV0byYgY29udm9sdmVNYXRyaXggPSBkb3duY2FzdDxGRUNvbnZvbHZlTWF0cml4
PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKQor
ICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRFZGdlTW9kZShlZGdlTW9kZSgpKTsKKyAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIpCisgICAgICAgIGNvbnZvbHZl
TWF0cml4LnNldERpdmlzb3IoZGl2aXNvcigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Ymlhc0F0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNldEJpYXMoYmlhcygp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WEF0dHIpCisgICAg
ICAgIGNvbnZvbHZlTWF0cml4LnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRh
cmdldFkoKSkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRZQXR0
cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdl
dFgoKSwgdGFyZ2V0WSgpKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtl
cm5lbFVuaXRMZW5ndGhBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRLZXJuZWxVbml0
TGVuZ3RoKEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhhQXR0
cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFscGhh
KCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKK3N0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
KQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAg
aWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogCisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXJF
ZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CisgICAgCiAgICAgaW50IG9y
ZGVyWFZhbHVlID0gb3JkZXJYKCk7CiAgICAgaW50IG9yZGVyWVZhbHVlID0gb3JkZXJZKCk7CiAg
ICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Om9yZGVyQXR0cikpIHsKQEAgLTIwNiwyMiAr
MjA3LDIyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgfQogICAgIC8vIFNwZWMgc2F5
cyBvcmRlciBtdXN0IGJlID4gMC4gQmFpbCBpZiBpdCBpcyBub3QuCiAgICAgaWYgKG9yZGVyWFZh
bHVlIDwgMSB8fCBvcmRlcllWYWx1ZSA8IDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIGF1dG8mIGtlcm5lbE1hdHJpeCA9IHRoaXMtPmtlcm5lbE1h
dHJpeCgpOwogICAgIGludCBrZXJuZWxNYXRyaXhTaXplID0ga2VybmVsTWF0cml4Lml0ZW1zKCku
c2l6ZSgpOwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhpcyBpcyBhIHJlcXVpcmVtZW50LCBhbmQg
c2hvdWxkIGJhaWwgb3V0IGlmIGZhaWxzCiAgICAgaWYgKG9yZGVyWFZhbHVlICogb3JkZXJZVmFs
dWUgIT0ga2VybmVsTWF0cml4U2l6ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBpbnQgdGFyZ2V0WFZhbHVlID0gdGFyZ2V0WCgpOwogICAgIGlu
dCB0YXJnZXRZVmFsdWUgPSB0YXJnZXRZKCk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1l
czo6dGFyZ2V0WEF0dHIpICYmICh0YXJnZXRYVmFsdWUgPCAwIHx8IHRhcmdldFhWYWx1ZSA+PSBv
cmRlclhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXM6IHRhcmdldFggPSBm
bG9vciAoIG9yZGVyWCAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFy
Z2V0WEF0dHIpKQogICAgICAgICB0YXJnZXRYVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29y
ZihvcmRlclhWYWx1ZSAvIDIpKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJn
ZXRZQXR0cikgJiYgKHRhcmdldFlWYWx1ZSA8IDAgfHwgdGFyZ2V0WVZhbHVlID49IG9yZGVyWVZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
Ly8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0WSA9IGZsb29yICgg
b3JkZXJZIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0
cikpCiAgICAgICAgIHRhcmdldFlWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVy
WVZhbHVlIC8gMikpOwpAQCAtMjM0LDExICsyMzUsMTEgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckIKICAgICAgICAga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA9IDE7CiAgICAgfQogICAgIGlmIChr
ZXJuZWxVbml0TGVuZ3RoWFZhbHVlIDw9IDAgfHwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA8PSAw
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZs
b2F0IGRpdmlzb3JWYWx1ZSA9IGRpdmlzb3IoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05h
bWVzOjpkaXZpc29yQXR0cikgJiYgIWRpdmlzb3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmRpdmlzb3JBdHRyKSkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbE1hdHJp
eFNpemU7ICsraSkKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSArPSBrZXJuZWxNYXRyaXguaXRl
bXMoKVtpXS0+dmFsdWUoKTsKQEAgLTI0Niw5ICsyNDcsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckIKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJbnRTaXplKG9yZGVyWFZh
bHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRY
VmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExl
bmd0aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2Vy
bmVsTWF0cml4KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAg
ICByZXR1cm4gZWZmZWN0OworICAgIGF1dG8ga2VybmVsU2l6ZSA9IEludFNpemUob3JkZXJYVmFs
dWUsIG9yZGVyWVZhbHVlKTsKKyAgICBhdXRvIHRhcmdldE9mZnNldCA9IEludFBvaW50KHRhcmdl
dFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKTsKKyAgICBhdXRvIGtlcm5lbFVuaXRMZW5ndGggPSBGbG9h
dFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpOwor
ICAgIHNldEZpbHRlckVmZmVjdChGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoa2VybmVsU2l6ZSwg
ZGl2aXNvclZhbHVlLCBiaWFzKCksIHRhcmdldE9mZnNldCwgZWRnZU1vZGUoKSwga2VybmVsVW5p
dExlbmd0aCwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpKTsKKworICAgIHJldHVybiB7
IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMwMDI2OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkw
NDliMzM5Li4wZTA4ZTI5YWMzMWMxNThiMGRkMGM3YmI2ZDViZTJiN2MxNDRjMzJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAy
LDggKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQuY3BwCmluZGV4IDE1MmM5ODVmZDhlOTVhZTk5NTdlNmUyMWQ2YmYyYTEwYzQ1NGJkZDUuLjVl
NTg4ZmU5NzA2MjJhODFhZWZkMzFiZTAzM2FlZDk2N2NhNDUyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC04MSw1MCAr
ODEsNiBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29ucwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29s
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAg
ICBGRURpZmZ1c2VMaWdodGluZyogZGlmZnVzZUxpZ2h0aW5nID0gc3RhdGljX2Nhc3Q8RkVEaWZm
dXNlTGlnaHRpbmcqPihlZmZlY3QpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjps
aWdodGluZ19jb2xvckF0dHIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgICAgIENvbG9y
IGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVu
ZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwotICAgICAgICByZXR1
cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKLSAgICB9Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQotICAgICAgICByZXR1
cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKLSAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFu
dCgpKTsKLQotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+
KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7Ci0gICAgY29uc3QgU1ZHRkVMaWdodEVs
ZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50
KHRoaXMpOwotICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwotCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjphemltdXRoQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEF6
aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRoKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ZWxldmF0aW9uQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEVsZXZh
dGlvbihsaWdodEVsZW1lbnQtPmVsZXZhdGlvbigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnhBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WChsaWdodEVsZW1l
bnQtPngoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAg
cmV0dXJuIGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVtZW50LT55KCkpOwotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRa
KGxpZ2h0RWxlbWVudC0+eigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50
c0F0WEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFgobGlnaHRF
bGVtZW50LT5wb2ludHNBdFgoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2lu
dHNBdFlBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRZKGxpZ2h0
RWxlbWVudC0+cG9pbnRzQXRZKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9p
bnRzQXRaQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WihsaWdo
dEVsZW1lbnQtPnBvaW50c0F0WigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNw
ZWN1bGFyRXhwb25lbnRBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0U3BlY3Vs
YXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQoKSk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpCi0gICAgICAgIHJldHVy
biBsaWdodFNvdXJjZS5zZXRMaW1pdGluZ0NvbmVBbmdsZShsaWdodEVsZW1lbnQtPmxpbWl0aW5n
Q29uZUFuZ2xlKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmRpZmZ1c2VDb25zdGFudEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRM
ZW5ndGhBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsK
QEAgLTE1MSwyOCArMTA3LDgwIEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojps
aWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHRFCiAgICAgcHJpbWl0
aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvJiBkaWZmdXNl
TGlnaHRpbmcgPSBkb3duY2FzdDxGRURpZmZ1c2VMaWdodGluZz4oZWZmZWN0KTsKKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7CisgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQo
cmVuZGVyZXIpOworICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9y
QnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRp
bmdDb2xvcigpKTsKKyAgICAgICAgZGlmZnVzZUxpZ2h0aW5nLnNldENvbG9yKGNvbG9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikgeworICAgICAgICBkaWZmdXNlTGlnaHRpbmcuc2V0U3VyZmFjZVNjYWxl
KHN1cmZhY2VTY2FsZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpIHsKKyAgICAgICAgZGlm
ZnVzZUxpZ2h0aW5nLnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8
TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmcuc291cmNlKCkpOworICAgIGNvbnN0IFNWR0ZF
TGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0
RWxlbWVudCh0aGlzKTsKKyAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldEF6
aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRoKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRFbGV2YXRp
b24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24oKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRYKGxpZ2h0RWxlbWVudC0+
eCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAg
IGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVtZW50LT55KCkpOworICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVs
ZW1lbnQtPnooKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0
WEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WChsaWdodEVsZW1lbnQtPnBv
aW50c0F0WCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZ
QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRZKGxpZ2h0RWxlbWVudC0+cG9p
bnRzQXRZKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpB
dHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2lu
dHNBdFooKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRTcGVjdWxhckV4cG9uZW50KGxpZ2h0
RWxlbWVudC0+c3BlY3VsYXJFeHBvbmVudCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRM
aW1pdGluZ0NvbmVBbmdsZShsaWdodEVsZW1lbnQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpOworICAg
IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAg
ICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5w
dXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCks
IHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogCiAgICAgUmVmUHRyIGxpZ2h0RWxlbWVu
dCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIGlmICgh
bGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJj
ZSgqZmlsdGVyQnVpbGRlcik7CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+
bGlnaHRTb3VyY2UoYnVpbGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5
bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdo
dGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3Rh
bnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShs
aWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9Owot
ICAgIHJldHVybiBlZmZlY3Q7CisgICAgc2V0RmlsdGVyRWZmZWN0KEZFRGlmZnVzZUxpZ2h0aW5n
OjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVs
VW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkp
KTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVs
bCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUy
MDU1ODAuLjVmYWQ3NTk1NDUwNjNmMzJlNTQxZjlmZDQ2MGE3OTBmZGEwMDk3YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU3
LDggKzU3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RB
dHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5jcHAKaW5kZXggMGM1ZTgyNWJjODI1NjBmMzZhMjY5ZWE2ZDcyMmRmZDA1MTczZDhjMi4uYTgz
YmFhNGNmYjA0YjMyYzMwZGNhZWY3YmZjZTQwYjNmODAyZDQ1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKQEAgLTg0LDIwICs4
NCw2IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wg
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAg
IEZFRGlzcGxhY2VtZW50TWFwKiBkaXNwbGFjZW1lbnRNYXAgPSBzdGF0aWNfY2FzdDxGRURpc3Bs
YWNlbWVudE1hcCo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hh
bm5lbFNlbGVjdG9yQXR0cikKLSAgICAgICAgcmV0dXJuIGRpc3BsYWNlbWVudE1hcC0+c2V0WENo
YW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIpCi0gICAgICAgIHJldHVybiBkaXNwbGFjZW1l
bnRNYXAtPnNldFlDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcigpKTsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikKLSAgICAgICAgcmV0dXJuIGRpc3BsYWNl
bWVudE1hcC0+c2V0U2NhbGUoc2NhbGUoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewog
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpzY2FsZUF0dHIpIHsKQEAgLTExNSwyMCArMTAxLDMxIEBAIHZvaWQgU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBhdXRvJiBkaXNwbGFjZW1l
bnRNYXAgPSBkb3duY2FzdDxGRURpc3BsYWNlbWVudE1hcD4oZWZmZWN0KTsKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKQorICAgICAgICBkaXNwbGFj
ZW1lbnRNYXAuc2V0WENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKCkpOworICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0cikKKyAgICAg
ICAgZGlzcGxhY2VtZW50TWFwLnNldFlDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3Rvcigp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAg
ICBkaXNwbGFjZW1lbnRNYXAuc2V0U2NhbGUoc2NhbGUoKSk7CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjIoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoZmlsdGVyLCB4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwg
c2NhbGUoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0g
ICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQo
aW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRURp
c3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3Rv
cigpLCBzY2FsZSgpKSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEu
cmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5k
ZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uZDE1Zjg4ZThlMDlh
YzNlZjk2ODYwZDkzZjZlZTJlMmJkNjdlZDI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTAsOCArOTAsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNo
YW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcApp
bmRleCBhNjg2YmI4ZmEzOGQ5ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZmMmY3Li45ZWEwZTA3ODNi
ZThhMmY4MGRkNmI3YWJiNjZkMzA4ZWJmNzBhMDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5h
Yy5uej4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCIKIAotI2luY2x1ZGUg
IkRpc3RhbnRMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkRpc3RhbnRMaWdodFNvdXJjZURhdGEu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw5
ICszNyw5IEBAIFJlZjxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+IFNWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJl
ZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3QKK0xpZ2h0U291cmNlIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIERpc3RhbnRMaWdodFNvdXJjZTo6Y3JlYXRlKGF6aW11dGgoKSwgZWxldmF0aW9uKCkpOwor
ICAgIHJldHVybiB7IERpc3RhbnRMaWdodFNvdXJjZURhdGEoYXppbXV0aCgpLCBlbGV2YXRpb24o
KSkgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5oCmluZGV4IGZiZGY3MWMwZWNiZDlmOTk3ZDY5ZWE2NTRiOWY1YmEwMzE3ZDcxY2MuLjBk
OTk2MmNlZDBiMTIxZjEzZTgxMzg4NDRhMTg5ZWFlOTVlYmU3YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1
cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCw4ICszMSw5IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGlnaHRTb3VyY2UgbGlnaHRTb3VyY2Uo
Y29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKKwogc3RhdGljX2Fz
c2VydChzaXplb2YoU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdo
dEVsZW1lbnQpKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1
ZDc5ZjRiMzI2YTg5YmZjNWI2ODEuLmZlMjMyOGI1Y2E2NjNiNGQ0YzliNzdlOTMyNzRjZWMwYThl
MWRmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAKQEAgLTg4LDcgKzg4LDEzIEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvCiAKIHZvaWQgU1ZH
RkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0ciB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpz
dGREZXZpYXRpb25BdHRyKSB7CisgICAgICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3Vh
cmQoKnRoaXMpOworICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKSB7CiAgICAgICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMp
OwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk3LDI3ICsxMDMs
NDQgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVj
dCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKKyAgICBhdXRvJiBm
ZURyb3BTaGFkb3cgPSBkb3duY2FzdDxGRURyb3BTaGFkb3c+KGVmZmVjdCk7CisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIpCisgICAgICAgIGZlRHJvcFNoYWRvdy5zZXREeChk
eCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAg
ICBmZURyb3BTaGFkb3cuc2V0RHkoZHkoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldFN0ZERl
dmlhdGlvblgoc3RkRGV2aWF0aW9uWCgpKTsKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldFN0ZERl
dmlhdGlvblkoc3RkRGV2aWF0aW9uWSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVk
RWZmZWN0KGluMSgpKTsKKyAgICBpZiAoIWlucHV0MSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0
KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OworCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2aWF0
aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdT
dHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgCiAgICAgQ29sb3IgY29s
b3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHls
ZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNp
dHkoKTsKIAotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7Ci0gICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIHNl
dEZpbHRlckVmZmVjdChGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERl
dmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpKTsKIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERl
dmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA5YjYy
ZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFkLi43NmJmOTI1MzE1OTgzMTliMjUx
ZTU5ZmIxN2Y3ZmUzNDM1ZDMwMjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJp
YnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVk
MGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZjMi4uMjdjMTViMGZlMWM4YzdmNjQ0M2ViZjYzYWMx
MjVhZjFlODYzZjVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3Bw
CkBAIC00MiwzNCArNDIsMzggQEAgUmVmPFNWR0ZFRmxvb2RFbGVtZW50PiBTVkdGRUZsb29kRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEQKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTVkdGRUZsb29kRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQog
Ci1ib29sIFNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVy
RWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQordm9pZCBTVkdG
RUZsb29kRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsK
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBG
RUZsb29kKiBmbG9vZCA9IHN0YXRpY19jYXN0PEZFRmxvb2QqPihlZmZlY3QpOwotCisgICAgCisg
ICAgYXV0byYgZmxvb2QgPSBkb3duY2FzdDxGRUZsb29kPihlZmZlY3QpOwogICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6Zmxvb2RfY29sb3JBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2Qt
PnNldEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOwotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCi0gICAgICAgIHJldHVybiBm
bG9vZC0+c2V0Rmxvb2RPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOwot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgICAgICBm
bG9vZC5zZXRGbG9vZENvbG9yKHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCisgICAgICAg
IGZsb29kLnNldEZsb29kT3BhY2l0eShzdHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKTsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKQogeworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OworCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAgICAgQ29s
b3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihz
dmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9v
ZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwg
b3BhY2l0eSk7CisgICAgc2V0RmlsdGVyRWZmZWN0KEZFRmxvb2Q6OmNyZWF0ZShjb2xvciwgb3Bh
Y2l0eSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCmluZGV4IGI5NmE0M2FhMzEzZTc1ZTRh
MzE2NzI0OGExYjZmNWNmNTFmZWU5MTEuLmE5ZDUyM2ViY2QwODcxZjAzNGZkNGNlYjA0ZGM2YTA3
MzU5NzVkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCkBAIC0zNSw4
ICszNSw4IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3Bl
cnR5T3duZXJSZWdpc3RyeTxTVkdGRUZsb29kRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0
eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAK
LSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1
NjNjNTk5ZC4uMWQ1NzE1NmE3ODJlYTk1YzYxNjdlMDY5N2UyNzI0ODg4ZTkwYTU0YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTg2
LDcgKzg2LDEzIEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBCiAKIHZvaWQgU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0
ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CisgICAgICAgIEluc3Rh
bmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOworICAgICAgICBwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIEluc3RhbmNlSW52YWxp
ZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTk1LDE4ICsxMDEsMzEgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVj
dEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byYgZmVHYXVzc2lhbkJsdXIgPSBkb3duY2FzdDxGRUdh
dXNzaWFuQmx1cj4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERl
dmlhdGlvbkF0dHIpIHsKKyAgICAgICAgZmVHYXVzc2lhbkJsdXIuc2V0U3RkRGV2aWF0aW9uWChz
dGREZXZpYXRpb25YKCkpOworICAgICAgICBmZUdhdXNzaWFuQmx1ci5zZXRTdGREZXZpYXRpb25Z
KHN0ZERldmlhdGlvblkoKSk7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
ZWRnZU1vZGVBdHRyKQorICAgICAgICBmZUdhdXNzaWFuQmx1ci5zZXRFZGdlTW9kZShlZGdlTW9k
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIp
Cit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBp
ZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICgh
aGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUdhdXNzaWFuQmx1
cjo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKSk7
CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmlsdGVyLCBzdGRE
ZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRl
eCBkODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi4zODU1MThmZWYyYzhk
ZDYxOWJjOTUzMDk0OTY1MWI3YWI0NDBhNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01Myw3ICs1Myw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmlu
ZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAK
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUo
dGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUx
NDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODExOTVkM2MyN2VjNGYuLmJkYWFiODg2NDY2YTMzNmVi
NjExODIwYjkxMzcwMDRjYjZiOThmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUu
aCIKKyNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTc0LDE2ICsxNzUsNTMg
QEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Um
LCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8SW1hZ2VCdWZmZXI+IFNW
R0ZFSW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2Uo
ZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKCkpOwotCiAgICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6
OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgdHJlZVNjb3BlKCkpOworICAgIGlm
ICghaXM8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKwogICAgIGlmIChpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZih0YXJnZXQuZWxl
bWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEZFSW1h
Z2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoZmlsdGVyLCB0cmVlU2NvcGUoKSwgaHJlZigpLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgIGF1dG8gY29udGV4dE5vZGUgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KTsKKyAgICBhdXRvIHJlbmRlcmVy
ID0gY29udGV4dE5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlVHJhbnNmb3Jt
CisgICAgYXV0byBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1
bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKCpyZW5kZXJlcik7
CisgICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZm
aW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRy
YW5zZm9ybS55U2NhbGUoKSwgMCwgMCk7CisKKyAgICBhdXRvIHNyY1JlY3QgPSByZW5kZXJlci0+
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0g
c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKKworICAgIGF1dG8g
aW1hZ2VCdWZmZXIgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihpbWFn
ZVJlY3QsIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CisgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBjb250ZXh0ID0gaW1h
Z2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0
cmVlVG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgQWZmaW5lVHJhbnNmb3JtKCkpOworCisg
ICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYpCit7CisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAg
ICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CisKKyAgICBpZiAobV9jYWNoZWRJbWFn
ZSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFSW1hZ2U6OmNyZWF0ZShSZWY8SW1hZ2U+IHsg
Km1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSkgfSwgcHJlc2VydmVB
c3BlY3RSYXRpbygpKSk7CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVy
Rm9yRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUltYWdlOjpjcmVhdGUoaW1h
Z2VCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKSk7CisKKyAg
ICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxz
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRleCBkOTNlMGQw
ZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li40NzA3ZmU2ODA2YmE4OTY1MTA0OWE2
Zjg5NGM4YTcxYWUyNTg1NGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
aApAQCAtNTUsNyArNTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0
aW5nTm9kZSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXJGb3JFZmZlY3QoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGZp
bHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlIHsgfQorICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4s
IFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJl
cXVlc3RJbWFnZVJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVMaWdodEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5o
CmluZGV4IGNkMGJmYjllZGNmZDdiNGUxYWYzOWI1NWVkYmJiZDc4NGFhZWE4OWQuLjM3MWM0MmFj
NDU2NmRjMDZmNmMwNjJhNjBhMmZlZDM2OTQ5MGJmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUxpZ2h0RWxlbWVudC5oCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9saXZlckBuZXJnZXQuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBj
bGFzcyBTVkdGRUxpZ2h0RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50IHsKICAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKFNWR0ZFTGlnaHRFbGVtZW50KTsKIHB1YmxpYzoKLSAgICB2aXJ0dWFs
IFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIExpZ2h0U291cmNlIGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCA9IDA7CiAgICAgc3RhdGljIFNWR0ZFTGlnaHRFbGVtZW50KiBmaW5kTGln
aHRFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQqKTsKIAogICAgIGZsb2F0IGF6aW11dGgoKSBjb25z
dCB7IHJldHVybiBtX2F6aW11dGgtPmN1cnJlbnRWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAppbmRleCBiZTJmNmUwMzA3ZGM1NTE2MDA3OTBmZDViZjE4
MmYxZDk0NjIzZGQ2Li40NjQ3ZTQ2OTJkYWU4YzkyMGQyYmQ5YWNlNDQyOGZhYmUwYTY5NGNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKQEAgLTI2LDcgKzI2LDYg
QEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhl
bHBlcnMuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC00NSwyNCArNDQsMjUgQEAgUmVmPFNWR0ZFTWVyZ2VF
bGVtZW50PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYg
YnVpbGRlcikKIHsKLSAgICBhdXRvIGVmZmVjdCA9IEZFTWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwot
ICAgIGF1dG8mIG1lcmdlSW5wdXRzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKKyAgICBWZWN0
b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1lcmdlSW5wdXRzOwogCiAgICAgZm9yIChhdXRvJiBtZXJn
ZU5vZGUgOiBjaGlsZHJlbk9mVHlwZTxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KCp0aGlzKSkgewot
ICAgICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZCht
ZXJnZU5vZGUuaW4xKCkpOworICAgICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChtZXJnZU5vZGUuaW4xKCkpOwogICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZN
b3ZlKG1lcmdlRWZmZWN0KSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBtZXJn
ZUlucHV0cy5hcHBlbmQobWVyZ2VFZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAg
ICAgbWVyZ2VJbnB1dHMuc2hyaW5rVG9GaXQoKTsKLQogICAgIGlmIChtZXJnZUlucHV0cy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisg
ICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFTWVy
Z2U6OmNyZWF0ZShtZXJnZUlucHV0cy5zaXplKCkpKTsKIAotICAgIHJldHVybiBlZmZlY3Q7Cisg
ICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIFdURk1vdmUobWVyZ2VJbnB1dHMpIH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1MDg2ODE2ZjY5
NzZjNjY5N2RjNTEwNzU4MDJkMjgzY2Y0ZTNjMi4uZTg4MGU2ZTk3YjNjZTJlMmNiZmYzMzJlMWQ5
M2ExMWQyNDZjOWYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKQEAg
LTM1LDcgKzM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZH
UHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHBy
b3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7
IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
Y3BwCmluZGV4IGQ2ZmI5NWM4ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQxNzk1ZDMyMWIuLjBhYjU1
YjJhYzFmODE4ZWMyZWY0NTYxNTRmNTQyZTk0YmM4Y2EzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgaW5saW5l
IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmEKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlSZWdpc3Ry
eTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudDo6bV9pbjE+KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVy
dHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgJlNWR0ZF
TW9ycGhvbG9neUVsZW1lbnQ6Om1fc3ZnT3BlcmF0b3I+KCk7CisgICAgICAgIFByb3BlcnR5UmVn
aXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciwgTW9ycGhvbG9n
eU9wZXJhdG9yLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6bV9tb3JwaG9sb2d5T3BlcmF0b3I+
KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6
OnJhZGl1c0F0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1gsICZTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjptX3JhZGl1c1k+KCk7CiAgICAgfSk7CiB9CkBAIC01OSw5ICs1OSw5
IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c2V0UmFkaXVzKGZsb2F0IHgsIGZsb2F0
IHkpCiB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChu
YW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKLSAgICAgICAgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJh
dG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOworICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3Ig
cHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZy
b21TdHJpbmcodmFsdWUpOwogICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCi0gICAgICAg
ICAgICBtX3N2Z09wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9y
VHlwZT4ocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBtX21vcnBob2xvZ3lPcGVyYXRvci0+
c2V0QmFzZVZhbEludGVybmFsPE1vcnBob2xvZ3lPcGVyYXRvcj4ocHJvcGVydHlWYWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgxLDIyICs4MSw2IEBAIHZvaWQgU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRU1vcnBob2xvZ3kqIG1vcnBob2xvZ3kg
PSBzdGF0aWNfY2FzdDxGRU1vcnBob2xvZ3kqPihlZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKQotICAgICAgICByZXR1cm4gbW9ycGhvbG9neS0+c2V0
TW9ycGhvbG9neU9wZXJhdG9yKHN2Z09wZXJhdG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6cmFkaXVzQXR0cikgewotICAgICAgICAvLyBCb3RoIHNldFJhZGl1cyBmdW5jdGlv
bnMgc2hvdWxkIGJlIGV2YWx1YXRlZCBzZXBhcmF0ZWx5LgotICAgICAgICBib29sIGlzUmFkaXVz
WENoYW5nZWQgPSBtb3JwaG9sb2d5LT5zZXRSYWRpdXNYKHJhZGl1c1goKSk7Ci0gICAgICAgIGJv
b2wgaXNSYWRpdXNZQ2hhbmdlZCA9IG1vcnBob2xvZ3ktPnNldFJhZGl1c1kocmFkaXVzWSgpKTsK
LSAgICAgICAgcmV0dXJuIGlzUmFkaXVzWENoYW5nZWQgfHwgaXNSYWRpdXNZQ2hhbmdlZDsKLSAg
ICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
Om9wZXJhdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgewpAQCAt
MTE0LDIxICs5OCwzNCBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2
b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQo
RmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0g
ICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKLSAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVz
WSgpOworICAgIGF1dG8mIG1vcnBob2xvZ3kgPSBkb3duY2FzdDxGRU1vcnBob2xvZ3k+KGVmZmVj
dCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCisgICAgICAg
IG1vcnBob2xvZ3kuc2V0TW9ycGhvbG9neU9wZXJhdG9yKG1vcnBob2xvZ3lPcGVyYXRvcigpKTsK
KyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgeworICAgICAg
ICAvLyBCb3RoIHNldFJhZGl1cyBmdW5jdGlvbnMgc2hvdWxkIGJlIGV2YWx1YXRlZCBzZXBhcmF0
ZWx5LgorICAgICAgICBtb3JwaG9sb2d5LnNldFJhZGl1c1gocmFkaXVzWCgpKTsKKyAgICAgICAg
bW9ycGhvbG9neS5zZXRSYWRpdXNZKHJhZGl1c1koKSk7CisgICAgfSBlbHNlCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCitzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRl
ci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4geyB9OwogCisgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1
c1goKTsKKyAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOwogICAgIGlmICh4UmFkaXVzIDwg
MCB8fCB5UmFkaXVzIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJF
ZmZlY3QoRkVNb3JwaG9sb2d5OjpjcmVhdGUobW9ycGhvbG9neU9wZXJhdG9yKCksIHhSYWRpdXMs
IHlSYWRpdXMpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVNb3JwaG9sb2d5OjpjcmVhdGUoZmls
dGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsKLSAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7
IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZmNjZhYTY2OS4u
ODQwYjViYWFmMjgzNjBjNmY2NTlmM2U5OTc1NDcwNzE4OTM0YzdhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC0yNiwxMiArMjYsMTIgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRz
PE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3Jw
aG9sb2d5T3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgp
IHsgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7IH0KIAotICAgIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorICAgIHN0YXRpYyBT
dHJpbmcgdG9TdHJpbmcoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcikKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0Y2ggKG1vcnBob2xvZ3lP
cGVyYXRvcikgewogICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgog
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIGNhc2UgRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFOgpAQCAtNDQsNyArNDQsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlU
cmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBmcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIE1vcnBob2xvZ3lPcGVyYXRvciBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUg
PT0gImVyb2RlIikKICAgICAgICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REU7CkBAIC02MiwxMiArNjIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVzKGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgU3RyaW5nIGluMSgpIGNvbnN0IHsgcmV0
dXJuIG1faW4xLT5jdXJyZW50VmFsdWUoKTsgfQotICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
c3ZnT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3N2Z09wZXJhdG9yLT5jdXJyZW50VmFsdWU8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4oKTsgfQorICAgIE1vcnBob2xvZ3lPcGVyYXRvciBtb3Jw
aG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX21vcnBob2xvZ3lPcGVyYXRvci0+Y3Vy
cmVudFZhbHVlPE1vcnBob2xvZ3lPcGVyYXRvcj4oKTsgfQogICAgIGZsb2F0IHJhZGl1c1goKSBj
b25zdCB7IHJldHVybiBtX3JhZGl1c1gtPmN1cnJlbnRWYWx1ZSgpOyB9CiAgICAgZmxvYXQgcmFk
aXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS0+Y3VycmVudFZhbHVlKCk7IH0KIAogICAg
IFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0dXJuIG1faW4xOyB9Ci0gICAg
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiYgc3ZnT3BlcmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1f
c3ZnT3BlcmF0b3I7IH0KKyAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBtb3JwaG9sb2d5T3Bl
cmF0b3JBbmltYXRlZCgpIHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yOyB9CiAgICAgU1ZH
QW5pbWF0ZWROdW1iZXImIHJhZGl1c1hBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWDsgfQog
ICAgIFNWR0FuaW1hdGVkTnVtYmVyJiByYWRpdXNZQW5pbWF0ZWQoKSB7IHJldHVybiBtX3JhZGl1
c1k7IH0KIApAQCAtODAsMTIgKzgwLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fc3Zn
T3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFKSB9OworICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBt
X21vcnBob2xvZ3lPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlz
LCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX3JhZGl1c1ggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3JhZGl1c1kgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3Jl
YXRlKHRoaXMpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuaWRsCmluZGV4IGEyYzE4MWYyZTYzN2NkMzkwOThlYmU2OWU2MDk4YWJlM2MzODVjZDEu
LjJkMjFmMmExZDg4OGQwMmVjMTc5ZGYxMGUyZGU0M2ZjNjUyOTdkNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKQEAgLTMzLDcgKzMzLDcgQEAK
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVkdfTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEUg
ICA9IDI7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRTdHJpbmcgICAgICBp
bjE7Ci0gICAgW0ltcGxlbWVudGVkQXM9c3ZnT3BlcmF0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
VkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOworICAgIFtJbXBsZW1lbnRlZEFzPW1vcnBo
b2xvZ3lPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVyYXRpb24g
b3BlcmF0b3I7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTnVtYmVyICAgICAg
cmFkaXVzWDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICBy
YWRpdXNZOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCmluZGV4
IDAzODI2OGI4OWIyZjE5ZjliZTU2ODczOWQxMjMwMzU0MTAwYTVlZTcuLjU5NDUwNmEzZWI2YmUw
YjZlNzVhMmY3MDRiYmFiNjg1YjZkNTA0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwCkBAIC03Miw3ICs3MiwxMyBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cgogCiB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNL
bm93bkF0dHJpYnV0ZShhdHRyTmFtZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmR4QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKSB7CisgICAgICAgIEluc3Rh
bmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOworICAgICAgICBwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIEluc3RhbmNlSW52YWxp
ZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTgxLDE2ICs4NywyNyBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25z
dAordm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQo
RmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewot
ICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgYXV0byYgZmVPZmZzZXQgPSBkb3duY2FzdDxGRU9mZnNldD4oZWZmZWN0KTsKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0cikKKyAgICAgICAgZmVPZmZzZXQuc2V0RHgoZHgo
KSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR5QXR0cikKKyAgICAgICAg
ZmVPZmZzZXQuc2V0RHkoZHkoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KIAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEo
KSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0Rmls
dGVyRWZmZWN0KEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSkpOwogCi0gICAgYXV0byBlZmZl
Y3QgPSBGRU9mZnNldDo6Y3JlYXRlKGZpbHRlciwgZHgoKSwgZHkoKSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcy
ZGI2N2IxMjVlYTJlZDQ2NWUzNWI1NzM3MDQ5YmVlLi45ZDNkYWYwOWRkNTMxYzRjMjNiNGUxYmFj
NjRmYjU1NDZhNGE0NGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5o
CkBAIC00Nyw3ICs0Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZp
bHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAppbmRleCA5ZmY4NDczMzhhMWI2YTU1
ZmNkYjgyMWEwOWYwYWNjM2MyMDdlYTgxLi5jYWE3NjBmZjUzMGZiYmFhZTA1Zjg5YTFiMzNjMGZl
Zjk1YzZlMmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2ZXIg
SHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsMTEgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGRVBv
aW50TGlnaHRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIlBvaW50TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgi
CisjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZURhdGEuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzksMjEgKzM3LDEwIEBAIFJlZjxTVkdGRVBvaW50TGlnaHRFbGVtZW50PiBTVkdGRVBvaW50
TGlnaHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdGRVBvaW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9
CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2Uo
U1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK0xpZ2h0U291cmNlIFNWR0ZFUG9pbnRM
aWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAog
ewotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbjsKLSAgICBpZiAoYnVpbGRlci5wcmltaXRpdmVV
bml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkg
ewotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94ID0gYnVpbGRlci50YXJnZXRCb3VuZGlu
Z0JveCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRpb24uc2V0WChyZWZlcmVuY2VCb3gueCgp
ICsgeCgpICogcmVmZXJlbmNlQm94LndpZHRoKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRZKHJl
ZmVyZW5jZUJveC55KCkgKyB5KCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwotCi0gICAgICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpB
dHRyaWJ1dGUgYW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNf
dmlld3BvcnRfcGVyY2VudGFnZQotICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlh
bkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4
WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBv
c2l0aW9uID0gRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpOwotICAgIAotICAgIHJldHVybiBQ
b2ludExpZ2h0U291cmNlOjpjcmVhdGUocG9zaXRpb24pOworICAgIGF1dG8gcG9zaXRpb24gPSBG
bG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7CisgICAgcmV0dXJuIHsgUG9pbnRMaWdodFNvdXJj
ZURhdGEocG9zaXRpb24pIH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2lu
dExpZ2h0RWxlbWVudC5oCmluZGV4IDMzYTViZDc0OTIwODI4Yzk5ODY0NWI3MjJmNzJhNzQ1ZTQ4
ZGE3OWUuLjNlMzc0ODQwNDBhZjI0NzY3NTA2ODJiODllNzJkYTVkMzlkZDE4NmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaApAQCAtMzAsOCArMzAsOSBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291
cmNlKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBMaWdodFNvdXJjZSBs
aWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owor
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRVBvaW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2Yo
U1ZHRkVMaWdodEVsZW1lbnQpKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4
IDliN2NlNDBhYjk3MTZhZTRmMzM1ZjU0YjI0Y2RhNDU5YTg0MjlhNTkuLmJjODI1ZmE0YTQ1MTEw
MzFiOTJhZTliYWQxZWIzN2JlMjlhZDBjZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTg4LDUyICs4OCw2IEBAIHZv
aWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVj
dCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRVNwZWN1
bGFyTGlnaHRpbmcqIHNwZWN1bGFyTGlnaHRpbmcgPSBzdGF0aWNfY2FzdDxGRVNwZWN1bGFyTGln
aHRpbmcqPihlZmZlY3QpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaWdodGlu
Z19jb2xvckF0dHIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJl
bmRlcmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgICAgIENvbG9yIGNvbG9y
ID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXIt
PnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwotICAgICAgICByZXR1cm4gc3Bl
Y3VsYXJMaWdodGluZy0+c2V0TGlnaHRpbmdDb2xvcihjb2xvcik7Ci0gICAgfQotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKLSAgICAgICAgcmV0dXJuIHNw
ZWN1bGFyTGlnaHRpbmctPnNldFN1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7Ci0gICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0cikKLSAgICAgICAgcmV0
dXJuIHNwZWN1bGFyTGlnaHRpbmctPnNldFNwZWN1bGFyQ29uc3RhbnQoc3BlY3VsYXJDb25zdGFu
dCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRy
KQotICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+c2V0U3BlY3VsYXJFeHBvbmVudChz
cGVjdWxhckV4cG9uZW50KCkpOwotCi0gICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0
PExpZ2h0U291cmNlJj4oc3BlY3VsYXJMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7Ci0gICAgY29u
c3QgU1ZHRkVMaWdodEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50Ojpm
aW5kTGlnaHRFbGVtZW50KHRoaXMpOwotICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwotCi0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjphemltdXRoQXR0cikKLSAgICAgICAgcmV0dXJuIGxp
Z2h0U291cmNlLnNldEF6aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRoKCkpOwotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6ZWxldmF0aW9uQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0
U291cmNlLnNldEVsZXZhdGlvbihsaWdodEVsZW1lbnQtPmVsZXZhdGlvbigpKTsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uu
c2V0WChsaWdodEVsZW1lbnQtPngoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5
QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVtZW50LT55KCkp
OwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCi0gICAgICAgIHJldHVybiBs
aWdodFNvdXJjZS5zZXRaKGxpZ2h0RWxlbWVudC0+eigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRQ
b2ludHNBdFgobGlnaHRFbGVtZW50LT5wb2ludHNBdFgoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0
UG9pbnRzQXRZKGxpZ2h0RWxlbWVudC0+cG9pbnRzQXRZKCkpOwotICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNl
dFBvaW50c0F0WihsaWdodEVsZW1lbnQtPnBvaW50c0F0WigpKTsKLSAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRT
b3VyY2Uuc2V0U3BlY3VsYXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQo
KSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIp
Ci0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRMaW1pdGluZ0NvbmVBbmdsZShsaWdodEVs
ZW1lbnQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7
CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdO
YW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5l
bFVuaXRMZW5ndGhBdHRyKSB7CkBAIC0xNjAsMjggKzExNCw4NSBAQCB2b2lkIFNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZH
RkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1S
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3Zv
aWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hh
bmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKKyAgICBhdXRvJiBzcGVjdWxhckxpZ2h0aW5nID0gZG93bmNhc3Q8RkVTcGVjdWxhckxpZ2h0
aW5nPihlZmZlY3QpOwogCi0gICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7Cisg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgICAg
ICBBU1NFUlQocmVuZGVyZXIpOworICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHls
ZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxl
KCkubGlnaHRpbmdDb2xvcigpKTsKKyAgICAgICAgc3BlY3VsYXJMaWdodGluZy5zZXRDb2xvcihj
b2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBSZWZQdHIgbGlnaHRFbGVtZW50
ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7Ci0gICAgaWYgKCFs
aWdodEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdHRyTmFtZSA9
PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikgeworICAgICAgICBzcGVjdWxhckxpZ2h0aW5n
LnNldFN1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0
cikgeworICAgICAgICBzcGVjdWxhckxpZ2h0aW5nLnNldFNwZWN1bGFyQ29uc3RhbnQoc3BlY3Vs
YXJDb25zdGFudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKLSAgICBhdXRvIGxp
Z2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7Cisg
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikgeworICAg
ICAgICBzcGVjdWxhckxpZ2h0aW5nLnNldFNwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVu
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIGxpZ2h0U291cmNlID0g
Y29uc3RfY2FzdDxMaWdodFNvdXJjZSY+KHNwZWN1bGFyTGlnaHRpbmcuc291cmNlKCkpOworICAg
IGNvbnN0IFNWR0ZFTGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVu
dDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKKyAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKKwor
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCisgICAgICAgIGxpZ2h0
U291cmNlLnNldEF6aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRoKCkpOworICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQorICAgICAgICBsaWdodFNvdXJj
ZS5zZXRFbGV2YXRpb24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24oKSk7CisgICAgZWxzZSBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRYKGxp
Z2h0RWxlbWVudC0+eCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0
dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVtZW50LT55KCkpOworICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uu
c2V0WihsaWdodEVsZW1lbnQtPnooKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFt
ZXM6OnBvaW50c0F0WEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WChsaWdo
dEVsZW1lbnQtPnBvaW50c0F0WCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6cG9pbnRzQXRZQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRZKGxpZ2h0
RWxlbWVudC0+cG9pbnRzQXRZKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojpwb2ludHNBdFpBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFoobGlnaHRF
bGVtZW50LT5wb2ludHNBdFooKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnNwZWN1bGFyRXhwb25lbnRBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRTcGVjdWxhckV4
cG9uZW50KGxpZ2h0RWxlbWVudC0+c3BlY3VsYXJFeHBvbmVudCgpKTsKKyAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQorICAgICAgICBsaWdo
dFNvdXJjZS5zZXRMaW1pdGluZ0NvbmVBbmdsZShsaWdodEVsZW1lbnQtPmxpbWl0aW5nQ29uZUFu
Z2xlKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKK3N0
ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1
aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsK
KyAgICBpZiAoIWlucHV0MSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChoYXNGaWx0
ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJl
bGVhc2VOb25OdWxsKCkgfSB9OworICAgIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAorICAgICAgICByZXR1cm4geyB9OworCisgICAgUmVmUHRyIGxpZ2h0RWxlbWVu
dCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOworICAgIGlmICgh
bGlnaHRFbGVtZW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBsaWdodFNvdXJj
ZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoYnVpbGRlcik7CisKICAgICBDb2xvciBjb2xv
ciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVy
LT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKKyAgICAKKyAgICBzZXRGaWx0
ZXJFZmZlY3QoRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgp
LCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0
aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwg
c3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBr
ZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0
dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFz
ZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDg5N2I4ZGUxNTZkMWM3OWExZDNmZDhiMzEx
OGUyYWI2M2I0N2IxNDYuLmZhNjg3OGZiNWNiNDc2NDZjNDJlZTNiOTA3N2FmOGUxNzIwMTkyMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuaApAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZp
bHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExp
Z2h0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50
LmNwcAppbmRleCBkNmRhMzEwNjRjYjFiMzdlOGNjOTM4NzRlYTRhYTljZjJkZmJmZmVlLi40NGNh
ODg2MmVlODg4MjJiZDgxZGQyYTEyNzVjYzM2YmJjMmJjZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5h
Yy5uej4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDExICsyMSw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJH
ZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlRGF0YS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDI5ICszNywxMSBAQCBSZWY8U1ZHRkVTcG90TGln
aHRFbGVtZW50PiBTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFU3BvdExpZ2h0RWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWY8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0
RWxlbWVudDo6bGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikgY29uc3QKK0xp
Z2h0U291cmNlIFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmls
dGVyQnVpbGRlciYpIGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uOwotICAgIEZs
b2F0UG9pbnQzRCBwb2ludHNBdDsKLQotICAgIGlmIChidWlsZGVyLnByaW1pdGl2ZVVuaXRzKCkg
PT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJvdW5kaW5nQm94KCk7
Ci0gICAgICAgIAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkg
KiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNldFkocmVmZXJlbmNl
Qm94LnkoKSArIHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlUG9pbnRMaWdodFpBdHRyaWJ1dGUg
YW5kIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvY29vcmRzLmh0bWwjVW5pdHNfdmlld3BvcnRf
cGVyY2VudGFnZQotICAgICAgICBwb3NpdGlvbi5zZXRaKHooKSAqIGV1Y2xpZGlhbkRpc3RhbmNl
KHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCByZWZlcmVuY2VCb3gubWF4WE1heFlDb3Ju
ZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Ci0KLSAgICAgICAgcG9pbnRzQXQuc2V0WChyZWZlcmVu
Y2VCb3gueCgpICsgcG9pbnRzQXRYKCkgKiByZWZlcmVuY2VCb3gud2lkdGgoKSk7Ci0gICAgICAg
IHBvaW50c0F0LnNldFkocmVmZXJlbmNlQm94LnkoKSArIHBvaW50c0F0WSgpICogcmVmZXJlbmNl
Qm94LmhlaWdodCgpKTsKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0
ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cudzMub3JnL1RS
L1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAgICAgIHBvaW50
c0F0LnNldFoocG9pbnRzQXRaKCkgKiBldWNsaWRpYW5EaXN0YW5jZShyZWZlcmVuY2VCb3gubWlu
WE1pbllDb3JuZXIoKSwgcmVmZXJlbmNlQm94Lm1heFhNYXhZQ29ybmVyKCkpIC8gc3FydE9mVHdv
RmxvYXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgo
KSwgeSgpLCB6KCkpOwotICAgICAgICBwb2ludHNBdCA9IEZsb2F0UG9pbnQzRChwb2ludHNBdFgo
KSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gU3BvdExp
Z2h0U291cmNlOjpjcmVhdGUocG9zaXRpb24sIHBvaW50c0F0LCBzcGVjdWxhckV4cG9uZW50KCks
IGxpbWl0aW5nQ29uZUFuZ2xlKCkpOworICAgIGF1dG8gcG9zaXRpb24gPSBGbG9hdFBvaW50M0Qo
eCgpLCB5KCksIHooKSk7CisgICAgYXV0byBwb2ludHNBdCA9IEZsb2F0UG9pbnQzRChwb2ludHNB
dFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKyAgICByZXR1cm4geyBTcG90TGlnaHRT
b3VyY2VEYXRhKHBvc2l0aW9uLCBwb2ludHNBdCwgc3BlY3VsYXJFeHBvbmVudCgpLCBsaW1pdGlu
Z0NvbmVBbmdsZSgpKSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVTcG90TGlnaHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGln
aHRFbGVtZW50LmgKaW5kZXggM2Y3NzE3YzEyNjVjNGYzMWY1MzA4ODY4ZDQ3Yzk3ODc5N2E3MzIx
MS4uY2FiOTY0OTc2MDI3MjA3MmM2MzYzZDdlZTliNDNhYmE5NzYzZWRiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVy
eS5hYy5uej4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMwLDcgKzMxLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBTVkdGRVNwb3RMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Jik7CiAKLSAgICBSZWY8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBMaWdodFNvdXJjZSBsaWdodFNvdXJjZShjb25z
dCBTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiB9Owogc3RhdGljX2Fzc2VydChz
aXplb2YoU1ZHRkVTcG90TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdodEVsZW1lbnQp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCmluZGV4IDM5YmRjYzc3
MzU5NjY1MDM2ZTFhZTc0NzYxMmVhZDZmOWFjMzczNzAuLjYzN2EzMmY5Y2RlMjhkNGM2MzJlMTMx
YjcyOTQ4OGFjOGNjYmEwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRp
bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHAKQEAgLTcwLDE2ICs3MCwxNiBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
IH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1
cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdG
RVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQogewotICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0KKyAgICBh
dXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5wdXQx
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlm
ICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRVRpbGU6OmNy
ZWF0ZSgpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAg
ICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0
OworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgp
IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKaW5kZXggNDVi
MzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQyYTMzYTkxZi4uYmUzNzk2OTkwOTMwMWQyOTZj
ZmY1ZTAxOTc0MmQ0MDVhMWIxMGY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0Piwg
VmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJy
aWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9
OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6
Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxl
bWVudC5jcHAKaW5kZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4u
MTI5NGJmNGE1MWEwNTI0ZmMzOTJmMTg0NDZkY2VlMTMzNWQ0MGExZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtODgsMjQgKzg4LDYgQEAg
dm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG8KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBl
ZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFVHVyYnVsZW5j
ZSogdHVyYnVsZW5jZSA9IHN0YXRpY19jYXN0PEZFVHVyYnVsZW5jZSo+KGVmZmVjdCk7Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0eXBlQXR0cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1
bGVuY2UtPnNldFR5cGUodHlwZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0
aXRjaFRpbGVzQXR0cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1bGVuY2UtPnNldFN0aXRjaFRpbGVz
KHN0aXRjaFRpbGVzKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1
ZW5jeUF0dHIpCi0gICAgICAgIHJldHVybiAodHVyYnVsZW5jZS0+c2V0QmFzZUZyZXF1ZW5jeVgo
YmFzZUZyZXF1ZW5jeVgoKSkgfHwgdHVyYnVsZW5jZS0+c2V0QmFzZUZyZXF1ZW5jeVkoYmFzZUZy
ZXF1ZW5jeVkoKSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpCi0g
ICAgICAgIHJldHVybiB0dXJidWxlbmNlLT5zZXRTZWVkKHNlZWQoKSk7Ci0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpudW1PY3RhdmVzQXR0cikKLSAgICAgICAgcmV0dXJuIHR1cmJ1bGVu
Y2UtPnNldE51bU9jdGF2ZXMobnVtT2N0YXZlcygpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewog
ICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkgewpA
QCAtMTE3LDExICs5OSwzMyBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVj
dCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBhdXRvJiB0
dXJidWxlbmNlID0gZG93bmNhc3Q8RkVUdXJidWxlbmNlPihlZmZlY3QpOworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0VHVyYnVs
ZW5jZVR5cGUodHlwZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Rp
dGNoVGlsZXNBdHRyKQorICAgICAgICB0dXJidWxlbmNlLnNldFN0aXRjaFRpbGVzKHN0aXRjaFRp
bGVzKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5
QXR0cikgeworICAgICAgICB0dXJidWxlbmNlLnNldEJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVu
Y3lYKCkpOworICAgICAgICB0dXJidWxlbmNlLnNldEJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVu
Y3lZKCkpOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNlZWRBdHRyKQor
ICAgICAgICB0dXJidWxlbmNlLnNldFNlZWQoc2VlZCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFt
ZSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpCisgICAgICAgIHR1cmJ1bGVuY2Uuc2V0TnVt
T2N0YXZlcyhudW1PY3RhdmVzKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKQogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5
WSgpIDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5j
ZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5
WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQ
RV9TVElUQ0gpOworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZl
Y3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5cGUo
KSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVk
KCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKSk7CisKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQw
ZTM0MjY3NzY5ZTE5OGEuLjM5OWViOGE1MmY2NDdmZjZlNWEzMWI1Nzg4YTAyZjljMmZjZDRhYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE4
LDggKzExOCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZm
ZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5WCB7IFNW
R0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJFbGVtZW50LmNwcAppbmRleCA1NTc4YjUxOWEzNjIyYmQ3MDZhZDI3YmZlNGM2MDAzOTE0ODU4
Y2EwLi45YzQzMTEzNGE4NzcwNGYwNjQ5ZDkyMmJhOTcxNjM2ZGQyNWUxYzk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAj
aW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCmluZGV4
IGZmNTIyMzA5NDY2YjA0MGJlZjA4OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjM4NjZkODljZDdlM2Yw
ODQ1ZDRhNTdiMzZmYjlmOTk4N2EzMmQ3OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBAIC0y
NSw5ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxk
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY2LDExICs2NCwx
NSBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbgogICAgIFNWR0VsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJikKK3ZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZSkKIHsKLSAgICAvLyBXaGVuIGFsbCBmaWx0ZXJzIHN1cHBvcnQgdGhpcyBtZXRob2QsIGl0IHdp
bGwgYmUgY2hhbmdlZCB0byBhIHB1cmUgdmlydHVhbCBtZXRob2QuCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9lZmZlY3QpCisgICAgICAg
IHJldHVybjsKKworICAgIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoKm1fZWZmZWN0LCBh
dHRyaWJ1dGUpOworCisgICAgaWYgKGF1dG8qIHByaW1pdGl2ZVJlbmRlcmVyID0gcmVuZGVyZXIo
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUq
PihwcmltaXRpdmVSZW5kZXJlciktPnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRl
KTsKIH0KIAogdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC05MywyMiAr
OTUsNiBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2hpbGRy
ZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAgIGludmFsaWRhdGUoKTsKIH0KIAot
dm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0
cmlidXRlcyhGaWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
ZmlsdGVyRWZmZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVjdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQotICAgICAgICBmaWx0ZXJF
ZmZlY3QtPnNldEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0
dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1kodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRI
YXNXaWR0aCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRy
KSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWlnaHQodHJ1ZSk7Ci19Ci0KIFJlbmRl
clB0cjxSZW5kZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJU
cmVlUG9zaXRpb24mKQogewogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaAppbmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li5kN2Zm
ZGRhZDI0YjJjMzZhNzk3ZGYyMjBiODllMTIyMDFmZWQyYThiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5o
CkBAIC0zNiwxMiArMzYsNiBAQCBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyOwogY2xhc3MgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIDogcHVibGljIFNWR0VsZW1lbnQgewogICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzKTsKIHB1YmxpYzoKLSAgICB2b2lkIHNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZl
Y3QqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0ID0gMDsKLSAgICAvLyBSZXR1cm5zIHRydWUs
IGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUuCi0gICAgdmly
dHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7Ci0KICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVy
dHlPd25lclJlZ2lzdHJ5PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywgU1ZH
RWxlbWVudD47CiAKICAgICBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgeCgpIGNvbnN0IHsgcmV0dXJu
IG1feC0+Y3VycmVudFZhbHVlKCk7IH0KQEAgLTU2LDYgKzUwLDkgQEAgcHVibGljOgogICAgIFNW
R0FuaW1hdGVkTGVuZ3RoJiBoZWlnaHRBbmltYXRlZCgpIHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAg
ICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIHJlc3VsdEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yZXN1bHQ7
IH0KIAorICAgIHZvaWQgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGVOYW1lKTsKKyAgICB2aXJ0dWFsIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRl
ckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKQEAgLTY0LDcgKzYx
LDExIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENo
YW5nZSYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0gICAgdm9pZCBwcmlt
aXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUp
OworICAgIHZpcnR1YWwgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVm
ZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSB7IH0KKworICAgIGJvb2wgaGFzRmlsdGVyRWZm
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3Q7IH0KKyAgICB2b2lkIHNldEZpbHRlckVmZmVj
dChSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3QpIHsgbV9lZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7
IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBmaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVy
biBtX2VmZmVjdDsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgaXNGaWx0ZXJFZmZlY3QoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkBAIC03Myw2ICs3NCw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGUmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9lZmZl
Y3Q7CisgICAgCiAgICAgLy8gU3BlYzogSWYgdGhlIHgveSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNp
ZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIwJSIgd2VyZSBzcGVjaWZpZWQu
CiAgICAgLy8gU3BlYzogSWYgdGhlIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGUgaXMgbm90IHNwZWNp
ZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmll
ZC4KICAgICBSZWY8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feCB7IFNWR0FuaW1hdGVkTGVuZ3RoOjpj
cmVhdGUodGhpcywgU1ZHTGVuZ3RoTW9kZTo6V2lkdGgsICIwJSIpIH07CkBAIC05MCwxMiArOTMs
NiBAQCBpbmxpbmUgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omlu
dmFsaWRhdGUoKQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBh
cmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwcmltaXRpdmVSZW5kZXJlcik7CiB9CiAKLWlubGlu
ZSB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCi17Ci0gICAgaWYg
KGF1dG8qIHByaW1pdGl2ZVJlbmRlcmVyID0gcmVuZGVyZXIoKSkKLSAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUqPihwcmltaXRpdmVSZW5kZXJlcikt
PnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAKaW5kZXggMTBjODg0MjljNzI0MDNk
Y2VkM2EzZjdlYTQwNjAwYjU3NDcwM2NlOC4uNDE4NDAyYmIwMWFkOGIzMGYxMDE3OWNkMWYwY2Ez
ZGZmOThkNDMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZS5jcHAKQEAgLTMxLDE1ICszMSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlKCkKLSAgICA6IG1fYWxpZ24oU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQp
Ci0gICAgLCBtX21lZXRPclNsaWNlKFNWR19NRUVUT1JTTElDRV9NRUVUKQorU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU3RyaW5nVmlldyB2
YWx1ZSkKIHsKKyAgICBwYXJzZSh2YWx1ZSk7CiB9CiAKLVNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKFN0cmluZ1ZpZXcgdmFsdWUpCitTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBhbGlnbiwgU1ZHTWVldE9yU2xpY2VUeXBlIG1lZXRPclNs
aWNlKQorICAgIDogbV9hbGlnbihhbGlnbikKKyAgICAsIG1fbWVldE9yU2xpY2UobWVldE9yU2xp
Y2UpCiB7Ci0gICAgcGFyc2UodmFsdWUpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OnNldEFsaWduKHVuc2lnbmVkIHNob3J0IGFsaWduKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCmluZGV4
IDUxNDBmNjlkZjgyNzZiNWU3NDM2YjI4ZmQ1NGM4MzE3YzI5OWFiMzAuLjA5ZGM0NDc4NGQ3NzI1
OTljYWNhYjAxN2FjMGNmMzBjMjU5YmEyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgKQEAgLTUxLDggKzUxLDkgQEAgcHVibGljOgog
ICAgICAgICBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UgPSAyCiAgICAgfTsKIAotICAgIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSgpOworICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSgp
ID0gZGVmYXVsdDsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU3RyaW5nVmlldyk7
CisgICAgV0VCQ09SRV9FWFBPUlQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9UeXBlLCBTVkdNZWV0T3JTbGljZVR5cGUpOwogCiAgICAgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0QWxpZ24odW5zaWduZWQgc2hvcnQpOwogICAgIHVuc2lnbmVkIHNob3J0IGFs
aWduKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbjsgfQpAQCAtNzAsMTMgKzcxLDM5IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgbV9hbGlnbjsKLSAgICBTVkdNZWV0T3JTbGljZVR5
cGUgbV9tZWV0T3JTbGljZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBkZWNvZGUoRGVjb2RlciYp
OwogCitwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wg
cGFyc2VJbnRlcm5hbChTdHJpbmdQYXJzaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+JiwgYm9vbCB2
YWxpZGF0ZSk7CisKKyAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVHlwZSBtX2FsaWduIHsgU1ZH
X1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSUQgfTsKKyAgICBTVkdNZWV0T3JTbGljZVR5cGUg
bV9tZWV0T3JTbGljZSB7IFNWR19NRUVUT1JTTElDRV9NRUVUIH07CiB9OwogCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9hbGlnbjsKKyAgICBl
bmNvZGVyIDw8IG1fbWVldE9yU2xpY2U7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+Citz
dGQ6Om9wdGlvbmFsPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlv
bmFsPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlPiBhbGlnbjsKKyAgICBkZWNvZGVyID4+IGFs
aWduOworICAgIGlmICghYWxpZ24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPFNWR01lZXRPclNsaWNlVHlwZT4gbWVldE9yU2xpY2U7CisgICAgZGVj
b2RlciA+PiBtZWV0T3JTbGljZTsKKyAgICBpZiAoIW1lZXRPclNsaWNlKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZSgqYWxpZ24sICptZWV0T3JTbGljZSk7Cit9CisKIHRlbXBsYXRlPD4gc3RydWN0IFNWR1Byb3Bl
cnR5VHJhaXRzPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZT4gewogICAgIHN0YXRpYyBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlKCk7IH0KICAgICBzdGF0aWMgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgcmV0dXJuIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZShzdHJpbmcpOyB9CkBAIC04NSwzICsxMTIsMzUgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
PiB7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlLAorCisgICAgICAgIFdlYkNvcmU6OlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fVU5LTk9XTiwK
KyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdfUFJFU0VS
VkVBU1BFQ1RSQVRJT19OT05FLAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOLAorICAgICAgICBXZWJD
b3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X1hNSURZTUlOLAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6
OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlOLAorICAgICAgICBXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlE
LAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX1hNSURZTUlELAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlELAorICAgICAg
ICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVD
VFJBVElPX1hNSU5ZTUFYLAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUFYLAorICAgICAgICBXZWJDb3Jl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hN
QVhZTUFYCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdNZWV0T3JTbGljZVR5cGU+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR01lZXRPclNsaWNlVHlwZSwKKworICAgICAgICBXZWJDb3Jl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19NRUVUT1JTTElDRV9VTktOT1dOLAor
ICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19NRUVUT1JT
TElDRV9NRUVULAorICAgICAgICBXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6
OlNWR19NRUVUT1JTTElDRV9TTElDRQorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAKaW5kZXggMzg1YWYyOTA4NDhhM2QwYjgzZjEyYWM5NjE5ZTZiZjk2YzlmMjM5Ni4uMWFmYWQw
ODdmMzUxY2VjNjVlOWJhZmQwNDM2MWY3MDFhNDZjMzU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTMsNiArMyw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIzLDEzMCArMjQsODggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTVkdGRUltYWdlLmgiCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRl
clJlc3VsdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRl
ckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZH
RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVm
UHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2Up
Ci0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNl
cnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFNvdXJjZUltYWdl
JiYgc291cmNlSW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2Vy
dmVBc3BlY3RSYXRpbykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKFdURk1v
dmUoc291cmNlSW1hZ2UpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLUZFSW1hZ2U6OkZF
SW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcm
IGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RS
YXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQotICAgICwgbV90
cmVlU2NvcGUoJnRyZWVTY29wZSkKLSAgICAsIG1faHJlZihocmVmKQorRkVJbWFnZTo6RkVJbWFn
ZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVJ
bWFnZSkKKyAgICAsIG1fc291cmNlSW1hZ2UoV1RGTW92ZShzb3VyY2VJbWFnZSkpCiAgICAgLCBt
X3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZF
SW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPElt
YWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFz
cGVjdFJhdGlvKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCBp
bWFnZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwotfQotCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6
Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2Nv
cGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVl
JiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorRmxvYXRSZWN0IEZFSW1hZ2U6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9t
ZXRyeSwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29wZSwgaHJlZiwgcHJl
c2VydmVBc3BlY3RSYXRpbykpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlSW1h
Z2UsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKKyAgICAgICAgICAg
IGF1dG8gZHJhd2luZ1JlY3QgPSBwcmltaXRpdmVTdWJyZWdpb247CisgICAgICAgICAgICBhdXRv
IHNyY1JlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfTsKKyAgICAgICAgICAg
IG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRyYXdpbmdSZWN0LCBzcmNSZWN0
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdp
b24oZHJhd2luZ1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgICAgIH0sCisgICAgICAg
IFsmXSAoY29uc3QgUmVmPEltYWdlQnVmZmVyPiYpIHsKKyAgICAgICAgICAgIHJldHVybiBnZW9t
ZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICAgICAgfSwK
KyAgICAgICAgWyZdIChSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwor
ICAgICAgICB9CisgICAgKTsKIH0KIAotdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCitib29sIEZFSW1hZ2U6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnkpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRl
VHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgRmxv
YXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRT
aXplKG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFu
c2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0g
ZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAg
ICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19CisgICAgYXV0byBvdXRwdXRJ
bWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gb3V0cHV0LnByaW1pdGl2
ZVN1YnJlZ2lvbigpOworICAgIGF1dG8mIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29u
dGV4dCgpOworCisgICAgV1RGOjpzd2l0Y2hPbihtX3NvdXJjZUltYWdlLAorICAgICAgICBbJl0g
KGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBhdXRvIHNyY1JlY3QgPSBG
bG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfTsKKyAgICAgICAgICAgIG1fcHJlc2VydmVB
c3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGltYWdlUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAg
ICBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW1hZ2VSZWN0LCBvdXRwdXQuaW1h
Z2VSZWN0KCkpOworICAgICAgICAgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGlt
YWdlUmVjdCwgc3JjUmVjdCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmVmPElt
YWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIGltYWdlUmVjdCA9IGdlb21l
dHJ5Lm1hcEltYWdlUmVjdChpbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJlY3QoKSk7CisgICAgICAg
ICAgICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0
LmxvY2F0aW9uKCkpOworICAgICAgICB9LAorICAgICAgICBbJl0gKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICApOwogCi1SZW5kZXJFbGVtZW50KiBGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIo
KSBjb25zdAotewotICAgIGlmICghbV90cmVlU2NvcGUpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlS
SVN0cmluZyhtX2hyZWYsICptX3RyZWVTY29wZSk7Ci0gICAgaWYgKCFpczxTVkdFbGVtZW50Pih0
YXJnZXQuZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiB0YXJn
ZXQuZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUlt
YWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7Ci0gICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIo
KTsKLSAgICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7
Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVU
cmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFu
c2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICB9Ci0KLSAgICBJbnRQb2ludCBwYWlu
dExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgIGRlc3RSZWN0
Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwotCi0gICAgYXV0
byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBpZiAocmVuZGVyZXIp
IHsKLSAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSA9IGZp
bHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGFi
c29sdXRlVHJhbnNmb3JtKTsKLQotICAgICAgICBSZWZQdHIgY29udGV4dE5vZGUgPSBkb3duY2Fz
dDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGNvbnRleHRO
b2RlLT5oYXNSZWxhdGl2ZUxlbmd0aHMoKSkgewotICAgICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4
dCBsZW5ndGhDb250ZXh0KGNvbnRleHROb2RlLmdldCgpKTsKLSAgICAgICAgICAgIEZsb2F0U2l6
ZSB2aWV3cG9ydFNpemU7Ci0KLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHJlZmVyZW5jaW5nIGFu
IGVsZW1lbnQgd2l0aCBwZXJjZW50YWdlIHVuaXRzLCBlZy4gPHJlY3Qgd2l0aD0iMzAlIj4gdGhv
c2UgdmFsdWVzIHdlcmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgdmlld3BvcnQuCi0gICAgICAgICAg
ICAvLyBCdWlsZCB1cCBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBmcm9tIHRoZSB2aWV3cG9y
dCBzcGFjZSB0byB0aGUgZmlsdGVyIHByaW1pdGl2ZSBzdWJyZWdpb24uCi0gICAgICAgICAgICBp
ZiAobGVuZ3RoQ29udGV4dC5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUpKQotICAgICAg
ICAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG1ha2VNYXBCZXR3ZWVuUmVjdHMoRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgdmlld3BvcnRTaXplKSwgZGVzdFJlY3QpKTsKKyAgICBhdXRvIGltYWdl
U2l6ZSA9IFdURjo6c3dpdGNoT24obV9zb3VyY2VJbWFnZSwKKyAgICAgICAgWyZdIChjb25zdCBS
ZWY8SW1hZ2U+JiBpbWFnZSkgeworICAgICAgICAgICAgcmV0dXJuIGltYWdlLT5zaXplKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZm
ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFNpemUoaW1hZ2VCdWZmZXItPmxvZ2ljYWxT
aXplKCkpOworICAgICAgICB9LAorICAgICAgICBbJl0gKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gRmxvYXRTaXplKCk7CiAgICAgICAgIH0KKyAgICApOwogCi0gICAgICAgIEFmZmluZVRy
YW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRpb247Ci0gICAgICAgIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQoY29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJh
bnNmb3JtYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29udGV4dC5kcmF3
SW1hZ2UoKm1faW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLX0KLQotVGV4dFN0cmVhbSYgRkVJ
bWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRp
b25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAotewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemU7
Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIGltYWdlU2l6ZSA9IG1faW1hZ2UtPnNpemUoKTsK
LSAgICBlbHNlIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVy
KCkpCi0gICAgICAgIGltYWdlU2l6ZSA9IGVuY2xvc2luZ0ludFJlY3QocmVuZGVyZXItPnJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLnNpemUoKTsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZUltYWdlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKICAgICB0cyA8PCAiIGltYWdlLXNpemU9XCIiIDw8IGltYWdlU2l6
ZS53aWR0aCgpIDw8ICJ4IiA8PCBpbWFnZVNpemUuaGVpZ2h0KCkgPDwgIlwiXVxuIjsKICAgICAv
LyBGSVhNRTogc2hvdWxkIHRoaXMgZHVtcCBhbHNvIG9iamVjdCByZXR1cm5lZCBieSBTVkdGRUlt
YWdlOjppbWFnZSgpID8KICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggYWMxNjBlZGNlN2MwZTBhMDY3YmRl
ZmJkNzA3ZjJhYmU1NTkwODFiNi4uZjg3NjdjZmZjNWZmOWEzMjk3MWMxZWMyMzE3ZmI2M2E0N2Uz
ZmE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsNDEgKzI0LDgxIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIFJl
bmRlckVsZW1lbnQ7Ci1jbGFzcyBUcmVlU2NvcGU7CiAKIGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNy
ZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklS
ZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgdXNpbmcgU291cmNlSW1hZ2UgPSBzdGQ6OnZh
cmlhbnQ8CisgICAgICAgIFJlZjxJbWFnZT4sCisgICAgICAgIFJlZjxJbWFnZUJ1ZmZlcj4sCisg
ICAgICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcgorICAgID47CiAKLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCB+RkVJbWFnZSgpID0gZGVmYXVsdDsKLSAgICBGRUltYWdlKEZpbHRlciYsIFJl
ZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIEZF
SW1hZ2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUlt
YWdlPiBjcmVhdGUoU291cmNlSW1hZ2UmJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJik7CisKKyAgICBTb3VyY2VJbWFnZSYgc291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3NvdXJj
ZUltYWdlOyB9CisgICAgdm9pZCBzZXRJbWFnZVNvdXJjZShTb3VyY2VJbWFnZSYmIHNvdXJjZUlt
YWdlKSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsgfQogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUltYWdlIjsgfQor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVJ
bWFnZT4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVm
ZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0K
K3ByaXZhdGU6CisgICAgRkVJbWFnZShTb3VyY2VJbWFnZSYmLCBjb25zdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUmKTsKIAotICAgIFJlbmRlckVsZW1lbnQqIHJlZmVyZW5jZWRSZW5kZXJl
cigpIGNvbnN0OworICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpCisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBmaW5hbDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgZmluYWw7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIC8vIG1fdHJlZVNjb3BlIHdpbGwgbmV2ZXIgYmUgYSBkYW5nbGluZyByZWZlcmVu
Y2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyNDMKLSAg
ICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlIHsgbnVsbHB0ciB9OwotICAgIFN0cmluZyBtX2hyZWY7
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKKworICAgIFNvdXJjZUlt
YWdlIG1fc291cmNlSW1hZ2U7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJl
c2VydmVBc3BlY3RSYXRpbzsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZF
SW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGF1dG8gc291cmNl
SW1hZ2VFbmNvZGUgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbJl0oY29uc3QgUmVmPElt
YWdlPiYgaW1hZ2UpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkpCisgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBuYXRpdmVJbWFnZS0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShj
b25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgZW5jb2Rl
ciA8PCBpbWFnZUJ1ZmZlci0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgICAg
IH0sCisgICAgICAgIFsmXShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcjsKKyAgICAgICAgfQorICAgICk7CisKKyAgICBzdGQ6OnZpc2l0KHNvdXJj
ZUltYWdlRW5jb2RlLCBtX3NvdXJjZUltYWdlKTsKKyAgICBlbmNvZGVyIDw8IG1fcHJlc2VydmVB
c3BlY3RSYXRpbzsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8
UmVmPEZFSW1hZ2U+PiBGRUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVy
OworICAgIGRlY29kZXIgPj4gaW1hZ2VJZGVudGlmaWVyOworICAgIGlmICghaW1hZ2VJZGVudGlm
aWVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IHByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgZGVj
b2RlciA+PiBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGlmICghcHJlc2VydmVBc3BlY3RSYXRp
bykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRUltYWdlOjpj
cmVhdGUoKmltYWdlSWRlbnRpZmllciwgKnByZXNlcnZlQXNwZWN0UmF0aW8pOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVD
VChGRUltYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5jcHAKaW5kZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNl
Ny4uNTBlNWY5NmRmOTc3NjJiZGJmYmJmNjhlZjQ3MjkxYTA1Mjc2MTQzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjkgKzIzLDEzMiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVk
ZSAiRmlsdGVyUmVzdWx0LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3
aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihh
YnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbikKLSAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFy
Z2V0Qm91bmRpbmdCb3gpCi0gICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCi0gICAg
LCBtX2VmZmVjdEJCb3hNb2RlKGVmZmVjdEJCb3hNb2RlKQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZH
RmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKK3sKKyAgICBG
aWx0ZXJFZmZlY3RWZWN0b3IgYnVpbHRpbkVmZmVjdHMgPSB7CisgICAgICAgIFNvdXJjZUdyYXBo
aWM6OmNyZWF0ZSgpLAorICAgICAgICBTb3VyY2VBbHBoYTo6Y3JlYXRlKCkKKyAgICB9OworCisg
ICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgIGF1dG8gW2ZpbHRlckVmZmVjdHMsIGV4
cHJlc3Npb25dID0gYnVpbGRlci5idWlsZEVmZmVjdHMoZmlsdGVyRWxlbWVudCwgYnVpbHRpbkVm
ZmVjdHMpOworICAgIGlmIChmaWx0ZXJFZmZlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlKFdURk1vdmUoYnVpbHRpbkVmZmVjdHMpLCBX
VEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKK30KKworUmVmUHRy
PFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVy
RWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pCit7CisgICAgRmlsdGVy
RWZmZWN0VmVjdG9yIGJ1aWx0aW5FZmZlY3RzID0geyBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSwg
U291cmNlQWxwaGE6OmNyZWF0ZSgpIH07CisgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGJ1aWx0
aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSk7
Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKEZpbHRlckVmZmVjdFZl
Y3RvciYmIGJ1aWx0aW5FZmZlY3RzLCBGaWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3Rz
LCBTVkdGaWx0ZXJFeHByZXNzaW9uJiYgZXhwcmVzc2lvbikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR0ZpbHRlcihXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0ZXJF
ZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSkpOworfQorCitTVkdGaWx0ZXI6OlNWR0ZpbHRl
cihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9y
JiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pCisgICAg
OiBGaWx0ZXIoVHlwZTo6U1ZHRmlsdGVyKQorICAgICwgbV9idWlsdGluRWZmZWN0cyhXVEZNb3Zl
KGJ1aWx0aW5FZmZlY3RzKSkKKyAgICAsIG1fZmlsdGVyRWZmZWN0cyhXVEZNb3ZlKGZpbHRlckVm
ZmVjdHMpKQorICAgICwgbV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCit7CisgICAg
QVNTRVJUKG1fYnVpbHRpbkVmZmVjdHMuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVCghbV9maWx0
ZXJFZmZlY3RzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgp
KTsKK30KKworUmVmPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0KEZpbHRl
ckVmZmVjdDo6VHlwZSB0eXBlLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAodHlw
ZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMpCisgICAgICAgIHJldHVybiBt
X2J1aWx0aW5FZmZlY3RzWzBdOworCisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBl
OjpTb3VyY2VBbHBoYSkKKyAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHNbMV07CisKKyAg
ICBBU1NFUlQoaW5kZXggPCBtX2ZpbHRlckVmZmVjdHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9m
aWx0ZXJFZmZlY3RzW2luZGV4XTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVy
OjpsYXN0RWZmZWN0KCkgY29uc3QKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJz
b2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOworICAgIGlmIChtX2V4cHJlc3Np
b24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIFt0eXBlLCBp
bmRleCwgbGV2ZWxdID0gbV9leHByZXNzaW9uLmxhc3QoKTsKKyAgICByZXR1cm4gaW5kZXhlZEVm
ZmVjdCh0eXBlLCBpbmRleCk7CiB9CiAKLUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QKK0ZpbHRlckVmZmVjdFZlY3RvciBT
VkdGaWx0ZXI6OmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlIHR5cGUpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fZWZmZWN0QkJveE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXplICogbV90YXJn
ZXRCb3VuZGluZ0JveC5zaXplKCk7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVjdHM7CisK
KyAgICBmb3IgKGF1dG8gZWZmZWN0IDogbV9maWx0ZXJFZmZlY3RzKSB7CisgICAgICAgIGlmIChl
ZmZlY3QtPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgZWZmZWN0cy5hcHBlbmQoV1RGTW92
ZShlZmZlY3QpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZWZmZWN0czsKKworfQorCitib29sIFNW
R0ZpbHRlcjo6YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGlmICgh
bGFzdEVmZmVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8RmlsdGVy
SW1hZ2U+IHNvdXJjZUltYWdlOworICAgIGlmICghc3RhY2suaXNFbXB0eSgpKQorICAgICAgICBz
b3VyY2VJbWFnZSA9IHN0YWNrLnRha2VMYXN0KCk7CiAKLSAgICByZXR1cm4gRmlsdGVyOjpzY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oc2l6ZSkgKiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uLnNpemUo
KSAvIG1fZmlsdGVyUmVnaW9uLnNpemUoKTsKKyAgICBBU1NFUlQoc3RhY2suaXNFbXB0eSgpKTsK
KworICAgIGlmIChhdXRvIGltYWdlID0gcmVzdWx0LmltYWdlcygpLmdldCh7ICp0aGlzIH0pKSB7
CisgICAgICAgIHN0YWNrLmFwcGVuZCh7ICppbWFnZSB9KTsKKyAgICAgICAgcmV0dXJuIGltYWdl
OworICAgIH0KKworICAgIGZvciAoYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA6IG1fZXhwcmVz
c2lvbikgeworICAgICAgICBhdXRvIGVmZmVjdCA9IGluZGV4ZWRFZmZlY3QodHlwZSwgaW5kZXgp
OworICAgICAgICBhdXRvIGJvdW5kYXJ5U2V0ID0gZ2VvbWV0cnkuYm91bmRhcnlTZXQodHlwZSwg
aW5kZXgpOworCisgICAgICAgIGlmIChlZmZlY3QtPnR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUdyYXBoaWMpIHsKKyAgICAgICAgICAgIGlmICghc291cmNlSW1hZ2UpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzdGFjay5hcHBlbmQoeyAq
c291cmNlSW1hZ2UgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVmZmVjdC0+YXBwbHko
cmVzdWx0LCBzdGFjaywgZ2VvbWV0cnksIGJvdW5kYXJ5U2V0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4g
U1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBib29sIGVmZmVjdEJCb3hNb2RlKQorVGV4dFN0cmVhbSYgU1ZHRmlsdGVyOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJz
b2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRp
bmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBhdXRvIGVuZCA9IG1f
ZXhwcmVzc2lvbi5yZW5kKCk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2V4cHJlc3Npb24ucmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBhdXRvIFt0eXBlLCBpbmRleCwgbGV2
ZWxdID0gKml0OworICAgICAgICBpZiAodHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJj
ZUFscGhhKQorICAgICAgICAgICAgKytpdDsKKworICAgICAgICBhdXRvIGVmZmVjdCA9IGluZGV4
ZWRFZmZlY3QodHlwZSwgaW5kZXgpOworICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBp
bmRlbnRTY29wZSh0cywgbGV2ZWwpOworICAgICAgICBlZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2RhNDkzMDJmNWFl
YTBmYjE3MDBjZi4uYzA3OWNhN2M3ODc5NDAwNGM0MTk5Yzg1ZTJiOTA2YmU2NmM3NDdhZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNDEgKzIxLDQ2IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFeHByZXNzaW9u
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKKwog
Y2xhc3MgU1ZHRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxTVkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25J
blVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVG
aWx0ZXJSZWdpb247IH0KK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3Jl
YXRlKFNWR0ZpbHRlckVsZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRy
PFNWR0ZpbHRlcj4gY3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNW
R0ZpbHRlckV4cHJlc3Npb24mJik7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNv
bHV0aW9uKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
bGFzdEVmZmVjdCgpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0gICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3Vu
ZGluZ0JveDsgfQorICAgIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgZmlsdGVyRWZmZWN0cygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0czsgfQorICAgIGNvbnN0IFNWR0ZpbHRlckV4
cHJlc3Npb24mIGV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb247IH0KIAot
ICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAg
RmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlKSBjb25z
dCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURy
YXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAgICBzdGF0aWMg
UmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZl
Y3RzLCBGaWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNz
aW9uJiYpOworCisgICAgU1ZHRmlsdGVyKEZpbHRlckVmZmVjdFZlY3RvciYmIGJ1aWx0aW5FZmZl
Y3RzLCBGaWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHByZXNz
aW9uJiYpOworCisgICAgUmVmPEZpbHRlckVmZmVjdD4gaW5kZXhlZEVmZmVjdChGaWx0ZXJFZmZl
Y3Q6OlR5cGUsIHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIGJvb2wgYXBwbHkoRmlsdGVy
UmVzdWx0JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IGZpbmFsOworCisgICAgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFsOwogCi0gICAgRmxv
YXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX3Rh
cmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwot
ICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKLSAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7
CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1fYnVpbHRpbkVmZmVjdHM7CisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIG1fZmlsdGVyRWZmZWN0czsKKyAgICBTVkdGaWx0ZXJFeHByZXNzaW9uIG1fZXhw
cmVzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpTVkdGaWx0ZXIpCiAgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIuaXNTVkdGaWx0
ZXIoKTsgfQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzU1ZHRmlsdGVyKCk7IH0KIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggOTZmM2E4MDUwNDI5
NTU1ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uMTdkNDM4OTk1MzJlOWJkYzExMjg3YzFjNThh
OWJlNTlmNTgxODgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsODcgKzIxLDE4NCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCIKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2lmIEVO
QUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyNpbmNsdWRlICJDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1h
cHBpbmdzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXJCdWls
ZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMp
CitWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVy
RWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7CisgICAgYXV0byBwcmltaXRpdmVVbml0
cyA9IGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKTsKKyAgICBWZWN0b3I8RmlsdGVyQm91
bmRhcnlTZXQ+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKworICAgIGZvciAoYXV0byYgZWZm
ZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBib3VuZGFyaWVzID0gU1ZH
TGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVtZW50LCBwcmltaXRpdmVVbml0cywgdGFyZ2V0Qm91bmRp
bmdCb3gpOworICAgICAgICAKKyAgICAgICAgT3B0aW9uU2V0PEZpbHRlckJvdW5kYXJ5U2V0OjpG
bGFncz4gZmxhZ3M7CisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6eEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpG
bGFnczo6SGFzWCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNW
R05hbWVzOjp5QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6
OkZsYWdzOjpIYXNZKTsKKworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OndpZHRoQXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRh
cnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFz
QXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChG
aWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc0hlaWdodCk7CisKKyAgICAgICAgZmlsdGVyRWZm
ZWN0Qm91bmRhcnlTZXRzLmFwcGVuZCh7IGJvdW5kYXJpZXMsIGZsYWdzIH0pOworICAgIH0KKwor
ICAgIHJldHVybiBmaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7Cit9CisKK3N0ZDo6dHVwbGU8Rmls
dGVyRWZmZWN0VmVjdG9yLCBTVkdGaWx0ZXJFeHByZXNzaW9uPiBTVkdGaWx0ZXJCdWlsZGVyOjpi
dWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cykKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOworICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50
Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgc2V0dXBCdWlsdGluRWZmZWN0cyhidWlsdGluRWZmZWN0cyk7CisKKyAgICBGaWx0ZXJF
ZmZlY3RzSW5wdXRzIGVmZmVjdHNJbnB1dHM7CisgICAgaWYgKCFidWlsZEVmZmVjdHMoZmlsdGVy
RWxlbWVudCwgZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAo
IWJ1aWxkRXhwcmVzc2lvbihlZmZlY3RzSW5wdXRzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiB7IFdURk1vdmUobV9maWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShtX2V4cHJlc3Np
b24pIH07Cit9CisKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyhj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKQoreworICAgIG1fYnVpbHRp
bkVmZmVjdHMuYWRkKEZpbHRlckVmZmVjdDo6c291cmNlR3JhcGhpY05hbWUoKSwgYnVpbHRpbkVm
ZmVjdHNbMF0pOworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKEZpbHRlckVmZmVjdDo6c291cmNl
QWxwaGFOYW1lKCksIGJ1aWx0aW5FZmZlY3RzWzFdKTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYnVpbHRpbkVmZmVjdHMuZ2V0KEZpbHRlckVmZmVjdDo6c291cmNlR3JhcGhpY05hbWUoKSk7
Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OnNvdXJjZUFscGhh
KCkgY29uc3QKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZl
Y3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJj
ZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNvdXJjZUdyYXBoaWMp
KTsKLSAgICBhZGRCdWlsdGluRWZmZWN0cygpOworICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3Rz
LmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgpKTsKIH0KIAotdm9pZCBTVkdGaWx0
ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGVmZmVjdCkKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YWRkTmFtZWRFZmZlY3QoY29uc3QgQXRv
bVN0cmluZyYgbmFtZSwgUmVmPEZpbHRlckVmZmVjdD4gZWZmZWN0KQogewotICAgIGlmIChpZC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0OworICAgIGlmIChuYW1l
LmlzRW1wdHkoKSkgeworICAgICAgICBtX2xhc3RFZmZlY3QgPSBlZmZlY3QucHRyKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhp
ZCkpCisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMobmFtZSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdDsKLSAgICBtX25hbWVkRWZmZWN0cy5z
ZXQoaWQsIG1fbGFzdEVmZmVjdCk7CisgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0LnB0cigpOwor
ICAgIG1fbmFtZWRFZmZlY3RzLnNldChuYW1lLCBXVEZNb3ZlKGVmZmVjdCkpOwogfQogCi1SZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0
b21TdHJpbmcmIGlkKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRl
cjo6bmFtZWRFZmZlY3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBpZiAo
aWQuaXNFbXB0eSgpKSB7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICht
X2xhc3RFZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4gbV9sYXN0RWZmZWN0OwogCi0gICAgICAg
IHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkp
OworICAgICAgICByZXR1cm4gc291cmNlR3JhcGhpYygpOwogICAgIH0KIAotICAgIGlmIChtX2J1
aWx0aW5FZmZlY3RzLmNvbnRhaW5zKGlkKSkKLSAgICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVj
dHMuZ2V0KGlkKTsKKyAgICBpZiAobV9idWlsdGluRWZmZWN0cy5jb250YWlucyhuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIG1fYnVpbHRpbkVmZmVjdHMuZ2V0KG5hbWUpOwogCi0gICAgcmV0dXJuIG1f
bmFtZWRFZmZlY3RzLmdldChpZCk7CisgICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChuYW1l
KTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVy
ZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBlZmZlY3QsIFJlbmRlck9iamVjdCogb2JqZWN0
KQorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKK3N0YXRp
YyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChTVkdFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIC8vIFRoZSBlZmZlY3QgbXVzdCBiZSBhIG5ld2x5IGNyZWF0
ZWQgZmlsdGVyIGVmZmVjdC4KLSAgICBBU1NFUlQoIW1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlu
cyhlZmZlY3QpKTsKLSAgICBBU1NFUlQoIW9iamVjdCB8fCAhbV9lZmZlY3RSZW5kZXJlci5jb250
YWlucyhvYmplY3QpKTsKLSAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVy
RWZmZWN0U2V0KCkpOwotCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKLQotICAgIC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0
byBhZGQgdGhlIHNhbWUgdmFsdWUgdG8gYSBzZXQgdHdpY2UuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kpCi0gICAgICAgIGVmZmVjdFJlZmVy
ZW5jZXMoZWZmZWN0LT5pbnB1dEVmZmVjdChpKSkuYWRkKGVmZmVjdC5nZXQoKSk7Ci0KLSAgICAv
LyBJZiBvYmplY3QgaXMgbnVsbCwgdGhhdCBtZWFucyB0aGUgZWxlbWVudCBpc24ndCBhdHRhY2hl
ZCBmb3Igc29tZQotICAgIC8vIHJlYXNvbiwgd2hpY2ggaW4gdHVybiBtZWFuIHRoYXQgY2VydGFp
biB0eXBlcyBvZiBpbnZhbGlkYXRpb24gd2lsbCBub3QKLSAgICAvLyB3b3JrICh0aGUgTGF5b3V0
T2JqZWN0IC0+IEZpbHRlckVmZmVjdCBtYXBwaW5nIHdpbGwgbm90IGJlIGRlZmluZWQpLgotICAg
IGlmIChvYmplY3QpCi0gICAgICAgIG1fZWZmZWN0UmVuZGVyZXIuYWRkKG9iamVjdCwgZWZmZWN0
LmdldCgpKTsKKyAgICBpZiAoYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0
aW9uRmlsdGVycygpOworCisgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgcHJvcGVydHkgdmFs
dWUgZnJvbSB0aGUgY29tcHV0ZWQgc3R5bGUuCisgICAgaWYgKGF1dG8gdmFsdWUgPSBDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yKCZlbGVtZW50KS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29sb3JJ
bnRlcnBvbGF0aW9uRmlsdGVycykpIHsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIENvbG9ySW50ZXJwb2xhdGlvbjo6QXV0bzsK
IH0KKyNlbmRpZgogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyRWZmZWN0cygpCitib29s
IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJF
bGVtZW50LCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzKQogewotICAgIG1fbGFz
dEVmZmVjdCA9IG51bGxwdHI7Ci0gICAgbV9uYW1lZEVmZmVjdHMuY2xlYXIoKTsKLSAgICBtX2Vm
ZmVjdFJlZmVyZW5jZXMuY2xlYXIoKTsKLSAgICBtX2VmZmVjdFJlbmRlcmVyLmNsZWFyKCk7Ci0g
ICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKyAgICBlZmZlY3RzSW5wdXRzLnNldCgqc291cmNlQWxw
aGEoKSwgRmlsdGVyRWZmZWN0VmVjdG9yIHsgKnNvdXJjZUdyYXBoaWMoKSB9KTsKKworICAgIGZv
ciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgYXV0byBbZWZm
ZWN0LCBpbnB1dHNdID0gZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlmICgh
ZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0
aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVh
clJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CisjZW5kaWYKKyAgICAKKyAgICAgICAgZWZm
ZWN0c0lucHV0cy5zZXQoeyAqZWZmZWN0IH0sIFdURk1vdmUoaW5wdXRzKSk7CisgICAgICAgIGFk
ZE5hbWVkRWZmZWN0KGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIHsgKmVmZmVjdCB9KTsKKworICAg
ICAgICBtX2ZpbHRlckVmZmVjdHMuYXBwZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCitib29sIFNWR0ZpbHRlckJ1
aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBj
b25zdCBGaWx0ZXJFZmZlY3RzSW5wdXRzJiBlZmZlY3RzSW5wdXRzLCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIHN0YWNrLCB1bnNpZ25lZCBsZXZlbCkKIHsKLSAgICBpZiAoIWVmZmVjdC0+aGFzUmVzdWx0
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBBIGN5Y2xlIGlzIGRldGVjdGVkLgorICAgIGlm
IChzdGFjay5jb250YWlucyhlZmZlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoZWZmZWN0LnB0cigpID09IHNvdXJjZUdyYXBoaWMoKSkKKyAgICAgICAgbV9leHByZXNzaW9u
Lmluc2VydCgwLCB7IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYywgMCwgbGV2ZWwg
fSk7CisgICAgZWxzZSBpZiAoZWZmZWN0LnB0cigpID09IHNvdXJjZUFscGhhKCkpCisgICAgICAg
IG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhh
LCAxLCBsZXZlbCB9KTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fZmlsdGVyRWZmZWN0
cy5jb250YWlucyhlZmZlY3QpKTsKKyAgICAgICAgbV9leHByZXNzaW9uLmluc2VydCgwLCB7IGVm
ZmVjdC0+dHlwZSgpLCBtX2ZpbHRlckVmZmVjdHMuZmluZChlZmZlY3QpLCBsZXZlbCB9KTsKKyAg
ICB9CisKKyAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZvciAoYXV0byYgaW5wdXRF
ZmZlY3QgOiBlZmZlY3RzSW5wdXRzLmdldChlZmZlY3QpKSB7CisgICAgICAgIGlmICghYnVpbGRF
eHByZXNzaW9uKGlucHV0RWZmZWN0LCBlZmZlY3RzSW5wdXRzLCBzdGFjaywgbGV2ZWwgKyAxKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBlZmZlY3QtPmNsZWFyUmVz
dWx0KCk7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5s
YXN0KCkucHRyKCkgPT0gZWZmZWN0LnB0cigpKTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJl
c3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cykKK3sKKyAgICBp
ZiAoIW1fbGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRv
JiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVz
dWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBzdGFjazsK
KyAgICByZXR1cm4gYnVpbGRFeHByZXNzaW9uKHsgKm1fbGFzdEVmZmVjdCB9LCBlZmZlY3RzSW5w
dXRzLCBzdGFjaywgMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApp
bmRleCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li5lZWU4ZGQ1YThk
NzBiNzU2OTBjMThjNmUzYTY2MDM2MGZlOTk4NGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBl
bmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNjggKzIxLDQ1
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVk
ZSAiU1ZHVW5pdFR5cGVzLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisjaW5j
bHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFz
cyBTVkdGaWx0ZXJFbGVtZW50OwogCiBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hTZXQ8RmlsdGVy
RWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OworICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1
bHQ7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpOworICAgIHN0YXRpYyBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+IGJ1aWxkRmlsdGVy
RWZmZWN0Qm91bmRhcnlTZXRzKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94KTsKIAotICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdCb3goY29uc3Qg
RmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9Ci0gICAgRmxvYXRSZWN0
IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsg
fQotICAgIAotICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBj
b25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzOyB9Ci0gICAgdm9pZCBzZXRQcmltaXRpdmVV
bml0cyhTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHVuaXRzKSB7IG1fcHJpbWl0aXZlVW5pdHMg
PSB1bml0czsgfQorICAgIHN0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0VmVjdG9yLCBTVkdGaWx0ZXJF
eHByZXNzaW9uPiBidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgYnVpbHRpbkVmZmVjdHMpOwogCi0gICAgdm9pZCBhZGQoY29uc3QgQXRvbVN0
cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBuYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lKSBjb25zdDsKIAotICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbVN0cmluZyYpIGNvbnN0Owot
ICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVj
dC5nZXQoKTsgfQotCi0gICAgdm9pZCBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVm
UHRyPEZpbHRlckVmZmVjdD4mJiwgUmVuZGVyT2JqZWN0Kik7Citwcml2YXRlOgorICAgIHVzaW5n
IEZpbHRlckVmZmVjdHNJbnB1dHMgPSBIYXNoTWFwPFJlZjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PjsKIAotICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGVmZmVj
dFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCi0gICAgewotICAgICAgICAvLyBPbmx5
IGFsbG93ZWQgZm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCi0gICAgICAgIEFT
U0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Ci0gICAgICAgIHJldHVy
biBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT52YWx1ZTsKLSAgICB9CisgICAgdm9p
ZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgYnVpbHRpbkVm
ZmVjdHMpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMoKSBjb25zdDsK
KyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VBbHBoYSgpIGNvbnN0OwogCi0gICAgLy8g
UmVxdWlyZWQgdG8gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mIGEgZmlsdGVyIGR1cmluZyBhbiBz
dmdBdHRyaWJ1dGVDaGFuZ2VkLgotICAgIGlubGluZSBGaWx0ZXJFZmZlY3QqIGVmZmVjdEJ5UmVu
ZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgcmV0dXJuIG1fZWZmZWN0UmVuZGVyZXIuZ2V0
KG9iamVjdCk7IH0KKyAgICB2b2lkIGFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5h
bWUsIFJlZjxGaWx0ZXJFZmZlY3Q+KTsKKyAgICBib29sIGJ1aWxkRWZmZWN0cyhTVkdGaWx0ZXJF
bGVtZW50JiwgRmlsdGVyRWZmZWN0c0lucHV0cyYpOwogCi0gICAgdm9pZCBjbGVhckVmZmVjdHMo
KTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKKyAgICBi
b29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWY8RmlsdGVyRWZmZWN0PiYsIGNvbnN0IEZpbHRl
ckVmZmVjdHNJbnB1dHMmLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCB1bnNpZ25lZCBsZXZl
bCk7CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oY29uc3QgRmlsdGVyRWZmZWN0c0lucHV0cyYp
OwogCi1wcml2YXRlOgotICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKLSAgICB7
Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9idWlsdGluRWZmZWN0cy52YWx1ZXMoKSkK
LSAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RT
ZXQoKSk7Ci0gICAgfQotCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZm
ZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+PiBtX25hbWVkRWZmZWN0czsKLSAgICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0
LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIgZWZmZWN0cywKLSAgICAvLyB3aGljaCBkZXBl
bmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KLSAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZmZWN0UmVmZXJlbmNlczsKLSAgICBIYXNoTWFw
PFJlbmRlck9iamVjdCosIEZpbHRlckVmZmVjdCo+IG1fZWZmZWN0UmVuZGVyZXI7CisgICAgRmls
dGVyRWZmZWN0VmVjdG9yIG1fZmlsdGVyRWZmZWN0czsKKyAgICBTVkdGaWx0ZXJFeHByZXNzaW9u
IG1fZXhwcmVzc2lvbjsKIAorICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVj
dD4+IG1fYnVpbHRpbkVmZmVjdHM7CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWY8RmlsdGVy
RWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0
RWZmZWN0OwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0cyB7IFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSB9OwogfTsKLSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNTAyYWRhOTYyNzBlNTAxOTMyYzZj
MDdiNWY0Nzk1NjI0MDNiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKQEAgLTAsMCArMSwzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBTVkdGaWx0ZXJFeHByZXNzaW9uID0gVmVj
dG9yPHN0ZDo6dHVwbGU8RmlsdGVyRWZmZWN0OjpUeXBlLCB1bnNpZ25lZCwgdW5zaWduZWQ+PjsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmlu
ZGV4IGVlYTkyZmRmYWZhZjg2MmYwMGQyMTI5NDgzZTcxOTFjMTdjNmI2NzIuLjcyOWU0YTQ2ZjAx
NWYzMDY3NzRiOWFiYmUwNDcyYjQ0NjJiNDMxYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNs
dWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0JpdG1hcEltYWdlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC0zMDAsNiArMzAxLDQzIEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6ZHJhd1BhdHRlcm5XaXRoUXVhbGlmaWVkSWRlbnRpZmllcihRdWFsaWZpZWRSZW5kCiAg
ICAgcmVzb3VyY2VDYWNoZSgpLnJlY29yZFJlc291cmNlVXNlKGltYWdlSWRlbnRpZmllcik7CiB9
CiAKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZHJhd0ZpbHRlckltYWdlQnVmZmVy
KHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJl
ZmVyZW5jZSBmaWx0ZXJSZWZlcmVuY2UsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkK
K3sKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgIGlmIChpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpIHsKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSByZXNvdXJjZUNhY2hlKCku
Y2FjaGVkSW1hZ2VCdWZmZXIoeyAqaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyIH0pOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKSB7CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJlbmNlLnRha2VGaWx0ZXIoKTsKKwor
ICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLT5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVj
dDo6VHlwZTo6RkVJbWFnZSkpIHsKKyAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZF
SW1hZ2U+KGVmZmVjdC5nZXQoKSk7CisgICAgICAgIAorICAgICAgICBjb25zdCBhdXRvKiByZXNv
dXJjZUlkZW50aWZpZXIgPSBzdGQ6OmdldF9pZjxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
KCZmZUltYWdlLnNvdXJjZUltYWdlKCkpOworICAgICAgICBpZiAoIXJlc291cmNlSWRlbnRpZmll
cikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IHJlc291cmNl
Q2FjaGUoKS5jYWNoZWROYXRpdmVJbWFnZSh7ICpyZXNvdXJjZUlkZW50aWZpZXIsIG1fd2ViUHJv
Y2Vzc0lkZW50aWZpZXIgfSkpIHsKKyAgICAgICAgICAgIFJlZjxJbWFnZT4gaW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxOYXRpdmVJbWFnZT4geyBuYXRpdmVJbWFnZSB9KTsKKyAg
ICAgICAgICAgIGZlSW1hZ2Uuc2V0SW1hZ2VTb3VyY2UoV1RGTW92ZShpbWFnZSkpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZl
ciA9IHJlc291cmNlQ2FjaGUoKS5jYWNoZWRJbWFnZUJ1ZmZlcih7ICpyZXNvdXJjZUlkZW50aWZp
ZXIsIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXIgfSkpIHsKKyAgICAgICAgICAgIGZlSW1hZ2Uuc2V0
SW1hZ2VTb3VyY2UoeyAqaW1hZ2VCdWZmZXIgfSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIHNvdXJjZUltYWdlUmVjdCwgV1RGTW92
ZShmaWx0ZXIpLCBnZW9tZXRyeSksIGltYWdlQnVmZmVyLmdldCgpKTsKK30KKwogdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpCiB7CiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cihvcGFjaXR5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA2MmE0OTcwNmUyOGIw
MWUwYTZiODY5YmQzM2U2MjRlYzdkOGIzNjkxLi4yMmI2MzljOTQ5MzJmNzE5MWJhNjJjZmQ3OTI2
YjA3NjQ3ZGQ5MWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTM3LDYgKzM3LDEw
IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVyZW5jZTsKK30KKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CkBAIC04MCw2ICs4
NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogICAgIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJik7CiAgICAgdm9pZCBk
cmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgSVBD
OjpGaWx0ZXJSZWZlcmVuY2UsIGNvbnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Jik7CiAgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwogICAgIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluCmluZGV4IDVjMTQwOTNhM2I5YWJhMGExYmU3MjA2ODdlZmI0
NjY4YjU5NWEzNjEuLmE2ZTZhMWNiZjQ3MzJiNWYwMDM4ODU5YTYzOGMxZTgzMTViMjcwZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCkBAIC00Niw2ICs0
Niw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRl
ZCBTdHJlYW0gewogICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90
IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQogICAgIEJlZ2luQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzKFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbiwgV2ViQ29yZTo6RGVzdGluYXRpb25D
b2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgRW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKFdlYkNv
cmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbikKKyAgICBEcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJS
ZWZlcmVuY2UgZmlsdGVyLCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSBnZW9tZXRyeSkKICAgICBE
cmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCiAgICAgRHJh
d0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNv
cmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlv
bnMgb3B0aW9ucykKICAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6
ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVj
dCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAKaW5kZXggYzI5YWE4NmM0ZWFlZDIyZTA3NGI2ZTU3MmE4MmFiYjA3NmVh
NTAzNC4uOTkyOGRhYWMyNTE2NzM5NjJlZjg0ZmIwMDBmZTc2ZjkwMWNkODhiYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQogCisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVJlbW90ZUltYWdlQnVmZmVyLmgiCkBAIC0zMjAsNiArMzIxLDM0IEBAIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Z2V0U2hhcmVhYmxlQml0bWFwRm9ySW1hZ2VCdWZmZXJXaXRoUXVh
bGlmaWVkSWRlbnRpCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKIH0K
IAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VC
dWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIsIElQQzo6RmlsdGVy
UmVmZXJlbmNlJiYgZmlsdGVyUmVmZXJlbmNlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnksCisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gZmlsdGVyID0gZmlsdGVyUmVmZXJlbmNlLnRha2VGaWx0ZXIoKTsKKyAg
ICAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgWyZdKCkgeworICAg
ICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdl
QnVmZmVyKHsgaWRlbnRpZmllciwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53ZWJQcm9j
ZXNzSWRlbnRpZmllcigpIH0pOworICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvIGltYWdlID0gaW1hZ2VCdWZmZXItPmZpbHRlcmVkSW1h
Z2UoZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2UtPnNpemUoKTsKKyAgICAgICAg
YXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKGlt
YWdlU2l6ZSksIHsgaW1hZ2VCdWZmZXItPmNvbG9yU3BhY2UoKSB9KTsKKyAgICAgICAgaWYgKCFi
aXRtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gY29udGV4dCA9IGJpdG1h
cC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGlmICghY29udGV4dCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKCppbWFnZSwgRmxvYXRQ
b2ludCgpKTsKKyAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICB9KCk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUpKTsKK30KKwogdm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpjYWNoZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBuYXRpdmVJbWFn
ZVJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICAvLyBJbW1lZGlhdGVseSB0dXJuIHRoZSBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgKHdoaWNoIGlzIGVycm9yLXByb25lKSB0byBhIFF1YWxp
ZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4
IDE5ZmIxN2YwMjVmYjJjNjVmMWRkZTI3MmMzMGJiMGRlOTQ1Y2FmOWYuLmNiOWQwZDc1MDEzYjhh
YzZiMDNmMmU0N2EyNjdjMDRhNmYyZjU0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtNTks
NiArNTksMTAgQEAgZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKIAogfQogCituYW1l
c3BhY2UgSVBDIHsKK2NsYXNzIEZpbHRlclJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CkBAIC0xMDksNiArMTEzLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJl
c2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRTaGFyZWFi
bGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYmKT4mJik7CisgICAgdm9pZCBnZXRGaWx0ZXJlZEltYWdl
Rm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBJUEM6
OkZpbHRlclJlZmVyZW5jZSYmLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYpOwogICAgIHZv
aWQgY2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVm
PFdlYkNvcmU6OkZvbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlQWxsRm9udHMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggYTE0MmY0ODk2NmY1YzQ5NzU5NDU2
NTQ3NzJjNzljMzE5NzZmNTNkYy4uNDE1ZmRhNThkY2Y2YmIwODY0ZmI2MTEzNTEwNTk5NjcyNDE3
NGZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTMxLDYg
KzMxLDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVk
IFN0cmVhbSB7CiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVy
bFN0cmluZykgU3luY2hyb25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1p
bWVUeXBlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rv
cjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldFNoYXJlYWJsZUJpdG1hcEZvcklt
YWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
ciwgZW51bTp1aW50OF90IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIC0+IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkgU3luY2hy
b25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKKyAgICBHZXRGaWx0ZXJlZEltYWdlRm9ySW1h
Z2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVy
LCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIsIFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5IGdl
b21ldHJ5KSAtPiAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNo
cm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CiAgICAgQ2FjaGVOYXRpdmVJbWFnZShXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgTm90U3RyZWFtRW5j
b2RhYmxlCiAgICAgQ2FjaGVGb250KElQQzo6Rm9udFJlZmVyZW5jZSBmb250KSBOb3RTdHJlYW1F
bmNvZGFibGUKICAgICBEZWxldGVBbGxGb250cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0ZpbHRlclJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0NTM3ZGMyZWRkMzRhY2FlNDM2Mjg2
ZWVlMmNlZjViOTFmODllYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9GaWx0ZXJSZWZlcmVuY2UuaApAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NGaWx0ZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZFQmxlbmQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFQ29sb3JNYXRyaXguaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZFQ29tcG9uZW50VHJhbnNmZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZFQ29tcG9zaXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbnZvbHZlTWF0cml4Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GRURpZmZ1c2VMaWdodGluZy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRkVEaXNwbGFjZW1lbnRNYXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFRHJvcFNoYWRvdy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRkVGbG9vZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVHYXVz
c2lhbkJsdXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFTWVyZ2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZFTW9ycGhvbG9neS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVPZmZzZXQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ZFU3BlY3VsYXJMaWdodGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVU
aWxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRVR1cmJ1bGVuY2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbHRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyRWZmZWN0VmVjdG9yLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TVkdGRUltYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TVkdGaWx0
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NWR0ZpbHRlckV4cHJlc3Npb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NvdXJjZUdyYXBoaWMuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEZp
bHRlclJlZmVyZW5jZSB7CitwdWJsaWM6CisgICAgRmlsdGVyUmVmZXJlbmNlKFJlZjxXZWJDb3Jl
OjpGaWx0ZXI+JiYgZmlsdGVyKQorICAgICAgICA6IG1fZmlsdGVyKFdURk1vdmUoZmlsdGVyKSkK
KyAgICB7CisgICAgfQorCisgICAgUmVmPFdlYkNvcmU6OkZpbHRlcj4gdGFrZUZpbHRlcigpIHsg
cmV0dXJuIFdURk1vdmUobV9maWx0ZXIpOyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsdGVyUmVmZXJlbmNlPiBkZWNvZGUoRGVjb2RlciYp
OworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVu
Y29kZUZpbHRlckVmZmVjdChjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmLCBFbmNvZGVyJik7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q+IGRlY29kZUZpbHRlckVmZmVjdChEZWNvZGVyJiwgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGUpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gc3RhdGljIHZvaWQg
ZW5jb2RlU1ZHRmlsdGVyKGNvbnN0IFdlYkNvcmU6OlNWR0ZpbHRlciYsIEVuY29kZXImKTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlNWR0ZpbHRl
cj4gZGVjb2RlU1ZHRmlsdGVyKERlY29kZXImKTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHN0YXRpYyB2b2lkIGVuY29kZUNTU0ZpbHRlcihjb25zdCBXZWJDb3JlOjpDU1NGaWx0ZXIm
LCBFbmNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIFJlZlB0cjxX
ZWJDb3JlOjpDU1NGaWx0ZXI+IGRlY29kZUNTU0ZpbHRlcihEZWNvZGVyJik7CisgICAgCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlRmlsdGVyKGNvbnN0IFdl
YkNvcmU6OkZpbHRlciYsIEVuY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgUmVmUHRyPFdlYkNvcmU6OkZpbHRlcj4gZGVjb2RlRmlsdGVyKERlY29kZXImKTsKKwor
ICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IG1fZmlsdGVyOworfTsKKwordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGVGaWx0ZXJFZmZlY3QoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAg
QVNTRVJUKGVmZmVjdC50eXBlKCkgPj0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1p
bmltdW0gJiYgZWZmZWN0LnR5cGUoKSA8PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
TWF4aW11bSk7CisKKyAgICBlbmNvZGVyIDw8IGVmZmVjdC50eXBlKCk7CisgICAgZW5jb2RlciA8
PCBlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOworCisgICAgc3dpdGNoIChlZmZlY3QudHlw
ZSgpKSB7CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQmxlbmQ6Cisg
ICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFQmxlbmQ+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpGRUNvbG9yTWF0cml4OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUNvbG9yTWF0cml4
PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKKyAgICAgICAg
ZG93bmNhc3Q8V2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KS5lbmNvZGUoZW5j
b2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFQ29tcG9zaXRlOgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUNvbXBvc2l0
ZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29udm9sdmVNYXRyaXg6CisgICAgICAgIGRv
d25jYXN0PFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpGRURpZmZ1c2VMaWdodGluZzoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVEaWZmdXNl
TGlnaHRpbmc+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAg
ICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA+KGVmZmVjdCkuZW5jb2Rl
KGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFRHJv
cFNoYWRvdz4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRmxvb2Q6CisgICAgICAgIGRvd25j
YXN0PFdlYkNvcmU6OkZFRmxvb2Q+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFu
Qmx1cjoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI+KGVmZmVjdCku
ZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlOgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRUlt
YWdlPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVNZXJnZToKKyAgICAgICAgZG93bmNhc3Q8
V2ViQ29yZTo6RkVNZXJnZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
TW9ycGhvbG9neToKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVNb3JwaG9sb2d5PihlZmZl
Y3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6
OkZFT2Zmc2V0PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nOgor
ICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc+KGVmZmVjdCkuZW5j
b2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpUeXBlOjpGRVRpbGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAgICAgICAgZG93bmNhc3Q8V2Vi
Q29yZTo6RkVUdXJidWxlbmNlPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhp
YzoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlw
ZTo6U291cmNlQWxwaGE6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorUmVmUHRyPFdlYkNvcmU6
OkZpbHRlckVmZmVjdD4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVGaWx0ZXJFZmZlY3QoRGVjb2Rl
ciYgZGVjb2RlciwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUgdHlwZSkKK3sKKyAgICBp
ZiAoISh0eXBlID49IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1pbmltdW0gJiYg
dHlwZSA8PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNYXhpbXVtKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gb3BlcmF0aW5nQ29sb3JTcGFjZTsKKyAgICBkZWNvZGVyID4+IG9wZXJh
dGluZ0NvbG9yU3BhY2U7CisgICAgaWYgKCFvcGVyYXRpbmdDb2xvclNwYWNlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6b3B0aW9uYWw8UmVmPFdlYkNvcmU6OkZpbHRlckVm
ZmVjdD4+IGVmZmVjdDsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVCbGVuZDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29y
ZTo6RkVCbGVuZDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4Ogor
ICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpkZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb3NpdGU6CisgICAgICAgIGVmZmVj
dCA9IFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29udm9sdmVNYXRy
aXg6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmRlY29kZShk
ZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmc6CisgICAgICAgIGVmZmVjdCA9
IFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlzcGxhY2Vt
ZW50TWFwOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6ZGVj
b2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpUeXBlOjpGRURyb3BTaGFkb3c6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZF
RHJvcFNoYWRvdzo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUZsb29kOgorICAgICAgICBlZmZlY3QgPSBX
ZWJDb3JlOjpGRUZsb29kOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyOgorICAgICAg
ICBlZmZlY3QgPSBXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGVjb2RlKGRlY29kZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUlt
YWdlOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUltYWdlOjpkZWNvZGUoZGVjb2Rlcik7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFTWVyZ2U6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZShkZWNv
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6RkVNb3JwaG9sb2d5OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVPZmZzZXQ6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6
OkZFT2Zmc2V0OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZzoKKyAgICAgICAg
ZWZmZWN0ID0gV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpkZWNvZGUoZGVjb2Rlcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
VGlsZToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUoKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVUdXJi
dWxlbmNlOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZShk
ZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6U291cmNl
R3JhcGhpYzo6Y3JlYXRlKCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmIChlZmZlY3QpIHsKKyAgICAgICAg
KCplZmZlY3QpLT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKCpvcGVyYXRpbmdDb2xvclNwYWNlKTsK
KyAgICAgICAgcmV0dXJuIHsgKCplZmZlY3QpLnB0cigpIH07CisgICAgfQorCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVy
ZW5jZTo6ZW5jb2RlU1ZHRmlsdGVyKGNvbnN0IFdlYkNvcmU6OlNWR0ZpbHRlciYgZmlsdGVyLCBF
bmNvZGVyJiBlbmNvZGVyKQoreworICAgIGVuY29kZXIgPDwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OlNWR0ZpbHRlcjsKKworICAgIGF1dG8mIGZpbHRlckVmZmVjdHMgPSBmaWx0ZXIu
ZmlsdGVyRWZmZWN0cygpOworICAgIGVuY29kZXIgPDwgZmlsdGVyRWZmZWN0cy5zaXplKCk7CisK
KyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlckVmZmVjdHMpCisgICAgICAgIGVuY29kZUZp
bHRlckVmZmVjdChlZmZlY3QsIGVuY29kZXIpOworICAgIAorICAgIGF1dG8mIGV4cHJlc3Npb24g
PSBmaWx0ZXIuZXhwcmVzc2lvbigpOworICAgIGVuY29kZXIgPDwgZXhwcmVzc2lvbi5zaXplKCk7
CisKKyAgICBmb3IgKGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBleHByZXNzaW9uKSB7Cisg
ICAgICAgIGVuY29kZXIgPDwgdHlwZTsKKyAgICAgICAgZW5jb2RlciA8PCBpbmRleDsKKyAgICAg
ICAgZW5jb2RlciA8PCBsZXZlbDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+
CitSZWZQdHI8V2ViQ29yZTo6U1ZHRmlsdGVyPiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZVNWR0Zp
bHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBzaXpl
OworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwgISpzaXplKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFdlYkNvcmU6OkZpbHRlckVmZmVjdFZlY3RvciBmaWx0
ZXJFZmZlY3RzOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7ICsraSkg
eworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0
eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgICAgICBhdXRvIGVmZmVjdCA9IGRlY29k
ZUZpbHRlckVmZmVjdChkZWNvZGVyLCAqdHlwZSk7CisgICAgICAgIGlmICghZWZmZWN0KQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgICAgIGZpbHRlckVmZmVjdHMuYXBw
ZW5kKGVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBkZWNvZGVyID4+IHNp
emU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBXZWJDb3JlOjpTVkdGaWx0ZXJFeHByZXNzaW9uIGV4cHJlc3Npb247CisgICAgCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+
IHR5cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gaW5kZXg7CisgICAgICAg
IGRlY29kZXIgPj4gaW5kZXg7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsZXZlbDsKKyAg
ICAgICAgZGVjb2RlciA+PiBsZXZlbDsKKyAgICAgICAgaWYgKCFsZXZlbCkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIGV4cHJlc3Npb24uYXBwZW5kKHsgKnR5cGUsICpp
bmRleCwgKmxldmVsIH0pOworICAgIH0KKworICAgIHJldHVybiBXZWJDb3JlOjpTVkdGaWx0ZXI6
OmNyZWF0ZShXVEZNb3ZlKGZpbHRlckVmZmVjdHMpLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGVD
U1NGaWx0ZXIoY29uc3QgV2ViQ29yZTo6Q1NTRmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29k
ZXIpCit7CisgICAgZW5jb2RlciA8PCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6Q1NT
RmlsdGVyOworICAgIGVuY29kZXIgPDwgZmlsdGVyLmZ1bmN0aW9ucygpLnNpemUoKTsKKyAgICAK
KyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZmlsdGVyLmZ1bmN0aW9ucygpKSB7CisgICAgICAg
IGlmIChpczxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uKSkKKyAgICAgICAgICAgIGVuY29k
ZVNWR0ZpbHRlcihkb3duY2FzdDxXZWJDb3JlOjpTVkdGaWx0ZXI+KGZ1bmN0aW9uLmdldCgpKSwg
ZW5jb2Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kZUZpbHRlckVmZmVjdChk
b3duY2FzdDxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLmdldCgpKSwgZW5jb2Rlcik7
CisgICAgfQorICAgIAorICAgIGVuY29kZXIgPDwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJDb3JlOjpDU1NGaWx0ZXI+IEZp
bHRlclJlZmVyZW5jZTo6ZGVjb2RlQ1NTRmlsdGVyKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
c3RkOjpvcHRpb25hbDxzaXplX3Q+IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlm
ICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmVjdG9y
PFJlZjxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbj4+IGZ1bmN0aW9uczsKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB0eXBlOworICAgICAgICBkZWNvZGVyID4+IHR5
cGU7CisgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmls
dGVyKSB7CisgICAgICAgICAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVTVkdGaWx0ZXIoZGVj
b2RlcikpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBlZmZl
Y3QgPSBkZWNvZGVGaWx0ZXJFZmZlY3QoZGVjb2RlciwgKnR5cGUpOworICAgICAgICBpZiAoIWVm
ZmVjdCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgZnVu
Y3Rpb25zLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorICAgIAorICAg
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZTsKKyAg
ICBkZWNvZGVyID4+IHJlbmRlcmluZ01vZGU7CisgICAgaWYgKCFyZW5kZXJpbmdNb2RlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXZWJDb3JlOjpDU1NGaWx0ZXI6OmNy
ZWF0ZShXVEZNb3ZlKGZ1bmN0aW9ucyksICpyZW5kZXJpbmdNb2RlKTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsdGVyUmVmZXJlbmNlOjplbmNvZGVGaWx0ZXIoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIEVuY29kZXImIGVuY29kZXIpCit7CisgICAgaWYgKGlz
PFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSkKKyAgICAgICAgZW5jb2RlQ1NTRmlsdGVyKGRv
d25jYXN0PFdlYkNvcmU6OkNTU0ZpbHRlcj4oZmlsdGVyKSwgZW5jb2Rlcik7CisgICAgZWxzZQor
ICAgICAgICBlbmNvZGVTVkdGaWx0ZXIoZG93bmNhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVyPihmaWx0
ZXIpLCBlbmNvZGVyKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJD
b3JlOjpGaWx0ZXI+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlRmlsdGVyKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4g
dHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGlmICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6Q1NTRmlsdGVyKQorICAgICAgICByZXR1cm4gZGVjb2RlQ1NTRmlsdGVyKGRlY29kZXIp
OworCisgICAgaWYgKCp0eXBlID09IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdG
aWx0ZXIpCisgICAgICAgIHJldHVybiBkZWNvZGVTVkdGaWx0ZXIoZGVjb2Rlcik7CisgICAgCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZp
bHRlclJlZmVyZW5jZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5j
b2RlRmlsdGVyKG1fZmlsdGVyLCBlbmNvZGVyKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8RmlsdGVyUmVmZXJlbmNlPiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGlmIChhdXRvIGZpbHRlciA9IGRlY29kZUZpbHRl
cihkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkgfTsK
KyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDY1ODRkMWFkN2UxNTRlYjA5
MjAyMzEwZGRmYTZiNWUxMjFhZDJjMzkuLmViNmMyYjcwMTk4MjkyZjFhZGVmYzM1ODQwMzA4OTA4
MjU1ZGY2ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAt
MjY2LDYgKzI2Niw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVk
KCk6CiAgICAgcmV0dXJuIGZyb3plbnNldChbCiAgICAgICAgICdDVlBpeGVsQnVmZmVyUmVmJywK
ICAgICAgICAgJ0lQQzo6RGF0YVJlZmVyZW5jZScsCisgICAgICAgICdJUEM6OkZpbHRlclJlZmVy
ZW5jZScsCiAgICAgICAgICdJUEM6OkZvbnRSZWZlcmVuY2UnLAogICAgICAgICAnSVBDOjpTZW1h
cGhvcmUnLAogICAgICAgICAnTWFjaFNlbmRSaWdodCcsCkBAIC0yOTAsNyArMjkxLDYgQEAgZGVm
IHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNv
cmU6Ok1lZGlhS2V5U3lzdGVtUmVxdWVzdElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
TWVkaWFQbGF5ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhU2Vzc2lvbklk
ZW50aWZpZXInLAotICAgICAgICAnV2ViQ29yZTo6TmF0aXZlSW1hZ2VSZWZlcmVuY2UnLAogICAg
ICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UGxheWJh
Y2tUYXJnZXRDbGllbnRDb250ZXh0SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpQbHVn
aW5Mb2FkQ2xpZW50UG9saWN5JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDY0NmVlNjQ2MTc2ZGNkZTE3NGZkNDdmOTU2ODA5NjQ3OGY0
OTRiMjMuLjk5Y2NlNTRhY2E5MmZkZDRiODA0YzExMzdiN2NhMDIwMTQ5YzJkMzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM0OCw2
ICsxMzQ4LDcgQEAKIAkJNzFCQUE3MzMyNUZGRDA5ODAwRDdDRDVEIC8qIFdLTW9kZWxWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUJBQTczMTI1
RkZDQ0JBMDBEN0NENUQgLyogV0tNb2RlbFZpZXcuaCAqLzsgfTsKIAkJNzFGQjgxMEIyMjYwNjI3
RTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZCODEwQTIy
NjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xp
Y3kuaCAqLzsgfTsKIAkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2Vy
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjhF
ODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLzsgfTsKKwkJNzJF
RTc5QkQyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFRTc5QkEyNzBFNUFCOTAwNENFNDBF
IC8qIEZpbHRlclJlZmVyZW5jZS5oICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUg
LyogV0tXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0
b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk3
NUE4RDJENjE4N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3
RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwogCQk3
NjJCNzQ4RDEyMEJDNzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDg0MTIwQkJB
MkQwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NzY4LDYgKzQ3NjksNyBAQAogCQk3
MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNTMxNTcyNTNDMUU0RDAwNDkyOTVBIC8qIFJl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI1MzE1
ODI1M0MxRTREMDA0OTI5NUEgLyogUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkVFNzlCQTI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlZmVyZW5jZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0
ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0ND
RjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0
YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0
MTgsNiArNzQyMCw3IEBACiAJCQkJQkMwMzJEOUUxMEY0MzdEMTAwNThDMTVBIC8qIERlY29kZXIu
aCAqLywKIAkJCQlCQzAzMkQ5RjEwRjQzN0QxMDA1OEMxNUEgLyogRW5jb2Rlci5jcHAgKi8sCiAJ
CQkJQkMwMzJEQTAxMEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuaCAqLywKKwkJCQk3MkVFNzlC
QTI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggKi8sCiAJCQkJOUJEOEFCNDky
NTgyMEU1MjAwNTM4NkY4IC8qIEZvbnRSZWZlcmVuY2UuaCAqLywKIAkJCQk0MTUxRTVDMzFGQkI5
MEE5MDBFNDdFMkQgLyogRm9ybURhdGFSZWZlcmVuY2UuaCAqLywKIAkJCQlDMENFNzJBQzEyNDdF
NzhEMDBCQzBFQzQgLyogSGFuZGxlTWVzc2FnZS5oICovLApAQCAtMTI0MzYsNiArMTI0MzksNyBA
QAogCQkJCTkzMTJCQUQ2MjZGMzNDMjkwMEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZUhhbmRs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QjU3OUEyNkY1MTkzMzAwOEI0OEFDIC8qIEZpbGVT
eXN0ZW1TdG9yYWdlSGFuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMTJCQUQ1
MjZGMzNDMjYwMEZEREY1RiAvKiBGaWxlU3lzdGVtU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyRUU3OUJEMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTAwQjk2NjFBMThFMjVBRTEwMENFMUY4OCAvKiBGaW5kQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkwQzFGNDEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1OUM0QTU5MThCODExNzQwMDdCRENCNiAv
KiBGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcAppbmRleCA5NDIxZGQyMzhjYjZlYzYz
ZmUxYzA3ZDQ3MzYxY2IwYjY1ZmY0MGNiLi4yNWU0ZWYwNTdhYzhhOGFkNWI0YmVmNDE1NjI1YTBh
Njc0Yzk5ZTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHku
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNs
dWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CkBAIC0yMTQsNiArMjE1LDExIEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucykpOwogfQogCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVm
ZmVyKHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihpbWFnZUlkZW50
aWZpZXIsIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UoUmVmPEZpbHRlcj4g
eyBmaWx0ZXIgfSksIGdlb21ldHJ5KSk7Cit9CisKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7
CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcihvcGFjaXR5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkuaAppbmRleCA3MWZkYjYzZGY0YWM4NDk3NDcyMzI2OWI3ZjAzZDk5N2I4MTM5ODlk
Li5mNzkwZjM3MDU1NjAyMTJkZThjNjkyZjA5OWUwMWFmZmQ4YmUzMDlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKQEAgLTk0LDYgKzk0LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRE
cmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6
OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3
RmlsdGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI+LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
V2ViQ29yZTo6RmlsdGVyJiwgY29uc3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmKSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKICAgICB2b2lkIHJlY29y
ZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggNjkzNGJiNDYxNmNlMDBiZWFiMTQwYmFhOTQxMDli
NmJhOTVmM2MyNC4uMmY1NmFjZTQwZGYwYjkwMjBiMmQzNTY5NDI5MGRlOWMxYjJmZjM5NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTE5Nyw2ICsxOTcsMTQgQEAgcHJvdGVjdGVk
OgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAorICAgIFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZT4gZmlsdGVyZWRJbWFnZShjb25zdCBXZWJDb3JlOjpGaWx0ZXIm
IGZpbHRlciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Z2V0
RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICB9CisKICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlckZv
cm1hdCYgZGVzdGluYXRpb25Gb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cAppbmRleCAyOGJiMjQ0ODE2ODE5M2VlZTdkY2FjZWIzODFhOGYzZGUwOGRhMWFmLi5jMGEyMjY2
NDhmZDM0NmIwNDQ2NGJmYzFhYzAzYTY3ODVhYmNiYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCiAKKyNpbmNsdWRlICJGaWx0ZXJSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgpAQCAtMjIzLDYgKzIyNCwyMiBAQCBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldFNo
YXJlYWJsZUJpdG1hcChSZW5kZXJpbgogICAgIHJldHVybiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOwogfQogCitSZWZQdHI8SW1hZ2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpbWFnZUJ1ZmZlciwgY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21l
dHJ5JiBnZW9tZXRyeSkKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Cisg
ICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OkdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgSVBDOjpG
aWx0ZXJSZWZlcmVuY2UgeyBSZWY8RmlsdGVyPiB7IGNvbnN0X2Nhc3Q8RmlsdGVyJj4oZmlsdGVy
KSB9IH0sIGdlb21ldHJ5KSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldEZp
bHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcjo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgMV9zKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNlbmRSZXN1bHQsIHNlbmRS
ZXN1bHQpOworCisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7
CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJu
IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKK30KKwogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNhY2hlTmF0aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhh
bmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKIHsKICAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkNhY2hlTmF0aXZlSW1hZ2UoaGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IDY0YmI5MjY3ZmU2
YjMzNDk2YjMzZmU1NzBkOWE3MWVhY2E1NTRjY2YuLmUwZGY2MzZjZTBkODNlMDMyNDcyZjViNDQz
ZjE2ZWY3Y2FhMDQxMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApA
QCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAi
RmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNp
bmNsdWRlICJHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIklQ
Q1NlbWFwaG9yZS5oIgpAQCAtOTMsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldERh
dGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFZlY3Rvcjx1aW50OF90PiBnZXREYXRh
Rm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZ2V0U2hhcmVhYmxlQml0bWFwKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGdldEZpbHRlcmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZpbHRl
ciYsIGNvbnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5Jik7CiAgICAgdm9pZCBjYWNoZU5hdGl2
ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGNhY2hlRm9udChSZWY8V2ViQ29yZTo6Rm9u
dD4mJik7CiAgICAgdm9pZCBkZWxldGVBbGxGb250cygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442466</attachid>
            <date>2021-10-25 23:06:01 -0700</date>
            <delta_ts>2021-12-10 12:10:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231253-20211025230600.patch</filename>
            <type>text/plain</type>
            <size>1007670</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIxNTA4ZWVkN2ExM2Rm
OWU0M2NiMDIwZDg0MzVkY2FmMGQ0YjY0Yi4uYzE5OWIwMWZlYzU4ZGQxMWU2YWQ0NTA0NWNhOThl
NTlhN2IyNTIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjEtMTAtMjUgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBFbmFibGUgZmlsdGVycyBpbiBHUFUgUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMjUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpyZWxlYXNlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUltYWdlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFwcGx5Q29yZUltYWdlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRkVDb21wb25lbnRU
cmFuc2ZlckNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBseUNvcmVJbWFnZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUltYWdlOjpp
bWFnZSBjb25zdCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzaGFyZWRDSUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VD
b3JlSW1hZ2U6OnNldEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlQ29yZUlt
YWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdl
Q29yZUltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OkRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRl
ckltYWdlQnVmZmVyOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmltYWdlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZpbHRlckltYWdlQnVmZmVyOjpzb3VyY2VJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OkZFQmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnNldEJsZW5kTW9kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6c2V0QmxlbmRNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQmxlbmQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6YmxlbmRNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9y
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0
YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpzZXRUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2F0dXJh
dGVBbmRIdWVSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bHVtaW5hbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6c2V0Q29sb3JNYXRyaXhUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnNldFZhbHVlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnR5cGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6dmFsdWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxvb2t1cFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cmVkRnVuY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6Z3JlZW5GdW5jdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpibHVlRnVuY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YWxwaGFGdW5jdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
RkVDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6dGFrZUlucHV0
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlOjpzZXRLMik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZTo6c2V0SzMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNl
dEs0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGlj
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpzZXRDb21wb3NpdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZTo6c2V0SzEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnNldEsyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpzZXRLMyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6c2V0SzQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpvcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmsxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjprMiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6azMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6Oms0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVN
YXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEJpYXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0VGFyZ2V0T2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0UHJl
c2VydmVBbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0
UGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjpmYXN0U2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0RGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRCaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OnNldFRhcmdldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpzZXRFZGdlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0S2VybmVsTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6a2VybmVs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
OjprZXJuZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1h
dHJpeDo6ZGl2aXNvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpiaWFzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnRhcmdldE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjplZGdlTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVuZ3RoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnByZXNlcnZlQWxwaGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRp
bmc6OnNldERpZmZ1c2VDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aWZmdXNlTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFu
bmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRN
YXA6OnNldFlDaGFubmVsU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpzZXRY
Q2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRZQ2hhbm5lbFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFw
OjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5u
ZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNo
YW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsU2VsZWN0
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnlDaGFubmVsU2VsZWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZF
RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZU91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojp0YWtlSW5w
dXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRHJvcFNoYWRvdzo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNldFN0ZERldmlhdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnNldER5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6c2V0U2hhZG93Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93Ojpz
dGREZXZpYXRpb25YIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvdzo6c3RkRGV2aWF0aW9uWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OmR4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6ZHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURy
b3BTaGFkb3c6OnNoYWRvd09wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnNldEZsb29kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Zmxvb2RDb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpmbG9vZE9wYWNpdHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2F1c3NpYW5LZXJuZWxGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRv
S2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXI6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChnYXVzc2lhbktlcm5l
bEZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9u
WCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFjY2VsZXJhdGVCb3hCbHVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnN0YW5kYXJkQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6Om91
dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRT
dGREZXZpYXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpzZXRFZGdl
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnN0ZERldmlhdGlvblkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmVkZ2VNb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnRha2VJbnB1dHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0U3VyZmFjZVNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldExpZ2h0aW5nQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExl
bmd0aFgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6c2V0S2VybmVs
VW5pdExlbmd0aFkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFN1cmZhY2VTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldEtlcm5lbFVuaXRMZW5ndGhYKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNl
dEtlcm5lbFVuaXRMZW5ndGhZKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNvdXJj
ZSBjb25zdCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6c3VyZmFjZVNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OmxpZ2h0aW5nQ29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6a2VybmVsVW5pdExlbmd0aFkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6bGlnaHRTb3VyY2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0
Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93
OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6
OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmRlY29kZSk6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xv
Z3lPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnNl
dFJhZGl1c1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRS
YWRpdXNZKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGl4ZWxB
cnJheUluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUGl4ZWxW
YWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWlu
T3JNYXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0cmVtdW0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldE1vcnBob2xvZ3lPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnNldFJhZGl1c1gpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZ
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cmFkaXVzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnJhZGl1c1kgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6aXNBbHBoYUltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpzZXREeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6c2V0RHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
T2Zmc2V0OjpzZXREeCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6c2V0RHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRU9mZnNldDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkeCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRp
bmc6OkZFU3BlY3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJFeHBvbmVudCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6c3BlY3VsYXJD
b25zdGFudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGln
aHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGls
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVGlsZTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VGlsZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
RkVUdXJidWxlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRC
YXNlRnJlcXVlbmN5WSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldEJhc2VGcmVxdWVuY3lYKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6c2V0U2VlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6
OnNldE51bU9jdGF2ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNt
b290aEN1cnZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0UGFpbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNo
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9p
c2UyRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0VHVyYnVsZW5jZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzZXRCYXNlRnJlcXVlbmN5WCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lZKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0TnVtT2N0YXZlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2U6OnNldFNlZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpzZXRTdGl0Y2hUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpiYXNlRnJlcXVlbmN5WCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmJhc2VGcmVxdWVuY3lZIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2VlZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om51bU9jdGF2ZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpzdGl0Y2hUaWxlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OlBhaW50aW5n
RGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZW5kZXJpbmdN
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZXNvbHV0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0UmVuZGVyaW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
Qm91bmRhcnlTZXQ6OkZpbHRlckJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5
U2V0Ojp5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmRlY29kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1
dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xl
YXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
QnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRv
RGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5w
dXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFz
UmVzdWx0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SXNBbHBoYUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6YWJzb2x1dGVQYWludFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZm
ZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpoYXNYIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
c2V0SGFzWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZ
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hl
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJz
b2x1dGVTdWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1h
bGl6ZWRGbG9hdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpy
ZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjp0
eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0NTU0ZpbHRl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNTVkdGaWx0ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlckVmZmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlQWxwaGFOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VHcmFwaGljTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNhbGN1bGF0ZU91dHNl
dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2Vv
bWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpGaWx0
ZXJHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6Y2FsY3VsYXRl
RmlsdGVyU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJ
bWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6Om1hcElt
YWdlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6bWFwUmVz
b2x2ZWRJbWFnZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6
Om1hcEltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6
Ym91bmRhcnlTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OmNs
aXBUb0ZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyR2VvbWV0cnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZmlsdGVyUmVnaW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5OjpmaWx0ZXJTY2FsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckdlb21ldHJ5OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRl
ckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6cmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlclJlc3VsdDo6RmlsdGVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJl
c3VsdDo6Y3JlYXRlRmlsdGVySW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVzdWx0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6
aW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclJlc3VsdDo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGlu
Z0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OmVmZmVjdE5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291
cmNlR3JhcGhpYyk6IERlbGV0ZWQuCisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmFwcGx5U29mdHdhcmUgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Om1hdHJp
eCk6CisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpsdW1pbmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyOjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsYW1wQnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCk6CisgICAgICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAo
V2ViQ29yZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb3NpdGU6OmFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjphcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4
U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBS
R0JBVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SW50ZXJpb3JQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRPdXRlclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjphcHBseVNvZnR3YXJlIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJv
cFNoYWRvd1NvZnR3YXJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFk
b3c6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oLgorICAg
ICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJl
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6YWNjZWxlcmF0ZUJveEJsdXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhbmRhcmRCb3hCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmFwcGx5U29m
dHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpwaXhlbEFycmF5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjptaW5Pck1heCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRy
ZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oLgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmFwcGx5U29mdHdhcmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdh
cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHlTb2Z0d2FyZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlR1
cmJ1bGVuY2VQYWludGluZ0RhdGE6OlR1cmJ1bGVuY2VQYWludGluZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VHVyYnVsZW5jZVBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OnNtb290aEN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6aW5pdFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bm9pc2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlU29mdHdh
cmU6OkZpbHRlckltYWdlU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2VT
b2Z0d2FyZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oLgor
ICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0xpZ2h0aW5nRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2lu
ZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpsZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojpib3R0b21MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWxwaGFXaW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
bHBoYVdpbmRvdzo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93
OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBbHBoYVdp
bmRvdzo6c2V0UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkFscGhhV2luZG93OjpzaGlmdFJvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGln
aHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0
aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaWdodGlu
Z0RhdGE6OmJvdHRvbUxlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlnaHRp
bmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHlTb2Z0d2FyZSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmguCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjph
cHBseVNvZnR3YXJlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRG
dW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNhbGN1bGF0
ZU91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJG
aWx0ZXJzOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0
aXZlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdS
ZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQmxlbmRFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6ZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lETEVudW1MaW1p
dHM8RkVDb21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+Ojp0b1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGRUNvbXBvc2l0ZU9w
ZXJhdG9yPjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJRExFbnVtTGltaXRz
PENvbXBvc2l0ZU9wZXJhdGlvblR5cGU+OjpoaWdoZXN0RXhwb3NlZEVudW1WYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRp
b25UeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPjo6dG9TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0
aW9uVHlwZT46OmZyb21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6Zmls
dGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RB
dHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Ojps
aWdodFNvdXJjZSBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQu
aDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
SW1hZ2VFbGVtZW50OjppbWFnZUJ1ZmZlckZvckVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVMaWdodEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVN
ZXJnZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VFbGVtZW50
OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpmaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj46OmZyb21TdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlw
ZT46OmhpZ2hlc3RFbnVtVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OnRvU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1
aWxkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
aGFzRmlsdGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6ZmlsdGVyRWZmZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICogc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSk6Cisg
ICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpkZWNvZGUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmFwcGx5U29mdHdhcmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjppbmRleGVkRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c291cmNlR3JhcGhpYyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGROYW1lZEVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpuYW1lZEVmZmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVm
ZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpj
bGVhckVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpzZXRUYXJnZXRCb3VuZGluZ0JveCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjp0YXJnZXRCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpwcmltaXRpdmVVbml0cyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpzZXRQcmlt
aXRpdmVVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpsYXN0RWZmZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
ckJ1aWxkZXI6OmVmZmVjdFJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0QnlSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckV4cHJlc3Npb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaWRsLgorCiAyMDIxLTEwLTI1ICBaaXJhbiBTdW4gIDx6c3VuQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW2Nzcy13cml0aW5nLW1vZGVzXSBGaXggc2l6aW5nIG9mIG9ydGhv
Z29uYWwgZWxlbWVudHMgd2l0aCBwZXJjZW50YWdlIG1hcmdpbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZTJiNTBi
NzBhZGYyNWFmN2E0Mzk2MzJmMmFjZGNhYTQ1YjAxOGViZS4uNmVmNjBkYzM3ZGFkZmY1ZDNmZWQ5
NWNiODhjZWJlOTdmN2RhNDJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAyMS0xMC0y
NSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFBy
b2Nlc3NdIEVuYWJsZSBmaWx0ZXJzIGluIEdQVSBQcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEyNTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEZpbHRlcmVkSW1hZ2VG
b3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6RmlsdGVy
UmVmZXJlbmNlKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjp0YWtlRmlsdGVyKToK
KyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNvZGVGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlckVmZmVjdCk6CisgICAgICAg
IChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlU1ZHRmlsdGVyKToKKyAgICAgICAgKElQQzo6
RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVTVkdGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJS
ZWZlcmVuY2U6OmVuY29kZUNTU0ZpbHRlcik6CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5j
ZTo6ZGVjb2RlQ1NTRmlsdGVyKToKKyAgICAgICAgKElQQzo6RmlsdGVyUmVmZXJlbmNlOjplbmNv
ZGVGaWx0ZXIpOgorICAgICAgICAoSVBDOjpGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlcik6
CisgICAgICAgIChJUEM6OkZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KElQQzo6RmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5OgorICAgICAgICAodHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNs
YXJlZCk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RmlsdGVySW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRl
cmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisKIDIwMjEtMTAtMjQgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCBzaG91bGQgbm90IHNlbmQgSVBDIGluIHRoZSBtaWRkbGUgb2YgZGVzdHJ1Y3Rpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDY1ZThlODVkMDQyMmNkNDMyNWEwNjNkMGNhMzM0N2I0MjFk
MzcxYzcuLjI3Nzk0NzhiMzFhZmM4YzgwYzc4MzgzM2QwMGZlYjE5Njg4OWZiNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtMTQxOSw4ICsxNDE5LDMwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyQm91bmRhcnlTZXQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0VmVjdG9yLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9u
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlVmVjdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJl
cHJlc2VudGF0aW9uLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvaXNvL0lTT09yaWdpbmFsRm9ybWF0Qm94LmgKQEAgLTE1OTAsNiArMTYxMiw3IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbHVnaW5zL25wdHlw
ZXMuaAogCiAgICAgcmVuZGVyaW5nL0JyZWFrTGluZXMuaAorICAgIHJlbmRlcmluZy9DU1NGaWx0
ZXIuaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCiAgICAgcmVuZGVyaW5nL0V2ZW50UmVnaW9u
LmgKICAgICByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgKQEAgLTE3MzAsMTIgKzE3NTMsMTcg
QEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHN2Zy9TVkdMZW5n
dGhWYWx1ZS5oCiAgICAgc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCiAgICAgc3ZnL1NWR1BhcnNp
bmdFcnJvci5oCisgICAgc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZS5oCiAgICAgc3Zn
L1NWR1N0cmluZ0xpc3QuaAogICAgIHN2Zy9TVkdUZXN0cy5oCiAgICAgc3ZnL1NWR1VuaXRUeXBl
cy5oCiAKICAgICBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDYWNoZS5oCiAKKyAgICBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaAorICAgIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaAorCiAg
ICAgc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJpbWl0
aXZlTGlzdC5oCiAgICAgc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHkuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCA0YmVhMTRmNDRmYmY1MjExOTBmNjMzYWI2NzMwNjkxMjMzYTU1YmY0Li43NTQ5MDI1ZDU5
MWNkNGQ3YTYyM2JiOGEwODY1YmY4MGE1YTlhYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA0NSw3
ICsyMDQ1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9Jbk1lbW9yeURpc3Bs
YXlMaXN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2Uu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0yMDYzLDE0ICsyMDYzLDM3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21ldHJ5LmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJSZXN1bHQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Qb2ludExpZ2h0U291cmNlRGF0YS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
Ci1wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVGbG9vZFNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRmlsdGVySW1hZ2VTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZS5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09PcmlnaW5h
bEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90ZWN0aW9uU2NoZW1l
SW5mb0JveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDdlZWVhYmJhZDM1OGFiZmJj
OGM3N2MzMjRkMWU4ZTViNTg3OTY5ZGIuLjEzYTJlY2Q3NWQ4ZjBkNDQ5NTgzZTI2OGJhYTQyY2Mz
YTlhYTE1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtNDAxLDcgKzQwMSwxMCBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9jdi9DVlV0aWxpdGllcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZm
ZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZFQ29sb3JNYXRy
aXhDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRy
YW5zZmVyQ29yZUltYWdlLm1tCitwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1h
Z2VDb3JlSW1hZ2UubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGlj
Q29yZUltYWdlLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmI2NGI5YWIwODE0ZmJlM2YzNzk0
ZTQ5YWEyNzdiMTAzYTk0OTM0MS4uZjFjZmZlOTY0NDUwNTZkMWZmMGQ2YjAzMjI0MzkxZGNhODlj
ZWU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjM4LDcgKzIzOCw2IEBACiAJCTA4MTY2OEQ0MTI1NjAzQkYwMDZGMjVERSAv
KiBTVkdUZXh0Q2h1bmtCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODE2NjhEMjEyNTYwM0JGMDA2RjI1REUgLyogU1ZHVGV4dENodW5rQnVp
bGRlci5oICovOyB9OwogCQkwODE2NjhEQTEyNTYwM0Q1MDA2RjI1REUgLyogU1ZHVGV4dExheW91
dEVuZ2luZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAqLzsgfTsK
IAkJMDgxQUE4REExMTExMjM3RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxQUE4RDkxMTExMjM3
RTAwMkFCMDZFIC8qIFNWR0VsZW1lbnRSYXJlRGF0YS5oICovOyB9OwotCQkwODFFQkYzQjBGRDM0
RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0Zp
bHRlckJ1aWxkZXIuaCAqLzsgfTsKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTkwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oICovOyB9OwogCQkwODQ1NjgwODEyQjkwREE2MDA5NjBBOUYgLyogRm9u
dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NDU2ODA3MTJCOTBEQTYwMDk2MEE5RiAvKiBGb250TWV0cmljcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODEsOCArNzgwLDYgQEAKIAkJ
MkFFRjZGREQyNkU3RUNDRjAwMzI2RDAyIC8qIENTU051bWVyaWNUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUVGNkZDRTI2RTcxRjJEMDAzMjZE
MDIgLyogQ1NTTnVtZXJpY1R5cGUuaCAqLzsgfTsKIAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdC
IC8qIFJlbmRlclNWR0VsbGlwc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJCNDIzNUEwMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNl
LmggKi87IH07CiAJCTJCRThFMkM3MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQ
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJC
RThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsK
LQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQzg1NjUzMzI0QzBG
NzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLzsgfTsKLQkJMkNBQTRBM0Ey
NEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0FBNEEzOTI0QkUxOEI3
MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCAqLzsgfTsKIAkJMkQw
NjIxNDQxREE2MzlCNjAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMDYyMTQyMURB
NjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJ
CTJEMDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDMx
REE2Mzk4ODAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5TWVzc2FnZUV2ZW50LmggKi87IH07CiAJ
CTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQwNjIxNDkxREE2M0E3OTAw
QTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgKi87IH07CkBAIC0xMjQ0LDcgKzEyNDEsNyBA
QAogCQk0MzEwN0JFMjE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzEwN0JFMTE4
Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggKi87IH07CiAJCTQzMkQz
RkU4MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzJEM0ZFNzE4QTg2
NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oICovOyB9OwogCQk0
MzU4RTg3RDEzNjBBMkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg3QjEzNjBB
MkVFMDBFNDc0OEMgLyogSlNTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggKi87IH07Ci0JCTQzNThF
ODgxMTM2MEEzMTcwMEU0NzQ4QyAvKiBGRURyb3BTaGFkb3cuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNThFODdGMTM2MEEzMTcwMEU0NzQ4QyAvKiBG
RURyb3BTaGFkb3cuaCAqLzsgfTsKKwkJNDM1OEU4ODExMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJv
cFNoYWRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM1OEU4N0YxMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQzNThFODg2MTM2MEEzM0IwMEU0
NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzU4RTg4MzEzNjBBMzNCMDBFNDc0OEMgLyogU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oICovOyB9OwogCQk0MzY3MDhDMTEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzNjcwODgyMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oICovOyB9
OwogCQk0MzY3MDhDMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4NDEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi87IH07CkBAIC0yMzA2LDExICsy
MzAzLDI1IEBACiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1
M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBO
YXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI3QTdGM0EyNDA3OEI4NDAw
NEQyOTMxIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOTU5MTZGMjcyMEVCODcwMDM2OTk5MyAvKiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDOEYyMjQ2MUREM0QxQzUwMEU5MkRBMyAvKiBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5
OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZB
NTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmlu
Z01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjlEMDUzMDI1MzE0MjQzMDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlEMDUy
RTI1MzEzRTI2MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJBNzNCRUYyNDVB
M0Y5MDAwMUM5RDAzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFu
aW1hdGlvbkZyYW1lUmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQUE0NkMzMjcxNDM0NDcwMDNFODhDNCAvKiBGaWx0ZXJHZW9tZXRyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNEODMy
NzA2Njc0QzAwM0M1QUFFIC8qIEZpbHRlckdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzUyNzE0MzUyMzAwM0U4OEM0IC8q
IEZpbHRlckJvdW5kYXJ5U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkFBNDZDNDI3MTQzNTA1MDAzRTg4QzQgLyogRmlsdGVyQm91bmRhcnlTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZDNjI3MTQzNUZEMDAzRTg4QzQgLyogRmlsdGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAv
KiBGaWx0ZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyQUE0NkM3MjcxNDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJB
QTQ2QkQyNzE0MzBCMTAwM0U4OEM0IC8qIEZpbHRlclJlcHJlc2VudGF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2QzgyNzE0Mzcz
MzAwM0U4OEM0IC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkM5MEEzQTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFB
NDZDOTI3MTQzN0QxMDAzRTg4QzQgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJB
QTQ2Q0EyNzE0MzkwMTAwM0U4OEM0IC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBODNENkQyNzAzREMzQTAwM0M1QUFFIC8qIENT
U0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTcyQUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJCMjcxNDMw
QjAwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFBNDZDQzI3MTQzOUQ5MDAzRTg4QzQgLyog
U1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQTQ2Q0QyNzE0MzlFNTAwM0U4
OEM0IC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUE0NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJF
eHByZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzJBQTQ2RDQyNzE0RjE4RTAwM0U4OEM0IC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBNDZCNDI3MTQy
Q0VCMDAzRTg4QzQgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJD
NTc0ODYyNzIzRUM1RTAwMUVDOTVDIC8qIExpZ2h0U291cmNlRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDNTc0ODUyNzIzQzU1NjAwMUVDOTVD
IC8qIExpZ2h0U291cmNlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyRUJDN0REMjcxMTNEMzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJGNjY3RTEyNjBDMjZBQzAwRUUzNkFEIC8qIERpYWdub3N0
aWNMb2dnaW5nRG9tYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkY2NjdERjI2MEMyNjQ0MDBFRTM2QUQgLyogRGlhZ25vc3RpY0xvZ2dpbmdEb21h
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQw
Q0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuaCAqLzsgfTsKQEAgLTI3MTMsMzYgKzI3MjQsMzQgQEAKIAkJODQyMjQxOTQxMDdFNzhB
NzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MjI0MTkxMTA3RTc4QTcwMDc2NkE4NyAvKiBT
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmggKi87IH07CiAJCTg0MzAwQkQ2MTIwQzlBQUMwMDIxOTU0
QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDMwMEJENTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oICovOyB9OwogCQk4NDMwMEJEODEyMEM5QUQ0MDAyMTk1NEEgLyogU1ZHUGF0aFNv
dXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQz
MDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCAqLzsgfTsKLQkJODQ1RTcy
RjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5o
ICovOyB9OwotCQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDVFNzJGQTBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmggKi87IH07CiAJCTg0NjUwRTdFMjM4N0FEN0QwMDYyNjZF
MiAvKiBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDY1MEU3QzIzODdBRDdDMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxp
c3RFdmVudC5oICovOyB9OwotCQk4NDczMEQ3NzEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExp
Z2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi87IH07
Ci0JCTg0NzMwRDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIz
MDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5oICovOyB9OwotCQk4NDczMEQ3QjEyNDhGMEIz
MDBEM0E5QzkgLyogRkVEaWZmdXNlTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDVFMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1
c2VMaWdodGluZy5oICovOyB9OwotCQk4NDczMEQ3RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNw
bGFjZW1lbnRNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0NzMwRDYwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpc3BsYWNlbWVudE1hcC5oICovOyB9
OwotCQk4NDczMEQ3RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRmxvb2QuaCAqLzsgfTsKLQkJODQ3MzBEODExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTGln
aHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzMwRDY0MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggKi87IH07Ci0JCTg0NzMwRDgz
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1lcmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2NjEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5o
ICovOyB9OwotCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2ODEyNDhG
MEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IH07Ci0JCTg0NzMwRDg3MTI0OEYwQjMw
MEQzQTlDOSAvKiBGRU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODQ3MzBENkExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFT2Zmc2V0LmggKi87IH07
Ci0JCTg0NzMwRDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDZDMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCAqLzsgfTsKLQkJODQ3MzBEOEIxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oICovOyB9
OwotCQk4NDczMEQ4RDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3MDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi87IH07Ci0JCTg0NzMwRDkxMTI0OEYwQjMwMEQzQTlD
OSAvKiBMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODQ3MzBENzQxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi87IH07
Ci0JCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NTEyNDhGMEIz
MDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oICovOyB9OwotCQk4NDczMEQ5MzEyNDhGMEIz
MDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ3NjEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0
U291cmNlLmggKi87IH07CisJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAvKiBEaXN0YW50TGln
aHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMw
RDc5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ1QzEyNDhGMEIzMDBEM0E5Qzkg
LyogRkVDb252b2x2ZU1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTg0NzMwRDdCMTI0OEYwQjMwMEQzQTlDOSAvKiBGRURpZmZ1c2VMaWdo
dGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3
MzBENUUxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFRGlmZnVzZUxpZ2h0aW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEN0QxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFRGlzcGxhY2VtZW50TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVEaXNwbGFj
ZW1lbnRNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk4NDczMEQ3RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVGbG9vZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjIxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFRmxvb2QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk4NDczMEQ4MTEyNDhGMEIzMDBEM0E5QzkgLyogRkVMaWdodGluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjQxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFTGlnaHRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk4NDczMEQ4MzEyNDhGMEIzMDBEM0E5QzkgLyogRkVNZXJnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENjYxMjQ4
RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4NTEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9s
b2d5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDcz
MEQ2ODEyNDhGMEIzMDBEM0E5QzkgLyogRkVNb3JwaG9sb2d5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJODQ3MzBEODcxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NDczMEQ2QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVPZmZzZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ4OTEyNDhGMEIzMDBE
M0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NDczMEQ2QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxh
ckxpZ2h0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJODQ3MzBEOEIxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ3MzBENkUxMjQ4RjBCMzAwRDNBOUM5
IC8qIEZFVGlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTg0NzMwRDhEMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDcwMTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk4NDczMEQ5MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMw
RDc0MTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAv
KiBQb2ludExpZ2h0U291cmNlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3Vy
Y2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0NzMwRDc2MTI0OEYw
QjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODQ3NkM5RTYxMURGNkEwQjAwNTU1QjAyIC8q
IFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ3NkM5RTQxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0
QnVpbGRlci5oICovOyB9OwogCQk4NDc2QzlFQjExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0
NzZDOUU4MTFERjZBMjkwMDU1NUIwMiAvKiBTVkdQYXRoQnVpbGRlci5oICovOyB9OwogCQk4NDc2
QzlFQzExREY2QTI5MDA1NTVCMDIgLyogU1ZHUGF0aENvbnN1bWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDc2QzlFOTExREY2QTI5MDA1NTVCMDIg
LyogU1ZHUGF0aENvbnN1bWVyLmggKi87IH07CiAJCTg0NzZDOUYwMTFERjZBNTgwMDU1NUIwMiAv
KiBTVkdQYXRoUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NDc2QzlFRTExREY2QTU4MDA1NTVCMDIgLyogU1ZHUGF0aFBhcnNlci5oICovOyB9
OwotCQk4NDgwMTk1NTEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUzMTA4QkFGQjMw
MENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1ci5oICovOyB9OworCQk4NDgwMTk1NTEwOEJBRkIzMDBD
QjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg0ODAxOTUzMTA4QkFGQjMwMENCMkIxRiAvKiBGRUdhdXNzaWFuQmx1
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg0
ODJCNzQ2MTE5OEMzNTQwMEJGQjAwNSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2
OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJODQ4MkI3NTIxMTk4Q0I2QjAwQkZCMDA1
IC8qIEpTSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDgyQjc1MDExOThDQjZCMDBCRkIwMDUgLyogSlNIYXNoQ2hhbmdlRXZl
bnQuaCAqLzsgfTsKIAkJODQ4NTIyN0MxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHSEtlcm5FbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1
MjI3ODExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdIS2VybkVsZW1lbnQuaCAqLzsgfTsKIAkJODQ4
NTIyN0UxMTkwMTYyQzAwNkVEQzdGIC8qIEpTU1ZHVktlcm5FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg1MjI3QTExOTAxNjJDMDA2RURD
N0YgLyogSlNTVkdWS2VybkVsZW1lbnQuaCAqLzsgfTsKIAkJODQ4NTIyOEIxMTkwMTczQzAwNkVE
QzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODQ4NTIyODgxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVu
dC5oICovOyB9OwogCQk4NEE4MUYzRTBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNDMEZD
N0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICovOyB9OwotCQk4NEE4MUY0MjBGQzdFMDI3
MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODRBODFGNDAwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBo
aWMuaCAqLzsgfTsKKwkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjQw
MEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODRCMzQ5QTIyMkY4NkU3NTAwRDQ3QkNGIC8q
IEV2ZW50VGFyZ2V0Q29uY3JldGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0QjM0OUEwMjJGODZFNzQwMEQ0N0JDRiAvKiBFdmVudFRhcmdldENvbmNy
ZXRlLmggKi87IH07CiAJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlz
dFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi87IH07
CiAJCTg0QzVCMkZCMTIxNkRDODEwMDg4QjUzQSAvKiBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEM1
QjJGOTEyMTZEQzgxMDA4OEI1M0EgLyogU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oICov
OyB9OwpAQCAtMzUwMywxMCArMzUxMiwxMCBAQAogCQlBNzQwQjVBNTE0QzkzNUFCMDBBNzdGQTQg
LyogSlNJbnRlcm5hbFNldHRpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0I0RUE3OTE0QzkzNDg0MDBDOEY1QkYgLyogSlNJbnRlcm5hbFNldHRp
bmdzLmggKi87IH07CiAJCUE3NDBCNUE3MTRDOTM1QUYwMEE3N0ZBNCAvKiBKU0ludGVybmFsU2V0
dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdCNEVBNzgxNEM5MzQ4NDAwQzhGNUJGIC8qIEpTSW50ZXJuYWxTZXR0aW5ncy5jcHAgKi87IH07
CiAJCUE3NUU0OTc2MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU0OTc0MTA3
NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzVFOEI4OTBFMURFMkQ2MDA3RjI0
ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgfTsKLQkJQTc1
RThCOEIwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4QjgzMEUxREUyRDYwMDdGMjQ4MSAv
KiBGRUNvbG9yTWF0cml4LmggKi87IH07Ci0JCUE3NUU4QjhEMEUxREUyRDYwMDdGMjQ4MSAvKiBG
RUNvbXBvbmVudFRyYW5zZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzVFOEI4NTBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zl
ci5oICovOyB9OwotCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb3NpdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg3MEUx
REUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyB9OworCQlBNzVFOEI4OTBFMURFMkQ2
MDA3RjI0ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTc1RThCODEwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4QjBFMURF
MkQ2MDA3RjI0ODEgLyogRkVDb2xvck1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODMwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JN
YXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODUwRTFERTJE
NjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3NUU4Qjg3MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkU1RjdGMTM1RTBEQ0Yw
MEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZFNUY3RTEzNUUwRENGMDBBNjk4MzcgLyogUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTE0MEQ2
QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFn
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
Nzk3OTI1MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oICovOyB9OwpAQCAtMzg2MCw3
ICszODY5LDcgQEAKIAkJQjIyMkY2OUQwQUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMkY2OUIw
QUI3NzFCODAwMjJFRkFEIC8qIEpTU1ZHRWxlbWVudC5oICovOyB9OwogCQlCMjIzNjIyOTBDM0FG
MDRBMDAwOENBOUIgLyogSlNTVkdUZXh0UGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMjM2MjI3MEMzQUYwNEEwMDA4Q0E5QiAvKiBK
U1NWR1RleHRQYXRoRWxlbWVudC5oICovOyB9OwogCQlCMjM1NDBGMzBEMDA3ODJFMDAyMzgyRkEg
LyogU3RyaW5nVHJ1bmNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjM1NDBGMTBEMDA3ODJFMDAyMzgyRkEgLyogU3RyaW5nVHJ1bmNhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjI1NTk5
ODUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OEVCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdG
RUltYWdlLmggKi87IH07CisJCUIyNTU5OTg1MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdGRUltYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OThF
QjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNTU5OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBT
VkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI1NTk5QTUwRDAwRDhCQTAwQkI4MjVD
IC8qIEVtcHR5Q2xpZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTY1MEIw
NTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERG
RG9jdW1lbnRJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC02MTIxLDggKzYxMzAsNiBAQAogCQkwODE2NjhENzEyNTYwM0Q1MDA2RjI1REUg
LyogU1ZHVGV4dExheW91dEVuZ2luZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDgxNjY4RDgxMjU2MDNENTAwNkYyNURFIC8qIFNWR1RleHRMYXlvdXRFbmdpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODFBQThEOTExMTEyMzdFMDAyQUIwNkUgLyog
U1ZHRWxlbWVudFJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0VsZW1lbnRSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODFFQkYz
ODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGaWx0ZXJCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyQnVpbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMjBGMDFBN0ZCMDAzNDI3
NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3MSw4
ICs2Mjc4LDYgQEAKIAkJMEY0OTY2QTgxREI0MEM0MzAwQTI3NEJCIC8qIEpTRE9NUG9pbnRSZWFk
T25seS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVBvaW50
UmVhZE9ubHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5NjZBOTFEQjQw
QzQzMDBBMjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRE9NUG9pbnRSZWFkT25seS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4NDIxM0I3
ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03MzgxLDEwICs3Mzg2LDYgQEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8q
IFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEy
QTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDODU2
NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyQ0FBNEEzNzI0QkUxOEExMDA5REVFNzAgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNBQTRB
MzkyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMDYyMTQyMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRp
YUtleU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEMDYyMTQzMURBNjM5ODgwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRNZWRpYUtleU1l
c3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDA2MjE0NzFEQTYz
QTc5MDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlOZWVkZWRFdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTgwLDkgKzEwNTgxLDUzIEBACiAJCTcy
N0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5
NzhENDMyNkZFOURFNzAwRkQyQzU2IC8qIEZpbHRlclJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXJSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOUMwOUVE
MjcyMjhBMjEwMEJFODgzOCAvKiBGaWx0ZXJHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGaWx0ZXJHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQw
NTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDY2MjcwM0Q2NkQwMDNDNUFBRSAvKiBGaWx0ZXJGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVBQUUgLyogU1ZHRmlsdGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZCMjcwM0RBOUEwMDNDNUFBRSAvKiBTVkdGaWx0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDZDMjcwM0RDM0EwMDNDNUFBRSAvKiBDU1NGaWx0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkQyNzAzREMzQTAwM0M1QUFF
IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENkUyNzAzREZEODAwM0M1
QUFFIC8qIEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNl
R3JhcGhpY1NvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDcxMjcwNTc4NTIw
MDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNv
dXJjZUFscGhhU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3MjI3MDU3OUM3MDAzQzVBQUUgLyogRkVPZmZzZXRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBODNENzMyNzA1N0NCRTAwM0M1QUFFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNENzQyNzA1ODM3RDAwM0M1QUFFIC8qIEZFTWVyZ2VTb2Z0
d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29mdHdhcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q3NTI3MDU4NUI4MDAzQzVBQUUgLyogRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDc2MjcwNTg5MDIw
MDNDNUFBRSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
Q29tcG9zaXRlU29mdHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4
M0Q3ODI3MDU4QzAzMDAzQzVBQUUgLyogRkVGbG9vZFNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZFRmxvb2RTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDdBMjcwNUFERkEwMDNDNUFBRSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0IyNzA1QjJDOTAwM0M1QUFFIC8q
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdD
MjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBODNEN0QyNzA1QzdFRjAwM0M1QUFFIC8qIEZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTgzRDdFMjcwNjMzNkIw
MDNDNUFBRSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
RURyb3BTaGFkb3dTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QTgzRDdGMjcwNjNGNEMwMDNDNUFBRSAvKiBGRVRpbGVTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRVRpbGVTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQTgzRDgwMjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTgzRDgxMjcwNjQ2RTIwMDNDNUFBRSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBODNEODIyNzA2NTExQjAwM0M1QUFFIC8qIEZF
QmxlbmRTb2Z0d2FyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUg
LyogRmlsdGVyR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyR2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QjQyNzE0MkNFQjAwM0U4OEM0IC8qIEZp
bHRlckltYWdlVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI2MjcxNDJGMzcwMDNFODhDNCAvKiBG
aWx0ZXJJbWFnZVNvZnR3YXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlU29m
dHdhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCNzI3MTQyRjM4
MDAzRTg4QzQgLyogRmlsdGVySW1hZ2VTb2Z0d2FyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJ
bWFnZVNvZnR3YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkI4Mjcx
NDJGNzkwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpbHRlckltYWdlQ29yZUltYWdlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCOTI3MTQyRjc5MDAzRTg4QzQgLyogU291cmNl
R3JhcGhpY0NvcmVJbWFnZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQUE0NkJBMjcxNDJGN0EwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZUNvcmVJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCQjI3MTQzMEIwMDAzRTg4QzQgLyog
RmlsdGVyRWZmZWN0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZp
bHRlckVmZmVjdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZC
QzI3MTQzMEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlclJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQUE0NkJEMjcxNDMwQjEwMDNFODhDNCAvKiBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXByZXNlbnRhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkFBNDZCRTI3MTQzMkRFMDAzRTg4
QzQgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdGaWx0ZXJCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0
NkJGMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZpbHRlckV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVy
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkM0MjcxNDM1
MDUwMDNFODhDNCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkFBNDZENzI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJpeENvcmVJbWFnZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUE0NkQ5MjcxNThBNTcwMDNFODhDNCAvKiBGRUNv
bXBvbmVudFRyYW5zZmVyQ29yZUltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRkVDb21w
b25lbnRUcmFuc2ZlckNvcmVJbWFnZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCMUI3NTEyNzE3RUEyRTAwMUIyRTA4IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCMUI3NTQyNzE5MTE0MzAwMUIyRTA4IC8qIExpZ2h0aW5nRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMaWdodGluZ0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMz
QTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3
MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDU5NCw2ICsxMDYzOSwxMCBAQAogCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRp
bmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzU3NDgzMjcyM0Mz
QTQwMDFFQzk1QyAvKiBMaWdodFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaWdodFNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzU3NDg1MjcyM0M1NTYw
MDFFQzk1QyAvKiBMaWdodFNvdXJjZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlnaHRTb3VyY2VE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTM5MjYzNjRBMUYwMDc3
RjBFOCAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQzkwQTNBMjYzNjRBMUYwMDc3RjBF
OCAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRz
UkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYy
QSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRz
UkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1
MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNTI3LDEz
ICsxMTU3NiwxMCBAQAogCQk4NDMwMEJENTEyMEM5QUFDMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU3RyaW5n
U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MzAwQkQ3MTIwQzlBRDQw
MDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1BhdGhTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQzMDBC
RDkxMjBDOUFFRDAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0NUU3MkY5MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRmlsdGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5
IC8qIFNWR0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGaWx0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFN0MyMzg3QUQ3QzAwNjI2
NkUyIC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFRdWVyeUxpc3RFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NDY1MEU3RjIzODdBRDhBMDA2MjY2RTIgLyogTWVkaWFRdWVyeUxpc3RFdmVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdEV2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ2NTBFODAyMzg3QUQ4QjAwNjI2NkUy
IC8qIE1lZGlhUXVlcnlMaXN0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlh
UXVlcnlMaXN0RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NDczMEQ1
QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291
cmNlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXN0YW50TGlnaHRT
b3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzMwRDVCMTI0OEYw
QjMwMEQzQTlDOSAvKiBGRUNvbnZvbHZlTWF0cml4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NDczMEQ1QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVDb252b2x2ZU1hdHJpeC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NzMwRDVEMTI0OEYwQjMwMEQzQTlDOSAvKiBG
RURpZmZ1c2VMaWdodGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGRURpZmZ1c2VMaWdodGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTU1Nyw4ICsxMTYwMyw4IEBACiAJCTg0NzMwRDZGMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1
bGVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxl
bmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzAxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGRVR1cmJ1bGVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3MzBENzQx
MjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpZ2h0U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg0
NzMwRDc1MTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcG90TGlnaHRTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8q
IFBvaW50TGlnaHRTb3VyY2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvaW50TGlnaHRTb3VyY2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg0
NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3VyY2VEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwb3RMaWdodFNvdXJjZURhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NDVCOEQyNEEzRjA5RjAwMjlBOEI1IC8qIEN1c3RvbVhQ
YXRoTlNSZXNvbHZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ3NDVCOEUyNEEzRjBB
MDAwMjlBOEI1IC8qIEN1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODQ3NkM5RTMxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVp
bGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU2Vn
TGlzdEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4ODYsOSAr
MTI5MzIsOSBAQAogCQlBMUUwODY2RTI0OEFBQzg1MDBFNDk2RDkgLyogZ2VuZXJhdGUtdW5pZmll
ZC1zb3VyY2VzLnNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQuc2g7IG5hbWUgPSAiZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNo
IjsgcGF0aCA9ICJTY3JpcHRzL2dlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRTA4NjZGMjQ4QUFDODUwMEU0OTZEOSAvKiBjaGVjay14
Y2ZpbGVsaXN0cy5zaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuc2NyaXB0LnNoOyBuYW1lID0gImNoZWNrLXhjZmlsZWxpc3RzLnNoIjsgcGF0
aCA9ICJTY3JpcHRzL2NoZWNrLXhjZmlsZWxpc3RzLnNoIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTFFMDg2NzAyNDhBQUM4NTAwRTQ5NkQ5IC8qIGdlbmVyYXRlLWRlcml2ZWQtc291
cmNlcy5zaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnNoOyBuYW1lID0gImdlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaCI7IHBh
dGggPSAiU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2giOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3RhbnRM
aWdodFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUExRTExNTQ1MTMw
MTVDNEUwMDU0QUM4QyAvKiBQb2ludExpZ2h0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvaW50TGlnaHRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBMUUxMTU0NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwb3RMaWdodFNvdXJj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExRTExNTQzMTMwMTVDM0QwMDU0
QUM4QyAvKiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpc3RhbnRMaWdodFNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNv
dXJjZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRM
aWdodFNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUUxMTU0
NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcG90TGlnaHRTb3VyY2VEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFFRDc3OEExQkUzMjkzRjAwREMxNzkxIC8qIERldmlj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUVENzc4QjFCRTMyOTQwMDBEQzE3OTEgLyog
RGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUY1NURCRjFGNTREMkQ2MDBFREI3NUYgLyogVGV4
dEVuY29kaW5nUmVnaXN0cnlJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0RW5jb2Rp
bmdSZWdpc3RyeUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTcyLDgg
KzE5NjE4LDExIEBACiAJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTJDQUE0QTM5MjRC
RTE4QjcwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oICovLAotCQkJ
CTJDQUE0QTM3MjRCRTE4QTEwMDlERUU3MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZS5tbSAqLywKKwkJCQk3MkFBNDZENzI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb2xvck1hdHJpeENv
cmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZEOTI3MTU4QTU3MDAzRTg4QzQgLyogRkVDb21wb25l
bnRUcmFuc2ZlckNvcmVJbWFnZS5tbSAqLywKKwkJCQk3MkFBNDZCQTI3MTQyRjdBMDAzRTg4QzQg
LyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCAqLywKKwkJCQk3MkFBNDZCODI3MTQyRjc5MDAzRTg4
QzQgLyogRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gKi8sCisJCQkJNzJBQTQ2QjkyNzE0MkY3OTAw
M0U4OEM0IC8qIFNvdXJjZUdyYXBoaWNDb3JlSW1hZ2UubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGNvcmVpbWFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzIwMiw2ICsyMzI1
MSwzMyBAQAogCQkJcGF0aCA9ICJtb2RlbC1lbGVtZW50IjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTcyQTgzRDZGMjcwNTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzJBODNEODIyNzA2
NTExQjAwM0M1QUFFIC8qIEZFQmxlbmRTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNENzUyNzA1
ODVCODAwM0M1QUFFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJBODNE
N0EyNzA1QURGQTAwM0M1QUFFIC8qIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgKi8s
CisJCQkJNzJBODNENzYyNzA1ODkwMjAwM0M1QUFFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmUuY3Bw
ICovLAorCQkJCTcyQTgzRDdDMjcwNUJEODYwMDNDNUFBRSAvKiBGRUNvbnZvbHZlTWF0cml4U29m
dHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdEMjcwNUM3RUYwMDNDNUFBRSAvKiBGRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3RTI3MDYzMzZCMDAzQzVBQUUgLyog
RkVEcm9wU2hhZG93U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDc4MjcwNThDMDMwMDNDNUFB
RSAvKiBGRUZsb29kU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDdCMjcwNUIyQzkwMDNDNUFB
RSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q4MTI3MDY0NkUy
MDAzQzVBQUUgLyogRkVMaWdodGluZ1NvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3NDI3MDU4
MzdEMDAzQzVBQUUgLyogRkVNZXJnZVNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3MzI3MDU3
Q0JFMDAzQzVBQUUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDcy
MjcwNTc5QzcwMDNDNUFBRSAvKiBGRU9mZnNldFNvZnR3YXJlLmNwcCAqLywKKwkJCQk3MkE4M0Q3
RjI3MDYzRjRDMDAzQzVBQUUgLyogRkVUaWxlU29mdHdhcmUuY3BwICovLAorCQkJCTcyQTgzRDgw
MjcwNjQxQjYwMDNDNUFBRSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgKi8sCisJCQkJNzJB
QTQ2QjYyNzE0MkYzNzAwM0U4OEM0IC8qIEZpbHRlckltYWdlU29mdHdhcmUuY3BwICovLAorCQkJ
CTcyQUE0NkI3MjcxNDJGMzgwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVNvZnR3YXJlLmggKi8sCisJ
CQkJNzJCMUI3NTQyNzE5MTE0MzAwMUIyRTA4IC8qIExpZ2h0aW5nRGF0YS5oICovLAorCQkJCTcy
QTgzRDcxMjcwNTc4NTIwMDNDNUFBRSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlLmNwcCAqLywKKwkJ
CQk3MkE4M0Q3MDI3MDU3NTA0MDAzQzVBQUUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlLmNwcCAq
LywKKwkJCSk7CisJCQlwYXRoID0gc29mdHdhcmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQk3QzAxMUYzQzI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3NUZW1wbGF0ZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjUyNTgsOCAr
MjUzMzQsOSBAQAogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVycyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTFFMTE1NDMxMzAxNUMz
RDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5jcHAgKi8sCi0JCQkJODQ3MzBENUExMjQ4
RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZS5oICovLAorCQkJCTcyQTgzRDZGMjcw
NTc0RDAwMDNDNUFBRSAvKiBzb2Z0d2FyZSAqLywKKwkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFD
OEMgLyogRGlzdGFudExpZ2h0U291cmNlRGF0YS5jcHAgKi8sCisJCQkJODQ3MzBENUExMjQ4RjBC
MzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJjZURhdGEuaCAqLywKIAkJCQlBNzVFOEI4MDBF
MURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5jcHAgKi8sCiAJCQkJQTc1RThCODEwRTFERTJENjAw
N0YyNDgxIC8qIEZFQmxlbmQuaCAqLywKIAkJCQlBNzVFOEI4MjBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb2xvck1hdHJpeC5jcHAgKi8sCkBAIC0yNTI5NCwyNCArMjUzNzEsMzcgQEAKIAkJCQk4NDcz
MEQ2RTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmggKi8sCiAJCQkJODQ3MzBENkYxMjQ4RjBC
MzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAw
RDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5oICovLAotCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3
OSAvKiBGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2RTI3MDNERkQ4MDAzQzVBQUUgLyogRmlsdGVy
LmNwcCAqLywKKwkJCQk3MkE4M0Q2OTI3MDNEOEU1MDAzQzVBQUUgLyogRmlsdGVyLmggKi8sCisJ
CQkJNzJBQTQ2QzQyNzE0MzUwNTAwM0U4OEM0IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8sCiAJ
CQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJ
MDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAotCQkJCTJDODU2
NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCi0JCQkJ
MkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJ
CQkJNzJBQTQ2QkIyNzE0MzBCMDAwM0U4OEM0IC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLAor
CQkJCTcyQjFCNzUxMjcxN0VBMkUwMDFCMkUwOCAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJ
CQkJNzJBODNENjYyNzAzRDY2RDAwM0M1QUFFIC8qIEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJ
NzI5QzA5RUQyNzIyOEEyMTAwQkU4ODM4IC8qIEZpbHRlckdlb21ldHJ5LmNwcCAqLywKKwkJCQk3
MkE4M0Q4MzI3MDY2NzRDMDAzQzVBQUUgLyogRmlsdGVyR2VvbWV0cnkuaCAqLywKKwkJCQk3MkM5
MEEzOTI2MzY0QTFGMDA3N0YwRTggLyogRmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcyQzkwQTNB
MjYzNjRBMUYwMDc3RjBFOCAvKiBGaWx0ZXJJbWFnZS5oICovLAorCQkJCTcyQUE0NkI0MjcxNDJD
RUIwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovLAogCQkJCTQ5RUNFQjYzMTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJNDlFQ0VCNjYxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywKKwkJCQk3MkFBNDZCRDI3MTQzMEIx
MDAzRTg4QzQgLyogRmlsdGVyUmVwcmVzZW50YXRpb24uaCAqLywKKwkJCQk3MkFBNDZCQzI3MTQz
MEIxMDAzRTg4QzQgLyogRmlsdGVyUmVzdWx0LmNwcCAqLywKKwkJCQk3Mjk3OEQ0MzI2RkU5REU3
MDBGRDJDNTYgLyogRmlsdGVyUmVzdWx0LmggKi8sCisJCQkJNzJDNTc0ODMyNzIzQzNBNDAwMUVD
OTVDIC8qIExpZ2h0U291cmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5Qzkg
LyogTGlnaHRTb3VyY2UuaCAqLywKLQkJCQlBMUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9p
bnRMaWdodFNvdXJjZS5jcHAgKi8sCi0JCQkJODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBv
aW50TGlnaHRTb3VyY2UuaCAqLywKKwkJCQk3MkM1NzQ4NTI3MjNDNTU2MDAxRUM5NUMgLyogTGln
aHRTb3VyY2VEYXRhLmggKi8sCisJCQkJQTFFMTE1NDUxMzAxNUM0RTAwNTRBQzhDIC8qIFBvaW50
TGlnaHRTb3VyY2VEYXRhLmNwcCAqLywKKwkJCQk4NDczMEQ3NTEyNDhGMEIzMDBEM0E5QzkgLyog
UG9pbnRMaWdodFNvdXJjZURhdGEuaCAqLywKIAkJCQk4NEE4MUYzQjBGQzdERkYwMDA5NTUzMDAg
LyogU291cmNlQWxwaGEuY3BwICovLAogCQkJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBT
b3VyY2VBbHBoYS5oICovLAogCQkJCTg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VH
cmFwaGljLmNwcCAqLywKIAkJCQk4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3Jh
cGhpYy5oICovLAotCQkJCUExRTExNTQ3MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGlnaHRTb3Vy
Y2UuY3BwICovLAotCQkJCTg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRTb3Vy
Y2UuaCAqLywKKwkJCQlBMUUxMTU0NzEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNl
RGF0YS5jcHAgKi8sCisJCQkJODQ3MzBENzYxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNv
dXJjZURhdGEuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yNzA2NSwxMCArMjcxNTUsMTEgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCUIyNTU5OEVBMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdGRUltYWdlLmNwcCAqLywKIAkJCQlC
MjU1OThFQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5oICovLAotCQkJCTg0NUU3MkY5
MEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwICovLAotCQkJCTg0NUU3MkZBMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCAqLywKLQkJCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1
NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5jcHAgKi8sCi0JCQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3
NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCAqLywKKwkJCQk3MkE4M0Q2QTI3MDNEQTlBMDAzQzVB
QUUgLyogU1ZHRmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2QjI3MDNEQTlBMDAzQzVBQUUgLyog
U1ZHRmlsdGVyLmggKi8sCisJCQkJNzJBQTQ2QzAyNzE0MzJERjAwM0U4OEM0IC8qIFNWR0ZpbHRl
ckJ1aWxkZXIuY3BwICovLAorCQkJCTcyQUE0NkJFMjcxNDMyREUwMDNFODhDNCAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmggKi8sCisJCQkJNzJBQTQ2QkYyNzE0MzJERTAwM0U4OEM0IC8qIFNWR0ZpbHRl
ckV4cHJlc3Npb24uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZmlsdGVyczsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0zMDIwMSw4ICszMDI5Miw4IEBACiAJCQkJQ0E3RTlCNDcyNDM2
MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAqLywKIAkJCQk5MzkyRjE0
RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLAogCQkJCTkzOTJGMTRCMEFE
MTg2MUIwMDY5MUJENCAvKiBDb3VudGVyTm9kZS5oICovLAotCQkJCTBGNTNGQjgxMjEzQjFCQjgw
MEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovLAotCQkJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQz
NCAvKiBDU1NGaWx0ZXIuaCAqLywKKwkJCQk3MkE4M0Q2QzI3MDNEQzNBMDAzQzVBQUUgLyogQ1NT
RmlsdGVyLmNwcCAqLywKKwkJCQk3MkE4M0Q2RDI3MDNEQzNBMDAzQzVBQUUgLyogQ1NTRmlsdGVy
LmggKi8sCiAJCQkJRTNCQkMyNDUyMzgzNTUxQTAwNkVDMzlGIC8qIENTU1ZhbHVlS2V5LmggKi8s
CiAJCQkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmNwcCAqLywKIAkJ
CQlFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLywKQEAgLTMxNjI3
LDYgKzMxNzE4LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTcyRUJDN0REMjcxMTNE
MzEwMEYwQTIwRiAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgy
MDAxNkE0Q0UgLyogQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJC
RjFGODBBNTZFMDAxNkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2
Qjk1MTk1MjA3RDYzMzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMjI4NCw2ICszMjM3Niw3IEBACiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRD
IC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzc5RTE0MUJC
MjE1QkIwMENBQThCRiAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NDQ3NkJEQjFERkNBQzAzMDA2OTBFMjMgLyogQ1NTRGVmZXJyZWRQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkNBMjcxNDM5MDEwMDNFODhDNCAvKiBDU1NGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUZCQjBDNUI4MTdCQkQ2MjkwMDNEMzY3NyAvKiBDU1NGaWx0ZXJJ
bWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY0QjRENjBDQjQyOThBMDA1RjJCNjIg
LyogQ1NTRm9udEZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0ZEMEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NGb250RmFjZVJ1bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzI1NTAsNyArMzI2
NDMsNyBAQAogCQkJCTBGNzkwRjQzMjUxN0NFNkUwMDlCQTAzNCAvKiBEaXNwbGF5Vmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOTExMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4MzA0MDI4MzI0OUE3QTYyMDBBOTBEOEQgLyogRGlzdGFuY2VN
b2RlbFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NzMwRDc3MTI0OEYwQjMwMEQzQTlDOSAv
KiBEaXN0YW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0NzMwRDc3MTI0OEYw
QjMwMEQzQTlDOSAvKiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkYzNEZFNjBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
RUU2ODQ2RjEyRDI2RTM4MDBFNzMyMTUgLyogRE5TUmVzb2x2ZVF1ZXVlQ0ZOZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MTg1RjQwMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMjc5MSwxMiArMzI4ODQsMTcgQEAKIAkJCQk5MzBFNDQ4NjI3MEMzNzIy
MDBERTdBQjcgLyogRmlsZVN5c3RlbVN5bmNBY2Nlc3NIYW5kbGVJZGVudGlmaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjY5RjBFODFEQUVCMDBCMjU5NjUgLyogRmlsbExheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4MzFGRTg2NUREMDAyMDMxQ0MgLyogRmlsbE1vZGUuaCBp
biBIZWFkZXJzICovLAotCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM5MjcxNDM3RDEwMDNFODhDNCAvKiBGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM1MjcxNDM1MjMwMDNFODhDNCAvKiBGaWx0ZXJCb3Vu
ZGFyeVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8q
IEZpbHRlckVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3
NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyQ0FBNEEz
QTI0QkUxOEI3MDA5REVFNzAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQUE0NkNCMjcxNDM5OTcwMDNFODhDNCAvKiBGaWx0ZXJFZmZlY3RW
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM2MjcxNDM1RkQwMDNFODhDNCAvKiBG
aWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQTQ2QzMyNzE0MzQ0NzAwM0U4
OEM0IC8qIEZpbHRlckdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFBNDZDODI3MTQz
NzMzMDAzRTg4QzQgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkQ0
MjcxNEYxOEUwMDNFODhDNCAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkM3MjcxNDM2OUEwMDNFODhDNCAvKiBGaWx0ZXJS
ZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5
NTc1IC8qIEZpbmRPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RjBBMTU0RjA5
MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCN0Qy
REQyNTBGRDgyODAwMDIwN0FBIC8qIEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNDMyNyw2ICszNDQyNSw3IEBACiAJCQkJNDEwRTQ0NjEyMzQzNzNFOTAwMDE3M0Q0
IC8qIExpYldlYlJUQ1NvY2tldElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQzE0
QkM3MjZERTg1ODQwMDY4NUJGNSAvKiBMaWJXZWJSVENVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODQ3MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkM1NzQ4NjI3MjNFQzVFMDAxRUM5NUMgLyogTGlnaHRTb3VyY2VEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMjIyNzk2NTBEMDBCRjIyMDA3MUI3ODIgLyogTGluZWFyR3JhZGll
bnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjMxQzkxRTEwQUUxQjhFMDAwQzdC
OTIgLyogTGluZUNsYW1wVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGRUZBQjJBMTgzODBE
QTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ4NzIs
NyArMzQ5NzEsNyBAQAogCQkJCUY0MjBGMDBBMjVFNDc3OTEwMDkyNTFFRiAvKiBQb2ludGVyRXZl
bnRUeXBlTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1QTQ1
RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTNGRjgxM0E3MURCQTg2NDAwMDlC
RjAwMSAvKiBQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTg0NzMw
RDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3MDU5OTdBMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVj
a2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjZDMkRBRDI2QzczQUZDMDA2NTE5MzEgLyogUG9s
aWN5Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFF
QzggLyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NTE3LDcgKzM1NjE2LDcg
QEAKIAkJCQk5MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1
ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNv
dXJjZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDODNERTg2MUQwNENDNUQwMEZFQkNGMyAv
KiBTcHJpbmdTb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTNCMTUwNUYwODEwMDFC
NzRBQyAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTND
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTcwNCw5
ICszNTgwMyw5IEBACiAJCQkJQjIyMjdBMDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMDYwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0ZFVGlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTA5MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk4NDVFNzJGQzBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzJBQTQ2Q0MyNzE0MzlEOTAwM0U4OEM0IC8qIFNWR0ZpbHRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUE0NkNEMjcxNDM5RTUwMDNFODhDNCAvKiBT
VkdGaWx0ZXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwRjBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyN0ExMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9u
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzU3NzQsNiArMzU4NzMsNyBAQAogCQkJCUIy
MjI3QTkxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2x5Z29uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBOTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlsaW5lRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOTU5MTZGMjcyMEVCODcwMDM2
OTk5MyAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU1RENDNTI4MjI0MDdCMjAwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcAppbmRleCA4Y2Y5MDlhZTllNTM3MjRiOTFkYjRhY2UxNGFlMjg1NzFkZDk1NTI2Li41
ZWRmYmY1M2UzYWFmYmE5NzAyNjBkZDgzMzQ1OGMwMGI2YjNhODhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJFbGVtZW50LmgiCkBAIC0xMTYsMjYgKzExNywyMyBAQCBSZWZQdHI8SW1hZ2U+IENT
U0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBG
bG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAg
Ly8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBhdXRvIHJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gdGV4dHVyZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIAogICAgIGF1dG8gaW1hZ2VSZWN0
ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07CiAgICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRl
cjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1
cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAg
IGNzc0ZpbHRlci0+c2V0RmlsdGVyUmVnaW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0
ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpG
aWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBmaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5k
ZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWZpbHRl
cikKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5h
cHBseSgpOwogCi0gICAgYXV0byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKLSAgICBp
ZiAoIW91dHB1dCkKLSAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisgICAgRmls
dGVyR2VvbWV0cnkgZ2VvbWV0cnkoaW1hZ2VSZWN0KTsKKyAgICBpZiAoYXV0byBmaWx0ZXJlZElt
YWdlID0gdGV4dHVyZS0+ZmlsdGVyZWRJbWFnZSgqZmlsdGVyLCBXVEZNb3ZlKGdlb21ldHJ5KSkp
CisgICAgICAgIHJldHVybiBmaWx0ZXJlZEltYWdlOwogCi0gICAgcmV0dXJuIG91dHB1dC0+Y29w
eUltYWdlKCk7CisgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiB9CiAKIHZvaWQgQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6ZmlsdGVySW1hZ2VDaGFuZ2VkKGNvbnN0IEludFJlY3QmKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1
ZmZlci5oCmluZGV4IGE1ZGQyOGI3MzdiYzgzNWU4NmVhM2VmMjAyYTc0ZTQ2YWIyMjIxODEuLjdj
N2ViNDJlNTNjNjRkZmRjZWM4MjNiYjRiM2U4YTljOTg2YTQ0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKQEAg
LTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKQEAgLTEz
OCw2ICsxMzksMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKKyAgICBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpOworICAgICAgICBpZiAoIWJh
Y2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIGNv
bnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0
KCk7CisKKyAgICAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAg
c3RkOjp0aWUoaW1hZ2VCdWZmZXIsIHN0ZDo6aWdub3JlKSA9IGZpbHRlci5hcHBseSh0aGlzLCB7
IHsgfSwgbG9naWNhbFNpemUoKSB9LCBnZW9tZXRyeSk7CisgICAgICAgIHJldHVybiBpbWFnZUJ1
ZmZlciA/IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKSA6IG51bGxwdHI7CisgICAgfQorCiAgICAg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDRjMWM1ZjkwODdhOTNh
N2QxMjViODkzNjQ0OGYwNGVmZWQwZjcwYzAuLjYxOTAzOTM5NWMxODE0MDliZDc2NGVlOTA5NTIx
MDRiYWZkODg3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiQmlk
aVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXIu
aCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBA
IC02MjksNiArNjMxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1h
Z2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKICAgICBJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIG9wdGlvbnMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlckltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkp
Cit7CisgICAgYXV0byBbZmlsdGVyZEltYWdlLCBpbWFnZVJlY3RdID0gZmlsdGVyLmFwcGx5KHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGdlb21ldHJ5KTsKKyAgICBpZiAoZmlsdGVyZElt
YWdlKQorICAgICAgICBkcmF3SW1hZ2VCdWZmZXIoKmZpbHRlcmRJbWFnZSwgaW1hZ2VSZWN0KTsK
K30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0KQogewogICAgIFBhdGggcGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMDZiNzEzMzhlZjhk
OTFhZGU0NmM5MjA5YTU5Yzc3MDk1MmRjYTk5MC4uNDRkZWJiNWU2ZDQ2ODIyMjk2OThlMDgzMTAx
MWFlMTQ3ZGY3Y2MxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTg1LDYgKzg1LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIFVJbnQ4OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CitjbGFzcyBGaWx0ZXI7CitjbGFzcyBGaWx0ZXJHZW9tZXRyeTsKIGNsYXNzIEZsb2F0Um91bmRl
ZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTsKQEAgLTQ1MCw2ICs0NTIsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBhMDU5MmI5OWI4OGRiZTAx
OGZhOTVjNWEzMDVkMjk4MmMwMjRmNmQ4Li4zNmU0NTRjYTAyZmI5M2Y0YTI5MGI4Njc1NmRhMGQ3
OTMzYmIxZGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKQEAgLTQyLDYgKzQyLDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQ7CiBzdHJ1Y3Qg
SXRlbUJ1ZmZlckhhbmRsZTsKIH0KIAorY2xhc3MgRmlsdGVyOworY2xhc3MgRmlsdGVyR2VvbWV0
cnk7CisKIGNsYXNzIEltYWdlQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElt
YWdlQnVmZmVyLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPEltYWdlQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxs
IHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtMTA2LDYgKzEwOSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgUmVmUHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSA9IDA7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2Ug
YnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhp
cyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBjb3B5
UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAppbmRleCAxNDNiYTAzYWNmZjlj
NmE2ZmM1NzkxMTU3OGNjM2I4MTljMjNiZGRkLi4wYWQyOTcwODhiNWY2N2RjMzJkZWJmOGJhNmE0
NGJhMjQ3ZWY1ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMJiwg
R0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzSW5Vc2UoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlR3JhcGhp
Y3NDb250ZXh0KCkgeyB9CiAgICAgdmlydHVhbCBWb2xhdGlsaXR5U3RhdGUgc2V0Vm9sYXRpbGUo
Ym9vbCkgeyByZXR1cm4gVm9sYXRpbGl0eVN0YXRlOjpWYWxpZDsgfQogICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlQnVmZmVyVG9Qb29sKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVy
c0NvY29hLm1tCmluZGV4IDJkMDIwMTZiYjhlZTYzZWI3ZTNmM2E3M2YzY2E2NjliYjA5ZTBlNTIu
LmFmYTQ5M2M4MzI1MWUxZWRlOGUxYWI0ODYwZmUzYTJiZDg0MzEzODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJz
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBTaG91bGQgc2hhcmUgdGhlc2UgdmFsdWVzIHdpdGggQ1NT
RmlsdGVyOjpidWlsZCgpIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzYwMDgpLgorLy8gRklYTUU6IFNob3VsZCBzaGFyZSB0aGVzZSB2YWx1ZXMgd2l0aCBGaWx0ZXI6
OmJ1aWxkKCkgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAwOCku
CiBzdGF0aWMgY29uc3QgZG91YmxlIHNlcGlhRnVsbENvbnN0YW50c1szXVszXSA9IHsKICAgICB7
IDAuMzkzLCAwLjc2OSwgMC4xODkgfSwKICAgICB7IDAuMzQ5LCAwLjY4NiwgMC4xNjggfSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNv
bG9yTWF0cml4Q29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZFQ29sb3JNYXRyaXhDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NmYTlmMTc5
NjdiOTNmYjg3ZWM4NDNiNzlhNjU0ZGYyOTU0ODcwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbG9yTWF0cml4Q29yZUlt
YWdlLm1tCkBAIC0wLDAgKzEsMTA2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgorCisjaWYgVVNFKENPUkVfSU1B
R0UpCisKKyNpbXBvcnQgIkZpbHRlckltYWdlQ29yZUltYWdlLmgiCisjaW1wb3J0IDxDb3JlSW1h
Z2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ0lGaWx0ZXIuaD4KKyNpbXBvcnQg
PENvcmVJbWFnZS9Db3JlSW1hZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
Q29sb3JNYXRyaXg6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFCisg
ICAgICAgIHx8IG1fY29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEUKKyAgICAgICAgfHwgbV9jb2xvck1hdHJpeFR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjphcHBseUNvcmVJbWFnZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAg
YXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBk
b3duY2FzdDxGaWx0ZXJJbWFnZUNvcmVJbWFnZT4oaW5wdXQpLmltYWdlKCk7CisgICAgaWYgKCFp
bnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHZhbHVlcyA9IEZF
Q29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGZsb2F0IGNvbXBv
bmVudHNbOV07CisgICAgCisgICAgc3dpdGNoIChtX2NvbG9yTWF0cml4VHlwZSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgICAgICBGRUNvbG9yTWF0cml4Ojpj
YWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgor
ICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CisgICAgICAgIGJyZWFrOworICAgIAorICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TFVNSU5BTkNFVE9BTFBIQTogLy8gRklYTUU6IEFkZCBMdW1pbmFuY2UgdG8gQWxwaGEgSW1wbGVt
ZW50YXRpb24KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGF1dG8g
KmNvbG9yTWF0cml4RmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1h
dHJpeCJdOworICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlLmdldCgp
IGZvcktleTprQ0lJbnB1dEltYWdlS2V5XTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fY29sb3JNYXRy
aXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CisgICAgICAgIFtjb2xvck1hdHJpeEZp
bHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1swXSBZOmNvbXBv
bmVudHNbMV0gWjpjb21wb25lbnRzWzJdIFc6MF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Cisg
ICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
Y29tcG9uZW50c1szXSBZOmNvbXBvbmVudHNbNF0gWjpjb21wb25lbnRzWzVdIFc6MF0gZm9yS2V5
OkAiaW5wdXRHVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpb
Q0lWZWN0b3IgdmVjdG9yV2l0aFg6Y29tcG9uZW50c1s2XSBZOmNvbXBvbmVudHNbN10gWjpjb21w
b25lbnRzWzhdIFc6MF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgICAgIFtjb2xvck1h
dHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCAgICAgICAgICAgICBZ
OjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MV0gZm9yS2V5OkAiaW5wdXRBVmVjdG9y
Il07CisgICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6MCAgICAgICAgICAgICBZOjAgICAgICAgICAgICAgWjowICAgICAgICAgICAgIFc6MF0g
Zm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKKyAgICAgICAgW2NvbG9yTWF0cml4Rmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMF0gIFk6dmFsdWVzWzFd
ICBaOnZhbHVlc1syXSAgVzp2YWx1ZXNbM11dICBmb3JLZXk6QCJpbnB1dFJWZWN0b3IiXTsKKyAg
ICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2
YWx1ZXNbNV0gIFk6dmFsdWVzWzZdICBaOnZhbHVlc1s3XSAgVzp2YWx1ZXNbOF1dICBmb3JLZXk6
QCJpbnB1dEdWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltD
SVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTBdIFk6dmFsdWVzWzExXSBaOnZhbHVlc1sxMl0g
Vzp2YWx1ZXNbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2NvbG9yTWF0
cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2YWx1ZXNbMTVdIFk6dmFs
dWVzWzE2XSBaOnZhbHVlc1sxN10gVzp2YWx1ZXNbMThdXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3Ii
XTsKKyAgICAgICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDp2YWx1ZXNbNF0gIFk6dmFsdWVzWzldICBaOnZhbHVlc1sxNF0gVzp2YWx1ZXNbMTldXSBm
b3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgZG93bmNhc3Q8RmlsdGVySW1hZ2VDb3JlSW1hZ2U+KG91dHB1dCkuc2V0SW1hZ2UoY29sb3JN
YXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRy
YW5zZmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZFQ29tcG9uZW50VHJhbnNmZXJDb3JlSW1hZ2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjYwNjMy
NTgyM2Q0ZTVkODU1ZGI0NmZiYjk4Mzk2YmU4OTYyNzUzOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GRUNvbXBvbmVudFRyYW5z
ZmVyQ29yZUltYWdlLm1tCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCisKKyNp
ZiBVU0UoQ09SRV9JTUFHRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBh
dXRvIGlzTnVsbE9yTGluZWFyID0gW10gKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGZ1bmN0aW9uKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9VTktOT1dOCisgICAgICAgICAgICB8fCBmdW5jdGlvbi50eXBlID09IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgfTsKKworICAgIHJldHVybiBpc051
bGxPckxpbmVhcihtX3JlZEZ1bmN0aW9uKQorICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2dy
ZWVuRnVuY3Rpb24pCisgICAgICAgICYmIGlzTnVsbE9yTGluZWFyKG1fYmx1ZUZ1bmN0aW9uKQor
ICAgICAgICAmJiBpc051bGxPckxpbmVhcihtX2FscGhhRnVuY3Rpb24pOworfQorCitib29sIEZF
Q29tcG9uZW50VHJhbnNmZXI6OmFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIEZFQ29tcG9uZW50VHJh
bnNmZXIgZnVuY3Rpb25zCisgICAgQVNTRVJUKHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkp
OworCisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBp
bnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBkb3duY2FzdDxGaWx0ZXJJ
bWFnZUNvcmVJbWFnZT4oaW5wdXQpLmltYWdlKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmls
dGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6
aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFnZUtleV07CisgICAgCisgICAgYXV0
byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICprZXksIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi50eXBlID09
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCisgICAgICAgICAgICBbZmlsdGVyIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlvbi5pbnRlcmNlcHQgWTpmdW5jdGlv
bi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKKyAgICB9OworICAgIHNldENvZWZmaWNpZW50
cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgbV9yZWRGdW5jdGlvbik7CisgICAgc2V0Q29lZmZp
Y2llbnRzKEAiaW5wdXRHcmVlbkNvZWZmaWNpZW50cyIsIG1fZ3JlZW5GdW5jdGlvbik7CisgICAg
c2V0Q29lZmZpY2llbnRzKEAiaW5wdXRCbHVlQ29lZmZpY2llbnRzIiwgbV9ibHVlRnVuY3Rpb24p
OworICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBtX2FscGhh
RnVuY3Rpb24pOworICAgIAorICAgIGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXRw
dXQpLnNldEltYWdlKGZpbHRlci5vdXRwdXRJbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT1JFX0lNQUdFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0OTE5MmEyNmUyYzA0
NGFmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0qIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLQotI2ltcG9y
dCAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbXBvcnQgIlBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KLQotT0JKQ19DTEFTUyBDSUltYWdlOwotT0JKQ19D
TEFTUyBDSUZpbHRlcjsKLU9CSkNfQ0xBU1MgQ0lDb250ZXh0OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZFQ29sb3JNYXRyaXg7Ci1jbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOwot
Y2xhc3MgU291cmNlR3JhcGhpYzsKLQotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIAotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKLSAgICBS
ZXRhaW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZm
ZWN0cyhGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKLSAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fb3V0cHV0SW1hZ2U7IH0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkg
Y29uc3QgZmluYWw7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKLSAgICBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZSgpOwotICAgIAotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmKTsKLSAgICB2b2lkIHJlbmRl
clRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgZmluYWw7Ci0gICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wg
Y2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgCi0gICAgUmV0YWlu
UHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7Ci0gICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0
cml4JiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJh
bnNmZXImLCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwotICAgIAotICAgIFJlZlB0cjxJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcj4gbV9vdXRwdXRJbWFnZUJ1ZmZlcjsKLSAgICBSZXRhaW5QdHI8
Q0lJbWFnZT4gbV9vdXRwdXRJbWFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
aW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2Uu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZTExMzdiMjlkNzFjMmI1NDQxNTcz
MDY3MjQwMGI4MjQyOGIzNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAg
QEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgiCi0KLSNpZiBVU0UoQ09SRV9JTUFH
RSkKLQotI2ltcG9ydCAiRkVDb2xvck1hdHJpeC5oIgotI2ltcG9ydCAiRkVDb21wb25lbnRUcmFu
c2Zlci5oIgotI2ltcG9ydCAiRmlsdGVyLmgiCi0jaW1wb3J0ICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bXBvcnQgIkZpbHRlck9wZXJhdGlvbi5oIgotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCi0j
aW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbXBvcnQgPENv
cmVJbWFnZS9DSUNvbnRleHQuaD4KLSNpbXBvcnQgPENvcmVJbWFnZS9DSUZpbHRlci5oPgotI2lt
cG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW1wb3J0IDx3dGYvY29jb2EvVHlwZUNhc3RzQ29jb2EuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjp0cnlDcmVhdGUoRmlsdGVyRWZmZWN0JiBs
YXN0RWZmZWN0KQotewotICAgIGlmIChjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhsYXN0RWZmZWN0
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFpblB0cjxDSUNvbnRleHQ+IEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzaGFyZWRDSUNvbnRleHQoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJ
Q29udGV4dCBjb250ZXh0V2l0aE9wdGlvbnM6QHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNl
OiBicmlkZ2VfaWRfY2FzdChhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VTUkdCKSkpLmdldCgpIH1dOwotICAgIHJldHVybiBjaUNvbnRleHQ7Ci19Ci0KLXN0
YXRpYyBib29sIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBG
RUNvbXBvbmVudFRyYW5zZmVyJiBlZmZlY3QpCi17Ci0gICAgYXV0byBpc051bGxPckxpbmVhciA9
IFtdIChjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikgewotICAgICAg
ICByZXR1cm4gZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9X
TgotICAgICAgICAgICAgfHwgZnVuY3Rpb24udHlwZSA9PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOwotICAgIH07Ci0gICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyKGVmZmVjdC5yZWRG
dW5jdGlvbigpKSAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKQotICAg
ICAgICAmJiBpc051bGxPckxpbmVhcihlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpICYmIGlzTnVsbE9y
TGluZWFyKGVmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotfQotCi1ib29sIEZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkKLXsKLSAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9u
Y2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RD
bGFzc1R5cGUoKSkgewotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGlj
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogewotICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29s
b3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEU6Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgotICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5l
YXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+
KGVmZmVjdCkpOwotCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZm
dXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1h
cDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Okdh
dXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpU
aWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAg
bV9vdXRwdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7Ci0gICAgaWYgKCFt
X291dHB1dEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihs
YXN0RWZmZWN0KTsKLX0KLQotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQotewotICAg
IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwotICAgIAotICAgIGZvciAo
YXV0byBpbiA6IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAgICBhdXRvIGlucHV0SW1h
Z2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCppbik7Ci0gICAgICAgIGlmICghaW5wdXRJbWFnZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5w
dXRJbWFnZSk7Ci0gICAgfQotICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIGVmZmVjdC5zZXRSZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwotICAgIAotICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5
KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN3aXRj
aCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdy
YXBoaWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgotICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9y
TWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6Ci0gICAgICAgIHJl
dHVybiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFu
c2Zlcj4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMg
YSB2YWxpZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpE
aWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVu
dE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3Vy
Y2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXNvdXJj
ZUltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoaXM8SU9TdXJm
YWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJbWFnZSkpCi0gICAgICAgIHJldHVybiBbQ0lJbWFnZSBp
bWFnZVdpdGhJT1N1cmZhY2U6ZG93bmNhc3Q8SU9TdXJmYWNlSW1hZ2VCdWZmZXI+KCpzb3VyY2VJ
bWFnZSkuc3VyZmFjZSgpLnN1cmZhY2UoKV07Ci0gICAgCi0gICAgcmV0dXJuIFtDSUltYWdlIGlt
YWdlV2l0aENHSW1hZ2U6c291cmNlSW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCldOwotfQotCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBGRUNvbG9yTWF0cml4JiBl
ZmZlY3QsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+JiBpbnB1dEltYWdlcykKLXsK
LSAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dEltYWdlcy5hdCgwKTsKLQotICAgIGF1dG8gdmFs
dWVzID0gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhlZmZlY3QudmFsdWVzKCkpOwot
ICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0gICAgCi0gICAgc3dpdGNoIChlZmZlY3QudHlwZSgp
KSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgICAgIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNb
MF0pOwotICAgICAgICBicmVhazsKLSAgICAKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEU6Ci0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBv
bmVudHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBicmVhazsKLSAgICAgICAg
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiAvLyBGSVhNRTogQWRkIEx1bWluYW5jZSB0byBB
bHBoYSBJbXBsZW1lbnRhdGlvbgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAg
Ci0gICAgYXV0byAqY29sb3JNYXRyaXhGaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJDSUNvbG9yTWF0cml4Il07Ci0gICAgW2NvbG9yTWF0cml4RmlsdGVyIHNldFZhbHVlOmlucHV0
SW1hZ2UuZ2V0KCkgZm9yS2V5OmtDSUlucHV0SW1hZ2VLZXldOwotICAgIAotICAgIHN3aXRjaCAo
ZWZmZWN0LnR5cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBbY29sb3JN
YXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbMF0g
WTpjb21wb25lbnRzWzFdIFo6Y29tcG9uZW50c1syXSBXOjBdIGZvcktleTpAImlucHV0UlZlY3Rv
ciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOmNvbXBvbmVudHNbM10gWTpjb21wb25lbnRzWzRdIFo6Y29tcG9uZW50c1s1XSBXOjBd
IGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0
VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOmNvbXBvbmVudHNbNl0gWTpjb21wb25lbnRzWzdd
IFo6Y29tcG9uZW50c1s4XSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotICAgICAgICBb
Y29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgICAgICAg
ICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAgICBXOjFdIGZvcktleTpAImlucHV0
QVZlY3RvciJdOwotICAgICAgICBbY29sb3JNYXRyaXhGaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOjAgICAgICAgICAgICAgWTowICAgICAgICAgICAgIFo6MCAgICAgICAgICAg
ICBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIFtjb2xvck1h
dHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzBdICBZOnZh
bHVlc1sxXSAgWjp2YWx1ZXNbMl0gIFc6dmFsdWVzWzNdXSAgZm9yS2V5OkAiaW5wdXRSVmVjdG9y
Il07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9y
V2l0aFg6dmFsdWVzWzVdICBZOnZhbHVlc1s2XSAgWjp2YWx1ZXNbN10gIFc6dmFsdWVzWzhdXSAg
Zm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzEwXSBZOnZhbHVlc1sxMV0gWjp2YWx1
ZXNbMTJdIFc6dmFsdWVzWzEzXV0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0gICAgICAgIFtj
b2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dmFsdWVzWzE1
XSBZOnZhbHVlc1sxNl0gWjp2YWx1ZXNbMTddIFc6dmFsdWVzWzE4XV0gZm9yS2V5OkAiaW5wdXRB
VmVjdG9yIl07Ci0gICAgICAgIFtjb2xvck1hdHJpeEZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3Ig
dmVjdG9yV2l0aFg6dmFsdWVzWzRdICBZOnZhbHVlc1s5XSAgWjp2YWx1ZXNbMTRdIFc6dmFsdWVz
WzE5XV0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICByZXR1cm4gY29sb3JNYXRyaXhGaWx0ZXIub3V0cHV0SW1hZ2U7Ci19Ci0KLVJldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JGRUNv
bXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGVmZmVjdCwgVmVjdG9y
PFJldGFpblB0cjxDSUltYWdlPj4mIGlucHV0SW1hZ2VzKQotewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhlIHJlc3Qgb2YgRkVDb21wb25lbnRUcmFuc2ZlciBmdW5jdGlvbnMKLSAgICBBU1NF
UlQoaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGVmZmVjdCkpOwotCi0g
ICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXRJbWFnZXMuYXQoMCk7Ci0gICAgYXV0byBmaWx0ZXIg
PSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yUG9seW5vbWlhbCJdOwotICAgIAot
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZS5nZXQoKSBmb3JLZXk6a0NJSW5wdXRJbWFn
ZUtleV07Ci0gICAgCi0gICAgYXV0byBzZXRDb2VmZmljaWVudHMgPSBbJl0gKE5TU3RyaW5nICpr
ZXksIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7Ci0gICAgICAg
IGlmIChmdW5jdGlvbi50eXBlID09IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpCi0g
ICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpmdW5jdGlv
bi5pbnRlcmNlcHQgWTpmdW5jdGlvbi5zbG9wZSBaOjAgVzowXSBmb3JLZXk6a2V5XTsKLSAgICB9
OwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0UmVkQ29lZmZpY2llbnRzIiwgZWZmZWN0LnJl
ZEZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZmaWNpZW50cyhAImlucHV0R3JlZW5Db2VmZmljaWVu
dHMiLCBlZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBzZXRDb2VmZmljaWVudHMoQCJpbnB1
dEJsdWVDb2VmZmljaWVudHMiLCBlZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIHNldENvZWZm
aWNpZW50cyhAImlucHV0QWxwaGFDb2VmZmljaWVudHMiLCBlZmZlY3QuYWxwaGFGdW5jdGlvbigp
KTsKLSAgICAKLSAgICByZXR1cm4gZmlsdGVyLm91dHB1dEltYWdlOwotfQotCi1ib29sIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJF
ZmZlY3QmIGVmZmVjdCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKGVm
ZmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gaW4gOiBl
ZmZlY3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygqaW4pIHx8ICFjYW5SZW5kZXJVc2luZ0NJRmlsdGVycygqaW4pKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZm
ZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAotewotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlcmluZyAiIDw8IHRoaXMg
PDwgIiB1c2luZyBDb3JlSW1hZ2VcbiIpOwotICAgIHJldHVybiBtX291dHB1dEltYWdlQnVmZmVy
LmdldCgpOwotfQotICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVu
ZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1
cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigp
LmZpbHRlclNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewotICAgICAgICBjbGVh
clJlc3VsdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NoYXJlZENJQ29udGV4
dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRw
dXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVm
ZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNv
bG9yU3BhY2UoKV07Ci19Ci0gICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKLXsK
LSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxl
KCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRl
c3RTaXplKTsKLSAgICByZXR1cm4gZGVzdFJlY3Q7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX291dHB1dEltYWdlQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICBtX291dHB1dEltYWdlID0gbnVsbHB0cjsKLX0KLQotRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCkKLSAg
ICA6IEZpbHRlckVmZmVjdFJlbmRlcmVyKCkKLXsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJbWFnZUNvcmVJbWFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3NGM1OGFiNjZhMjgxMDUwMzA2Y2Y5Njc4YmI3NThkYTlhMjBkM2MKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
SW1hZ2VDb3JlSW1hZ2UuaApAQCAtMCwwICsxLDU4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisKKyNpbXBvcnQgIkZpbHRlcklt
YWdlLmgiCisKK09CSkNfQ0xBU1MgQ0lJbWFnZTsKK09CSkNfQ0xBU1MgQ0lDb250ZXh0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckltYWdlQ29yZUltYWdlIDogcHVibGlj
IEZpbHRlckltYWdlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBGaWx0ZXJJbWFnZTo6RmlsdGVySW1h
Z2U7CisKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlOyB9CisgICAgdm9pZCBzZXRJbWFnZShSZXRhaW5QdHI8Q0lJbWFnZT4mJik7CisgICAgCitw
cml2YXRlOgorICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBv
dmVycmlkZTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoKSBvdmVycmlkZTsKKworICAg
IFJldGFpblB0cjxDSUltYWdlPiBtX2ltYWdlOworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0ZXJJbWFnZUNvcmVJbWFnZSkKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1
cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8gVVNF
KENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVySW1hZ2VDb3JlSW1hZ2UubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzE5ZmUwNTg4ZmYwNTU0ZTliMjEyMmM4YzYxZTU2MzM2NjRjNzE0OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJJ
bWFnZUNvcmVJbWFnZS5tbQpAQCAtMCwwICsxLDczIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRmlsdGVySW1hZ2VDb3JlSW1hZ2UuaCIKKwor
I2lmIFVTRShDT1JFX0lNQUdFKQorCisjaW1wb3J0ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisj
aW1wb3J0IDxDb3JlSW1hZ2UvQ0lDb250ZXh0Lmg+CisjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUlt
YWdlLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9UeXBlQ2FzdHNDb2NvYS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRh
aW5QdHI8Q0lDb250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxSZXRhaW5QdHI8Q0lDb250ZXh0Pj4gY2lDb250ZXh0ID0gW0NJQ29udGV4dCBjb250
ZXh0V2l0aE9wdGlvbnM6QHsga0NJQ29udGV4dFdvcmtpbmdDb2xvclNwYWNlOiBicmlkZ2VfaWRf
Y2FzdChhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdC
KSkpLmdldCgpIH1dOworICAgIHJldHVybiBjaUNvbnRleHQ7Cit9CisKK3ZvaWQgRmlsdGVySW1h
Z2VDb3JlSW1hZ2U6OnNldEltYWdlKFJldGFpblB0cjxDSUltYWdlPiYmIGltYWdlKQoreworICAg
IEFTU0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IFdURk1vdmUoaW1hZ2UpOworfQorCitSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBGaWx0ZXJJbWFnZUNvcmVJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0
cygpCit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXI7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0
ZXJJbWFnZUNvcmVJbWFnZTo6aW1hZ2VCdWZmZXIoKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVy
KQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKKworICAgIG1faW1hZ2VCdWZm
ZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fbG9naWNhbFNpemUsIG1fcmVzb2x1
dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFt
X2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZGVzdFJl
Y3QgPSBGbG9hdFJlY3QgeyBGbG9hdFBvaW50KCksIG1fbG9naWNhbFNpemUgfTsKKyAgICBbc2hh
cmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX2ltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBk
b3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKm1faW1hZ2VCdWZmZXIpLnN1cmZhY2UoKS5z
dXJmYWNlKCkgYm91bmRzOmRlc3RSZWN0IGNvbG9yU3BhY2U6bV9jb2xvclNwYWNlLnBsYXRmb3Jt
Q29sb3JTcGFjZSgpXTsKKyAgICAKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPUkVfSU1BR0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291
cmNlR3JhcGhpY0NvcmVJbWFnZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwOWQ2ZWFk
MWJmMjU0ODg1YmI1M2U3MjY4ZTgwYWIzM2I2YmQxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJ
bWFnZS5tbQpAQCAtMCwwICsxLDYxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiU291cmNlR3JhcGhpYy5oIgorCisjaWYgVVNFKENPUkVfSU1B
R0UpCisKKyNpbXBvcnQgIkZpbHRlckltYWdlLmgiCisjaW1wb3J0ICJGaWx0ZXJJbWFnZVZlY3Rv
ci5oIgorI2ltcG9ydCAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6YXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91
cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYg
aW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlOworICAgIGlmIChpczxJT1N1cmZhY2VJ
bWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2UpKQorICAgICAgICBpbWFnZSA9IFtDSUltYWdlIGltYWdl
V2l0aElPU3VyZmFjZTpkb3duY2FzdDxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oKmlucHV0SW1hZ2Up
LnN1cmZhY2UoKS5zdXJmYWNlKCldOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBbQ0lJbWFn
ZSBpbWFnZVdpdGhDR0ltYWdlOmlucHV0SW1hZ2UtPmNvcHlOYXRpdmVJbWFnZSgpLT5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCldOworCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGRvd25jYXN0PEZpbHRlckltYWdlQ29yZUltYWdlPihvdXB1dCkuc2V0SW1h
Z2UoV1RGTW92ZShpbWFnZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxl
bmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZhMTcxY2YxOC4u
MTE4MTllNTc5Y2VjOTJhN2NlNzFmNTA2NWFiNjk4MzA4NDBhMGYxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9O
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
L0ZFQmxlbmRORU9OLmgKQEAgLTI1LDggKzI1LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBGRUJsZW5kTkVPTl9oCi0jZGVmaW5lIEZFQmxlbmRORU9OX2gKKyNwcmFnbWEgb25j
ZQogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogCkBAIC0xMDcsMTUgKzEwNiwxOCBA
QCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorRmlsdGVyUmVzdWx0KiBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoRmlsdGVy
UmVzdWx0cyYgcmVzdWx0cywgRmlsdGVyUmVzdWx0VmVjdG9yJiBzdGFjaywgSW1hZ2VCdWZmZXIq
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAg
YXV0byBpbiA9IHN0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBpbjIgPSBzdGFjay50YWtlTGFz
dCgpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZ2V0KHsgKnRoaXMgfSkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIoKS5j
cmVhdGVGaWx0ZXJSZXN1bHQoYWJzb2x1dGVQYWludFJlY3QoKSwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSByZXN1bHQtPnBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKQEAgLTEyOSw3ICsxMzEsNyBAQCB2b2lkIEZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBpZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0
aCA+PSA4KSB7CiAgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5k
YXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5k
YXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiByZXN1bHQubGVha1JlZigpOwogICAgIH0KICAgICAvLyBJZiB0aGVyZSBpcyBqdXN0
IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgogICAgIEFTU0VSVChzb3VyY2VQaXhlbEFy
cmF5TGVuZ3RoID4gMCk7CkBAIC0xNDAsNiArMTQyLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOwogICAgIHBsYXRmb3Jt
QXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CiAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07CisK
KyAgICByZXR1cm4gcmVzdWx0LmxlYWtSZWYoKTsKIH0KIAogdm9pZCBGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciog
c3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCkBAIC0yMDUsNSAr
MjA5LDMgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3IKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEZFQmxl
bmRORU9OX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2
L0NWVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZV
dGlsaXRpZXMubW0KaW5kZXggNDA3MjcwNDNmZDEyZDYyYTRjYmQ3ZGJiNTllNDExNjBhMjhkZGYy
Mi4uYWNmOTZmZDBkNTQwYWI4NmU3NzBkNDYxM2MxOTBhMjI4M2I3MDVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvQ1ZVdGlsaXRpZXMubW0KQEAgLTI2
LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIK
IAorI2ltcG9ydCAiQ29sb3JTcGFjZUNHLmgiCiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cAppbmRleCBkZmY0MTQ0MjYxOTY3YmZlOGRlMmRlYzkyYzZmOTM5ODMyZGUxN2U4Li4zODVlZWU5
ZjZmYjQ4MDFmN2JmOTMxNmEwM2MwYjVlMjcxZjVjMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAKQEAgLTI1MSw2ICsyNTEsOCBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhh
bmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaXRlbS5n
ZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UGF0dGVybj4oaXRlbS5nZXQ8RHJhd1BhdHRlcm4+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxEcmF3RmlsdGVySW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PERyYXdGaWx0ZXJJ
bWFnZUJ1ZmZlcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RHJhd1JlY3Q+KGl0ZW0uZ2V0PERyYXdSZWN0PigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5jcHAKaW5kZXggYzEzOWU1MDk0ODUxODBiOWViZDkwMTcyNzJiZTk2YWE1MjI2NzVmZS4uYWEy
ZDU3YWYwZGRjNTE0YWFiZjAyM2M1YTQ3ZjA5ZjFjNTMwOGYzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTEyNiw2ICsxMjYsOSBAQCB2b2lkIEl0
ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3UGF0dGVybjoKICAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLmFwcGx5KGNvbnRl
eHQpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdl
QnVmZmVyOgorICAgICAgICBnZXQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAg
ICAgIGdldDxEcmF3UmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MjU5LDYgKzI2Miw5IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcFBhdGg6CiAgICAgICAgIGdldDxDbGlwUGF0aD4oKS5+Q2xpcFBhdGgoKTsKICAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjoK
KyAgICAgICAgZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKS5+RHJhd0ZpbHRlckltYWdlQnVm
ZmVyKCk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDoKICAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9jdXNSaW5nUGF0
aCgpOwogICAgICAgICByZXR1cm47CkBAIC01MDAsNiArNTA2LDggQEAgYm9vbCBJdGVtSGFuZGxl
OjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29u
c3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBPdXRUb1BhdGg+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPENsaXBQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZpbHRlckltYWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88RHJhd0ZpbHRlcklt
YWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1BhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3Rm9jdXNSaW5nUGF0aD4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCAyNDRlMGUz
NWMxMjc1NjIwOTY5YzVhYmE1ODY0MjA1MThhZTRlZDQwLi4wYWU5MDc1OGRjYTIyMGJiMGRiNmRh
YjhhMjJmZjY5YjgzNTU0ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5
cGUuY3BwCkBAIC04OCw2ICs4OCw4IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMo
SXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3TmF0aXZlSW1hZ2UpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERy
YXdQYXR0ZXJuKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ZpbHRlckltYWdlQnVmZmVyKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3UmVjdCk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CkBAIC0yMjIsNiArMjI0LDcgQEAgYm9vbCBpc0RyYXdp
bmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlckltYWdlQnVm
ZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhz
OgpAQCAtMjk2LDYgKzI5OSw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuaAppbmRleCA5OTE5NDU4ZDIzNjU5Y2VlY2I3NTg1Mzg3ZjEyOGVmYWYw
ZDQ3YTI1Li4yYjMyMDQ0M2NiZGM0ZTU2MDY2YjY5NDdlMTBiOGViZWExYjQ3NjM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBj
bGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIENsaXBQYXRoLAogICAgIEJlZ2luQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzLAogICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcywKKyAgICBEcmF3
RmlsdGVySW1hZ2VCdWZmZXIsCiAgICAgRHJhd0dseXBocywKICAgICBEcmF3SW1hZ2VCdWZmZXIs
CiAgICAgRHJhd05hdGl2ZUltYWdlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CmluZGV4IGU3MjZkOTRmMzAwNTAwMjMxMmJjNjQyYjMwMTVlY2JhZTMxNDg0OGMuLmMzYWE2NTIz
ZDY2Y2U0YzZiNTU5MzMyNDA3M2JjMTMxMGNhY2I5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKQEAgLTQyNSw2ICs0MjUsMzEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAorRHJhd0ZpbHRlckltYWdlQnVmZmVyOjpEcmF3RmlsdGVySW1hZ2VCdWZm
ZXIoc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCisgICAgOiBtX2ltYWdlSWRlbnRpZmllcihp
bWFnZUlkZW50aWZpZXIpCisgICAgLCBtX3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3Qp
CisgICAgLCBtX2ZpbHRlcihmaWx0ZXIpCisgICAgLCBtX2dlb21ldHJ5KGdlb21ldHJ5KQorewor
fQorCitOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBEcmF3RmlsdGVySW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKQoreworICAgIGNv
bnRleHQuZHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBtX3NvdXJjZUltYWdlUmVj
dCwgbV9maWx0ZXIsIG1fZ2VvbWV0cnkpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZpbHRlckltYWdlQnVmZmVyJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UtaWRlbnRpZmllciIsIGl0ZW0uaW1hZ2VJZGVu
dGlmaWVyKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLWltYWdlLXJlY3QiLCBpdGVt
LnNvdXJjZUltYWdlUmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKIHZvaWQgRHJhd1JlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRy
YXdSZWN0KG1fcmVjdCwgbV9ib3JkZXJUaGlja25lc3MpOwpAQCAtMTA3NSw2ICsxMTAwLDcgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5
cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB0cyA8PCAiZHJhdy1pbWFn
ZS1idWZmZXIiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRz
IDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXR0ZXJuOiB0cyA8PCAiZHJhdy1wYXR0ZXJuIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZpbHRlckltYWdlQnVmZmVyOiB0cyA8PCAiZHJhdy1maWx0ZXItaW1hZ2UtYnVmZmVyIjsg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHRzIDw8ICJkcmF3LXJlY3QiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogdHMgPDwgImRyYXctbGluZSI7IGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHRzIDw8ICJkcmF3LWxp
bmVzLWZvci10ZXh0IjsgYnJlYWs7CkBAIC0xMjA0LDYgKzEyMzAsOSBAQCBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdHRlcm46CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigp
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVySW1hZ2VCdWZm
ZXI6CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcj4oKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdSZWN0PigpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCmluZGV4IGNlYmYzNjliZmEyZWYwZjY3ZjEzMWZiODUyMzZlOWFhODk3ZDQ0
ODAuLmI3MmE3YTRhYmI4YjBkNWU0ZTZiMDFiYzI4ODQ4NmZkYmI5ODU4ZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXJJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgorI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpA
QCAtMTEwMCw2ICsxMTAyLDMwIEBAIHByaXZhdGU6CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMg
bV9vcHRpb25zOwogfTsKIAorY2xhc3MgRHJhd0ZpbHRlckltYWdlQnVmZmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdG
aWx0ZXJJbWFnZUJ1ZmZlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
OworCisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdl
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJZGVudGlmaWVyOyB9CisgICAgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0
OyB9CisKKyAgICBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JiwgV2ViQ29yZTo6SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxv
cHQ7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKworcHJp
dmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9p
bWFnZUlkZW50aWZpZXI7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworICAgIFJl
ZjxGaWx0ZXI+IG1fZmlsdGVyOworICAgIEZpbHRlckdlb21ldHJ5IG1fZ2VvbWV0cnk7Cit9Owor
CiBjbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI7CkBAIC0yNDQzLDYgKzI0NjksNyBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZh
cmlhbnQKICAgICAsIENvbmNhdGVuYXRlQ1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyCiAgICAgLCBEcmF3RWxsaXBzZQorICAgICwgRHJhd0ZpbHRlckltYWdlQnVmZmVyCiAgICAg
LCBEcmF3Rm9jdXNSaW5nUGF0aAogICAgICwgRHJhd0ZvY3VzUmluZ1JlY3RzCiAgICAgLCBEcmF3
R2x5cGhzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggNDc3
OTQyMWY0M2Q2Y2E5MDkzZmJjNWY1ZjMzMmZmNDA5OWE1M2E2MS4uOGE1OTZjZWYwOTIzZjg2NmMx
MzVlOTJjMmI2Yjg5YjZkZTMwZTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiU1ZHRkVJbWFnZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0xODIsNiArMTgzLDUxIEBAIHZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0CiAgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdGaWx0ZXJJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KQoreworICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisKKyAgICBpZiAoIXNvdXJjZUltYWdlKSB7CisgICAgICAgIHJlY29yZERyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcih7IH0sIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFjYW5EcmF3SW1hZ2VCdWZmZXIoKnNvdXJj
ZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVj
dHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAgICAgICBib29sIGlz
UmVtb3RlSW1hZ2UgPSBXVEY6OnN3aXRjaE9uKGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQo
KSkuc291cmNlSW1hZ2UoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1h
Z2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRp
dmVJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKCpuYXRp
dmVJbWFnZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgWyZdIChjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgeworICAg
ICAgICAgICAgICAgIGlmIChjYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICApOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc1JlbW90
ZUltYWdlKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJJbWFnZUJ1
ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGdlb21ldHJ5KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlY29yZFJlc291cmNl
VXNlKCpzb3VyY2VJbWFnZSk7CisgICAgcmVjb3JkRHJhd0ZpbHRlckltYWdlQnVmZmVyKHNvdXJj
ZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgc291cmNlSW1hZ2VSZWN0LCBm
aWx0ZXIsIGdlb21ldHJ5KTsKK30KKwogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgcmVj
b3JkU2F2ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggMDYw
NWQ2ZjI0YmY0NTMyNDdhNGE4ZTg4ZmUzYmRjMjYwNzc2MDc0NC4uZjk2YmI4ZjMzM2JhYzA0MDlk
MzM5NTE5ZjExYWVkYjc0NjQ0MzE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCkBAIC05Miw2ICs5Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcj4sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKQEAgLTIyOSw2ICsyMzAs
OCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0ZpbHRlckltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
ZmluYWw7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKaW5kZXggZjQ3NDMyNGZkNzMxYjJjNzk1
ZmZjMTY4M2VhZmUxOGMxNjhmYjdhNS4uNzhjMGM0NzNjNDM2YTk4MGRhZmUxYjlkNThlYzNhMGEw
ZTA0OTYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwu
Y3BwCkBAIC0yMjgsNiArMjI4LDExIEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0
dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyCiAgICAgYXBw
ZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkKK3sKKyAgICBhcHBlbmQ8RHJhd0ZpbHRlckltYWdlQnVmZmVyPihpbWFnZUlk
ZW50aWZpZXIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBnZW9tZXRyeSk7Cit9CisKIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
CiB7CiAgICAgYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCBiZWQ3MWY2NDg1MWQ3
YmUxMzAxOThkYTIwZDQ4YWEzZGI2YjM5NDE5Li4xMTYzMGExYWRlYjFhOTIzMWMxZWUwZmMzZTVj
MDczNGFhY2UzMDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlcklt
cGwuaApAQCAtOTAsNiArOTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdl
QnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdOYXRp
dmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJJbWFn
ZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTVmYjFmZjY2NWQzZWIwN2Y0OGVlMWQwMmJiZmZjYzZiMDQ0MWY4OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJpZ2h0IChDKSAy
MDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKLQotI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIERpc3Rh
bnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZCht
X2F6aW11dGgpOwotICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwot
ICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yID0gewotICAg
ICAgICBzdGQ6OmNvcyhhemltdXRoKSAqIHN0ZDo6Y29zKGVsZXZhdGlvbiksCi0gICAgICAgIHN0
ZDo6c2luKGF6aW11dGgpICogc3RkOjpjb3MoZWxldmF0aW9uKSwKLSAgICAgICAgc3RkOjpzaW4o
ZWxldmF0aW9uKQotICAgIH07Ci0gICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGggPSAxOwotfQotCi1MaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGlu
Z0RhdGEgRGlzdGFudExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3Qg
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCwgaW50LCBmbG9hdCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGE7Ci19Ci0KLWJvb2wgRGlz
dGFudExpZ2h0U291cmNlOjpzZXRBemltdXRoKGZsb2F0IGF6aW11dGgpCi17Ci0gICAgaWYgKG1f
YXppbXV0aCA9PSBhemltdXRoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9hemltdXRo
ID0gYXppbXV0aDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEaXN0YW50TGlnaHRTb3Vy
Y2U6OnNldEVsZXZhdGlvbihmbG9hdCBlbGV2YXRpb24pCi17Ci0gICAgaWYgKG1fZWxldmF0aW9u
ID09IGVsZXZhdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZWxldmF0aW9uID0g
ZWxldmF0aW9uOwotICAgIHJldHVybiB0cnVlOwotfQotCi1UZXh0U3RyZWFtJiBEaXN0YW50TGln
aHRTb3VyY2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17
Ci0gICAgdHMgPDwgIlt0eXBlPURJU1RBTlQtTElHSFRdICI7Ci0gICAgdHMgPDwgIlthemltdXRo
PVwiIiA8PCBhemltdXRoKCkgPDwgIlwiXSI7Ci0gICAgdHMgPDwgIltlbGV2YXRpb249XCIiIDw8
IGVsZXZhdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGMxZTMwZWRlNzU5ODM3MjhhNjMyYmNjZmZiMDk5NzNhM2E0ZTcyZmQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRo
ZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGlzdGFudExpZ2h0U291cmNlIDogcHVi
bGljIExpZ2h0U291cmNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERpc3RhbnRMaWdodFNv
dXJjZT4gY3JlYXRlKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpc3RhbnRMaWdodFNvdXJjZShhemltdXRoLCBlbGV2
YXRpb24pKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVzZSBhcmUgaW4gZGVncmVlcy4KLSAgICBmbG9h
dCBhemltdXRoKCkgY29uc3QgeyByZXR1cm4gbV9hemltdXRoOyB9Ci0gICAgZmxvYXQgZWxldmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbGV2YXRpb247IH0KLQotICAgIGJvb2wgc2V0QXppbXV0
aChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpIG92ZXJyaWRlOwotICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0IGZpbmFsOwotCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIERp
c3RhbnRMaWdodFNvdXJjZShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCi0gICAgICAg
IDogTGlnaHRTb3VyY2UoTFNfRElTVEFOVCkKLSAgICAgICAgLCBtX2F6aW11dGgoYXppbXV0aCkK
LSAgICAgICAgLCBtX2VsZXZhdGlvbihlbGV2YXRpb24pCi0gICAgewotICAgIH0KLQotICAgIGZs
b2F0IG1fYXppbXV0aDsKLSAgICBmbG9hdCBtX2VsZXZhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MSUdIVFNPVVJDRShEaXN0YW50
TGlnaHRTb3VyY2UsIExTX0RJU1RBTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2VEYXRh
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZGNiM2FiZmU3NTI5YzEzZTBjNGUzN2FiODViMmY2NDM2ODU2OGM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2VEYXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2VE
YXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRGlzdGFudExpZ2h0U291cmNlRGF0YTo6RGlzdGFudExpZ2h0U291cmNlRGF0
YShmbG9hdCBhemltdXRoLCBmbG9hdCBlbGV2YXRpb24pCisgICAgOiBtX2F6aW11dGgoYXppbXV0
aCkKKyAgICAsIG1fZWxldmF0aW9uKGVsZXZhdGlvbikKK3sKK30KKworTGlnaHRTb3VyY2VQYWlu
dERhdGEgRGlzdGFudExpZ2h0U291cmNlRGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRh
KGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3IpIGNvbnN0Cit7CisgICAgZmxvYXQgYXpp
bXV0aCA9IGRlZzJyYWQobV9hemltdXRoKTsKKyAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFk
KG1fZWxldmF0aW9uKTsKKworICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvciA9IHsKKyAgICAg
ICAgc3RkOjpjb3MoYXppbXV0aCkgKiBzdGQ6OmNvcyhlbGV2YXRpb24pLAorICAgICAgICBzdGQ6
OnNpbihhemltdXRoKSAqIHN0ZDo6Y29zKGVsZXZhdGlvbiksCisgICAgICAgIHN0ZDo6c2luKGVs
ZXZhdGlvbikKKyAgICB9OworCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgcGFpbnREYXRhID0g
eyB9OworICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhID0geyBjb2xvclZlY3Rvciwg
bGlnaHRWZWN0b3IsIDEgfTsKKyAgICByZXR1cm4gcGFpbnREYXRhOworfQorCitMaWdodFNvdXJj
ZVBpeGVsRGF0YSBEaXN0YW50TGlnaHRTb3VyY2VEYXRhOjpjb21wdXRlTGlnaHRTb3VyY2VQaXhl
bERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmIHBhaW50RGF0YSwgaW50LCBpbnQsIGZs
b2F0KSBjb25zdAoreworICAgIHJldHVybiBwYWludERhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YTsK
K30KKworVGV4dFN0cmVhbSYgRGlzdGFudExpZ2h0U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9RElTVEFO
VC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW2F6aW11dGg9XCIiIDw8IG1fYXppbXV0aCA8PCAiXCJd
IjsKKyAgICB0cyA8PCAiW2VsZXZhdGlvbj1cIiIgPDwgbV9lbGV2YXRpb24gPDwgIlwiXSI7Cisg
ICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiYWI5MzI3MWIyNjZkOWM1ZDhiZDM1ZGYy
Zjg5M2E0NjEzODIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhl
d3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJMaWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEaXN0
YW50TGlnaHRTb3VyY2VEYXRhIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXN0YW50
TGlnaHRTb3VyY2VEYXRhKGZsb2F0IGF6aW11dGgsIGZsb2F0IGVsZXZhdGlvbik7CisKKyAgICB2
b2lkIHNldEF6aW11dGgoZmxvYXQgYXppbXV0aCkgeyBtX2F6aW11dGggPSBhemltdXRoOyB9Cisg
ICAgdm9pZCBzZXRFbGV2YXRpb24oZmxvYXQgZWxldmF0aW9uKSB7IG1fZWxldmF0aW9uID0gZWxl
dmF0aW9uOyB9CisKKyAgICBMaWdodFNvdXJjZVBhaW50RGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQ
YWludERhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBjb2xvclZlY3RvcikgY29uc3Q7CisgICAgTGln
aHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0
U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdDsKKworICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxEaXN0YW50TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgor
ICAgIC8vIFRoZXNlIGFyZSBpbiBkZWdyZWVzLgorICAgIGZsb2F0IG1fYXppbXV0aDsKKyAgICBm
bG9hdCBtX2VsZXZhdGlvbjsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERp
c3RhbnRMaWdodFNvdXJjZURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9hemltdXRoOworICAgIGVuY29kZXIgPDwgbV9lbGV2YXRpb247Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERpc3RhbnRMaWdodFNv
dXJjZURhdGE+IERpc3RhbnRMaWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGF6aW11dGg7CisgICAgZGVjb2RlciA+PiBh
emltdXRoOworICAgIGlmICghYXppbXV0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGVsZXZhdGlvbjsKKyAgICBkZWNvZGVyID4+IGVs
ZXZhdGlvbjsKKyAgICBpZiAoIWVsZXZhdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHJldHVybiBEaXN0YW50TGlnaHRTb3VyY2VEYXRhKCphemltdXRoLCAqZWxldmF0
aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggY2RlYWE2NWU2
NzA0Y2Q2N2ZiMGE3YWZlOWFmMThmYmI2MmMyY2VkOS4uOGI4MDIzY2YzNjJjZDYwYTY3NDczODMy
Y2JhODhkZjgyOGNiZTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICog
Q29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDY0ICsyNiwzMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAotI2luY2x1ZGUgIkZFQmxlbmRO
RU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0
ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVu
ZE1vZGUgbW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQotICAg
ICwgbV9tb2RlKG1vZGUpCitSZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBt
b2RlKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCi1S
ZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9k
ZSkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
VHlwZTo6RkVCbGVuZCkKKyAgICAsIG1fbW9kZShtb2RlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2RlKSk7CiB9CiAKLWJvb2wgRkVCbGVuZDo6c2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZSBtb2RlKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVCbGVuZDo6dGFrZUlu
cHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgaWYgKG1fbW9kZSA9
PSBtb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9tb2RlID0gbW9kZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7
IHN0YWNrLnRha2VMYXN0KCksIHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAotI2lmICFIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
Ci17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4t
PmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGlu
Mi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlcjIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKLX0KLSNlbmRpZgotCi1UZXh0
U3RyZWFtJiBGRUJsZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUJs
ZW5kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKLSAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
ICAgICB0cyA8PCAiIG1vZGU9XCIiIDw8IChtX21vZGUgPT0gQmxlbmRNb2RlOjpOb3JtYWwgPyAi
bm9ybWFsIiA6IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
T3ZlciwgbV9tb2RlKSkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3Bl
IGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIGlucHV0RWZmZWN0KDEpLT5leHRlcm5hbFJl
cHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
CmluZGV4IDcwZTg0MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjJkYjY1YjJk
MmE4YzljMDM4NWQ1YTA5OTJjZTU2MTNkMmI0MTRkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0zLDYgKzMsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMyArMjQsNDggQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKKworICAgIHZvaWQgc2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZSBtb2RlKSB7IG1fbW9kZSA9IG1vZGU7IH0KIAotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBib29sIHNldEJsZW5k
TW9kZShCbGVuZE1vZGUpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSZWY8RkVCbGVuZD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5k
IjsgfQorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVu
c2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5
QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRh
a2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlTb2Z0
d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChG
aWx0ZXImLCBCbGVuZE1vZGUpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBCbGVuZE1vZGUgbV9tb2RlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRkVCbGVuZDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX21vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6
Om9wdGlvbmFsPFJlZjxGRUJsZW5kPj4gRkVCbGVuZDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit7CisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBt
b2RlOworICAgIGlmICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHJldHVybiBGRUJsZW5kOjpjcmVhdGUoKm1vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUJsZW5kKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggMzgwNjVjYjk2YzdiNGI0YjAzZmM2YjBlZWQ4NWFjNGI2Yzk2
OGE1NC4uNTZmMDJlOWM0MzI2YjJhYzBmYjVkNDY2ZDAxODA5MDQzYjM3ZjQ4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMDMgKzI0LDY1IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0
cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYm
IHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQot
ICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCi17Ci19
Ci0KLVJlZjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3Zl
KHZhbHVlcykpKTsKLX0KLQotYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRUeXBlKENvbG9yTWF0cml4
VHlwZSB0eXBlKQotewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVD
b2xvck1hdHJpeDo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKK1JlZjxG
RUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUs
IFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCiB7Ci0gICAgaWYgKG1fdmFsdWVzID09IHZhbHVlcykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmFsdWVzID0gdmFsdWVzOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgodHlwZSwgV1RG
TW92ZSh2YWx1ZXMpKSk7CiB9CiAKLWlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9h
dCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcykKLXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAg
ICBmbG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxwaGE7Ci0KLSAgICByZWQgICAgID0g
dmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVz
WyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICog
ciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZh
bHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzEx
XSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1
NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVl
c1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxp
bmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZs
b2F0JiBibHVlLCBjb25zdCBmbG9hdCogY29tcG9uZW50cykKK0ZFQ29sb3JNYXRyaXg6OkZFQ29s
b3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlIGNvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYm
IHZhbHVlcykKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbG9yTWF0cml4KQorICAgICwg
bV9jb2xvck1hdHJpeFR5cGUoY29sb3JNYXRyaXhUeXBlKQorICAgICwgbV92YWx1ZXMoV1RGTW92
ZSh2YWx1ZXMpKQogewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwot
ICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsg
ZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAq
IGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwot
ICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAq
IGNvbXBvbmVudHNbOF07CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWlu
YW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1p
bmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhh
KQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsg
MC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4g
PSAwOwotICAgIGJsdWUgPSAwOworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAq
IHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7Cisg
ICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVu
dHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAu
NzE1ICsgMC4yODUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcy
ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsK
KyAgICBjb21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9u
ZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBw
bHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQogewotICAgIEFTU0VSVChwaXhlbEFycmF5Lmxlbmd0
aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7Ci0gICAgCi0gICAgaWYgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAgICAgICAvLyB2SW1hZ2VNYXRyaXhN
dWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUg
bGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0IG1hdHJpeAotICAgICAgICAvLyBp
cyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICAgICAgaWYgKHZh
bHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZhbHVlc1sxNF0gIT0gMCB8fCB2YWx1
ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29u
c3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5
LmRhdGEoKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1ZmZl
clNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKLSAg
ICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRhID0g
ZGF0YTsKLSAgICAKLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGJ1
ZmZlclNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7
Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVzdC5k
YXRhID0gZGF0YTsKLQotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICog
NF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAw
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sxMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzE1XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMV0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA2XSAqIGRpdmlzb3IpKSwK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTFdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
Nl0gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgN10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTddICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAzXSAqIGRpdmlzb3Ip
KSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDhdICog
ZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVl
c1sxM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWzE4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0
cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0
ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9IVUVST1RBVEU6IHsKLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRd
ID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
MF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzZdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMV0gKiBk
aXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9u
ZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzddICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbMl0gKiBkaXZpc29y
KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s1
XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzhdICogZGl2aXNvcikpLAotICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgZGl2aXNvciwK
LSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgoJnNyYywg
JmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwga3ZJbWFnZU5vRmxhZ3Mp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7
Ci0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4yMTI1ICogZGl2aXNvcikpLAotCi0g
ICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC43MTU0ICogZGl2aXNvcikpLAotCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoMC4wNzIxICogZGl2aXNvcikpLAotCi0gICAgICAg
ICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAm
ZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQg
c2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9
IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRz
WzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBv
bmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAg
Y29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsK
KyAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAu
MTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVl
ICogMC4yODM7CisgICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBz
aW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcx
NSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAq
IDAuOTI4ICsgc2luSHVlICogMC4wNzI7CiB9Ci0jZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRy
aXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXpl
KQorYm9vbCBGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImKSBjb25zdAogewotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVy
VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRy
aXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwot
ICAgIGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkK
LSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21w
b25lbnRzLCB2YWx1ZXNbMF0pOwotCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBp
eGVsQXJyYXkubGVuZ3RoKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoZWZmZWN0
QXBwbHlBY2NlbGVyYXRlZDxmaWx0ZXJUeXBlPihwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVu
dHMsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShidWZmZXJTaXplKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0
IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAg
ICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1ZXMpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwotICAgICAgICAgICAgZmxvYXQg
YWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAg
ICBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKLSAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQToKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhl
bEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewot
ICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7
Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIGx1bWluYW5jZShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZz
ZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAx
LCBncmVlbik7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAy
LCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMs
IGFscGhhKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1f
Y29sb3JNYXRyaXhUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOwog
fQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJ
bWFnZVZlY3RvciBGRUNvbG9yTWF0cml4Ojp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEltYWdlQnVm
ZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmIChpbkJ1ZmZl
cikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgp
IH07Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxC
dWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwot
ICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwotCi0g
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKLSAg
ICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VO
S05PV046Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhlbEFy
cmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IAotICAgICAgICBlZmZlY3RUeXBlPEZF
Q09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5
RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9U
QVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAg
ICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIHNldElzQWxw
aGFJbWFnZSh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0SW1hZ2Ut
PnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JN
YXRyaXhUeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgY29sb3JNYXRyaXhUeXBlKQogewotICAgIHN3
aXRjaCAodHlwZSkgeworICAgIHN3aXRjaCAoY29sb3JNYXRyaXhUeXBlKSB7CiAgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAg
ICAgICBicmVhazsKQEAgLTMzOSwxMSArMTAyLDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiAgICAg
cmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbG9yTWF0cml4OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltmZUNvbG9yTWF0cml4IjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIHR5cGU9
XCIiIDw8IG1fdHlwZSA8PCAiXCIiOworICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgbV9jb2xvck1h
dHJpeFR5cGUgPDwgIlwiIjsKICAgICBpZiAoIW1fdmFsdWVzLmlzRW1wdHkoKSkgewogICAgICAg
ICB0cyA8PCAiIHZhbHVlcz1cIiI7CiAgICAgICAgIFZlY3RvcjxmbG9hdD46OmNvbnN0X2l0ZXJh
dG9yIHB0ciA9IG1fdmFsdWVzLmJlZ2luKCk7CkBAIC0zNTcsOSArMTE5LDYgQEAgVGV4dFN0cmVh
bSYgRkVDb2xvck1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb24KICAgICAgICAgdHMgPDwgIlwiIjsKICAgICB9CiAgICAgdHMgPDwgIl1c
biI7Ci0gICAgCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwot
ICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRh
dGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThh
ZWQxZTRmMGI1Mzk3MDNhYzRkYjU1MjRlZmE0YzEyM2YuLjlhNDQ2NDZhM2JiNDQ1YzMxOWU0NjM1
MDY4ZDk5Y2U3ZDRlZDc2ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMyw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2
MiArMzcsNzcgQEAgZW51bSBDb2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9y
TWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3JlYXRlKENv
bG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKIAotICAgIENvbG9yTWF0cml4VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0
cml4VHlwZSk7CisgICAgdm9pZCBzZXRDb2xvck1hdHJpeFR5cGUoQ29sb3JNYXRyaXhUeXBlIGNv
bG9yTWF0cml4VHlwZSkgeyBtX2NvbG9yTWF0cml4VHlwZSA9IGNvbG9yTWF0cml4VHlwZTsgfQor
ICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykgeyBtX3ZhbHVl
cyA9IHZhbHVlczsgfQogCi0gICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KLSAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8Zmxv
YXQ+Jik7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0
KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVl
Um90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0
YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYg
dmFsdWVzKTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBv
bmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5l
IHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZWY8RkVDb2xvck1hdHJpeD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0g
ICAgRkVDb2xvck1hdHJpeChGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4m
Jik7CisgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7
CisKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
KSBjb25zdCBvdmVycmlkZTsKKworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmls
dGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb2xvck1hdHJpeCI7IH0KKyAg
ICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisjaWYgVVNFKENP
UkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKKyNlbmRpZgogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IENvbG9yTWF0cml4VHlwZSBtX3R5cGU7CisgICAgQ29sb3JNYXRyaXhUeXBlIG1fY29sb3JNYXRy
aXhUeXBlOwogICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7CiB9OwogCi1pbmxpbmUgdm9pZCBG
RUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVu
dHMsIGZsb2F0IHZhbHVlKQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVDb2xvck1h
dHJpeDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgY29tcG9uZW50c1sw
XSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUg
LSAwLjcxNSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2
YWx1ZSk7Ci0gICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAg
IGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIx
MyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbG9yTWF0cml4VHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fdmFsdWVz
OwogfQogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUNvbG9yTWF0cml4Pj4gRkVDb2xvck1hdHJpeDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9h
dCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBz
aW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcx
NSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAq
IDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29z
SHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUg
KyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAw
LjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2
XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25l
bnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNv
bXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19
CisgICAgc3RkOjpvcHRpb25hbDxDb2xvck1hdHJpeFR5cGU+IGNvbG9yTWF0cml4VHlwZTsKKyAg
ICBkZWNvZGVyID4+IGNvbG9yTWF0cml4VHlwZTsKKyAgICBpZiAoIWNvbG9yTWF0cml4VHlwZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PGZsb2F0Pj4gdmFsdWVzOworICAgIGRlY29kZXIgPj4gdmFsdWVzOworICAgIGlmICghdmFsdWVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCisgICAgcmV0dXJuIEZFQ29sb3JNYXRy
aXg6OmNyZWF0ZSgqY29sb3JNYXRyaXhUeXBlLCBXVEZNb3ZlKCp2YWx1ZXMpKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NU
eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JNYXRyaXhUeXBlPiB7CisgICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6Q29sb3JNYXRyaXhUeXBlLAor
CisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOLAorICAgICAgICBX
ZWJDb3JlOjpGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLAorICAgICAgICBXZWJDb3JlOjpGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUsCisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUsCisgICAgICAgIFdlYkNvcmU6OkZFQ09MT1JNQVRSSVhfVFlQRV9MVU1J
TkFOQ0VUT0FMUEhBCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IDg0N2VhNThmNWY5YjAzODY2ZDllYWM1N2YxMGNjZjU3
NDAyZjllNjMuLjU4NGVkOTBmZjg5OTg4YmY5NTlkMTZlZTFlNWIzYmVkODllNmE4MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitS
ZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFs
cGhhRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFu
c2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0
aW9uKSk7Cit9CisKK0ZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5j
dGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpA
QCAtNDMsMTE5ICs0NCwxMCBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlcgogewogfQogCi1SZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKLSAg
ICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVDb21wb25lbnRUcmFuc2ZlcihmaWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9u
LCBibHVlRnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsKLX0KLQotdm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mKQorRmlsdGVySW1hZ2VWZWN0b3IgRkVDb21wb25lbnRUcmFuc2Zl
cjo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci19Ci0KLXZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYg
dmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9u
KQotewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5j
dGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwot
ICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGMg
PSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVW
YWx1ZXNba107Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsg
MSksIChuIC0gMSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAo
biAtIDEpIC0gaykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0
ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWdu
ZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4w
KTsKLSAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91YmxlIHZhbCA9
IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6
bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5j
dGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKLSAgICAg
ICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZh
bHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi12b2lkIEZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRv
ZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90
ZSB0aGlzIHRvIGRvdWJsZQotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJG
dW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVy
RnVuY3Rpb24ub2Zmc2V0KTsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigy
NTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZh
bCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKLSAgICBMb29rdXBU
YWJsZSBncmVlblRhYmxlOwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJsZTsKLSAgICBMb29rdXBU
YWJsZSBhbHBoYVRhYmxlOwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFibGUsIGdyZWVu
VGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJy
YXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHVuc2lnbmVkIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgo
KTsKLSAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlv
blBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgZGF0YVtwaXhl
bE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAg
ICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAy
XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhl
bE9mZnNldCArIDNdXTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVl
blRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHJlZFRhYmxlW2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9IGFscGhh
VGFibGVbaV0gPSBpOwotCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJU
eXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5
VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNv
bXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQot
ICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAv
LyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1bmN0aW9u
LnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVuY3Rpb24u
dHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0aW9uLnR5
cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rpb24udHlw
ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLQotICAgIGNhbGxFZmZlY3RbbV9y
ZWRGdW5jdGlvbi50eXBlXShyZWRUYWJsZSwgbV9yZWRGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVj
dFttX2dyZWVuRnVuY3Rpb24udHlwZV0oZ3JlZW5UYWJsZSwgbV9ncmVlbkZ1bmN0aW9uKTsKLSAg
ICBjYWxsRWZmZWN0W21fYmx1ZUZ1bmN0aW9uLnR5cGVdKGJsdWVUYWJsZSwgbV9ibHVlRnVuY3Rp
b24pOwotICAgIGNhbGxFZmZlY3RbbV9hbHBoYUZ1bmN0aW9uLnR5cGVdKGFscGhhVGFibGUsIG1f
YWxwaGFGdW5jdGlvbik7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVy
biB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVudFRyYW5zZmVyVHlwZSB0eXBlKQpAQCAtMjA5LDEw
ICsxMDEsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZgogICAgIHJldHVybiB0czsKIH0KIAot
VGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAor
VGV4dFN0cmVhbSYgRkVDb21wb25lbnRUcmFuc2Zlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbZmVDb21wb25lbnRUcmFuc2ZlciI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIlxuIjsK
ICAgICB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzLCAy
KTsKQEAgLTIyMSw5ICsxMTIsNiBAQCBUZXh0U3RyZWFtJiBGRUNvbXBvbmVudFRyYW5zZmVyOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbgogICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIntibHVlOiAiIDw8IG1fYmx1ZUZ1bmN0aW9uIDw8ICJ9XG4iOwogICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgInthbHBoYTogIiA8PCBtX2FscGhhRnVuY3Rpb24gPDwgIn1d
XG4iOwogICAgIH0KLQotICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRz
KTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aAppbmRleCAyYjU4NmRlZjdmYjQyYTM3YjJlMTIzZWRhODcxMTljNGViMzQ4YTUxLi40NjM2ZTkz
YjBhMDQ3ZWRmY2FkZDAxYmFhMTRiNDIxMjYwYzQ3NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjIsOCArMjMsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksMzcgKzQ4LDMxIEBAIHN0cnVjdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHsKICAgICBmbG9hdCBvZmZzZXQgeyAwIH07CiAKICAgICBWZWN0b3I8
ZmxvYXQ+IHRhYmxlVmFsdWVzOworICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBkZWNvZGUoRGVj
b2RlciYpOwogfTsKIAogY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3Jl
YXRlKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5j
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNy
ZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKTsKIAotICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
cmVkRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmVl
bkZ1bmN0aW9uOyB9Ci0gICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBibHVlRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2JsdWVGdW5jdGlvbjsgfQotICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5jdGlvbjsg
fQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAg
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsK
LQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29tcG9uZW50VHJhbnNmZXIiOyB9Ci0KLSAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PjsKKyAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBi
bHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rp
b24pOwogCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUm
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29t
cHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJs
ZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBj
b21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUm
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgRmlsdGVySW1hZ2VWZWN0
b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9v
a3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxl
JiBhbHBoYVRhYmxlKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVy
SW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmls
dGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCi0gICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9yZWRGdW5jdGlv
bjsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fZ3JlZW5GdW5jdGlvbjsKQEAgLTg3
LDggKzgwLDExMSBAQCBwcml2YXRlOgogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9h
bHBoYUZ1bmN0aW9uOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCB0eXBlOworICAgIGVuY29kZXIgPDwgc2xvcGU7CisgICAgZW5jb2RlciA8
PCBpbnRlcmNlcHQ7CisgICAgZW5jb2RlciA8PCBhbXBsaXR1ZGU7CisgICAgZW5jb2RlciA8PCBl
eHBvbmVudDsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IHRhYmxlVmFs
dWVzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uPiBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRyYW5zZmVyVHlw
ZT4gdHlwZTsKKyAgICBkZWNvZGVyID4+IHR5cGU7CisgICAgaWYgKCF0eXBlKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2xvcGU7Cisg
ICAgZGVjb2RlciA+PiBzbG9wZTsKKyAgICBpZiAoIXNsb3BlKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gaW50ZXJjZXB0OworICAgIGRl
Y29kZXIgPj4gaW50ZXJjZXB0OworICAgIGlmICghaW50ZXJjZXB0KQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYW1wbGl0dWRlOworICAg
IGRlY29kZXIgPj4gYW1wbGl0dWRlOworICAgIGlmICghYW1wbGl0dWRlKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZXhwb25lbnQ7Cisg
ICAgZGVjb2RlciA+PiBleHBvbmVudDsKKyAgICBpZiAoIWV4cG9uZW50KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAg
IGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8ZmxvYXQ+PiB0YWJsZVZhbHVl
czsKKyAgICBkZWNvZGVyID4+IHRhYmxlVmFsdWVzOworICAgIGlmICghdGFibGVWYWx1ZXMpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgcmV0dXJuIHsgeyAqdHlwZSwg
KnNsb3BlLCAqaW50ZXJjZXB0LCAqYW1wbGl0dWRlLCAqZXhwb25lbnQsICpvZmZzZXQsIFdURk1v
dmUoKnRhYmxlVmFsdWVzKSB9IH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9yZWRGdW5jdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fZ3JlZW5GdW5j
dGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fYmx1ZUZ1bmN0aW9uOworICAgIGVuY29kZXIgPDwgbV9h
bHBoYUZ1bmN0aW9uOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25h
bDxSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbj4gcmVkRnVuY3Rpb247CisgICAgZGVjb2RlciA+PiByZWRGdW5jdGlvbjsKKyAgICBp
ZiAoIXJlZEZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3Rk
OjpvcHRpb25hbDxDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uPiBncmVlbkZ1bmN0aW9uOworICAg
IGRlY29kZXIgPj4gZ3JlZW5GdW5jdGlvbjsKKyAgICBpZiAoIWdyZWVuRnVuY3Rpb24pCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24+IGJsdWVGdW5jdGlvbjsKKyAgICBkZWNvZGVyID4+IGJsdWVGdW5jdGlv
bjsKKyAgICBpZiAoIWJsdWVGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbj4gYWxwaGFGdW5j
dGlvbjsKKyAgICBkZWNvZGVyID4+IGFscGhhRnVuY3Rpb247CisgICAgaWYgKCFhbHBoYUZ1bmN0
aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNyZWF0ZSgqcmVkRnVuY3Rpb24sICpncmVlbkZ1bmN0aW9uLCAqYmx1ZUZ1
bmN0aW9uLCAqYWxwaGFGdW5jdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI7IH0KLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkNvbXBvbmVudFRyYW5zZmVyVHlwZT4geworICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkNvbXBvbmVudFRyYW5zZmVyVHlwZSwK
KworICAgICAgICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTiwKKyAg
ICAgICAgV2ViQ29yZTo6RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZLAorICAgICAg
ICBXZWJDb3JlOjpGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUsCisgICAgICAgIFdlYkNv
cmU6OkZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURSwKKyAgICAgICAgV2ViQ29yZTo6
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUiwKKyAgICAgICAgV2ViQ29yZTo6RkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFu
c2ZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggOGI1OWU2NmRlOWZlOGQ2MzkxNmNiZTVjZTZkZDQw
MzhmYTRjYjJhOC4uMjg1ZDRiMmM3MmU1NWFmZjQ0MGFlMjFhN2IxNzg1MzJiNWI0MTc3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCwxNyArMjUsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNv
bXBvc2l0ZS5oIgogCi0jaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9z
aXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAg
OiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCi0gICAgLCBtX3R5cGUodHlw
ZSkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShjb21wb3NpdGVP
cGVyYXRvciwgazEsIGsyLCBrMywgazQpKTsKK30KKworRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRl
KEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIGZsb2F0IGsxLCBmbG9hdCBr
MiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFQ29tcG9z
aXRlKQorICAgICwgbV9jb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcGVyYXRvcikKICAgICAs
IG1fazEoazEpCiAgICAgLCBtX2syKGsyKQogICAgICwgbV9rMyhrMykKQEAgLTQyLDI2NCArNDcs
MzAgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21w
b3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBG
RUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBr
MiwgazMsIGs0KSk7Ci19Ci0KLWJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRpb25UeXBlIHR5cGUpCitGbG9hdFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dAogewotICAgIGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fdHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgLy8gRm9yIEluIGFuZCBB
dG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAv
LyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qg
b2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICBpZiAobV9jb21wb3NpdGVPcGVyYXRvciA9
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiB8fCBtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FUT1ApCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQ
cmltaXRpdmVTdWJyZWdpb24oaW5wdXRzWzFdLT5pbWFnZVJlY3QoKSwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzEoZmxvYXQgazEpCi17Ci0gICAgaWYgKG1f
azEgPT0gazEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2sxID0gazE7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUg
ZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0CisgICAgLy8gb3B0aW1pemUgdGhl
IHBhaW50IHJlZ2lvbiBoZXJlLgorICAgIGlmIChtX2NvbXBvc2l0ZU9wZXJhdG9yID09IEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlw
VG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIAotYm9vbCBGRUNvbXBvc2l0ZTo6
c2V0SzIoZmxvYXQgazIpCi17Ci0gICAgaWYgKG1fazIgPT0gazIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX2syID0gazI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZpbHRl
ckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGlucHV0cywgZ2VvbWV0cnksIHByaW1pdGl2ZVN1
YnJlZ2lvbik7CiB9CiAKLWJvb2wgRkVDb21wb3NpdGU6OnNldEszKGZsb2F0IGszKQotewotICAg
IGlmIChtX2szID09IGszKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9rMyA9IGszOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkK
LXsKLSAgICBpZiAobV9rNCA9PSBrNCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fazQg
PSBrNDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZp
bHRlclJlc3VsdElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVN
dWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5
dGUoaW50IGMpCitGaWx0ZXJJbWFnZVZlY3RvciBGRUNvbXBvc2l0ZTo6dGFrZUlucHV0cyhGaWx0
ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmW10g
PSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKLSAgICB1bnNpZ25l
ZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKLSAgICByZXR1cm4gYnVmZlshISh1YyAm
IH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKLX0KLQotdGVtcGxhdGUgPGludCBiMSwg
aW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAg
ICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEpCi0gICAg
ICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBzY2FsZWRL
NCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNpZ25lZCBj
aGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsg
azMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsx
ICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOwotICAgICAg
ICArK3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLS8vIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwotLy8g
aXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6
YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgotdGVtcGxhdGUgPGludCBiMSwgaW50
IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
LXsKLSAgICBmbG9hdCBzY2FsZWRLMTsKLSAgICBmbG9hdCBzY2FsZWRLNDsKLSAgICBpZiAoYjEp
Ci0gICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7Ci0gICAgaWYgKGI0KQotICAgICAgICBz
Y2FsZWRLNCA9IGs0ICogMjU1LjBmOwotCi0gICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+
PSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOwotICAgICAgICB1bnNp
Z25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOwotICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAq
IGkxICsgazMgKiBpMjsKLSAgICAgICAgaWYgKGIxKQotICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEsxICogaTEgKiBpMjsKLSAgICAgICAgaWYgKGI0KQotICAgICAgICAgICAgcmVzdWx0ICs9
IHNjYWxlZEs0OwotCi0gICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKLSAgICAgICAgKytz
b3VyY2U7Ci0gICAgICAgICsrZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0jaWYgIUhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUo
dW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBp
eGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQot
ewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgw
LjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKLSAgICBmbG9hdCBsb3dlckxpbWl0
ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjptaW4oMC4w
ZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBmICYmIGs0IDw9IDEuMGYpICYmICh1cHBl
ckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAxLjBmKSAmJiAobG93ZXJMaW1pdCA+PSAw
LjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAgICAgICAgaWYgKGs0KSB7Ci0gICAgICAg
ICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNs
YW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsy
LCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJy
YXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGsz
LCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxl
bmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFy
aXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJp
dGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3Ro
LCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGsxKQotICAgICAg
ICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBw
aXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfQorICAgIEFTU0VSVChzdGFj
ay5zaXplKCkgPj0gMik7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSwgc3RhY2sudGFr
ZUxhc3QoKSB9OwogfQotI2VuZGlmCiAKLWlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9y
bUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMs
IGZsb2F0IGs0KQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZFQ29tcG9zaXRlT3BlcmF0b3ImIGNvbXBvc2l0ZU9wZXJhdG9yKQogewotICAgIGlu
dCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBo
ZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseS4KLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0gICAgQVNTRVJUKCEobGVuZ3RoICYgMHgzKSk7Ci0gICAgcGxhdGZv
cm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0
aCwgazEsIGsyLCBrMywgazQpOwotI2Vsc2UKLSAgICBhcml0aG1ldGljU29mdHdhcmUoc291cmNl
LmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSNl
bmRpZgotfQotCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgLy8gRm9y
IEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQg
b2YKLSAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0
ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29s
dXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAg
ICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAgICAgIC8vIEFyaXRobWV0aWMgbWF5
IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4n
dAotICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCi0gICAgICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBv
ZiBib3RoIGlucHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgx
KTsKLQotICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykg
ewotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgICAgICBJ
bnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxB
cnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0KLSAgICAg
ICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBH
cmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewotICAgICAgICAv
LyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KLSAgICAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgZGVz
dGluYXRpb25SZWN0LmludGVyc2VjdChpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAg
ICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAg
ICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBJbnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0g
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigp
OwotICAgICAgICBJbnRSZWN0IHNvdXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2UyUmVjdCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2VSZWN0KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
SW4gfSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlhPUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfTElHSFRFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSks
IENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5
cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChjb21wb3NpdGVPcGVyYXRv
cikgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKICAgICAgICAgdHMg
PDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKQEAgLTMyOCwxOCArOTksMTMgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUmIHR5cGUKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFQ29t
cG9zaXRlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRUNvbXBvc2l0ZTo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb21wb3NpdGUiOwotICAgIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwot
ICAgIHRzIDw8ICIgb3BlcmF0aW9uPVwiIiA8PCBtX3R5cGUgPDwgIlwiIjsKLSAgICBpZiAobV90
eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgdHMgPDwgIiBvcGVy
YXRpb249XCIiIDw8IG1fY29tcG9zaXRlT3BlcmF0b3IgPDwgIlwiIjsKKyAgICBpZiAobV9jb21w
b3NpdGVPcGVyYXRvciA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQogICAgICAg
ICB0cyA8PCAiIGsxPVwiIiA8PCBtX2sxIDw8ICJcIiBrMj1cIiIgPDwgbV9rMiA8PCAiXCIgazM9
XCIiIDw8IG1fazMgPDwgIlwiIGs0PVwiIiA8PCBtX2s0IDw8ICJcIiI7CiAgICAgdHMgPDwgIl1c
biI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAg
aW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKLSAgICBpbnB1dEVmZmVjdCgxKS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVz
ZW50YXRpb24pOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IDdkMDhlMWY3
MTA3YjRiOTY4YzU4ZTNhMzdjMzJhZTJmNzZhZWEwYzMuLmMzYzk2MGY3YzNmZGViMTM0M2EwNjMx
NmI2Y2I1OWJmYzM3MzEyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEyICsyNCw5IEBACiAKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSB7CitlbnVtIEZFQ29tcG9zaXRlT3BlcmF0b3IgewogICAgIEZFQ09NUE9T
SVRFX09QRVJBVE9SX1VOS05PV04gICAgPSAwLCAKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9P
VkVSICAgICAgID0gMSwKICAgICBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTiAgICAgICAgID0gMiwK
QEAgLTQxLDUyICszOSw5OCBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgewogCiBjbGFz
cyBGRUNvbXBvc2l0ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29s
IHNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsKLQotICAgIGZsb2F0IGsxKCkg
Y29uc3QgeyByZXR1cm4gbV9rMTsgfQotICAgIGJvb2wgc2V0SzEoZmxvYXQpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGRUNvbXBvc2l0ZU9wZXJh
dG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CiAKLSAgICBmbG9h
dCBrMigpIGNvbnN0IHsgcmV0dXJuIG1fazI7IH0KLSAgICBib29sIHNldEsyKGZsb2F0KTsKKyAg
ICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdG9yKEZFQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IpIHsgbV9jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdG9yOyB9Cisg
ICAgdm9pZCBzZXRLMShmbG9hdCBrMSkgeyBtX2sxID0gazE7IH0KKyAgICB2b2lkIHNldEsyKGZs
b2F0IGsyKSB7IG1fazIgPSBrMjsgfQorICAgIHZvaWQgc2V0SzMoZmxvYXQgazMpIHsgbV9rMyA9
IGszOyB9CisgICAgdm9pZCBzZXRLNChmbG9hdCBrNCkgeyBtX2s0ID0gazQ7IH0KIAotICAgIGZs
b2F0IGszKCkgY29uc3QgeyByZXR1cm4gbV9rMzsgfQotICAgIGJvb2wgc2V0SzMoZmxvYXQpOwot
Ci0gICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9Ci0gICAgYm9vbCBzZXRLNChm
bG9hdCk7Ci0KLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUM7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmVmPEZFQ29tcG9zaXRlPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToK
LSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBvc2l0
ZShGRUNvbXBvc2l0ZU9wZXJhdG9yLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CiAKLSAgICB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0
d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKyAg
ICBib29sIGFwcGx5QXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICBi
b29sIGFwcGx5Tm9uQXJpdGhtZXRpY1NvZnR3YXJlKEZpbHRlckltYWdlJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdDsKKyAgICAK
KyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlk
ZTsKIAotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICB0ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
TmVvbihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFyaXRobWV0aWNOZW9uKGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgsIGZs
b2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKLSNlbmRpZgotCi0gICAgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSBtX3R5cGU7CisgICAgRkVDb21wb3NpdGVPcGVyYXRvciBtX2Nv
bXBvc2l0ZU9wZXJhdG9yOwogICAgIGZsb2F0IG1fazE7CiAgICAgZmxvYXQgbV9rMjsKICAgICBm
bG9hdCBtX2szOwogICAgIGZsb2F0IG1fazQ7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBGRUNvbXBvc2l0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbXBvc2l0ZU9wZXJhdG9yOworICAgIGVuY29kZXIgPDwgbV9rMTsK
KyAgICBlbmNvZGVyIDw8IG1fazI7CisgICAgZW5jb2RlciA8PCBtX2szOworICAgIGVuY29kZXIg
PDwgbV9rNDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVm
PEZFQ29tcG9zaXRlPj4gRkVDb21wb3NpdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIHN0ZDo6b3B0aW9uYWw8RkVDb21wb3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3BlcmF0b3I7
CisgICAgZGVjb2RlciA+PiBjb21wb3NpdGVPcGVyYXRvcjsKKyAgICBpZiAoIWNvbXBvc2l0ZU9w
ZXJhdG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxmbG9hdD4gazE7CisgICAgZGVjb2RlciA+PiBrMTsKKyAgICBpZiAoIWsxKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazI7CisgICAg
ZGVjb2RlciA+PiBrMjsKKyAgICBpZiAoIWsyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gazM7CisgICAgZGVjb2RlciA+PiBrMzsKKyAg
ICBpZiAoIWszKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4gazQ7CisgICAgZGVjb2RlciA+PiBrNDsKKyAgICBpZiAoIWs0KQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFQ29tcG9zaXRlOjpjcmVhdGUo
KmNvbXBvc2l0ZU9wZXJhdG9yLCAqazEsICprMiwgKmszLCAqazQpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkZFQ29tcG9zaXRlT3BlcmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpGRUNvbXBvc2l0ZU9wZXJhdG9yLAorCisg
ICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV04sCisgICAgICAgIFdl
YkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIsCisgICAgICAgIFdlYkNvcmU6OkZFQ09N
UE9TSVRFX09QRVJBVE9SX0lOLAorICAgICAgICBXZWJDb3JlOjpGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVVQsCisgICAgICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1AsCisgICAg
ICAgIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUiwKKyAgICAgICAgV2ViQ29yZTo6
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQywKKyAgICAgICAgV2ViQ29yZTo6RkVDT01Q
T1NJVEVfT1BFUkFUT1JfTElHSFRFUgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9zaXRlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5OGQ3MDkzNWE5NWM2ZjE1NmVjMjkz
M2MwZTk5ZjA1MC4uYmE4MjYxOTJkZTU0NjdiNDE3ZThhZmM0YTFjM2VkYjdlNzEwZWFlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjQsMTggKzI1LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252
b2x2ZU1hdHJpeC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXIm
IGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBm
bG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVz
ZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi0gICAgOiBGaWx0
ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb252b2x2ZU1hdHJpeCkKK1JlZjxGRUNvbnZvbHZlTWF0
cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
LCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUs
IGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgs
IHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOworfQorCitGRUNvbnZvbHZlTWF0cml4OjpG
RUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3Is
IGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2
ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoVHlwZTo6RkVDb252b2x2ZU1hdHJpeCkKICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxT
aXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBtX2JpYXMoYmlhcykKQEAgLTQ5
LDM4OSArNTEsMTUgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXIm
IGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxT
aXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZl
TWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
Ci0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9m
ZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5l
bFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2Vy
bmVsTWF0cml4KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgo
ZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2Rl
LCBrZXJuZWxVbml0TGVuZ3RoLAotICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgp
KTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxTaXplKGNvbnN0IEludFNp
emUmIGtlcm5lbFNpemUpCi17Ci0gICAgQVNTRVJUKGtlcm5lbFNpemUud2lkdGgoKSA+IDApOwot
ICAgIEFTU0VSVChrZXJuZWxTaXplLmhlaWdodCgpID4gMCk7Ci0gICAgbV9rZXJuZWxTaXplID0g
a2VybmVsU2l6ZTsKLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWwoY29uc3Qg
VmVjdG9yPGZsb2F0PiYga2VybmVsKQotewotICAgIG1fa2VybmVsTWF0cml4ID0ga2VybmVsOyAK
LX0KLQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXREaXZpc29yKGZsb2F0IGRpdmlzb3IpCi17
Ci0gICAgQVNTRVJUKGRpdmlzb3IpOwotICAgIGlmIChtX2Rpdmlzb3IgPT0gZGl2aXNvcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGl2aXNvciA9IGRpdmlzb3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0QmlhcyhmbG9hdCBiaWFzKQot
ewotICAgIGlmIChtX2JpYXMgPT0gYmlhcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
YmlhcyA9IGJpYXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJp
eDo6c2V0VGFyZ2V0T2Zmc2V0KGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQpCi17Ci0gICAg
aWYgKG1fdGFyZ2V0T2Zmc2V0ID09IHRhcmdldE9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1fdGFyZ2V0T2Zmc2V0ID0gdGFyZ2V0T2Zmc2V0OwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKLXsKLSAgICBpZiAobV9lZGdlTW9kZSA9PSBlZGdlTW9kZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEZsb2F0
UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6Y2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKIHsKLSAgICBBU1NFUlQoa2VybmVsVW5pdExlbmd0aC54KCkgPiAwKTsKLSAgICBBU1NFUlQo
a2VybmVsVW5pdExlbmd0aC55KCkgPiAwKTsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoID09
IGtlcm5lbFVuaXRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2tlcm5lbFVu
aXRMZW5ndGggPSBrZXJuZWxVbml0TGVuZ3RoOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
Ym9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBo
YSkKK0ZpbHRlckltYWdlVmVjdG9yIEZFQ29udm9sdmVNYXRyaXg6OnRha2VJbnB1dHMoRmlsdGVy
SW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEgPT0g
cHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fcHJlc2VydmVBbHBo
YSA9IHByZXNlcnZlQWxwaGE7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVt
ZW50YXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgIFRo
ZSBpbWFnZSByZWN0YW5nbGUgaXMgc3BsaXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLSAgICAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAgIEEgICAgICAgICAgfAot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICB8ICAgICAgICAgICAgIHwg
ICB8Ci0gICAgICB8IEIgfCAgICAgIEMgICAgICB8IEQgfAotICAgICAgfCAgIHwgICAgICAgICAg
ICAgfCAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgICAgICAg
IEUgICAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgV2hlcmUg
cmVnaW9uIEMgY29udGFpbnMgdGhvc2UgcGl4ZWxzLCB3aG9zZSB2YWx1ZXMKLSAgIGNhbiBiZSBj
YWxjdWxhdGVkIHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4KLQot
ICAgRXhhbXBsZToKLSAgICAgIEltYWdlIHNpemU6IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMAotCi0g
ICAgICBPcmRlciAoa2VybmVsIG1hdHJpeCBzaXplKTogd2lkdGg6IDMsIGhlaWdodCA0Ci0gICAg
ICBUYXJnZXQ6IHg6MSwgeTozCi0KLSAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRo
ZSB0YXJnZXQgaW5zaWRlIHRoZSBrZXJuZWwgbWF0cml4OgotCi0gICAgICAgIC4uLgotICAgICAg
ICAuLi4KLSAgICAgICAgLi4uCi0gICAgICAgIC5YLgotCi0gICBUaGUgcmVnaW9ucyBpbiB0aGlz
IGNhc2UgYXJlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICBOb3RlOiAoeDEsIHkxKSB0b3AtbGVmdCBh
bmQgKHgyLCB5MikgaXMgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIKLSAgICAgIE5vdGU6IHJvdyB4
MiBhbmQgY29sdW1uIHkyIGlzIG5vdCBwYXJ0IG9mIHRoZSByZWdpb24KLSAgICAgICAgICAgIG9u
bHkgdGhvc2UgKHgsIHkpIHBpeGVscywgd2hlcmUgeDEgPD0geCA8IHgyIGFuZCB5MSA8PSB5IDwg
eTIKLQotICAgICAgUmVnaW9uIEE6IHgxOiAwLCB5MTogMCwgeDI6IDEwLCB5MjogMwotICAgICAg
UmVnaW9uIEI6IHgxOiAwLCB5MTogMywgeDI6IDEsIHkyOiAxMAotICAgICAgUmVnaW9uIEM6IHgx
OiAxLCB5MTogMywgeDI6IDksIHkyOiAxMAotICAgICAgUmVnaW9uIEQ6IHgxOiA5LCB5MTogMywg
eDI6IDEwLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBFOiB4MTogMCwgeTE6IDEwLCB4MjogMTAsIHky
OiAxMCAoZW1wdHkgcmVnaW9uKQotCi0gICBTaW5jZSByZWdpb24gQyAob2Z0ZW4pIGNvbnRhaW5z
IG1vc3Qgb2YgdGhlIHBpeGVscywgd2UgaW1wbGVtZW50ZWQKLSAgIGEgZmFzdCBhbGdvcml0bSB0
byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLCBjYWxsZWQgZmFzdFNldEludGVyaW9yUGl4ZWxzLgot
ICAgRm9yIG90aGVyIHJlZ2lvbnMsIGZhc3RTZXRPdXRlclBpeGVscyBpcyB1c2VkLCB3aGljaCBj
YWxscyBnZXRQaXhlbFZhbHVlLAotICAgdG8gaGFuZGxlIHBpeGVscyBvdXRzaWRlIG9mIHRoZSBp
bWFnZS4gSW4gYSByYXJlIHNpdHVhdGlvbnMsIHdoZW4KLSAgIGtlcm5lbCBtYXRyaXggaXMgYmln
Z2VyIHRoYW4gdGhlIGltYWdlLCBhbGwgcGl4ZWxzIGFyZSBjYWxjdWxhdGVkIGJ5IHRoaXMKLSAg
IGZ1bmN0aW9uLgotCi0gICBBbHRob3VnaCB0aGVzZSB0d28gZnVuY3Rpb25zIGhhdmUgbG90IGlu
IGNvbW1vbiwgSSBkZWNpZGVkIG5vdCB0byBtYWtlCi0gICBjb21tb24gYSB0ZW1wbGF0ZSBmb3Ig
dGhlbSwgc2luY2UgdGhlcmUgYXJlIGtleSBkaWZmZXJlbmNlcyBhcyB3ZWxsLAotICAgYW5kIHdv
dWxkIG1ha2UgaXQgcmVhbGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KLSovCi0KLXN0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5z
aWduZWQgY2hhciBtYXggPSAyNTUpCi17Ci0gICAgaWYgKGNoYW5uZWwgPD0gMCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5uZWwgPj0gbWF4KQotICAgICAgICByZXR1cm4gbWF4Owot
ICAgIHJldHVybiBjaGFubmVsOwotfQotCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMs
IGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMpCi17
Ci0gICAgdW5zaWduZWQgY2hhciBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUg
OiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIGNs
YW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBoYSkpOwotCi0g
ICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4
ZWwsIHNvdXJjZVBpeGVscy5pdGVtKHBpeGVsKSk7Ci0gICAgICAgICsrcGl4ZWw7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKLX0KLQotI2lm
IENPTVBJTEVSKE1TVkMpCi0vLyBJbmNvcnJlY3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBvZiBz
dGFjayBpbiB8dG90YWxzfCBkdWUgdG8gfHByZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdtYSB3
YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgotCi0v
LyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgot
QUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0
b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBh
ZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAgaW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIG1fdGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwotICAgIGludCBr
ZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tl
cm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJn
YihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVl
cyA/IDAgOiAxKV07Ci0KLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOwotCi0g
ICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCknIGxpbmVzCi0gICAgcGl4
ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkg
KiA0KTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbCA9IChjbGlwQm90dG9tIC0geUVuZCkgKiAo
eEluY3JlYXNlICsgKGNsaXBSaWdodCArIDEpICogNCk7Ci0KLSAgICBmb3IgKGludCB5ID0geUVu
ZCArIDE7IHkgPiB5U3RhcnQ7IC0teSkgewotICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0
ICsgMTsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRp
bmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBp
eGVsID0gc3RhcnRLZXJuZWxQaXhlbDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVs
U2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAg
dG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBp
ZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsK
LQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAg
ICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQ
aXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFs
c1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKysp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KGtlcm5lbFBpeGVsKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKLSAgICAgICAg
ICAgICAgICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewot
ICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAg
ICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxz
PHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0Rh
dGEuYmlhcyk7Ci0gICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9
IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRy
aXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQg
eSkKLXsKLSAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeSA+PSAw
ICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICByZXR1cm4gKHkgKiBwYWludGlu
Z0RhdGEud2lkdGggKyB4KSA8PCAyOwotCi0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Ci0gICAg
ZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY2FzZSBF
REdFTU9ERV9EVVBMSUNBVEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgIHggPSAw
OwotICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKLSAgICAgICAgICAg
IHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOwotICAgICAgICBpZiAoeSA8IDApCi0gICAgICAg
ICAgICB5ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQot
ICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwotICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNhc2UgRURHRU1PREVfV1JB
UDoKLSAgICAgICAgd2hpbGUgKHggPCAwKQotICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEu
d2lkdGg7Ci0gICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB3aGlsZSAo
eSA8IDApCi0gICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHkg
JT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRh
LndpZHRoICsgeCkgPDwgMjsKLSAgICB9Ci19Ci0KLS8vIEZvciBvdGhlciByZWdpb25zIHRoYW4g
QwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwotICAg
IGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBt
X3RhcmdldE9mZnNldC54KCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJu
ZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3RhcmdldE9mZnNl
dC55KCk7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkg
KiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBm
bG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKLQotICAgIC8v
IG1fZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJl
cyB0aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gaGVpZ2h0
OyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkg
ewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVs
UGl4ZWxYOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZ
OwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0KLSAgICAg
ICAgICAgIHRvdGFsc1swXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwotICAgICAg
ICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVl
cykKLSAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAo
a2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0
UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKLSAg
ICAgICAgICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJu
ZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAg
dG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRl
eCArIDIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2
ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgdG90
YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCAr
IDMpKTsKLSAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKLSAgICAgICAgICAgICAgICAt
LWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAgICAg
ICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgICAg
ICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9r
ZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVs
LCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOwotICAgICAgICAgICAgKytz
dGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7
Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgICAg
ICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgfQotfQotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNw
cmFnbWEgd2FybmluZyhwb3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3Rh
cnQsIGludCB5RW5kKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2Ug
aXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBk
ZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgZWxzZQotICAgICAg
ICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBj
bGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1
bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJl
Ci0gICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhl
cmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8
dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBm
YXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwot
fQotCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCi17Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQot
ICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotCi0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBzb3VyY2VQaXhlbEFycmF5OwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0g
ICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERy
YXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGVsc2UKLSAgICAgICAgc291
cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewotICAgICAgICAqc291cmNlUGl4
ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAotICAgICAgICBwYWludFNp
emUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2JpYXMg
KiAyNTUsCi0gICAgICAgIG5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCi0gICAgfTsK
LQotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0
ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xp
cEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKLQot
ICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJh
cmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnQgaXRlcmF0aW9u
cyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhl
aWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKLSAgICAgICAgaW50IHN0cmlkZSA9
IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlw
Qm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0KLSAgICAgICAgQ29uY3VycmVudFdvcmtR
dWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAg
aW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0gICAgICAgICAgICBpbnQgeUVuZCA9IHN0
ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0b20pOwotCi0gICAgICAg
ICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRv
bSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldElu
dGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBjbGlw
Qm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwotICAg
IGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAgICBpZiAobV90YXJnZXRP
ZmZzZXQueSgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICBpZiAoY2xpcEJv
dHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRp
bmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdo
dCgpKTsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0
LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNsaXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgp
KQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJn
ZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRvbSk7CisgICAgQVNTRVJU
KCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVk
Z2VNb2RlVHlwZSYgdHlwZSkKQEAgLTQ1MywxMCArODEsOSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7
CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVDb252b2x2ZU1hdHJpeCI7Ci0gICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgdHMg
PDwgIiBvcmRlcj1cIiIgPDwgbV9rZXJuZWxTaXplIDw8ICJcIiAiCiAgICAgICAgPDwgImtlcm5l
bE1hdHJpeD1cIiIgPDwgbV9rZXJuZWxNYXRyaXggIDw8ICJcIiAiCiAgICAgICAgPDwgImRpdmlz
b3I9XCIiIDw8IG1fZGl2aXNvciA8PCAiXCIgIgpAQCAtNDY1LDkgKzkyLDYgQEAgVGV4dFN0cmVh
bSYgRkVDb252b2x2ZU1hdHJpeDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXQKICAgICAgICA8PCAiZWRnZU1vZGU9XCIiIDw8IG1fZWRnZU1vZGUgPDwg
IlwiICIKICAgICAgICA8PCAia2VybmVsVW5pdExlbmd0aD1cIiIgPDwgbV9rZXJuZWxVbml0TGVu
Z3RoIDw8ICJcIiAiCiAgICAgICAgPDwgInByZXNlcnZlQWxwaGE9XCIiIDw8IG1fcHJlc2VydmVB
bHBoYSA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2Nv
cGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLjEzMzliYTdh
NmI2ZmVkMTFiZTE0YThiYzIyNjBhOWQxNjlkM2ZlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNSw2IEBACiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOCw3MCArMzgsMzAgQEAgZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZv
bHZlTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAg
ICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25z
dCBGbG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShj
b25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25z
dCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQm
IGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYga2VybmVsTWF0cml4KTsKIAotICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2VybmVsU2l6ZTsgfQotICAgIHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUpIHsg
bV9rZXJuZWxTaXplID0ga2VybmVsU2l6ZTsgfQorICAgIHZvaWQgc2V0RGl2aXNvcihmbG9hdCBk
aXZpc29yKSB7IG1fZGl2aXNvciA9IGRpdmlzb3I7IH0KKyAgICB2b2lkIHNldEJpYXMoZmxvYXQg
YmlhcykgeyBtX2JpYXMgPSBiaWFzOyB9CisgICAgdm9pZCBzZXRUYXJnZXRPZmZzZXQoY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCkgeyBtX3RhcmdldE9mZnNldCA9IHRhcmdldE9mZnNldDsg
fQorICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKSB7IG1fZWRnZU1v
ZGUgPSBlZGdlTW9kZTsgfQorICAgIHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoKSB7IG1fa2VybmVsVW5pdExlbmd0aCA9IGtlcm5lbFVu
aXRMZW5ndGg7IH0KKyAgICB2b2lkIHNldFByZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhh
KSB7IG1fcHJlc2VydmVBbHBoYSA9IHByZXNlcnZlQWxwaGE7IH0KKyAgICB2b2lkIHNldEtlcm5l
bE1hdHJpeChjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpIHsgbV9rZXJuZWxNYXRy
aXggPSBrZXJuZWxNYXRyaXg7IH0KIAotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsTWF0cml4OyB9Ci0gICAgdm9pZCBzZXRLZXJuZWwoY29u
c3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgZmxvYXQgZGl2aXNvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZGl2aXNvcjsgfQotICAgIGJvb2wgc2V0RGl2aXNvcihmbG9hdCk7Ci0KLSAgICBmbG9hdCBi
aWFzKCkgY29uc3QgeyByZXR1cm4gbV9iaWFzOyB9Ci0gICAgYm9vbCBzZXRCaWFzKGZsb2F0KTsK
LQotICAgIEludFBvaW50IHRhcmdldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0T2Zm
c2V0OyB9Ci0gICAgYm9vbCBzZXRUYXJnZXRPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKLQotICAg
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KLSAg
ICBib29sIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBGbG9hdFBvaW50IGtlcm5l
bFVuaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IH0KLSAgICBi
b29sIHNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgYm9vbCBw
cmVzZXJ2ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFscGhhOyB9Ci0gICAgYm9v
bCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVDb252b2x2ZU1hdHJpeD4+IGRlY29kZShEZWNvZGVy
Jik7CiAKIHByaXZhdGU6CisgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJu
ZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0
T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsK
IAotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAg
ZmxvYXQgYmlhczsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsK
LQotICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBm
bG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwotCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0cml4Ijsg
fQotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhh
VmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFp
bnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGlu
dCB5RW5kKTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFsdWUoUGFpbnRp
bmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3JhcHBlciBmdW5jdGlvbnMK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFsbGVsaXphdGlvbiBwYXJ0
cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CkBAIC0xMTMsNSArNzMsODAgQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8ZmxvYXQ+IG1fa2VybmVsTWF0cml4OwogfTsKIAordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbFNpemU7CisgICAgZW5jb2RlciA8PCBt
X2Rpdmlzb3I7CisgICAgZW5jb2RlciA8PCBtX2JpYXM7CisgICAgZW5jb2RlciA8PCBtX3Rhcmdl
dE9mZnNldDsKKyAgICBlbmNvZGVyIDw8IG1fZWRnZU1vZGU7CisgICAgZW5jb2RlciA8PCBtX2tl
cm5lbFVuaXRMZW5ndGg7CisgICAgZW5jb2RlciA8PCBtX3ByZXNlcnZlQWxwaGE7CisgICAgZW5j
b2RlciA8PCBtX2tlcm5lbE1hdHJpeDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8UmVmPEZFQ29udm9sdmVNYXRyaXg+PiBGRUNvbnZvbHZlTWF0cml4OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IGtlcm5l
bFNpemU7CisgICAgZGVjb2RlciA+PiBrZXJuZWxTaXplOworICAgIGlmICgha2VybmVsU2l6ZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IGRpdmlzb3I7CisgICAgZGVjb2RlciA+PiBkaXZpc29yOworICAgIGlmICghZGl2aXNvcikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJp
YXM7CisgICAgZGVjb2RlciA+PiBiaWFzOworICAgIGlmICghYmlhcykKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IHRhcmdldE9mZnNl
dDsKKyAgICBkZWNvZGVyID4+IHRhcmdldE9mZnNldDsKKyAgICBpZiAoIXRhcmdldE9mZnNldCkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8RWRnZU1v
ZGVUeXBlPiBlZGdlTW9kZTsKKyAgICBkZWNvZGVyID4+IGVkZ2VNb2RlOworICAgIGlmICghZWRn
ZU1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UG9pbnQ+IGtlcm5lbFVuaXRMZW5ndGg7CisgICAgZGVjb2RlciA+PiBrZXJuZWxVbml0
TGVuZ3RoOworICAgIGlmICgha2VybmVsVW5pdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gcHJlc2VydmVBbHBoYTsKKyAgICBk
ZWNvZGVyID4+IHByZXNlcnZlQWxwaGE7CisgICAgaWYgKCFrZXJuZWxVbml0TGVuZ3RoKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8Zmxv
YXQ+PiBrZXJuZWxNYXRyaXg7CisgICAgZGVjb2RlciA+PiBrZXJuZWxNYXRyaXg7CisgICAgaWYg
KCFrZXJuZWxNYXRyaXgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKCprZXJuZWxTaXplLCAqZGl2aXNvciwgKmJpYXMs
ICp0YXJnZXRPZmZzZXQsICplZGdlTW9kZSwgKmtlcm5lbFVuaXRMZW5ndGgsICpwcmVzZXJ2ZUFs
cGhhLCBXVEZNb3ZlKCprZXJuZWxNYXRyaXgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpFZGdlTW9kZVR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
ICAgICBXZWJDb3JlOjpFZGdlTW9kZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVf
VU5LTk9XTiwKKyAgICAgICAgV2ViQ29yZTo6RURHRU1PREVfRFVQTElDQVRFLAorICAgICAgICBX
ZWJDb3JlOjpFREdFTU9ERV9XUkFQLAorICAgICAgICBXZWJDb3JlOjpFREdFTU9ERV9OT05FCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVDb252b2x2ZU1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHAKaW5kZXggZWViMTcyOGRiMzVlOGFjMzAyYjI3ZTRjM2ZmMzRjYjg4NTViOWQwOS4uNWI1M2Qz
NTY2YTlhODY2ZjY0ZDk4OGU4ODcyNWJiZWJjZjE0ZjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjcsMzYgKzI4LDI3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaWZmdXNl
TGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIERpZmZ1
c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQs
IDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdo
dFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKK1JlZjxGRURpZmZ1c2VMaWdodGluZz4g
RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlKQogeworICAgIHJl
dHVybiBjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBr
ZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSk7CiB9
CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxG
RURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlKQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhjb2xvciwgc3VyZmFjZVNjYWxlLCBk
aWZmdXNlQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShzb3VyY2UpKSk7CiB9CiAK
LUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KLWJv
b2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29u
c3RhbnQpCitGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3Im
IGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmIHNvdXJjZSkK
KyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBz
cGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2Vy
bmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcp
CiB7Ci0gICAgaWYgKG1fZGlmZnVzZUNvbnN0YW50ID09IGRpZmZ1c2VDb25zdGFudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50
OwotICAgIHJldHVybiB0cnVlOwogfQogCi1UZXh0U3RyZWFtJiBGRURpZmZ1c2VMaWdodGluZzo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBl
IHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVEaWZmdXNlTGlnaHRpbmc6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRGlmZnVzZUxpZ2h0aW5nIjsKLSAg
ICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9u
KTsKICAgICB0cyA8PCAiIHN1cmZhY2VTY2FsZT1cIiIgPDwgbV9zdXJmYWNlU2NhbGUgPDwgIlwi
ICIKICAgICAgICA8PCAiZGlmZnVzZUNvbnN0YW50PVwiIiA8PCBtX2RpZmZ1c2VDb25zdGFudCA8
PCAiXCIgIgogICAgICAgIDw8ICJrZXJuZWxVbml0TGVuZ3RoPVwiIiA8PCBtX2tlcm5lbFVuaXRM
ZW5ndGhYIDw8ICIsICIgPDwgbV9rZXJuZWxVbml0TGVuZ3RoWSA8PCAiXCJdXG4iOwotCi0gICAg
VGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0
KDApLT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0
dXJuIHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYz
ZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4uMjBjNzgwYzUyMmZjOTlkZjM4ZmI5MTE1ZDJhMGMw
ZmY2YmY0ZDc2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwyMSArMjYsMjUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMaWdodFNvdXJjZTsKLQogY2xhc3MgRkVEaWZmdXNl
TGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVE
aWZmdXNlTGlnaHRpbmcoKTsKLQotICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9Ci0gICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQo
ZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBD
b2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0
ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291cmNlJiYp
OwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFRGlmZnVzZUxpZ2h0
aW5nPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGlu
ZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJik7CisgICAgCisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRURpZmZ1c2VMaWdodGluZz4+IEZFRGlmZnVzZUxp
Z2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGlu
Zzo6ZGVjb2RlPERlY29kZXIsIEZFRGlmZnVzZUxpZ2h0aW5nPihkZWNvZGVyKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0
NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNmYTEuLjliMTljNzY5ZDM2MGI2YzRm
ZjI5YmIwYmZlNTFhMzk2ZjFkZjQ2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBA
IC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMzIgKzI1LDQ2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIK
IAotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYgZmlsdGVyLCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpEaXNwbGFjZW1lbnRNYXApCi0gICAgLCBtX3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxT
ZWxlY3RvcikKLSAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQotICAg
ICwgbV9zY2FsZShzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRN
YXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCiB7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5u
ZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAotUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3Bs
YWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhD
aGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCBzY2FsZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVu
dE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7
Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3Qg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3hDaGFu
bmVsU2VsZWN0b3IgPT0geENoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1feENoYW5uZWxTZWxlY3RvciA9IHhDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFlDaGFubmVsU2VsZWN0b3IoY29u
c3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yKQotewotICAgIGlmIChtX3lD
aGFubmVsU2VsZWN0b3IgPT0geUNoYW5uZWxTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIG1feUNoYW5uZWxTZWxlY3RvciA9IHlDaGFubmVsU2VsZWN0b3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxl
KQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5
cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9y
LCBmbG9hdCBzY2FsZSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRURpc3BsYWNlbWVudE1h
cCkKKyAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKQorICAgICwgbV95
Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCisgICAgLCBtX3NjYWxlKHNjYWxlKQog
ewotICAgIGlmIChtX3NjYWxlID09IHNjYWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
bV9zY2FsZSA9IHNjYWxlOwotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
Citjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjppbWFnZUNv
bG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKICAgICAv
LyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycgcHJvcGVydHkgb25seSBh
cHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBw
bHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCBy
ZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4KICAgICAvLyBUaGUgcmVz
dWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2Vt
ZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JT
cGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsKLX0KLQotdm9pZCBGRURp
c3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGlu
LCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3Qg
cHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAg
ICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwor
ICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmNv
bG9yU3BhY2UoKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhl
bCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKK0Zsb2F0UmVjdCBG
RURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBp
eGVsID0gNDsKLSAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Cisg
ICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
OwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQor
RmlsdGVySW1hZ2VWZWN0b3IgRkVEaXNwbGFjZW1lbnRNYXA6OnRha2VJbnB1dHMoRmlsdGVySW1h
Z2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwot
Ci0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2FsY3Vs
YXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1l
ZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFj
ZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7
Ci0gICAgCi0gICAgaWYgKCFpbnB1dEltYWdlIHx8ICFkaXNwbGFjZW1lbnRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNl
bWVudEltYWdlLT5sZW5ndGgoKSk7Ci0KLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRl
cigpOwotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEZsb2F0
U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3NjYWxlLCBt
X3NjYWxlIH0pOwotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1
NS4wOwotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsK
LSAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKLSAg
ICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7Ci0gICAg
Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOwotICAgIGlu
dCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKLQotICAgIGludCByb3dC
eXRlcyA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
cGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9
IHkgKiByb3dCeXRlczsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53
aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0
YXJ0T2Zmc2V0ICsgeCAqIDQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBzcmNYID0g
eCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zm
c2V0WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRp
c3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwotCi0gICAgICAgICAgICB1bnNp
Z25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwg
MCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvblBpeGVsUHRyID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNy
Y1gsIHNyY1ksIHJvd0J5dGVzKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKHN0YWNr
LnNpemUoKSA+PSAyKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpLCBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpAQCAtMTc0LDE3ICs4OSwxMiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hh
bm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0m
IEZFRGlzcGxhY2VtZW50TWFwOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRz
LCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBG
RURpc3BsYWNlbWVudE1hcDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
RmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVE
aXNwbGFjZW1lbnRNYXAiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwogICAgIHRzIDw8ICIgc2NhbGU9XCIiIDw8IG1fc2NhbGUg
PDwgIlwiICIKICAgICAgICA8PCAieENoYW5uZWxTZWxlY3Rvcj1cIiIgPDwgbV94Q2hhbm5lbFNl
bGVjdG9yIDw8ICJcIiAiCiAgICAgICAgPDwgInlDaGFubmVsU2VsZWN0b3I9XCIiIDw8IG1feUNo
YW5uZWxTZWxlY3RvciA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUg
aW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgaW5wdXRFZmZlY3QoMSktPmV4dGVybmFsUmVw
cmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBkZDczMmE4ODEwNzNlMjY2YmM4NDZhZmU2ODE5ZTY3
NTE2MjNhM2EyLi5jZjA0NmVlYjAwOTY4NGIzNWQzZGZmMDU3MjE5YWM4YjA5MGRiY2IwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIzLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMzggKzM2LDgx
IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNzIEZFRGlzcGxhY2VtZW50TWFw
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpc3Bs
YWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2Fs
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3Jl
YXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0
b3I7IH0KLSAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9y
VHlwZSk7CisgICAgdm9pZCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvcikgeyBtX3hDaGFubmVsU2VsZWN0b3IgPSB4Q2hhbm5lbFNl
bGVjdG9yOyB9CisgICAgdm9pZCBzZXRZQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcikgeyBtX3lDaGFubmVsU2VsZWN0b3IgPSB5Q2hhbm5l
bFNlbGVjdG9yOyB9CisgICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSkgeyBtX3NjYWxlID0g
c2NhbGU7IH0KIAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvcjsgfQotICAgIGJvb2wgc2V0WUNoYW5uZWxT
ZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKLQotICAgIGZsb2F0IHNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwotCi0g
ICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxSZWY8RkVEaXNwbGFjZW1lbnRNYXA+PiBkZWNvZGUoRGVjb2Rl
ciYpOwogCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5l
bFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9y
VHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0
b3IsIGZsb2F0IHNjYWxlKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVEaXNwbGFjZW1lbnRNYXAiOyB9CisgICAgaW50IHhDaGFubmVsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlD
aGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rv
ciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5u
ZWxTZWxlY3RvciAtIDE7IH0KKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRl
ckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29m
dHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxl
Y3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feUNoYW5uZWxTZWxlY3RvcjsKICAgICBm
bG9hdCBtX3NjYWxlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgbV94Q2hhbm5lbFNlbGVjdG9yOworICAgIGVuY29kZXIgPDwgbV95Q2hhbm5lbFNlbGVj
dG9yOworICAgIGVuY29kZXIgPDwgbV9zY2FsZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRGlzcGxhY2VtZW50TWFwPj4gRkVEaXNwbGFjZW1lbnRN
YXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhbm5l
bFNlbGVjdG9yVHlwZT4geENoYW5uZWxTZWxlY3RvcjsKKyAgICBkZWNvZGVyID4+IHhDaGFubmVs
U2VsZWN0b3I7CisgICAgaWYgKCF4Q2hhbm5lbFNlbGVjdG9yKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDaGFubmVsU2VsZWN0b3JUeXBlPiB5Q2hh
bm5lbFNlbGVjdG9yOworICAgIGRlY29kZXIgPj4geUNoYW5uZWxTZWxlY3RvcjsKKyAgICBpZiAo
IXlDaGFubmVsU2VsZWN0b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBzY2FsZTsKKyAgICBkZWNvZGVyID4+IHNjYWxlOworICAgIGlm
ICghc2NhbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVE
aXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSgqeENoYW5uZWxTZWxlY3RvciwgKnlDaGFubmVsU2VsZWN0
b3IsICpzY2FsZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q2hhbm5lbFNlbGVj
dG9yVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNv
cmU6OkNoYW5uZWxTZWxlY3RvclR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9VTktO
T1dOLAorICAgICAgICBXZWJDb3JlOjpDSEFOTkVMX1IsCisgICAgICAgIFdlYkNvcmU6OkNIQU5O
RUxfRywKKyAgICAgICAgV2ViQ29yZTo6Q0hBTk5FTF9CLAorICAgICAgICBXZWJDb3JlOjpDSEFO
TkVMX0EKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURpc3BsYWNlbWVudE1hcCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAppbmRleCA1Y2U3YmUzYTQ3MWI0N2I4ZGQ1NDI2ZDk2NWJiZmU3ODlmNmJiZGQ4Li5lYmI4YTNi
NmRjNWVmMGExMjdlYjdkMDAxNjNkNDhmYTQ2YmUyOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIy
LDE5ICsyMywyMyBAQAogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJ
bWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0
ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKLSAgICAsIG1fc3RkWChzdGRYKQotICAgICwgbV9z
dGRZKHN0ZFkpCisKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0
IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGREZXZpYXRpb25YLCBzdGREZXZpYXRp
b25ZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Cit9CisKK0ZFRHJvcFNo
YWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlv
blksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBz
aGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFRHJvcFNoYWRvdykKKyAg
ICAsIG1fc3RkRGV2aWF0aW9uWChzdGREZXZpYXRpb25YKQorICAgICwgbV9zdGREZXZpYXRpb25Z
KHN0ZERldmlhdGlvblkpCiAgICAgLCBtX2R4KGR4KQogICAgICwgbV9keShkeSkKICAgICAsIG1f
c2hhZG93Q29sb3Ioc2hhZG93Q29sb3IpCkBAIC00MiwxMDAgKzQ3LDQ2IEBAIEZFRHJvcFNoYWRv
dzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBm
bG9hdCBkeCwgZmxvCiB7CiB9CiAKLVJlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKK0lu
dE91dHNldHMgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVPdXRzZXRzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwg
ZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7Ci19Ci0KLXZvaWQgRkVEcm9wU2hhZG93
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0
aGlzLT5maWx0ZXIoKTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9m
ZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWlu
dFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9
KSk7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3Qp
OwotCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtl
cm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgLy8gV2UgdGFrZSB0
aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3
ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0
ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xp
cHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1h
eEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZERldmlhdGlvblgsIG1fc3RkRGV2
aWF0aW9uWSB9KTsKKyAgICByZXR1cm4geworICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNl
dFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRT
aXplLndpZHRoKCkgKyBtX2R4KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXpl
LmhlaWdodCgpICsgbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53
aWR0aCgpIC0gbV9keCkKKyAgICB9OwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEp
OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotICAgIEZp
bHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgaW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0
cnkucmVzb2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIAotICAgIEZsb2F0U2l6
ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fZHgsIG1fZHkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5n
UmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFk
b3dPcGFjaXR5KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1h
Z2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhh
KDEpOwotCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwg
bV9zaGFkb3dDb2xvcik7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3Vs
dENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1
bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdElt
YWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBw
aXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291
cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZl
ci0+c2l6ZSgpLndpZHRoKCkpOworICAgIGltYWdlUmVjdC51bml0ZShpbnB1dHNbMF0tPmltYWdl
UmVjdCgpKTsKICAgICAKLSAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBzaGFkb3dBcmVhKTsKLQotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxs
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSks
IG1fc2hhZG93Q29sb3IpOwotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOworICAgIEludFNpemUga2VybmVs
U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKHsgbV9zdGREZXZpYXRp
b25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgCisgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBr
ZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94
IGJsdXIgdGhyZWUgdGltZXMuCisgICAgaW1hZ2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUu
aGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7CisgICAgcmV0dXJuIGdlb21ldHJ5
LmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lv
bik7CiB9CiAKLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKK0ZpbHRl
ckltYWdlVmVjdG9yIEZFRHJvcFNoYWRvdzo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYg
c3RhY2spIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICByZXR1cm4gewot
ICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKLSAg
ICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKLSAgICAg
ICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpICsgbV9keSksCi0gICAgICAg
IHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCkKLSAgICB9OworICAg
IEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgp
IH07CiB9CiAKLVRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAorVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwiW2ZlRHJvcFNoYWRvdyI7CiAgICAgRmlsdGVyRWZmZWN0Ojpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkWCA8PCAiLCAiIDw8IG1fc3RkWSA8PCAiXCIgZHg9XCIi
IDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBmbG9vZC1jb2xvcj1cIiIgPDwg
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFkb3dDb2xvcikgPDwiXCIgZmxv
b2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJdXG4iOwotCi0gICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5l
eHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgdHMgPDwgIiBz
dGREZXZpYXRpb249XCIiIDw8IG1fc3RkRGV2aWF0aW9uWCA8PCAiLCAiIDw8IG1fc3RkRGV2aWF0
aW9uWSA8PCAiXCIgZHg9XCIiIDw8IG1fZHggPDwgIlwiIGR5PVwiIiA8PCBtX2R5IDw8ICJcIiBm
bG9vZC1jb2xvcj1cIiIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQobV9zaGFk
b3dDb2xvcikgPDwiXCIgZmxvb2Qtb3BhY2l0eT1cIiIgPDwgbV9zaGFkb3dPcGFjaXR5IDw8ICJd
XG4iOwogICAgIHJldHVybiB0czsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAx
MmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmRmOTAxNzQ3OGEwMjBmNGVhMWZhODRj
ZWJjYjM2ODg3NGRmYTBlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw1MyArMjEsOTIgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3Mg
RkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZp
YXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7
CiAKLSAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9Ci0g
ICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZFgpIHsgbV9zdGRYID0gc3RkWDsgfQot
Ci0gICAgZmxvYXQgc3RkRGV2aWF0aW9uWSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWTsgfQotICAg
IHZvaWQgc2V0U3RkRGV2aWF0aW9uWShmbG9hdCBzdGRZKSB7IG1fc3RkWSA9IHN0ZFk7IH0KLQot
ICAgIGZsb2F0IGR4KCkgY29uc3QgeyByZXR1cm4gbV9keDsgfQorICAgIHZvaWQgc2V0U3RkRGV2
aWF0aW9uWChmbG9hdCBzdGREZXZpYXRpb25YKSB7IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlh
dGlvblg7IH0KKyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkg
eyBtX3N0ZERldmlhdGlvblkgPSBzdGREZXZpYXRpb25ZOyB9CiAgICAgdm9pZCBzZXREeChmbG9h
dCBkeCkgeyBtX2R4ID0gZHg7IH0KLQotICAgIGZsb2F0IGR5KCkgY29uc3QgeyByZXR1cm4gbV9k
eTsgfQogICAgIHZvaWQgc2V0RHkoZmxvYXQgZHkpIHsgbV9keSA9IGR5OyB9Ci0KLSAgICBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0NvbG9yOyB9IAog
ICAgIHZvaWQgc2V0U2hhZG93Q29sb3IoY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKSB7IG1fc2hh
ZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsgfQotCi0gICAgZmxvYXQgc2hhZG93T3BhY2l0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93T3BhY2l0eTsgfQogICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0
eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7
IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZWY8RkVEcm9wU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBGRURy
b3BTaGFkb3coRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
JiwgZmxvYXQpOworICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBz
dGREZXZpYXRpb25ZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiwgZmxvYXQgb3Bh
Y2l0eSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIkZFRHJvcFNoYWRvdyI7IH0KKyAgICBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBmbG9hdCBtX3N0ZFg7Ci0gICAgZmxvYXQgbV9zdGRZOworICAgIGZs
b2F0IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBmbG9hdCBtX3N0ZERldmlhdGlvblk7CiAgICAgZmxv
YXQgbV9keDsKICAgICBmbG9hdCBtX2R5OwogICAgIENvbG9yIG1fc2hhZG93Q29sb3I7CiAgICAg
ZmxvYXQgbV9zaGFkb3dPcGFjaXR5OwogfTsKLSAgICAKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KK3ZvaWQgRkVEcm9wU2hhZG93OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWDsKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2
aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8IG1fZHg7CisgICAgZW5jb2RlciA8PCBtX2R5OworICAg
IGVuY29kZXIgPDwgbV9zaGFkb3dDb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fc2hhZG93T3BhY2l0
eTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRHJv
cFNoYWRvdz4+IEZFRHJvcFNoYWRvdzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWDsKKyAgICBkZWNvZGVyID4+IHN0ZERl
dmlhdGlvblg7CisgICAgaWYgKCFzdGREZXZpYXRpb25YKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3RkRGV2aWF0aW9uWTsKKyAgICBk
ZWNvZGVyID4+IHN0ZERldmlhdGlvblk7CisgICAgaWYgKCFzdGREZXZpYXRpb25ZKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHg7Cisg
ICAgZGVjb2RlciA+PiBkeDsKKyAgICBpZiAoIWR4KQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZHk7CisgICAgZGVjb2RlciA+PiBkeTsK
KyAgICBpZiAoIWR5KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxDb2xvcj4gc2hhZG93Q29sb3I7CisgICAgZGVjb2RlciA+PiBzaGFkb3dDb2xvcjsK
KyAgICBpZiAoIXNoYWRvd0NvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hhZG93T3BhY2l0eTsKKyAgICBkZWNvZGVyID4+IHNo
YWRvd09wYWNpdHk7CisgICAgaWYgKCFzaGFkb3dPcGFjaXR5KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCpzdGREZXZpYXRp
b25YLCAqc3RkRGV2aWF0aW9uWSwgKmR4LCAqZHksICpzaGFkb3dDb2xvciwgKnNoYWRvd09wYWNp
dHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBiNDIzNTUzNGMzOGIx
ZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi45MWE4ODU3NmQzMzVlYjFlOTA4YjQ0M2VjMmUx
OWUwZDkzMzUwNTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNTYg
KzI1LDMzIEBACiAjaW5jbHVkZSAiRkVGbG9vZC5oIgogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxp
emF0aW9uLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0
ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkK
LSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQotICAgICwgbV9mbG9vZENv
bG9yKGZsb29kQ29sb3IpCi0gICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCi17Ci19
Ci0KLVJlZjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVGbG9v
ZDo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChjb2xvciwgb3BhY2l0eSkpOwog
fQogCi1ib29sIEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIGlmIChtX2Zsb29kQ29sb3IgPT0gY29sb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX2Zsb29kQ29sb3IgPSBjb2xvcjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUZs
b29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQorRkVGbG9vZDo6RkVGbG9v
ZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmls
dGVyRWZmZWN0KFR5cGU6OkZFRmxvb2QpCisgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikK
KyAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKLSAgICBpZiAobV9mbG9vZE9w
YWNpdHkgPT0gZmxvb2RPcGFjaXR5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9mbG9v
ZE9wYWNpdHkgPSBmbG9vZE9wYWNpdHk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUZsb29kOjpjYWxjdWxh
dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGaWx0ZXJHZW9tZXRy
eSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAog
ewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBj
b2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNp
dHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1
cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVyUmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LVRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8
PCAiW2ZlRmxvb2QiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZmxvb2QtY29sb3I9XCIiIDw8IHNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KGZsb29kQ29sb3IoKSkgPDwgIlwiICIKLSAgICAg
ICA8PCAiZmxvb2Qtb3BhY2l0eT1cIiIgPDwgZmxvb2RPcGFjaXR5KCkgPDwgIlwiXVxuIjsKKyAg
ICB0cyA8PCAiIGZsb29kLWNvbG9yPVwiIiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFz
VGV4dChtX2Zsb29kQ29sb3IpIDw8ICJcIiAiIDw8ICJmbG9vZC1vcGFjaXR5PVwiIiA8PCBtX2Zs
b29kT3BhY2l0eSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0
ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJmYTA2MTczNDhlLi43YTVkY2JkMzc5MWUxODAxNjQw
NWZlOGI0MWZjODBlM2Q3YjhkYTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw0MiArMjMsNjIgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVh
dGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBvcGFjaXR5KTsKIAot
ICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9y
OyB9Ci0gICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRG
bG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2Zsb29kQ29sb3IgPSBjb2xvcjsgfQor
ICAgIHZvaWQgc2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkgeyBtX2Zsb29kT3Bh
Y2l0eSA9IGZsb29kT3BhY2l0eTsgfQogCi0gICAgZmxvYXQgZmxvb2RPcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mbG9vZE9wYWNpdHk7IH0KLSAgICBib29sIHNldEZsb29kT3BhY2l0eShmbG9h
dCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJl
ZjxGRUZsb29kPj4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBGRUZsb29kKGNv
bnN0IENvbG9yJiwgZmxvYXQgb3BhY2l0eSk7CiAKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxv
b2QgZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0
aGUgcmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJl
Z2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAg
ICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRS
ZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBv
dmVycmlkZSB7IH0KICNlbmRpZgogCi1wcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29u
c3QgQ29sb3ImLCBmbG9hdCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIkZFRmxvb2QiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBhcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRp
b24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ29sb3IgbV9mbG9vZENvbG9yOwogICAgIGZsb2F0
IG1fZmxvb2RPcGFjaXR5OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRkVG
bG9vZDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBt
X2Zsb29kQ29sb3I7CisgICAgZW5jb2RlciA8PCBtX2Zsb29kT3BhY2l0eTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFRmxvb2Q+PiBGRUZsb29kOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmbG9v
ZENvbG9yOworICAgIGRlY29kZXIgPj4gZmxvb2RDb2xvcjsKKyAgICBpZiAoIWZsb29kQ29sb3Ip
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBmbG9vZE9wYWNpdHk7CisgICAgZGVjb2RlciA+PiBmbG9vZE9wYWNpdHk7CisgICAgaWYgKCFm
bG9vZE9wYWNpdHkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
RkVGbG9vZDo6Y3JlYXRlKCpmbG9vZENvbG9yLCAqZmxvb2RPcGFjaXR5KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2Yz
NmViYjZiYmI4YWIzNjM5NDM2NS4uYmQzNGMwMmQyMTc5NjU5MGVjY2ZiYzRmNWQ5ZjIzYjczZGRj
YzIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjYsNDUwICsyNiw0MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAKLSNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKLXsKLSAg
ICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKLX0KLQotc3RhdGljIGNvbnN0
IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbmxp
bmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1
cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK1JlZjxGRUdhdXNzaWFuQmx1cj4g
RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZp
YXRpb25ZLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgLy8gQ2hlY2sgaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRl
dGFpbHMuCi0gICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7Ci0gICAgY2FzZSAwOgotICAgICAg
ICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8g
MiAtIDE7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsdGFMZWZ0ID0gcmFkaXVzIC8gMjsKLSAgICAg
ICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAyKSkgewotICAg
ICAgICAgICAgZGVsdGFMZWZ0Kys7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0LS07Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIShyYWRpdXMgJSAy
KSkgewotICAgICAgICAgICAgZGVsdGFSaWdodCsrOwotICAgICAgICAgICAgcmFkaXVzKys7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFR2F1c3NpYW5CbHVyKHN0ZERldmlhdGlvblgsIHN0ZERldmlhdGlvblksIGVkZ2VNb2RlKSk7
CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxv
YXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVyKQotICAgICwgbV9zdGRYKHgpCi0gICAgLCBtX3N0
ZFkoeSkKK0ZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCBzdGREZXZpYXRpb25Y
LCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0
ZXJFZmZlY3QoVHlwZTo6RkVHYXVzc2lhbkJsdXIpCisgICAgLCBtX3N0ZERldmlhdGlvblgoc3Rk
RGV2aWF0aW9uWCkKKyAgICAsIG1fc3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKQogICAgICwg
bV9lZGdlTW9kZShlZGdlTW9kZSkKIHsKIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNz
aWFuQmx1cjo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJs
dXIoZmlsdGVyLCB4LCB5LCBlZGdlTW9kZSkpOwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpCi17Ci0gICAgbV9zdGRYID0geDsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQotewotICAgIG1fc3RkWSA9
IHk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Ci19Ci0KLS8vIFRoaXMgZnVu
Y3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFubmVsLgotaW5saW5lIHZvaWQgYm94Qmx1
ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhD
bGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0
LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0
V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCi17Ci0g
ICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVp
bnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKLSAgICAvLyBNZW1vcnkgYWxp
Z25tZW50IGlzOiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgotICAgIGNvbnN0IGludCBjaGFubmVs
ID0gMzsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAg
ICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAgICAgICAgaW50IHN1bSA9IDA7Ci0K
LSAgICAgICAgLy8gRmlsbCB0aGUga2VybmVsLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1heEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGlu
ZSArIGkgKiBzdHJpZGU7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNE
YXRhICsgb2Zmc2V0OwotICAgICAgICAgICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IGxpbmUgKyB4ICogc3RyaWRlICsgY2hhbm5lbDsKLSAgICAgICAgICAgIHVpbnQ4X3QqIGRz
dFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0gICAgICAgICAgICAqZHN0UHRyID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtIC8gZHgpOwotCi0gICAgICAgICAgICAvLyBTaGlmdCBr
ZXJuZWwuCi0gICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zm
c2V0OwotICAgICAgICAgICAgICAgIHN1bSAtPSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0
cmlkZTsKLSAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsg
cmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtICs9ICpzcmNQdHI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhl
bEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0
cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwg
Ym9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgY29uc3QgaW50
IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7Ci0gICAgaWYg
KGFscGhhSW1hZ2UpCi0gICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1BpeGVsQXJy
YXksIGRzdFBpeGVsQXJyYXksIGR4LCBkeExlZnQsIGR4UmlnaHQsIHN0cmlkZSwgc3RyaWRlTGlu
ZSwgIGVmZmVjdFdpZHRoLCBlZmZlY3RIZWlnaHQsIG1heEtlcm5lbFNpemUpOwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVpbnQ4X3Qq
IGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKLQotICAgIC8vIENvbmNlcm5pbmcgdGhl
IGFycmF5IHdpZHRoL2xlbmd0aDogaXQgaXMgRWxlbWVudCBzaXplICsgTWFyZ2luICsgQm9yZGVy
LiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3aWxsIGJlCi0gICAgLy8gUCA9IHdpZHRoICogaGVpZ2h0
ICogY2hhbm5lbHMuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkg
ewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtUiA9
IDAsIHN1bUcgPSAwLCBzdW1CID0gMCwgc3VtQSA9IDA7Ci0KLSAgICAgICAgaWYgKGVkZ2VNb2Rl
ID09IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLSAgICAg
ICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1HICs9ICpz
cmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAg
ICAgICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJs
dXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4
KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHgg
KiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBp
eGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIg
PSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8g
U2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhM
ZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIg
PSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQ
dHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAt
PSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHgg
KyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBz
cmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgaGVyZS4KLSAgICAgICAgICAgIC8v
IEdldCBlZGdlIHZhbHVlcyBmb3IgZWRnZU1vZGUgJ2R1cGxpY2F0ZScuCi0gICAgICAgICAgICBj
b25zdCB1aW50OF90KiBlZGdlVmFsdWVMZWZ0ID0gc3JjRGF0YSArIGxpbmU7Ci0gICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVSaWdodCAgPSBzcmNEYXRhICsgKGxpbmUgKyAoZWZm
ZWN0V2lkdGggLSAxKSAqIHN0cmlkZSk7Ci0KLSAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5l
bC4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBkeExlZnQgKiAtMTsgaSA8IGR4UmlnaHQ7ICsr
aSkgewotICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgcmlnaHQgZm9yIG5lZ2F0aXZlIHZhbHVl
cyBvZiAnaSc/Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBz
dHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IG9mZnNldDsKLQotICAgICAgICAgICAgICAgIGlmIChpIDwgMCkgewotICAgICAgICAgICAgICAg
ICAgICBzdW1SICs9IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcg
Kz0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFs
dWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZUxlZnRbM107
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID49IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIg
Kz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZh
bHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNyY1B0
cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhl
bEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICB1aW50OF90
KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotCi0gICAgICAgICAgICAgICAg
KmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKLSAgICAgICAgICAg
ICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOwotICAgICAg
ICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7Ci0g
ICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCi0gICAgICAgICAgICAgICAgaWYg
KHggPCBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBlZGdlVmFsdWVMZWZ0
WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUIgLT0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQSAtPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZz
ZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1S
IC09IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAg
ICBzdW1BIC09IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoeCArIGR4UmlnaHQgPj0gZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
c3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBl
ZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVS
aWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
aWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IHNy
Y1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94Qmx1cihVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQp
Ci17Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGVmZmVjdFdpZHRoIDw9IDAgfHwgZWZmZWN0SGVpZ2h0IDw9IDAgfHwgc3RyaWRlIDw9
IDApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBtdXN0IGFsd2F5cyB1c2UgYW4gb2RkIHJhZGl1cy4KLSAgICBpZiAo
a2VybmVsU2l6ZSAlIDIgIT0gMSkKLSAgICAgICAga2VybmVsU2l6ZSArPSAxOwotCi0gICAgdklt
YWdlX0J1ZmZlciBlZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KGlvQnVmZmVyLmRhdGEoKSk7Ci0gICAgZWZmZWN0SW5CdWZmZXIud2lk
dGggPSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWln
aHQ7Ci0gICAgZWZmZWN0SW5CdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsKLSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBC
dWZmZXIuZGF0YSgpOwotICAgIGVmZmVjdE91dEJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwot
ICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0T3V0
QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzaXplIG9m
IGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBmaXJzdCB3aXRoIGEg
c3BlY2lhbCBmbGFnLiB2SW1hZ2Ugd2lsbCByZXR1cm4KLSAgICAvLyB0aGUgc2l6ZSBuZWVkZWQs
IG9yIGFuIGVycm9yICh3aGljaCBhcmUgYWxsIG5lZ2F0aXZlKS4KLSAgICBzaXplX3QgdG1wQnVm
ZmVyU2l6ZSA9IHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVm
ZmVjdE91dEJ1ZmZlciwgMCwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQgfCBrdkltYWdlR2V0VGVtcEJ1ZmZlclNpemUpOwotICAgIGlmICh0bXBCdWZm
ZXJTaXplIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIHRtcEJ1ZmZlciA9IGZh
c3RNYWxsb2ModG1wQnVmZmVyU2l6ZSk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgo
JmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5l
bFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0T3V0QnVmZmVyLCAmZWZmZWN0SW5CdWZmZXIsIHRtcEJ1
ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQp
OwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVj
dE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgV1RGOjpmYXN0RnJlZSh0bXBCdWZmZXIpOwotCi0gICAg
Ly8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIEFT
U0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0aCgpKTsKLSAgICBtZW1j
cHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkp
OwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBh
aW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAg
ICBpbnQgZHhMZWZ0ID0gMDsKLSAgICBpbnQgZHhSaWdodCA9IDA7Ci0gICAgaW50IGR5TGVmdCA9
IDA7Ci0gICAgaW50IGR5UmlnaHQgPSAwOwotICAgIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBm
cm9tQnVmZmVyID0gJmlvQnVmZmVyOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9
ICZ0ZW1wQnVmZmVyOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAg
ICAgaWYgKGtlcm5lbFNpemVYKSB7Ci0gICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJu
ZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
Ci0gICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKLSAgICAgICAgICAgICAgICBib3hCbHVy
TkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0
LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1
ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUu
d2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAg
ICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6
OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtl
cm5lbFNpemVZKSB7Ci0gICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0KTsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgICAg
ICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKLSAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJv
bUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUs
IDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2Vy
bmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCks
IHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAgICAgICAgICAg
Ym94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlz
QWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6OnN3YXAoZnJv
bUJ1ZmZlciwgdG9CdWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGZpbmFs
IHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIGlmICgmaW9CdWZmZXIg
IT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJv
bUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9t
QnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLSAgICB9Ci19Ci0KLWlubGluZSB2
b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKLXsK
LSAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0gICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChtX2VkZ2VNb2Rl
ID09IEVER0VNT0RFX05PTkUgfHwgbV9lZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7
Ci0gICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhbmRhcmRCb3hCbHVyKGlv
QnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwg
cGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7Ci19Ci0KLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCi17Ci0gICAgSW50U2l6ZSBwYWludFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBh
cmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5
R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxB
cnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBw
YWludFNpemUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBs
eShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhl
bEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNp
emUmIHBhaW50U2l6ZSkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3NpYW5LZXJuZWxGYWN0b3Io
KQogewotI2lmICFVU0UoQUNDRUxFUkFURSkKLSAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRT
aXplLndpZHRoKCk7Ci0gICAgaW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41
ZjsKLSAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBh
aW50U2l6ZS5oZWlnaHQoKSkgLyAoc19taW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0
ICogcGFpbnRTaXplLndpZHRoKCkpOwotCi0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAx
KSB7Ci0gICAgICAgIFdURjo6UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBw
YXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwot
Ci0gICAgICAgIGludCBqb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAg
ICBpZiAoam9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiYmxv
Y2tIZWlnaHQiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJl
IHNsaWdodGx5IGxhcmdlciBzaW5jZQotICAgICAgICAgICAgLy8gYmxvY2tIZWlnaHQgKiBqb2Jz
IDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIg
ImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgY29uc3QgaW50IGJsb2NrSGVpZ2h0ID0gcGFp
bnRTaXplLmhlaWdodCgpIC8gam9iczsKLSAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4
dHJhID0gcGFpbnRTaXplLmhlaWdodCgpICUgam9iczsKLQotICAgICAgICAgICAgaW50IGN1cnJl
bnRZID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IDA7IGpvYiA8IGpvYnM7IGpvYisr
KSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVy
ID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGludCBzdGFydFkgPSAham9iID8gMCA6IGN1cnJl
bnRZIC0gZXh0cmFIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9i
c1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotICAgICAgICAgICAg
ICAgIGludCBlbmRZID0gam9iID09IGpvYnMgLSAxID8gY3VycmVudFkgOiBjdXJyZW50WSArIGV4
dHJhSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZSA9IChlbmRZIC0gc3Rh
cnRZKSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGlmICgham9iKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9CdWZmZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBpeGVsQXJyYXk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9
IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVt
Y3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSwgaW9CdWZmZXIuZGF0YSgpICsgc3RhcnRZ
ICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtl
cm5lbFNpemVYID0ga2VybmVsU2l6ZVg7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNp
emVZID0ga2VybmVsU2l6ZVk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIENvcHkgdG9nZXRoZXIgdGhlIHBhcnRz
IG9mIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIGN1cnJlbnRZID0gMDsKLSAgICAgICAgICAgIGZv
ciAoaW50IGpvYiA9IDE7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9i
KTsKLSAgICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0OwotICAgICAgICAgICAgICAgIGlu
dCBkZXN0aW5hdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAg
ICAgICAgICBpbnQgYWRqdXN0ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBi
bG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnRZ
ICs9IGFkanVzdGVkQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0g
ZXh0cmFIZWlnaHQgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNl
dCA9IGN1cnJlbnRZICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVk
QmxvY2tIZWlnaHQgKiBzY2FubGluZTsKLQotICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZl
ci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgp
ICsgc291cmNlT2Zmc2V0LCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9k
ZS4KLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5
IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgcGxhdGZv
cm1BcHBseUdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJu
ZWxTaXplWSwgcGFpbnRTaXplKTsKKyAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZs
b2F0KTsKIH0KIAogc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQog
ewogICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3
b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0CiAgICAg
Ly8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29t
cGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgorICAgIHN0YXRpYyBjb25zdCBpbnQgZ01h
eEtlcm5lbFNpemUgPSA1MDA7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVk
PigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxG
YWN0b3IoKSArIDAuNWYpKSk7CiAgICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXpl
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUpKSk7CiB9Ci0gICAgCi1JbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXpl
IHN0ZERldmlhdGlvbikKKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIEFTU0VS
VChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAw
KTsKICAgICBJbnRTaXplIGtlcm5lbFNpemU7CkBAIC00ODMsMTIgKzc0LDEyIEBAIEludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQogICAgIHJldHVybiBrZXJuZWxTaXplOwogfQogCi1JbnRTaXplIEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVs
U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3Vs
YXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3Rk
RGV2aWF0aW9uKSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24gLypmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikq
Lyk7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgYXV0byBrZXJu
ZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7CiAKQEAg
LTQ5Niw3MiArODcsNDMgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0
U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXpl
LndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorSW50T3V0c2V0cyBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9z
dGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgcmV0dXJuIHsgb3V0c2V0U2l6
ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCkgfTsKK30KIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9
IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworRmxvYXRSZWN0IEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+
aW1hZ2VSZWN0KCk7CiAgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3Qg
aW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBF
REdFTU9ERV9OT05FKSB7Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAobV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKQorICAgICAgICByZXR1cm4gaW1hZ2VSZWN0
OwogCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQg
d2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJz
b2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwot
ICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICog
MC41Zik7CisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRy
eS5yZXNvbHZlSW1hZ2VTaXplKHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSkp
OwogCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3Qu
aW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBh
aW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgorICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6
ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7CiAKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01h
eFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFR2F1
c3NpYW5CbHVyOjppc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykg
Y29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsK
LQotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNp
emUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAga2VybmVsU2l6ZS5zY2FsZShm
aWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRl
clNjYWxlKCkpOwotICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1w
SW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJ
bWFnZSgpOwogfQogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QK
K0ZpbHRlckltYWdlVmVjdG9yIEZFR2F1c3NpYW5CbHVyOjp0YWtlSW5wdXRzKEZpbHRlckltYWdl
VmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxh
dGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsgb3V0c2V0U2l6
ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRz
ZXRTaXplLndpZHRoKCkgfTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0
dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi1UZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1
cjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlR2F1c3NpYW5CbHVyIjsKLSAgICBG
aWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsK
LSAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGRYIDw8ICIsICIgPDwgbV9zdGRZ
IDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIHN0ZERldmlhdGlvbj1cIiIgPDwgbV9zdGREZXZpYXRp
b25YIDw8ICIsICIgPDwgbV9zdGREZXZpYXRpb25ZIDw8ICJcIl1cbiI7CiAgICAgcmV0dXJuIHRz
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIwNzBjMmRhZWI2ZWIyODNiZWFh
YTE3NjQ3Y2JiMmQzZS4uMGU4ZTQ5ZDc4ZGEyNmQzY2ViNWZkZGI4ZWVjOTNjMTc2NGEyN2U3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiw2NCArMjMsNzMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5C
bHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdh
dXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxv
YXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSwgRWRnZU1vZGVUeXBlKTsKIAot
ICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KLSAgICB2
b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOworICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChm
bG9hdCBzdGREZXZpYXRpb25YKSB7IG1fc3RkRGV2aWF0aW9uWCA9IHN0ZERldmlhdGlvblg7IH0K
KyAgICB2b2lkIHNldFN0ZERldmlhdGlvblkoZmxvYXQgc3RkRGV2aWF0aW9uWSkgeyBtX3N0ZERl
dmlhdGlvblkgPSBzdGREZXZpYXRpb25ZOyB9CisgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpIHsgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOyB9CiAKLSAgICBmbG9hdCBz
dGREZXZpYXRpb25ZKCkgY29uc3QgeyByZXR1cm4gbV9zdGRZOyB9Ci0gICAgdm9pZCBzZXRTdGRE
ZXZpYXRpb25ZKGZsb2F0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxj
dWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwor
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBz
dGREZXZpYXRpb24pOwogCi0gICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9lZGdlTW9kZTsgfQotICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKLQot
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxv
YXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXpl
IGNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRUdhdXNzaWFuQmx1
cj4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmls
dGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9kZVR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KLQotICAg
IHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8g
RW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBGRUdhdXNzaWFuQmx1
cihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZLCBFZGdlTW9kZVR5cGUp
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLSAgICBmcmllbmQgY2xhc3MgUGFyYWxs
ZWxKb2JzOworICAgIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVz
c2lhbkJsdXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1Bp
eGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJh
eTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNp
Z25lZCBrZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsK
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLQotICAgIGZsb2F0IG1fc3Rk
WDsKLSAgICBmbG9hdCBtX3N0ZFk7CisgICAgZmxvYXQgbV9zdGREZXZpYXRpb25YOworICAgIGZs
b2F0IG1fc3RkRGV2aWF0aW9uWTsKICAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsKIH07CiAK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFR2F1c3NpYW5CbHVyOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWDsK
KyAgICBlbmNvZGVyIDw8IG1fc3RkRGV2aWF0aW9uWTsKKyAgICBlbmNvZGVyIDw8IG1fZWRnZU1v
ZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRUdh
dXNzaWFuQmx1cj4+IEZFR2F1c3NpYW5CbHVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25YOworICAgIGRlY29kZXIgPj4g
c3RkRGV2aWF0aW9uWDsKKyAgICBpZiAoIXN0ZERldmlhdGlvblgpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdGREZXZpYXRpb25ZOwor
ICAgIGRlY29kZXIgPj4gc3RkRGV2aWF0aW9uWTsKKyAgICBpZiAoIXN0ZERldmlhdGlvblkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEVkZ2VNb2Rl
VHlwZT4gZWRnZU1vZGU7CisgICAgZGVjb2RlciA+PiBlZGdlTW9kZTsKKyAgICBpZiAoIWVkZ2VN
b2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZFR2F1c3Np
YW5CbHVyOjpjcmVhdGUoKnN0ZERldmlhdGlvblgsICpzdGREZXZpYXRpb25ZLCAqZWRnZU1vZGUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRUdhdXNzaWFuQmx1cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGRmMTc2Zjhl
MDcwYTQxOGMyMDg1MTgwOTBlZTdhNmNhMTEzZTU2ZjUuLjg4M2Q2YzVmYTJkZjE4N2JlMmFkOTgx
ZGZlNDc4M2VhYmExZTI1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQ3MCArMjgsMzMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1
ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYgZmls
dGVyLCBMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291
cmNlLCBUeXBlIHR5cGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCB0eXBlKQotICAgICwg
bV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9saWdodFNvdXJjZShXVEZNb3Zl
KGxpZ2h0U291cmNlKSkKLSAgICAsIG1fbGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQorRkVM
aWdodGluZzo6RkVMaWdodGluZyhjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIExpZ2h0U291cmNlJiYgc291cmNlLCBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkK
KyAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQorICAgICwgbV9jb2xvcihjb2xvcikKICAgICAsIG1f
c3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1
c2VDb25zdGFudCkKICAgICAsIG1fc3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KQog
ICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5l
bFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3Ro
WShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKIHsK
IH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpzZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxl
KQorRmxvYXRSZWN0IEZFTGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3VyZmFjZVNjYWxl
ID09IHN1cmZhY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zdXJmYWNl
U2NhbGUgPSBzdXJmYWNlU2NhbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdo
dGluZzo6c2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcikKLXsKLSAg
ICBpZiAobV9saWdodGluZ0NvbG9yID09IGxpZ2h0aW5nQ29sb3IpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fbGlnaHRpbmdDb2xvciA9IGxpZ2h0aW5nQ29sb3I7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgpCi17Ci0gICAgaWYgKG1fa2VybmVsVW5pdExlbmd0aFggPT0ga2Vy
bmVsVW5pdExlbmd0aFgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fa2VybmVsVW5p
dExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSkKLXsKLSAgICBpZiAobV9rZXJuZWxVbml0TGVuZ3RoWSA9PSBrZXJuZWxVbml0TGVuZ3RoWSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9rZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5l
bFVuaXRMZW5ndGhZOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3RleHByIGlu
dCBjUGl4ZWxTaXplID0gNDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZz
ZXQgPSAzOwotc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KDB4RkYpOwotCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNv
ZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25z
dGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjQgPSAtMSAvIDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYz
ID0gLTIgLyAzLmY7Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICog
Y2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICog
Y2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
b2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBib3R0
b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIgKiBs
ZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9t
UmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0y
ICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAotICAgICAgICAtbGVm
dCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbQotICAgIH07Ci19Ci0KLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIg
KyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07CisgICAgcmV0dXJuIGdl
b21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBv
ZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9y
IEZFTGlnaHRpbmc6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAog
ewotICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQ7Ci0gICAgCi0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSkpOwotICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSkpOwotCi0gICAgaW50IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExl
ZnQgPSBhbHBoYVdpbmRvdy50b3BMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRv
cCgpOwotCi0gICAgaW50IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0g
ICAgaW50IGJvdHRvbSA9IGFscGhhV2luZG93LmJvdHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhh
V2luZG93IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNv
bHVtbi4KLSAgICBhbHBoYVdpbmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhh
V2luZG93LmFscGhhWzFdWzJdID0gcmlnaHQ7Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0g
PSBib3R0b21SaWdodDsKLSAgICAKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBp
cyB3b3JraW5nIHdpdGggc29tZSBzcG90LWNoZWNrcy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cu
dG9wTGVmdCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAg
ICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQot
ICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIg
KiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAy
ICogdG9wIC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0
Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpy
aWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9w
IC0gMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAg
LXRvcExlZnQgLSAyICogdG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQot
Ci1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICog
Y2VudGVyICsgMiAqIHJpZ2h0LAotICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNl
bnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQg
cmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdo
dCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNl
bnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGlu
dCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9m
ZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAg
ICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExl
ZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKLSAgICB9OwotfQotCi12b2lkIEZFTGln
aHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17
Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
ZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFs
cGhhKQotewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExp
Z2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291
cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQot
ICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygp
KSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVp
dGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRp
bmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1
c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2lu
dDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgp
LAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGlu
Z0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9h
dCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAg
ICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5
VmVjdG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFs
ZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAg
ICBmYWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAot
ICAgICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJm
YWNlU2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5v
cm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAo
bV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndh
eVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3Vs
YXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAg
IGxpZ2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxp
Z2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5j
b2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+
c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKLX0KLQotLy8gVGhpcyBhcHBlYXJzIHRv
IHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25s
eSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5u
ZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZ
IGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4K
LSAgICBBU1NFUlQoc3RhcnRZKTsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBm
b3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFy
dE9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBp
bnQgcHJldmlvdXNSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0
ICsgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdp
bmRvdyBpcyBhIGxvY2FsIGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0
aGUgdHdvIHJpZ2h0IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBj
ZW50ZXIgY29sdW1uLgotICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCBy
b3cgbGVmdCB0aGVuIGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cg
YWxwaGFXaW5kb3c7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRl
bShwcmV2aW91c1Jvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBo
YVdpbmRvdy5zZXRUb3BSaWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRv
dy5zZXRDZW50ZXIoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5p
dGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJv
d1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRC
b3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotCi0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9m
ZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0
aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAg
ICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQs
IGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNl
bnRlcigpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMpCi17Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
aW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVy
cy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCByb3dzVG9Q
cm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7Ci0gICAgdW5zaWduZWQgbWF4
TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJl
YWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUg
LSAxKSAqIHJvd3NUb1Byb2Nlc3MpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhy
ZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIC8vIElu
aXRpYWxpemUgcGFyYWxsZWwgam9icwotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9y
bUFwcGx5R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBh
cmFtZXRlciBhcnJheQotICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9i
cygpOwotICAgICAgICBpZiAoam9iID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpv
YiBpbnRvICJ5U3RlcCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQg
dG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMg
PCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAi
am9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9j
ZXNzIC8gam9iOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Q
cm9jZXNzICUgam9iOwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAgICAgICAgICAg
IGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihq
b2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdE
YXRhID0gcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3Rh
cnQ7Ci0gICAgICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3Rl
cCArIDEgOiB5U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUuCi0gICAgfQotCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRh
LCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUpOwotfQotCi1pbmxp
bmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAg
IC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2Fs
bHkgb24gc29tZSBwbGF0Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJ
VElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVv
bihkYXRhLCBwYWludGluZ0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhk
YXRhLCBwYWludGluZ0RhdGEpOwotI2VuZGlmCi19Ci0KLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
LXsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdo
dGluZ0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3Ig
aGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90
IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAo
d2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNl
U2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdp
ZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAt
IDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29s
b3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFs
TGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwotCi0gICAg
bV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKLQot
ICAgIC8vIFRvcCBsZWZ0LgotICAgIGludCBvZmZzZXQgPSAwOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gVG9wIHJpZ2h0LgotICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFs
KG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAg
c2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3Jt
YWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMs
IGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICBpZiAod2lkdGggPj0gMykg
ewotICAgICAgICAvLyBUb3Agcm93LgotICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBv
ZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BS
b3dOb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gQm90dG9tIHJvdy4KLSAgICAgICAgb2Zm
c2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAg
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dO
b3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7Ci0gICAgICAg
IC8vIExlZnQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUp
Ci0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwg
Y0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQp
KTsKLQotICAgICAgICAvLyBSaWdodCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IDIgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChp
bnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0Zh
Y3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7
Ci0gICAgfQotCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKLSAgICAgICAg
Ly8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBhaW50aW5n
RGF0YSk7Ci0gICAgfQotCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VM
aWdodGluZykgewotICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8
IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNl
dChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3Qg
YTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRh
LnBpeGVscy0+aXRlbShpICsgMSk7Ci0gICAgICAgICAgICB1aW50OF90IGEzID0gZGF0YS5waXhl
bHMtPml0ZW0oaSArIDIpOwotICAgICAgICAgICAgLy8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgo
YTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEy
ID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7
Ci0KLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11
bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0
TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwot
ICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93
c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQotICAgIC8vIG91dHB1dCBmb3IgdmFyaW91
cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUu
Ci0gICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1w
bGVtZW50YXRpb24KLQotICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5
LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7
CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VM
YXN0KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCAwZmZm
Y2QwNjQzOTZkOGY0YjY0MDgyMjY5Y2MyMDc0ZjdjOWRiZGJjLi5hMWZkYzMzMDQwMDYyMGI1YmQy
OTc3ZThlMjg0ZDA2YTA4YjlkYzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAo
QykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3LDE0MiArMjgsMTA0IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAi
TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8v
IENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxp
Z2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZFTGlnaHRpbmdQYWludGlu
Z0RhdGFGb3JOZW9uOwotCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7
CiBwdWJsaWM6Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQotCi0gICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNl
U2NhbGU7IH0KLSAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CisgICAgdm9pZCBzZXRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisgICAgdm9pZCBz
ZXRTdXJmYWNlU2NhbGUoZmxvYXQgc3VyZmFjZVNjYWxlKSB7IG1fc3VyZmFjZVNjYWxlID0gc3Vy
ZmFjZVNjYWxlOyB9CisgICAgdm9pZCBzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNv
bnN0YW50KSB7IG1fZGlmZnVzZUNvbnN0YW50ID0gZGlmZnVzZUNvbnN0YW50OyB9CiAKLSAgICBj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xv
cjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQg
c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNvbnN0YW50KSB7IG1fc3BlY3VsYXJD
b25zdGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7IH0KKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25l
bnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkgeyBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxh
ckV4cG9uZW50OyB9CiAKLSAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhY
KGZsb2F0KTsKKyAgICB2b2lkIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYKSB7IG1fa2VybmVsVW5pdExlbmd0aFggPSBrZXJuZWxVbml0TGVuZ3RoWDsgfQorICAg
IHZvaWQgc2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpIHsgbV9r
ZXJuZWxVbml0TGVuZ3RoWSA9IGtlcm5lbFVuaXRMZW5ndGhZOyB9CiAKLSAgICBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFk7IH0KLSAg
ICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0KTsKKyAgICBjb25zdCBMaWdodFNvdXJj
ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KIAotICAgIGNvbnN0IExpZ2h0
U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRTb3VyY2UuZ2V0KCk7
IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2RlciwgY2xhc3MgQ2xhc3NOYW1lPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZWY8Q2xhc3NOYW1lPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJvdGVj
dGVkOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVu
dW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVj
dWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAg
ICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBp
bXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFz
aWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQo
KSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4
X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0g
ICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhh
WzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsg
cmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1
ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2Vu
dGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAg
ICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFs
dWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFs
cGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVl
KSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9t
UmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAg
IHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhh
WzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3co
YWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVj
dHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAg
ICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERl
Y3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5k
b3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+Ci0gICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKLQotICAgIHN0cnVjdCBQbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewotICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7
Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHlTdGFydDsKLSAgICAgICAgaW50IHlF
bmQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2Vy
KFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAg
ICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5
cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
ICJGRUxpZ2h0aW5nIjsgfQotCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJy
YXkmLCBpbnQsIGludCk7Ci0KLSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50
IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsK
LSAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQg
ZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhh
KTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSYpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQg
c3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotI2lm
IENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NP
TVBBVElCTEUpCi0gICAgc3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBv
bmVudCk7Ci0gICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGlnaHRpbmdE
YXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotI2VuZGlmCi0KLSAgICBM
aWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0
U291cmNlOwotCi0gICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOworICAgIEZFTGlnaHRpbmcoY29u
c3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmLCBGaWx0
ZXJFZmZlY3Q6OlR5cGUpOworCisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZp
bHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgQ29sb3IgbV9jb2xvcjsKICAgICBmbG9hdCBtX3N1cmZh
Y2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKICAgICBmbG9hdCBtX3NwZWN1
bGFyQ29uc3RhbnQ7CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1f
a2VybmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBM
aWdodFNvdXJjZSBtX3NvdXJjZTsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFTGlnaHRpbmc6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1f
c3VyZmFjZVNjYWxlOworICAgIGVuY29kZXIgPDwgbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAgZW5j
b2RlciA8PCBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAgZW5jb2RlciA8PCBtX3NwZWN1bGFyRXhw
b25lbnQ7CisgICAgZW5jb2RlciA8PCBtX2tlcm5lbFVuaXRMZW5ndGhYOworICAgIGVuY29kZXIg
PDwgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBlbmNvZGVyIDw8IG1fc291cmNlOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyLCBjbGFzcyBDbGFzc05hbWU+CitzdGQ6Om9wdGlvbmFsPFJl
ZjxDbGFzc05hbWU+PiBGRUxpZ2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAg
IGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzdXJmYWNlU2NhbGU7CisgICAgZGVjb2RlciA+PiBzdXJmYWNlU2NhbGU7
CisgICAgaWYgKCFzdXJmYWNlU2NhbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAgZGVjb2RlciA+
PiBkaWZmdXNlQ29uc3RhbnQ7CisgICAgaWYgKCFkaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzcGVjdWxhckNv
bnN0YW50OworICAgIGRlY29kZXIgPj4gc3BlY3VsYXJDb25zdGFudDsKKyAgICBpZiAoIXNwZWN1
bGFyQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzcGVjdWxhckV4cG9uZW50OworICAgIGRlY29kZXIgPj4gc3BlY3VsYXJF
eHBvbmVudDsKKyAgICBpZiAoIXNwZWN1bGFyRXhwb25lbnQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBrZXJuZWxVbml0TGVuZ3RoWDsK
KyAgICBkZWNvZGVyID4+IGtlcm5lbFVuaXRMZW5ndGhYOworICAgIGlmICgha2VybmVsVW5pdExl
bmd0aFgpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBrZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBkZWNvZGVyID4+IGtlcm5lbFVuaXRMZW5n
dGhZOworICAgIGlmICgha2VybmVsVW5pdExlbmd0aFkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPExpZ2h0U291cmNlPiBzb3VyY2U7CisgICAgZGVj
b2RlciA+PiBzb3VyY2U7CisgICAgaWYgKCFzb3VyY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4gQ2xhc3NOYW1lOjpjcmVhdGUoKmNvbG9yLCAqc3VyZmFjZVNj
YWxlLCAqZGlmZnVzZUNvbnN0YW50LCAqc3BlY3VsYXJDb25zdGFudCwgKnNwZWN1bGFyRXhwb25l
bnQsICprZXJuZWxVbml0TGVuZ3RoWCwgKmtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKCpzb3Vy
Y2UpKTsKK30KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIx
NzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uNGI0Njk1NTAyNjVlZDI1YTVjMDM3NzNk
Y2RmMTNjOGVlODFmYTkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw1MSArMjMsMzggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRU1lcmdlOjpGRU1lcmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6TWVyZ2UpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKHVuc2lnbmVk
IG51bWJlck9mRWZmZWN0SW5wdXRzKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVy
Z2UobnVtYmVyT2ZFZmZlY3RJbnB1dHMpKTsKIH0KIAotUmVmPEZFTWVyZ2U+IEZFTWVyZ2U6OmNy
ZWF0ZShGaWx0ZXImIGZpbHRlcikKK0ZFTWVyZ2U6OkZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZF
ZmZlY3RJbnB1dHMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlwZTo6RkVNZXJnZSkKKyAgICAsIG1f
bnVtYmVyT2ZFZmZlY3RJbnB1dHMobnVtYmVyT2ZFZmZlY3RJbnB1dHMpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVNZXJnZShmaWx0ZXIpKTsKKyAgICBBU1NFUlQobV9udW1iZXJPZkVm
ZmVjdElucHV0cyk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K0ZpbHRlckltYWdlVmVjdG9yIEZFTWVyZ2U6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdAogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSBt
X251bWJlck9mRWZmZWN0SW5wdXRzKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFZlY3RvcjxSZWY8RmlsdGVySW1hZ2U+PiBpbnB1dHM7CisgICAgZm9y
IChhdXRvIGlucHV0c1NpemUgPSBtX251bWJlck9mRWZmZWN0SW5wdXRzOyBpbnB1dHNTaXplLS07
ICkKKyAgICAgICAgaW5wdXRzLmFwcGVuZChzdGFjay50YWtlTGFzdCgpKTsKIAotCi0gICAgR3Jh
cGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgfQorICAgIHJldHVybiBpbnB1dHM7CiB9CiAK
LVRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0m
IEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwot
ICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRp
b24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFT
U0VSVChzaXplID4gMCk7Ci0gICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJc
Il1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgaW5wdXRFZmZl
Y3QoaSktPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0
cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHMgPDwgIlwiXVxu
IjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3
YjAxOTRlYmNmMThmMjYwNy4uYjEwMzFmMDQ5NjQ5YThhMzFlOTU2MTRmOGQ1ZmI2M2ZkODRlYjc0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIyLDIzICsyMyw0NSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU1lcmdlPiBjcmVhdGUodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU1l
cmdlPj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYp
OworICAgIEZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQor
ICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0
IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBGRU1lcmdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitzdGQ6Om9wdGlvbmFsPFJlZjxGRU1lcmdlPj4gRkVNZXJnZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbnVtYmVyT2ZFZmZl
Y3RJbnB1dHM7CisgICAgZGVjb2RlciA+PiBudW1iZXJPZkVmZmVjdElucHV0czsKKyAgICBpZiAo
IW51bWJlck9mRWZmZWN0SW5wdXRzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgcmV0dXJuIEZFTWVyZ2U6OmNyZWF0ZSgqbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VG
RkVDVChGRU1lcmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDhhN2U1YjY2N2FiNzczYjkwYjg5
MGUzODM4NjM5MzU2MmI5ZDhkZjUuLjAwMGY5YzM1M2Y0ZmVmZTRiNGJlNTY5ODRlMGExMjg0ZDFm
ZWFjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjY1ICsyNSw1MCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb21wb25l
bnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVN
b3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIFR5cGU6Ok1vcnBob2xvZ3kpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAs
IG1fcmFkaXVzWChyYWRpdXNYKQotICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCi17Ci19Ci0KLVJl
ZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRlciwgdHlwZSwgcmFk
aXVzWCwgcmFkaXVzWSkpOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9w
ZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAobV90eXBlID09
IHR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3R5cGUgPSB0eXBlOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWChmbG9hdCByYWRp
dXNYKQotewotICAgIGlmIChtX3JhZGl1c1ggPT0gcmFkaXVzWCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG1fcmFkaXVzWCA9IHJhZGl1c1g7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCi17Ci0gICAgaWYgKG1f
cmFkaXVzWSA9PSByYWRpdXNZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9yYWRpdXNZ
ID0gcmFkaXVzWTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
aW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIg
PSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlw
c1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3
aWR0aCkKLXsKLSAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKLX0KLQotaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFs
dWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGFzU1JHQkEocGl4ZWwpKTsKLX0KLQotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGNvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFr
ZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OwotfQotCi10ZW1w
bGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYikKLXsKLSAgICBp
ZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBw
ZXJDb21wb25lbnRNaW4oYSwgYik7Ci0KLSAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIp
OwotfQotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5M
SU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5k
LCBpbnQgd2lkdGgpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNm
cm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0
YXJ0LCB3aWR0aCkpIH0pOwotCi0gICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5k
OyArK3kpIHsKLSAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4
ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgp
KSB9KTsKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwp
OwotICAgIH0KLSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLUFMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0
aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3Jw
aG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKIHsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xP
R1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lk
dGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9E
SUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2lu
ZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+
OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5F
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5F
eHRyZW1hJiBrZXJuZWwpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVt
dW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKLQotICAgIHJldHVybiBl
eHRyZW11bTsKLX0KLQotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
a2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAg
Y29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsK
LSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5Owot
Ci0gICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKLSAgICBjb25z
dCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOwotICAgIGNvbnN0IGludCB3aWR0
aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdE
YXRhLmhlaWdodDsKLQotICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0g
aGVpZ2h0KTsKLSAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3Rh
cnRZIDwgZW5kWSk7Ci0KLSAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7Ci0gICAgZXh0cmVtYS5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7Ci0KLSAgICBmb3IgKGludCB5
ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBz
dGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7Ci0gICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjpt
aW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOwotCi0gICAgICAgIGV4dHJlbWEuc2hyaW5rKDAp
OwotCi0gICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0
cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11
bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5
cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0
IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAg
ICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEu
YXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVz
U3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHgg
PiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRz
dFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAg
ICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtl
cm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOwotICAgICAgICB9Ci0gICAgfQor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neShtb3JwaG9sb2d5T3BlcmF0b3Is
IHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQorRkVNb3JwaG9sb2d5OjpG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvciwgZmxvYXQg
cmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU1vcnBo
b2xvZ3kpCisgICAgLCBtX21vcnBob2xvZ3lPcGVyYXRvcihtb3JwaG9sb2d5T3BlcmF0b3IpCisg
ICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKKyAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewotICAg
IHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRh
LCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorRmxvYXRSZWN0
IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgLy8gRW1waXJpY2FsbHksIHJ1bnRp
bWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3
aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0
KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0
c1swXS0+aW1hZ2VSZWN0KCk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVhID0g
KDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0g
ICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4
OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
KHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3Ip
IC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBXVEY6OlBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+
IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQg
am9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2Vy
IHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNl
IGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAg
ICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFk
czsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAl
IG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsK
LSAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXpl
OwotICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKLSAgICAgICAgICAgICAg
ICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVsCi0gICAg
fQorICAgIGltYWdlUmVjdC5pbmZsYXRlKGdlb21ldHJ5LnJlc29sdmVJbWFnZVNpemUoeyBtX3Jh
ZGl1c1gsIG1fcmFkaXVzWSB9KSk7CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGlu
Z0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHJldHVybiBnZW9tZXRyeS5jbGlw
VG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwog
fQogCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFt
cGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJh
ZGl1c1gsIGludCByYWRpdXNZKQorYm9vbCBGRU1vcnBob2xvZ3k6OmlzQWxwaGFJbWFnZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIGlmIChyYWRpdXNYIDwg
MCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU1vcnBob2xv
Z3k6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0KLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRT
aXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFw
cGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBy
YWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJy
YXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJl
c29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBz
dGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwot
ICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAx
LCByYWRpdXMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsK
LSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7
Ci0gICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5
OwotICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRo
KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNl
aWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwot
ICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7Cisg
ICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0
KCkgfTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yJiBtb3Jw
aG9sb2d5T3BlcmF0b3IpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7CisgICAgc3dpdGNoIChtb3Jw
aG9sb2d5T3BlcmF0b3IpIHsKICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dO
OgogICAgICAgICB0cyA8PCAiVU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwpAQCAtMjk3LDE1ICs4
MiwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZQogICAgIHJldHVybiB0czsKIH0KIAotVGV4
dFN0cmVhbSYgRkVNb3JwaG9sb2d5OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFt
JiBGRU1vcnBob2xvZ3k6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZp
bHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTW9y
cGhvbG9neSI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7Ci0gICAgdHMgPDwgIiBvcGVyYXRvcj1cIiIgPDwgbW9ycGhvbG9neU9w
ZXJhdG9yKCkgPDwgIlwiICIKLSAgICAgICA8PCAicmFkaXVzPVwiIiA8PCByYWRpdXNYKCkgPDwg
IiwgIiA8PCByYWRpdXNZKCkgPDwgIlwiXVxuIjsKLQotICAgIFRleHRTdHJlYW06OkluZGVudFNj
b3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworICAgIHRzIDw8ICIgb3BlcmF0b3I9XCIiIDw8
IG1fbW9ycGhvbG9neU9wZXJhdG9yIDw8ICJcIiAiIDw8ICJyYWRpdXM9XCIiIDw8IG1fcmFkaXVz
WCA8PCAiLCAiIDw8IG1fcmFkaXVzWSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWEx
MS4uNzZjOWU2ODE0MjYwNTQ1MTMzNWU2ZWRlMjExZTFjNzA2ZjVhMzVhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMiwxMSArMjMsMTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKK2VudW0gTW9ycGhvbG9neU9wZXJhdG9yIHsKICAgICBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCiAgICAgRkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFID0gMSwKICAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgpAQCAt
MzQsNTUgKzM0LDc2IEBAIGVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZF
TW9ycGhvbG9neSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwg
ZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3IsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9s
b2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBib29sIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICB2b2lkIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKSB7IG1f
bW9ycGhvbG9neU9wZXJhdG9yID0gbW9ycGhvbG9neU9wZXJhdG9yOyB9CisgICAgdm9pZCBzZXRS
YWRpdXNYKGZsb2F0IHJhZGl1c1gpIHsgbV9yYWRpdXNYID0gcmFkaXVzWDsgfQorICAgIHZvaWQg
c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKSB7IG1fcmFkaXVzWSA9IHJhZGl1c1k7IH0KIAotICAg
IGZsb2F0IHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1g7IH0KLSAgICBib29sIHNl
dFJhZGl1c1goZmxvYXQpOwotCi0gICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFkaXVzWTsgfQotICAgIGJvb2wgc2V0UmFkaXVzWShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU1vcnBob2xvZ3k+PiBkZWNv
ZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBG
RU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVNb3JwaG9sb2d5IjsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUlt
YWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZpbHRl
ckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJh
ZGl1c1kpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkq
IHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5
OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGludCBy
YWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OworICAgIE1vcnBob2xvZ3lPcGVy
YXRvciBtX21vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBmbG9hdCBtX3JhZGl1c1g7CisgICAgZmxv
YXQgbV9yYWRpdXNZOworfTsKIAotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7
Ci0gICAgICAgIEZFTW9ycGhvbG9neSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAg
ICAgICBpbnQgZW5kWTsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7
Ci0gICAgfTsKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFTW9ycGhvbG9neTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX21vcnBob2xv
Z3lPcGVyYXRvcjsKKyAgICBlbmNvZGVyIDw8IG1fcmFkaXVzWDsKKyAgICBlbmNvZGVyIDw8IG1f
cmFkaXVzWTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVm
PEZFTW9ycGhvbG9neT4+IEZFTW9ycGhvbG9neTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgc3RkOjpvcHRpb25hbDxNb3JwaG9sb2d5T3BlcmF0b3I+IG1vcnBob2xvZ3lPcGVyYXRv
cjsKKyAgICBkZWNvZGVyID4+IG1vcnBob2xvZ3lPcGVyYXRvcjsKKyAgICBpZiAoIW1vcnBob2xv
Z3lPcGVyYXRvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IHJhZGl1c1g7CisgICAgZGVjb2RlciA+PiByYWRpdXNYOworICAgIGlmICgh
cmFkaXVzWCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IHJhZGl1c1k7CisgICAgZGVjb2RlciA+PiByYWRpdXNZOworICAgIGlmICghcmFk
aXVzWSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBGRU1vcnBo
b2xvZ3k6OmNyZWF0ZSgqbW9ycGhvbG9neU9wZXJhdG9yLCAqcmFkaXVzWCwgKnJhZGl1c1kpOwor
fQogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFy
YW1ldGVycyopOworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworbmFtZXNwYWNlIFdU
RiB7CiAKLSAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIG1fdHlwZTsKLSAgICBmbG9hdCBtX3Jh
ZGl1c1g7Ci0gICAgZmxvYXQgbV9yYWRpdXNZOwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpNb3JwaG9sb2d5T3BlcmF0b3I+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpNb3JwaG9sb2d5T3BlcmF0b3IsCisKKyAgICAgICAg
V2ViQ29yZTo6RkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6
OkZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSwKKyAgICAgICAgV2ViQ29yZTo6RkVNT1JQSE9M
T0dZX09QRVJBVE9SX0RJTEFURQorICAgID47CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cit9IC8vIG5hbWVzcGFjZSBXVEYKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFTW9ycGhvbG9neSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5
MTdjMmQ2NWFhNDE0MGY2OS4uNjEyMjE4MmI4M2E2MWFhY2I5NmViYTg2MTU3ZjMzNjdmOTM2MTU3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCw3MSArMjUsNTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU9m
ZnNldC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5o
IgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFT2Zmc2V0OjpGRU9mZnNldChG
aWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBk
eSkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAg
ICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6
OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9m
ZnNldChkeCwgZHkpKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCitGbG9h
dFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIG1fZHggPSBkeDsKLX0KKyAgICBB
U1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1sw
XS0+aW1hZ2VSZWN0KCk7CiAKLXZvaWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQotewotICAg
IG1fZHkgPSBkeTsKKyAgICBpbWFnZVJlY3QubW92ZShnZW9tZXRyeS5yZXNvbHZlSW1hZ2VTaXpl
KHsgbV9keCwgbV9keSB9KSk7CisKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvTWF4UHJpbWl0
aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBG
RU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorYm9vbCBGRU9mZnNldDo6aXNB
bHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1v
dmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAg
IGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RS
ZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKLXZvaWQg
RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGaWx0ZXJJbWFnZVZlY3RvciBGRU9m
ZnNldDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciog
aW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
IHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGlu
LT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24p
OworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNv
bnN0CitUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50
IDw8ICJbZmVPZmZzZXQiOwotICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHRzIDw8ICIgZHg9XCIiIDw8IGR4KCkgPDwgIlwi
IGR5PVwiIiA8PCBkeSgpIDw8ICJcIl1cbiI7Ci0KLSAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmV4dGVybmFsUmVwcmVzZW50
YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKKyAgICB0cyA8PCAiIGR4PVwiIiA8PCBtX2R4IDw8
ICJcIiBkeT1cIiIgPDwgbV9keSA8PCAiXCJdXG4iOwogICAgIHJldHVybiB0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLjFhYWFlZGJj
OGFjMGI5ZmJjZmUwOTVhZTUxNmMzMGY3NWZhMjA1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM0ICsyMyw1OSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+IGNyZWF0ZShG
aWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWY8RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgZmxvYXQgZHgo
KSBjb25zdCB7IHJldHVybiBtX2R4OyB9Ci0gICAgdm9pZCBzZXREeChmbG9hdCk7CisgICAgdm9p
ZCBzZXREeChmbG9hdCBkeCkgeyBtX2R4ID0gZHg7IH0KKyAgICB2b2lkIHNldER5KGZsb2F0IGR5
KSB7IG1fZHkgPSBkeTsgfQogCi0gICAgZmxvYXQgZHkoKSBjb25zdCB7IHJldHVybiBtX2R5OyB9
Ci0gICAgdm9pZCBzZXREeShmbG9hdCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRU9mZnNldD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHBy
aXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBG
RU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFj
aykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2Um
IG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2Vv
bWV0cnkmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX2R4OwogICAgIGZsb2F0IG1fZHk7CiB9OwogCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGRU9mZnNldDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2R4OworICAgIGVuY29kZXIgPDwgbV9k
eTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8UmVmPEZFT2Zm
c2V0Pj4gRkVPZmZzZXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IGR4OworICAgIGRlY29kZXIgPj4gZHg7CisgICAgaWYgKCFkeCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGR5Owor
ICAgIGRlY29kZXIgPj4gZHk7CisgICAgaWYgKCFkeSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHJldHVybiBGRU9mZnNldDo6Y3JlYXRlKCpkeCwgKmR5KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggNTk5NzIzMDY4
ODZhNjNmYTQxMmI1YjcxNDFmNzRmOWM0ODdhMTQ0Yy4uNDI0OWEzN2E0N2RiZTUzZmUwNWQwZDI1
ZWQxOTBjY2U3OTZmZjk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDkgKzIz
LDMxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVTcGVjdWxhckxpZ2h0aW5n
LmgiCiAKLSNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZF
U3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5n
KGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAw
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxp
Z2h0aW5nKQorUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7CisgICAg
cmV0dXJuIGNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBz
cGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUoc291cmNlKSk7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJM
aWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGln
aHRpbmc+IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3VyY2UmJiBzb3VyY2UpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGNvbG9yLCBzdXJm
YWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBv
bmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKHNvdXJj
ZSkpKTsKIH0KIAotRkVTcGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBk
ZWZhdWx0OwotCi1ib29sIEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChm
bG9hdCBzcGVjdWxhckNvbnN0YW50KQorRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGln
aHRpbmcoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdo
dFNvdXJjZSYmIHNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoY29sb3IsIHN1cmZhY2VTY2FsZSwg
ZGlmZnVzZUNvbnN0YW50LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUoc291cmNlKSwgVHlwZTo6
RkVTcGVjdWxhckxpZ2h0aW5nKQogewotICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3Bl
Y3VsYXJDb25zdGFudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc3BlY3VsYXJDb25z
dGFudCA9IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVT
cGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQpCi17Ci0gICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSBzcGVjdWxhckV4cG9uZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJF
eHBvbmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVGV4dFN0cmVhbSYgRkVTcGVjdWxhckxp
Z2h0aW5nOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CitUZXh0U3RyZWFtJiBGRVNwZWN1bGFyTGln
aHRpbmc6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJl
c2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlU3BlY3VsYXJMaWdo
dGluZyI7Ci0gICAgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXBy
ZXNlbnRhdGlvbik7CiAgICAgdHMgPDwgIiBzdXJmYWNlU2NhbGU9XCIiIDw8IG1fc3VyZmFjZVNj
YWxlIDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1YWxDb25zdGFudD1cIiIgPDwgbV9zcGVjdWxh
ckNvbnN0YW50IDw8ICJcIiAiCiAgICAgICAgPDwgInNwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IG1f
c3BlY3VsYXJFeHBvbmVudCA8PCAiXCJdXG4iOwotCi0gICAgVGV4dFN0cmVhbTo6SW5kZW50U2Nv
cGUgaW5kZW50U2NvcGUodHMpOwotICAgIGlucHV0RWZmZWN0KDApLT5leHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4MThiZjNi
MjQ5NThhLi40ZGJhYjQ0YjliMmFmMWFlNTQzYThjZjk0MzM1NWQ1ZDNlODQ3ZmE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDIwICsyOCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOworICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgTGlnaHRTb3Vy
Y2UmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIExpZ2h0U291
cmNlJiYpOwogCi0gICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3BlY3VsYXJDb25zdGFudDsgfQotICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7
Ci0KLSAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxh
ckV4cG9uZW50OyB9Ci0gICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KTsKLQotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0
ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJD
b25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBMaWdodFNvdXJjZSYmKTsKKworICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJS
ZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPj4gRkVTcGVjdWxhckxp
Z2h0aW5nOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gRkVMaWdodGlu
Zzo6ZGVjb2RlPERlY29kZXIsIEZFU3BlY3VsYXJMaWdodGluZz4oZGVjb2Rlcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFl
N2RjYTBjNWRiMmZjYWMyMGFkLi4yNzNhZTE3YzI3ODQ2Zjk5MjkzZTNmZjlmOWZjNTNmOGRlNTcw
NzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBB
bGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIxLDgwICsyMiw0MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
VGlsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgot
I2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxlKEZp
bHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKK1Jl
ZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RVRpbGUoKSk7CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
KQorRkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OkZFVGlsZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVU
aWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFVGlsZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsK
LS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBh
IGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdl
KGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBh
dHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0
aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBw
YXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0
IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZm
ZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZm
ZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZp
bHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAg
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBm
aWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0
ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQo
KSk7Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRl
eHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0
ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0g
ICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7Ci0gICAg
aWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gcGF0dGVyblRyYW5zZm9ybTsKLSAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1h
eEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOwotCi0gICAgYXV0byBwYXR0ZXJu
ID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVl
LCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmaWx0ZXJDb250ZXh0LnNl
dEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsK
KyAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3MgZHJhd2luZ1JlY3QgZm9yIDxmZVRpbGU+Lgor
ICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKIH0KIAotVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0Citib29s
IEZFVGlsZTo6aXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNv
bnN0CiB7Ci0gICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAi
XVxuIjsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKK30KIAotICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICBpbnB1dEVmZmVjdCgw
KS0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOworRmlsdGVySW1h
Z2VWZWN0b3IgRkVUaWxlOjp0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29u
c3QKK3sKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2su
dGFrZUxhc3QoKSB9OworfQogCitUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAoreworICAg
IHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZV1cbiI7CiAgICAgcmV0dXJuIHRzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRl
eCA0OWJkOTlmMDk0NDdkYWUxY2YwOWFmMTIzNThjNmRlODQwNjg3NzE0Li43YmUyNWUyODFkNTM0
Y2FhYTNmOGJlYmU1YTMwZDU2NDFiYjk0MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI3ICsyMywyNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXImKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAKIHByaXZh
dGU6Ci0gICAgRkVUaWxlKEZpbHRlciYpOworICAgIEZFVGlsZSgpOwogCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CisgICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9Cisg
ICAgYm9vbCBpc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRl
OworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0
YWNrKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4
RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIGFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVS
X0VGRkVDVChGRVRpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggYWMyMzQ2ZThhNGJhNThhYWE5
MjRhNmQ2N2JkNWU0Yjc3ZGQyMjY4Zi4uN2EzYmQ4ZjFmZTk3NGY4NmI2NDFkMjU3NDY0OWM2MmNh
OGM5ZGViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwzMSArMjYsMTkgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnku
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAy
XS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1w
bGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0
NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMx
IG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNo
b3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBn
ZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNv
bnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1h
eGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5k
QW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBj
b25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19y
YW5kUiA9IDI4MzY7IC8vIG0gJSBhCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNy
ZWF0ZShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJl
cXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7
Cit9CiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKLSAgICAsIG1fdHlwZSh0eXBlKQor
RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHVyYnVsZW5jZVR5cGUs
IGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2
ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoVHlw
ZTo6RkVUdXJidWxlbmNlKQorICAgICwgbV90dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkK
ICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVx
dWVuY3lZKGJhc2VGcmVxdWVuY3lZKQogICAgICwgbV9udW1PY3RhdmVzKG51bU9jdGF2ZXMpCkBA
IC01OSw0MDUgKzQ3LDkgQEAgRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0
ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWUKIHsKIH0KIAotUmVmPEZF
VHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVu
Y2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwg
aW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwotfQot
Ci1ib29sIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxlbmNlVHlwZSB0eXBlKQotewotICAg
IGlmIChtX3R5cGUgPT0gdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdHlwZSA9
IHR5cGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpzZXRCYXNl
RnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVlbmN5WSkKLXsKLSAgICBpZiAobV9iYXNlRnJlcXVl
bmN5WSA9PSBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFz
ZUZyZXF1ZW5jeVkgPSBiYXNlRnJlcXVlbmN5WTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBGRVR1cmJ1bGVuY2U6OnNldEJhc2VGcmVxdWVuY3lYKGZsb2F0IGJhc2VGcmVxdWVuY3lYKQot
ewotICAgIGlmIChtX2Jhc2VGcmVxdWVuY3lYID09IGJhc2VGcmVxdWVuY3lYKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VGcmVxdWVuY3lYOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZTo6c2V0U2VlZChmbG9hdCBzZWVk
KQotewotICAgIGlmIChtX3NlZWQgPT0gc2VlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fc2VlZCA9IHNlZWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNl
OjpzZXROdW1PY3RhdmVzKGludCBudW1PY3RhdmVzKQotewotICAgIGlmIChtX251bU9jdGF2ZXMg
PT0gbnVtT2N0YXZlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbnVtT2N0YXZlcyA9
IG51bU9jdGF2ZXM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlOjpz
ZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKLXsKLSAgICBpZiAobV9zdGl0Y2hUaWxlcyA9PSBz
dGl0Y2gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3N0aXRjaFRpbGVzID0gc3RpdGNo
OwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBj
b2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEg
c3BlY2lmaWNhdGlvbjoKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRt
bCNmZVR1cmJ1bGVuY2UKLQotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGlu
ZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcg
cmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAo
c2VlZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9
IHNfcmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gdCAq
IHQgKiAoMyAtIDIgKiB0KTsKLX0KLQotaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24o
ZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEp
OwotfQotCi12b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQotewotICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0KLSAgICAvLyBUaGUg
c2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KLSAg
ICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQg
PSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlm
IChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQotICAgICAgICBwYWludGlu
Z0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOwotCi0gICAgZmxvYXQqIGdyYWRpZW50Owot
ICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgewotICAgICAgICAgICAg
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7Ci0gICAgICAgICAgICBncmFkaWVu
dCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRp
bmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19i
bG9ja1NpemU7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tT
aXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYm
ICFncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpo
eXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgZ3JhZGllbnRbMF0g
Lz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1h
bGl6YXRpb25GYWN0b3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gc19i
bG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9t
KCkgJSBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VS
VChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwotICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKLSAgICB9Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3JbaV07Ci0gICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsg
KytjaGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
c19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsw
XTsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6
ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1GRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpj
b21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdAotewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGZsb2F0IHRpbGVXaWR0aCA9IHRpbGVTaXplLndp
ZHRoKCk7Ci0gICAgZmxvYXQgdGlsZUhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgpOwotICAgIEFT
U0VSVCh0aWxlV2lkdGggPiAwICYmIHRpbGVIZWlnaHQgPiAwKTsKLQotICAgIC8vIFdoZW4gc3Rp
dGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVk
Ci0gICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KLSAg
ICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxv
b3JmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgZmxv
YXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRp
bGVXaWR0aDsKLSAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZl
IGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WCAv
IGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WCkKLSAgICAgICAg
ICAgIGJhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBiYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotICAgIGlmIChiYXNl
RnJlcXVlbmN5WSkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGZsb2F0IGhpZ2hG
cmVxdWVuY3kgPSBjZWlsZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdo
dDsKLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1
ZW5jeSAvIGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBsb3dG
cmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gaGln
aEZyZXF1ZW5jeTsKLSAgICB9Ci0KLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgc3Rp
dGNoRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAg
c3RpdGNoRGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwotICAg
IHN0aXRjaERhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7
Ci0gICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdo
dDsKLQotICAgIHJldHVybiBzdGl0Y2hEYXRhOwotfQotCi0vLyBUaGlzIGlzIHRha2VuIDE6MSBm
cm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVU
dXJidWxlbmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNl
Ojpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hE
YXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKLXsK
LSAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7Ci0gICAgICAgIGludCBpbmRleDsgLy8gYngwLCBi
eTAgaW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgaW50IG5leHRJbmRleDsgLy8gYngxLCBieTEg
aW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgZmxvYXQgZnJhY3Rpb247IC8vIHJ4MCwgcnkwIGlu
IHRoZSBzcGVjIHRleHQuCi0KLSAgICAgICAgTm9pc2VQb3NpdGlvbihmbG9hdCBjb21wb25lbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vICB0ID0gdmVjWzBdICsgUGVybGluTjsKLSAgICAg
ICAgICAgIC8vICBieDAgPSAoaW50KXQ7Ci0gICAgICAgICAgICAvLyAgYngxID0gYngwKzE7Ci0g
ICAgICAgICAgICAvLyAgcngwID0gdCAtIChpbnQpdDsKLSAgICAgICAgICAgIGZsb2F0IHBvc2l0
aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIGluZGV4ID0gc3Rh
dGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleCAr
IDE7Ci0gICAgICAgICAgICBmcmFjdGlvbiA9IHBvc2l0aW9uIC0gaW5kZXg7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc3RpdGNoKGludCBzaXplLCBpbnQgd3JhcFNpemUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIChieDAgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkK
LSAgICAgICAgICAgIC8vICAgYngwIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAg
ICBpZiAoaW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgaW5kZXggLT0gc2l6ZTsK
LQotICAgICAgICAgICAgLy8gaWYgKGJ4MSA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQotICAgICAg
ICAgICAgLy8gICBieDEgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKLSAgICAgICAgICAgIGlmIChu
ZXh0SW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAgbmV4dEluZGV4IC09IHNpemU7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVgobm9pc2VWZWN0
b3IueCgpKTsKLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lzZVZlY3Rvci55KCkpOwotCi0g
ICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0g
ICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRh
LndpZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hE
YXRhLmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJN
OwotICAgIC8vIGJ4MSAmPSBCTTsKLSAgICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJN
OwotICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4
ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBu
b2lzZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2Vs
ZWN0b3JbYngwXTsKLSAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBs
YXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07
Ci0gICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9y
W25vaXNlWC5uZXh0SW5kZXhdOwotCi0gICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsK
LSAgICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3Ro
Q3VydmUobm9pc2VYLmZyYWN0aW9uKTsKLSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNl
WS5mcmFjdGlvbik7Ci0KLSAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5l
bCkgewotICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAg
IGludCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5v
aXNlWS5pbmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAw
XTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0g
bm9pc2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAg
ICAgLy8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5p
bmRleF07Ci0gICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3Jh
ZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwot
ICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAg
IGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9u
ICogcVsxXTsKLSAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBh
ID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxh
dHRpY2VTZWxlY3RvcltpICsgYnkxXTsKLSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAg
IC8vIHJ5MSA9IHJ5MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hh
bm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJh
Y3Rpb24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAv
LyBiMTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJ
bmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9
IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW2IxMV07Ci0gICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBx
WzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAo
c3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwg
dik7Ci0KLSAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4g
bGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0g
ICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAot
ICAgICAgICBub2lzZUZvckNoYW5uZWwoMiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQot
ICAgIH07Ci19Ci0KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
VHVyYnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21w
b25lbnRzLgotLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWlu
dDg+PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KLXN0YXRpYyBpbmxp
bmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQorRmxvYXRS
ZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6OmNs
YW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwg
MCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZs
b2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUp
LAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21w
b25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKLSAgICB9OwotfQotCi1Db2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBDb2xvckNvbXBvbmVudHM8
ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKLSAgICBGbG9hdFBvaW50IG5vaXNl
VmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgp
ICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKLSAgICBmbG9hdCByYXRpbyA9IDE7Ci0g
ICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkg
ewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0g
ICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0Rh
dGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwotCi0gICAgICAgIG5vaXNl
VmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNl
dFkobm9pc2VWZWN0b3IueSgpICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0KLSAgICAgICAg
aWYgKG1fc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVz
LiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5k
Ci0gICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJh
Y3RpbmcgaXQgb25jZS4KLSAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKLSAgICAg
ICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGlu
Tm9pc2U7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOwotICAgICAgICAgICAg
c3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAy
NTUpIC8gMiBieSBmcmFjdGFsTm9pc2UKLSAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4KLSAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VU
eXBlOjpGcmFjdGFsTm9pc2UpCi0gICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwotCi0gICAgcmV0dXJuIHRvSW50
QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKLX0KLQotdm9p
ZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXks
IGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEs
IGludCBzdGFydFksIGludCBlbmRZKSBjb25zdAotewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZ
KTsKLQotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKLSAg
ICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRQ
b2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKLSAgICBpbnQgaW5kZXhP
ZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZpbHRlcigpLmFic29sdXRlVHJh
bnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKTsKLQotICAgIGZv
ciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShw
b2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0g
ICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQ
b2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAg
ICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBh
aW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFy
cmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hh
bm5lbCk7Ci0gICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdp
b25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQotewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+Zmls
bFJlZ2lvbigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0
YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJz
LT5lbmRZKTsKLX0KLQotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
Ci17Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVy
U2NhbGUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVz
dGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJl
cXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFz
ZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsK
LSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNp
emUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9u
LCBtYXhOdW1UaHJlYWRzKTsKLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgV1RGOjpQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFk
TnVtYmVyKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKLSAgICAgICAg
YXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAgICBpZiAo
bnVtSm9icyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFki
LXNpemVkIGpvYnMsIGRpc3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAi
am9ic1dpdGhFeHRyYSIgam9icy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0
IC8gbnVtSm9iczsKLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQg
JSBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKLQotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAg
ICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAg
ICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdo
dCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAg
ICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21h
bGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gZ2VvbWV0cnkuY2xpcFRvRmlsdGVy
UmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpAQCAtNDc2LDE1ICs2
OCwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVy
YnVsZW5jZVR5cGUgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIEZFVHVy
YnVsZW5jZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAorVGV4dFN0cmVhbSYgRkVUdXJidWxlbmNl
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0ZXJSZXByZXNlbnRh
dGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVR1cmJ1bGVuY2UiOwotICAg
IEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24p
OwotICAgIHRzIDw8ICIgdHlwZT1cIiIgPDwgdHlwZSgpIDw8ICJcIiAiCi0gICAgICAgPDwgImJh
c2VGcmVxdWVuY3k9XCIiIDw8IGJhc2VGcmVxdWVuY3lYKCkgPDwgIiwgIiA8PCBiYXNlRnJlcXVl
bmN5WSgpIDw8ICJcIiAiCi0gICAgICAgPDwgInNlZWQ9XCIiIDw8IHNlZWQoKSA8PCAiXCIgIgot
ICAgICAgIDw8ICJudW1PY3RhdmVzPVwiIiA8PCBudW1PY3RhdmVzKCkgPDwgIlwiICIKLSAgICAg
ICA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IHN0aXRjaFRpbGVzKCkgPDwgIlwiXVxuIjsKKyAgICB0
cyA8PCAiIHR5cGU9XCIiIDw8IG1fdHVyYnVsZW5jZVR5cGUgPDwgIlwiICIgPDwgImJhc2VGcmVx
dWVuY3k9XCIiIDw8IG1fYmFzZUZyZXF1ZW5jeVggPDwgIiwgIiA8PCBtX2Jhc2VGcmVxdWVuY3lZ
IDw8ICJcIiAiIDw8ICJzZWVkPVwiIiA8PCBtX3NlZWQgPDwgIlwiICIgPDwgIm51bU9jdGF2ZXM9
XCIiIDw8IG1fbnVtT2N0YXZlcyA8PCAiXCIgIiA8PCAic3RpdGNoVGlsZXM9XCIiIDw8IG1fc3Rp
dGNoVGlsZXMgPDwgIlwiXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmlu
ZGV4IDRkNTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjdlMDM4NzQyMjY3
N2NiNjVkZTBjNjBmYWI0NTcwYzhlNTczODE1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI0LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zOCw5MSArMzYsMjggQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAK
IGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUs
IGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2Vl
ZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9Ci0gICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKKyAg
ICB2b2lkIHNldFR1cmJ1bGVuY2VUeXBlKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlKSB7
IG1fdHVyYnVsZW5jZVR5cGUgPSB0dXJidWxlbmNlVHlwZTsgfQorICAgIHZvaWQgc2V0QmFzZUZy
ZXF1ZW5jeVgoZmxvYXQgYmFzZUZyZXF1ZW5jeVgpIHsgbV9iYXNlRnJlcXVlbmN5WCA9IGJhc2VG
cmVxdWVuY3lYOyB9CisgICAgdm9pZCBzZXRCYXNlRnJlcXVlbmN5WShmbG9hdCBiYXNlRnJlcXVl
bmN5WSkgeyBtX2Jhc2VGcmVxdWVuY3lZID0gYmFzZUZyZXF1ZW5jeVk7IH0KKyAgICB2b2lkIHNl
dE51bU9jdGF2ZXMoaW50IG51bU9jdGF2ZXMpIHsgbV9udW1PY3RhdmVzID0gbnVtT2N0YXZlczsg
fQorICAgIHZvaWQgc2V0U2VlZChmbG9hdCBzZWVkKSB7IG1fc2VlZCA9IHNlZWQ7IH0KKyAgICB2
b2lkIHNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoVGlsZXMpIHsgbV9zdGl0Y2hUaWxlcyA9IHN0
aXRjaFRpbGVzOyB9CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFzZUZyZXF1ZW5jeVg7IH0KLSAgICBib29sIHNldEJhc2VGcmVxdWVuY3lYKGZsb2F0KTsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZF
VHVyYnVsZW5jZT4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUZyZXF1ZW5jeVk7IH0KLSAgICBib29sIHNldEJhc2VG
cmVxdWVuY3lZKGZsb2F0KTsKK3ByaXZhdGU6CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VU
eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1P
Y3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIGZsb2F0IHNlZWQo
KSBjb25zdCB7IHJldHVybiBtX3NlZWQ7IH0KLSAgICBib29sIHNldFNlZWQoZmxvYXQpOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgbnVtT2N0YXZlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtT2N0YXZlczsgfQotICAgIGJvb2wgc2V0TnVtT2N0YXZlcyhpbnQpOworICAg
IGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBzdGl0Y2hUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RpdGNoVGlsZXM7IH0K
LSAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlv
bikgY29uc3Qgb3ZlcnJpZGU7CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Js
b2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9j
a1NpemUgLSAxOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9u
ID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2Jz
LgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25n
IHBhaW50aW5nU2VlZCwgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRp
bmdTZWVkKQotICAgICAgICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAg
ICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VG
cmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICBsb25nIHNlZWQ7Ci0gICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXpl
ICsgMl07Ci0gICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJd
OwotICAgICAgICBJbnRTaXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9u
ZyByYW5kb20oKTsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBT
dGl0Y2hEYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93
IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3Jh
cFggeyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7
IDAgfTsKLSAgICAgICAgaW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgotICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEpvYnM7Ci0KLSAgICBzdHJ1
Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRlcjsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5n
RGF0YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAg
ICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
dm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KLSAgICBGRVR1
cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9h
dCwgYm9vbCk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0
KCkpKTsgfQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
dm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3Rp
dGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJh
c2VGcmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNl
MkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRB
cnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBl
bmRZKSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwot
Ci0gICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOworICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHVyYnVs
ZW5jZVR5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBtX2Jhc2VG
cmVxdWVuY3lZOwogICAgIGludCBtX251bU9jdGF2ZXM7CkBAIC0xMzAsNSArNjUsNjcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fc3RpdGNoVGlsZXM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgordm9pZCBGRVR1cmJ1bGVuY2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV90dXJidWxlbmNlVHlwZTsKKyAgICBlbmNvZGVyIDw8IG1fYmFz
ZUZyZXF1ZW5jeVg7CisgICAgZW5jb2RlciA8PCBtX2Jhc2VGcmVxdWVuY3lZOworICAgIGVuY29k
ZXIgPDwgbV9udW1PY3RhdmVzOworICAgIGVuY29kZXIgPDwgbV9zZWVkOworICAgIGVuY29kZXIg
PDwgbV9zdGl0Y2hUaWxlczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8UmVmPEZFVHVyYnVsZW5jZT4+IEZFVHVyYnVsZW5jZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxUdXJidWxlbmNlVHlwZT4gdHVyYnVsZW5jZVR5
cGU7CisgICAgZGVjb2RlciA+PiB0dXJidWxlbmNlVHlwZTsKKyAgICBpZiAoIXR1cmJ1bGVuY2VU
eXBlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IGJhc2VGcmVxdWVuY3lYOworICAgIGRlY29kZXIgPj4gYmFzZUZyZXF1ZW5jeVg7
CisgICAgaWYgKCFiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBiYXNlRnJlcXVlbmN5WTsKKyAgICBkZWNv
ZGVyID4+IGJhc2VGcmVxdWVuY3lZOworICAgIGlmICghYmFzZUZyZXF1ZW5jeVkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gbnVtT2N0YXZl
czsKKyAgICBkZWNvZGVyID4+IG51bU9jdGF2ZXM7CisgICAgaWYgKCFudW1PY3RhdmVzKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2Vl
ZDsKKyAgICBkZWNvZGVyID4+IHNlZWQ7CisgICAgaWYgKCFzZWVkKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzdGl0Y2hUaWxlczsKKyAg
ICBkZWNvZGVyID4+IHN0aXRjaFRpbGVzOworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUo
KnR1cmJ1bGVuY2VUeXBlLCAqYmFzZUZyZXF1ZW5jeVgsICpiYXNlRnJlcXVlbmN5WSwgKm51bU9j
dGF2ZXMsICpzZWVkLCAqc3RpdGNoVGlsZXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlR1cmJ1bGVuY2VUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICAgICAgV2ViQ29yZTo6VHVyYnVsZW5jZVR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6VHVyYnVs
ZW5jZVR5cGU6OlVua25vd24sCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpGcmFj
dGFsTm9pc2UsCisgICAgICAgIFdlYkNvcmU6OlR1cmJ1bGVuY2VUeXBlOjpUdXJidWxlbmNlCisg
ICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVUdXJidWxlbmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNzY5NjUwMjg5
NDYyMGIwMjdhODI0YzY0MmY2NGMwNDNhMDFhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJH
ZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gRmlsdGVy
OjphcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAg
RmlsdGVySW1hZ2VWZWN0b3Igc3RhY2s7CisgICAgRmlsdGVyUmVzdWx0IHJlc3VsdChyZW5kZXJp
bmdNb2RlKCkpOworCisgICAgaWYgKHNvdXJjZUltYWdlKSB7CisgICAgICAgIGF1dG8gaW1hZ2Ug
PSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGdlb21ldHJ5LmZpbHRlclJlZ2lvbigpLCBzb3VyY2VJbWFn
ZVJlY3QsIHsgKnNvdXJjZUltYWdlIH0pOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgc3RhY2suYXBwZW5kKGltYWdlLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIH0KKworICAgIGlmICghYXBwbHkocmVzdWx0LCBzdGFjaywgZ2VvbWV0cnkpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA9PSAxKTsKKyAg
ICBhdXRvIGltYWdlID0gc3RhY2sudGFrZUxhc3QoKTsKKyAgICBpbWFnZS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICByZXR1cm4geyBp
bWFnZS0+aW1hZ2VCdWZmZXIoKSwgZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGltYWdlLT5pbWFnZVJl
Y3QoKSkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggYTJkOTk3OTNiMGRi
MjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uYmQ5ZDBlODNjOWUwNTZkYTg4MzJkOTljNWE2
MDAzMmVjZTY2YmZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIwLDU5ICsyMSwyNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01v
ZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24geworICAgIHVzaW5nIEZpbHRlckZ1bmN0
aW9uOjphcHBseTsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7
CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNm
b3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OworICAgIHZpcnR1
YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VmVjdG9yIGVm
ZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNl
dFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJj
ZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9Ci0KLSAgICBGbG9hdFNpemUg
ZmlsdGVyUmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQot
ICAgIHZvaWQgc2V0RmlsdGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29s
dXRpb24pIHsgbV9maWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQotCi0gICAg
ZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9Ci0gICAg
dm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gc2NhbGU7
IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9Ci0KLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KLSAgICB2b2lk
IHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVy
aW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVy
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAq
IG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJj
ZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdp
b24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2Vy
U3BhY2UoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp0dXBsZTxSZWZQdHI8
SW1hZ2VCdWZmZXI+LCBGbG9hdFJlY3Q+IGFwcGx5KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZpbHRlckdlb21ldHJ5Jikg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJS
ZXNvbHV0aW9uKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBtX3NvdXJjZUltYWdlOwotICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07Ci0gICAg
ZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6Rmls
dGVyRnVuY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5k
YXJ5U2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJlNzdkZWNkMzFmMjhlNWUyNTgwMmRlM2ZjY2Y4ZDQxM2Q0
MzY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNldCB7CitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBGbGFncyB7CisgICAgICAgIEhhc1ggICAgICA9IDEgPDwgMCwKKyAgICAgICAg
SGFzWSAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNXaWR0aCAgPSAxIDw8IDIsCisgICAgICAg
IEhhc0hlaWdodCA9IDEgPDwgMworICAgIH07CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCgpID0g
ZGVmYXVsdDsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRh
cmllcywgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICAgICAgOiBtX2JvdW5kYXJpZXMoYm91
bmRhcmllcykKKyAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAgIHsKKyAgICB9CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiB4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdz
LmNvbnRhaW5zKEZsYWdzOjpIYXNYKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMu
eCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFp
bnMoRmxhZ3M6Okhhc1kpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy55KCk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gd2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMo
RmxhZ3M6Okhhc1dpZHRoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMud2lkdGgo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlv
bmFsPGZsb2F0PiBoZWlnaHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29u
dGFpbnMoRmxhZ3M6Okhhc0hlaWdodCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVz
LmhlaWdodCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWx0ZXJCb3VuZGFy
eVNldD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3Vu
ZGFyaWVzOworICAgIE9wdGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlckJvdW5kYXJ5U2V0OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fYm91bmRhcmllczsKKyAgICBlbmNvZGVy
IDw8IG1fZmxhZ3M7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PEZpbHRlckJvdW5kYXJ5U2V0PiBGaWx0ZXJCb3VuZGFyeVNldDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGJvdW5kYXJpZXM7CisgICAg
ZGVjb2RlciA+PiBib3VuZGFyaWVzOworICAgIGlmICghYm91bmRhcmllcykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8T3B0aW9uU2V0PEZsYWdzPj4g
ZmxhZ3M7CisgICAgZGVjb2RlciA+PiBmbGFnczsKKyAgICBpZiAoIWZsYWdzKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZpbHRlckJvdW5kYXJ5U2V0KCpib3Vu
ZGFyaWVzLCAqZmxhZ3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckJv
dW5kYXJ5U2V0OjpGbGFncz4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0OjpGbGFncywKKworICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRh
cnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlT
ZXQ6OkZsYWdzOjpIYXNIZWlnaHQKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKaW5kZXggZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5Mjdk
YjEwOC4uNDc5MWM5YTNmNWE0NWJiZDdkZmM5M2IyMzU4ZmNkYjdhMWRmZjZlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcApAQCAtMjQsNjYwICsyNCwxMDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJS
ZXN1bHQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25l
b24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXJF
ZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRlciwgVHlwZSB0eXBlKQotICAgIDogbV9m
aWx0ZXIoZmlsdGVyKQotICAgICwgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGUodHlwZSkKLXsKLX0K
LQotRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkgPSBkZWZhdWx0OwotCi12b2lkIEZpbHRl
ckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmlsdGVyQm91
bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSBjb25zdAogewotICAgIG1fYWJzb2x1dGVQYWludFJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKLSAg
ICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotfQorICAgIC8vIFRoaXMgZnVuY3Rp
b24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMtMS8jRmls
dGVyUHJpbWl0aXZlU3ViUmVnaW9uLgorICAgIEZsb2F0UmVjdCBkZWZhdWx0UHJpbWl0aXZlU3Vi
cmVnaW9uOwogCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KCkKLXsK
LSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxl
IENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1
dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0lu
dFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0Ojpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBj
b25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFj
ZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1
YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7Ci19Ci0KLUludFJlY3QgRmls
dGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVj
dCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1
dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFTU0VS
VChoYXNSZXN1bHQoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6
OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0KLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJh
bnNsYXRlKC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFu
c2Zvcm0ubWFwUmVjdChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVy
YnVsZW5jZSwgRkVGbG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRl
ciByZWdpb24gYXMgdW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlm
ICh1bnNpZ25lZCBudW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkg
ewotICAgICAgICBzdWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1i
ZXJPZklucHV0RWZmZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZl
U3VicmVnaW9uID0gaW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotICAgICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVn
aW9uKTsKLSAgICAgICAgfQorICAgIC8vIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdpb24g
Zm9yIDxmZVRpbGU+LgorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiB0eXBlKCkgIT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlu
cHV0cykKKyAgICAgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXQt
PnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0g
bV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxp
bmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0
LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVy
RWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24g
PSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFy
aWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJl
Z2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJy
ZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWln
aHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsK
LQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwotCi0gICAgYXV0
byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVj
dChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0
aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQg
dG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5h
dGVzLgotICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9u
KTsKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGdlb21ldHJ5LmZpbHRlclJl
Z2lvbigpOwogCi0gICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIg
cmVnaW9uLgotICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2ZpbHRlci5m
aWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0
ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVT
Y2FsZWRGaWx0ZXJSZWdpb24pOworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb247CiAK
LSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4gc3Vi
cmVnaW9uOwotfQorICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJ5U2V0LngoKS52
YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLngoKSkpOworICAgIHByaW1pdGl2ZVN1
YnJlZ2lvbi5zZXRZKGJvdW5kYXJ5U2V0LnkoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3Vi
cmVnaW9uLnkoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyeVNl
dC53aWR0aCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ud2lkdGgoKSkpOwor
ICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcnlTZXQuaGVpZ2h0KCkudmFs
dWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi5oZWlnaHQoKSkpOwogCi1GaWx0ZXJFZmZl
Y3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAotewot
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZl
Y3RzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7
Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3Qq
ZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAg
IGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVt
YmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkp
OwotICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJl
dHVybiBhbGxFZmZlY3RzLnNpemUoKTsKLX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3Rh
bE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRl
ckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFs
bEVmZmVjdHMpOworICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLXZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
IHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBz
aXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3Rz
LmF0KGkpLmdldCgpOwotICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFz
UmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWN0
OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGRyYXdpbmdSZWN0LnVu
aXRlKGlucHV0LT5pbWFnZVJlY3QoKSk7CiAKLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1
bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKLSAgICB9Ci0KLSAgICBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNw
YWNlKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVm
ZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8
ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFi
c29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lv
biA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAi
XG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2Nh
bGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpIDw8ICJcbiAgZmlsdGVyIHJlc29sdXRpb24g
IiA8PCBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQ
YWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVj
dEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQotICAgIAotICAgIC8vIEFkZCBwbGF0Zm9y
bSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisgICAgcmV0dXJuIGdlb21ldHJ5LmNsaXBUb01heFBy
aW1pdGl2ZVN1YnJlZ2lvbihkcmF3aW5nUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKK2Jvb2wg
RmlsdGVyRWZmZWN0OjphcHBseVBsYXRmb3JtKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25zdAogewotICAgIC8vIE11c3Qgb3BlcmF0
ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGlu
dmFsaWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0
YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsKLQot
ICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBp
eGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7Ci0KLSNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsKLSAg
ICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5ndGgg
JiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4ZWxE
YXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0
cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsx
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxb
Ml0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxbM10p
OwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKLSAgICAg
ICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFz
dFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7Ci0gICAgICAgIGlm
ICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisjaWYgVVNF
KENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpCisgICAgICAgIHJldHVybiBhcHBseUNvcmVJbWFnZShvdXRwdXQsIGlucHV0cywg
Z2VvbWV0cnkpOwogI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0
aCAvIDQ7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEg
YW5kIGFkanVzdGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgt
LW51bVBpeGVscyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBh
IHBpeGVsCi0gICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8v
IENsYW1wIGVhY2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBs
b2NhdGlvbgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCpwaXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwot
ICAgICAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50
IGZvciBhbHBoYQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9CisgICAgcmV0dXJuIGFwcGx5
U29mdHdhcmUob3V0cHV0LCBpbnB1dHMsIGdlb21ldHJ5KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseShGaWx0ZXJSZXN1bHQm
IHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gYXBwbHkocmVz
dWx0LCBzdGFjaywgZ2VvbWV0cnksIEZpbHRlckJvdW5kYXJ5U2V0KCkpOwogfQogCi12b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKK2Jvb2wgRmlsdGVyRWZmZWN0Ojph
cHBseShGaWx0ZXJSZXN1bHQmIHJlc3VsdCwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25z
dCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnksIGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3Vu
ZGFyeVNldCkgY29uc3QKIHsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0
aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQg
aWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAgICBpZiAoaGFzUmVzdWx0
KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVhclJlc3VsdHNSZWN1cnNp
dmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQo
KQotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVj
dCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0
KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkg
PDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8gaW5wdXRzID0gdGFrZUlucHV0cyhzdGFjayk7CiAKLSAgICBpZiAo
bV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LCBkZXN0aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBs
aWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAq
IDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxB
cnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7Ci19Ci0KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0
KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNl
PiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwot
ICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBj
aGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAg
aWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJl
Y3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAotewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlv
biB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNv
dXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8
fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVz
dGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7Ci0KLSAgICAvLyBFYXJs
eSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4K
LSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAw
IHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJl
Y3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAg
IGlmICh4T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4
T3JpZ2luID0gMDsKKyAgICBpZiAoYXV0byBpbWFnZSA9IHJlc3VsdC5pbWFnZXMoKS5nZXQoeyAq
dGhpcyB9KSkgeworICAgICAgICBzdGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwotICAg
IGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBzY2Fs
ZWRQYWludFNpemUud2lkdGgoKTsKIAotICAgIGludCB5T3JpZ2luID0gc2NhbGVkUmVjdC55KCk7
Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdpbiA8IDApIHsKLSAgICAgICAgeURl
c3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7Ci0gICAgfQotICAgIGludCB5RW5k
ID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQgPiBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCk7CisgICAgYXV0
byBwcmltaXRpdmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oaW5wdXRz
LCBnZW9tZXRyeSwgYm91bmRhcnlTZXQpOworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0g
eE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53
aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lk
dGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRh
dGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBz
Y2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisgICAgYXV0byBpbWFnZVJl
Y3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoaW5wdXRzLCBnZW9tZXRyeSwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKKyAgICBhdXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0
KGltYWdlUmVjdCk7CiAKLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAgICAgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAgICAgZGVzdGlu
YXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3VyY2VQaXhlbCAr
PSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KLX0KKyAgICBpZiAo
YWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6
ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRl
cyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMt
PmlzQWxwaGFJbWFnZShpbnB1dHMpOworICAgIGF1dG8gaW1hZ2VDb2xvclNwYWNlID0gdGhpcy0+
aW1hZ2VDb2xvclNwYWNlKGlucHV0cyk7CiAKLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBz
cmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXpl
LmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisgICAgYXV0byBpbWFnZSA9
IHJlc3VsdC5jcmVhdGVGaWx0ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwg
aXNBbHBoYUltYWdlLCBhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCksIGltYWdlQ29sb3JTcGFjZSk7
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdkltYWdlX0J1
ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0
LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0
ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24u
ZGF0YSgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBs
eSgpOiIKKyAgICAgICAgPDwgIlxuICBwcmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVT
dWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBtYXhQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBnZW9t
ZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICAgICA8PCAi
XG4gIGltYWdlUmVjdCAiIDw8IGltYWdlUmVjdAorICAgICAgICA8PCAiXG4gIGFic29sdXRlSW1h
Z2VnUmVjdCAiIDw8IGFic29sdXRlSW1hZ2VSZWN0KTsKIAotICAgIHZJbWFnZVByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCku
dmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9u
LmRhdGEoKTsKKyAgICBpZiAoIWFwcGx5UGxhdGZvcm0oKmltYWdlLCBpbnB1dHMsIGdlb21ldHJ5
LCByZXN1bHQucmVuZGVyaW5nTW9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
d2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3Vy
Y2VDb21wb25lbnRbM107Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGlj
X2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRb
MV0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVu
dCArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRp
ZgotfQotCi1zdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50U2l6ZSYgaW5wdXRTaXplKQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVf
dCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQg
PSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAg
c3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7
Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRl
c3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90
KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVu
ZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAg
ICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAg
ICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNv
dXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBd
KSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFsxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAg
ICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZp
bHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
KQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBj
b2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0
bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZl
ci5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1
ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0
KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9y
U3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxw
aGFGb3JtYXQpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6
OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZG9uZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVs
QnVmZmVyQ29udmVyc2lvbi4KLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VC
dWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5k
bGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwotICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIHN0YWNrLmFwcGVuZCh7ICppbWFnZSB9KTsKKyAgICByZXN1bHQuaW1hZ2VzKCku
YWRkKHsgKnRoaXMgfSwgUmVmPEZpbHRlckltYWdlPigqaW1hZ2UpKTsKIAotICAgIC8vIENvbG9y
IHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9u
ZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgCi0gICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwg
dGFyZ2V0Q29sb3JTcGFjZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgcmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCitUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKSBj
b25zdAogewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVy
UmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxC
dWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEo
KSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29u
dmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBz
YXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZl
cnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAg
aWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFn
ZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhh
c1Jlc3VsdCgpKTsKLSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xv
clNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7
Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBp
bnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29s
b3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBp
bnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsK
LSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlv
biwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3Bh
Y2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlD
cmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3Bh
Y2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0K
LQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQot
ewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVz
dWx0KCkpOwotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAg
QVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsK
LSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1i
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0
aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgot
ICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Ig
c3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVy
IGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNl
bHNlCi0gICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVk
ZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRp
b25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNw
YWNlIGFkanVzdG1lbnRzIGludGVybmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9u
Q29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25D
b2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdl
QnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3Jt
IHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVm
ZmVyUmVzdWx0KCktPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
OwotCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgotfQotCi1UZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJSZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0
aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0Ci0gICAgLy8gcG9zc2libGUgYXQgdGhlIG1vbWVu
dCwgYmVjYXVzZSB3ZSBuZWVkIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIHRh
cmdldCBvYmplY3QuCi0gICAgCi0gICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgeworICAgIGlmIChyZXByZXNlbnRhdGlvbiA9PSBGaWx0
ZXJSZXByZXNlbnRhdGlvbjo6RGVidWdnaW5nKSB7CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVu
dFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBp
bWFnZSIsIG1fYWxwaGFJbWFnZSk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5n
IGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICAgICAg
dHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXIpCi17Ci0gICAgLy8gVXNlIGEgbmV3IHN0cmVhbSBiZWNhdXNlIHdlIHdhbnQgbXVsdGlsaW5l
IG1vZGUgZm9yIGxvZ2dpbmcgZmlsdGVycy4KLSAgICBUZXh0U3RyZWFtIGZpbHRlclN0cmVhbTsK
LSAgICBmaWx0ZXIuZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihmaWx0ZXJTdHJlYW0sIEZpbHRlckVm
ZmVjdDo6UmVwcmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpOwotICAgIAotICAgIHJldHVybiB0
cyA8PCBmaWx0ZXJTdHJlYW0ucmVsZWFzZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaAppbmRleCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0
NzFjLi4yYWQ2YzYyNmQwYTZkODc4ZThiZGQ2ZWE5MzY1NTIwN2ExNjE3ZDlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKQEAgLTIyLDIzNyArMjIsNTggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19CisjaW5jbHVkZSAiUmVuZGVyaW5nTW9k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgRmlsdGVyOwotY2xhc3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci0K
LXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7
Ci0KLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24s
Ci0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAot
ICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dAotfTsKK2NsYXNzIEZpbHRlckJvdW5kYXJ5
U2V0OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZl
Y3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJs
aWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAg
ICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENv
bXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGlu
ZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAg
ICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAg
TGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBP
ZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAg
IFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGlj
Ci0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJS
ZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0gICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVu
bXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxv
cHQpOwotICAgIHZvaWQgY29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBp
bnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNp
Z25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGltYWdlQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIAot
ICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBt
YW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCi0g
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAg
RmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgLy8g
U29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgotICAgIGJvb2wg
aXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0gICAgdm9pZCBz
ZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1h
Z2U7IH0KLQotICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2Fic29sdXRlUGFpbnRSZWN0OyB9Ci0gICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJz
b2x1dGVQYWludFJlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZl
Y3RSZWN0OyB9IAotCi0gICAgdm9pZCBhcHBseSgpOwotCi0gICAgLy8gQ29ycmVjdCBhbnkgaW52
YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZpbHRlciBvcGVy
YXRpb24uCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFsaWQgcGl4ZWwg
dmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCi0gICAgLy8gT25s
eSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBj
b3JyZWN0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQo
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwot
Ci0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCB7
IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmlydHVhbCBJbnRPdXRz
ZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0KLQotICAgIGVudW0g
Y2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07Ci0gICAg
dmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0
cHV0KSBjb25zdDsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcgc3Bl
Y2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4K
LSAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NTYxNC4KLSAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hhc1g7IH0KLSAgICB2b2lk
IHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNZ
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJvb2wgdmFsdWUp
IHsgbV9oYXNZID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2hhc1dpZHRoOyB9Ci0gICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZhbHVlKSB7IG1faGFz
V2lkdGggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2hhc0hlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNI
ZWlnaHQgPSB2YWx1ZTsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0gICAgdm9p
ZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29u
c3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3Vu
ZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5k
YXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRB
YnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBl
ZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJT
cGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVyRWZm
ZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0K
LQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25zdCBG
aWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29sIGNs
aXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lk
IHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsg
fQotCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1
bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7
Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1h
bGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9
IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZh
bHVlczsKLSAgICB9CisgICAgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQmLCBGaWx0ZXJJbWFnZVZl
Y3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlT
ZXQmKSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CiAKIHByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwgVHlwZSk7CisgICAgdXNp
bmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogICAgIAotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKLQotICAgIEltYWdlQnVmZmVyKiBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmKSBjb25z
dDsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUg
Y29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEgaW4gWzAs
MjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGll
ZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5l
Y2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7CisgICAg
dmlydHVhbCBib29sIGlzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwor
ICAgIHZpcnR1YWwgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3Rv
ciYpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7Ci0KLSAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdl
QnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVk
QXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252
ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwg
UGl4ZWxCdWZmZXImKTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYpIGNvbnN0ID0gMDsKICAgICAKKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlDb3JlSW1hZ2UoRmlsdGVySW1hZ2UmLCBjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNl
bmRpZgogCi0gICAgRmlsdGVyJiBtX2ZpbHRlcjsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9p
bnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1
bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAv
LyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMg
dGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAg
ICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4g
bV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7Ci0gICAgCi0g
ICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRo
ZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8g
VGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOworICAgIGJvb2wgYXBwbHlQbGF0Zm9ybShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIFJlbmRlcmlu
Z01vZGUpIGNvbnN0OwogCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0
dWFsIFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBv
ZiB0aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0Jiwg
RmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZp
bmFsOwogICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBtYXBwZWQgdG8gYWJz
b2x1dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgotICAgIEZsb2F0UmVjdCBtX2Fic29s
dXRlVW5jbGlwcGVkU3VicmVnaW9uOwotCi0gICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9oYXNYIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc1dpZHRoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzSGVpZ2h0IHsg
ZmFsc2UgfTsKLQotICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHByaW1pdGl2
ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBpdHMgaW5w
dXRzLgotICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwotCi0jaWYgRU5BQkxFKERF
U1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVh
clNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdD
b2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRpZgotICAg
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJFZmZlY3RD
bGFzc1R5cGU7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGaWx0
ZXJFZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3QoKTsgfQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QudHlwZSgpID09
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1lOyB9IFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTg1NWNkYjk2MzE3YjgyZGUzNTY3ZmMzMWU1Yjll
OWE5ZWM2MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oIgotCi0jaWYgVVNFKENPUkVfSU1BR0UpCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNy
ZWF0ZShib29sIGFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyaW5nRW5hYmxlZCwgRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQotewotI2lmIFVTRShDT1JFX0lNQUdFKQotICAgIGlmIChhY2NlbGVyYXRl
ZEZpbHRlclJlbmRlcmluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6dHJ5Q3JlYXRlKGxhc3RFZmZlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oYWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJpbmdFbmFibGVkKTsKLSAgICBVTlVTRURfUEFS
QU0obGFzdEVmZmVjdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotCi19IC8v
IG5hbXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcxMzIyYjc1YTc1NzNl
OWNjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICAKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdFJlbmRlcmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVy
RWZmZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAg
ICAKLXByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSA9IDA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFZlY3Rvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RWZWN0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NWY0YzgzMmNlM2FlMTZkOWVhOTIwOWNmODcyZWRiNzhjMGNiNzkzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RWZWN0b3IuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKwor
dXNpbmcgRmlsdGVyRWZmZWN0VmVjdG9yID0gVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OGMzMDAzYmUyNzdhNTdiMmM5MzRlM2Q1YzFiOTExMWQ2ZDY4NDgxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlv
bi5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rp
b24uaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSB0eXBl
KQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgYXV0byYgZmlsdGVy
TmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRlck5hbWVNYXAgPSBIYXNoTWFwPEZpbHRlckZ1bmN0
aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6OkludEhhc2g8RmlsdGVyRnVuY3Rpb246OlR5cGU+
LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1bmN0aW9uOjpUeXBlPj47CisKKyAg
ICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CisgICAg
ICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFtZXMgPSB7CisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAgICAgICAgICAiQ1NTRmlsdGVyIl9zICAgICAgICAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyLCAgICAg
ICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwgICAgICAgICAgICAgIkZFQmxlbmQi
X3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9yTWF0cml4Il9zICAgICAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyLCAiRkVDb21wb25l
bnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVD
b21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9zaXRlIl9zICAgICAgICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgsICAgICJGRUNvbnZvbHZl
TWF0cml4Il9zICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNlTGlnaHRpbmciX3MgICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsICAgIkZFRGlzcGxhY2Vt
ZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJv
cFNoYWRvdywgICAgICAgICJGRURyb3BTaGFkb3ciX3MgICAgICAgIH0sCisgICAgICAgICAgICB7
IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLCAgICAgICAgICAgICAiRkVGbG9vZCJfcyAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVz
c2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5CbHVyIl9zICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsICAgICAgICAgICAgICJGRUltYWdlIl9zICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdl
LCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAgICAgICAgIkZFTW9ycGhvbG9neSJf
cyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0
LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsICAiRkVTcGVjdWxhckxpZ2h0
aW5nIl9zICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLCAg
ICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAgICAgICJGRVR1cmJ1bGVuY2UiX3Mg
ICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFs
cGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJfcyAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljLCAgICAgICAiU291cmNlR3JhcGhpYyJf
cyAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGZpbHRlck5hbWVzOworICAg
IH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZpbHRlck5hbWVzLmdldCgpOworfQorCitBdG9tU3Ry
aW5nIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4g
ZmlsdGVyTmFtZXMoKS5nZXQodHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTBlMWMyYTQ0ZjI3ODQwMTQxYzFlNDUwNTM1MTE2
MTc1NzU3NWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXByZXNlbnRh
dGlvbi5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdU
RiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVyUmVzdWx0OworY2xhc3MgSW1hZ2VCdWZmZXI7
CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rp
b24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAg
Q1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAgRkVNaW5pbXVtLAorCisg
ICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29sb3JNYXRyaXgsCisgICAg
ICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9zaXRlLAorICAgICAgICBG
RUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGluZywKKyAgICAgICAgRkVE
aXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAgICAgICAgRkVGbG9vZCwK
KyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2UsCisgICAgICAgIEZFTWVy
Z2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZzZXQsCisgICAgICAgIEZF
U3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAgICBGRVR1cmJ1bGVuY2Us
CisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFwaGljLAorCisgICAgICAg
IEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAgRmlsdGVyRnVuY3Rpb24o
VHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGJvb2wgaXNDU1NGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9v
bCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7
IH0KKyAgICBib29sIGlzRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkNT
U0ZpbHRlciB8fCBtX3R5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRl
ckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV90
eXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIEF0b21TdHJpbmcgZmlsdGVy
TmFtZShUeXBlKTsKKyAgICBzdGF0aWMgQXRvbVN0cmluZyBzb3VyY2VBbHBoYU5hbWUoKSB7IHJl
dHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUFscGhhKTsgfQorICAgIHN0YXRpYyBBdG9tU3Ry
aW5nIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VH
cmFwaGljKTsgfQorICAgIEF0b21TdHJpbmcgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZp
bHRlck5hbWUobV90eXBlKTsgfQorCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyNlbmRpZgorCisgICAgdmlydHVhbCBJbnRPdXRzZXRzIGNhbGN1bGF0ZU91dHNldHMoKSBjb25z
dCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShGaWx0ZXJSZXN1bHQm
LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24gPSBGaWx0ZXJSZXByZXNl
bnRhdGlvbjo6VGVzdE91dHB1dCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIFR5cGUgbV90
eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpT
VkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxl
bmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFu
c2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRl
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJp
eCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0
aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFk
b3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdlb21l
dHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTc4ZDM2MzZhZjk3Nzk4MDdmNTZlZGNhYWMyMmM3N2E3Nzll
MzMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmls
dGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBmbG9hdCBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgIDog
bV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICwgbV9maWx0ZXJTY2FsZShGbG9hdFNp
emUoZmlsdGVyU2NhbGUsIGZpbHRlclNjYWxlKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlw
T3BlcmF0aW9uKQoreworfQorCitGaWx0ZXJHZW9tZXRyeTo6RmlsdGVyR2VvbWV0cnkoY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYgdGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8
RmlsdGVyQm91bmRhcnlTZXQ+JiYgZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKQorICAgIDogRmls
dGVyR2VvbWV0cnkoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgdGFyZ2V0Qm91bmRpbmdTaXpl
LCBXVEZNb3ZlKGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cyksIENsaXBPcGVyYXRpb246OkludGVy
c2VjdCkKK3sKK30KKworRmlsdGVyR2VvbWV0cnk6OkZpbHRlckdlb21ldHJ5KGNvbnN0IEZsb2F0
UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4mIHRhcmdldEJvdW5kaW5nU2l6ZSwgVmVjdG9yPEZpbHRl
ckJvdW5kYXJ5U2V0PiYmIGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0cywgQ2xpcE9wZXJhdGlvbiBj
bGlwT3BlcmF0aW9uKQorICAgIDogbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICwg
bV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAsIG1fdGFyZ2V0Qm91bmRpbmdTaXplKHRh
cmdldEJvdW5kaW5nU2l6ZSkKKyAgICAsIG1fZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKFdURk1v
dmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlw
T3BlcmF0aW9uKQoreworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6OmNhbGN1bGF0ZUZp
bHRlclNjYWxlKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFNp
emUmIGFic29sdXRlU2NhbGUpCit7CisgICAgYXV0byBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdCA9
IHNvdXJjZUltYWdlUmVjdDsKKyAgICBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdC5zY2FsZShhYnNv
bHV0ZVNjYWxlKTsKKyAgICBhdXRvIGNsYW1waW5nU2NhbGUgPSBGbG9hdFNpemUgeyAxLCAxIH07
CisgICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlU291cmNlSW1hZ2VS
ZWN0LnNpemUoKSwgY2xhbXBpbmdTY2FsZSk7CisgICAgcmV0dXJuIGFic29sdXRlU2NhbGUgKiBj
bGFtcGluZ1NjYWxlOworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6OnJlc29sdmVJbWFn
ZVNpemUoY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlt
YWdlU2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdTaXplLnZhbHVlX29yKEZsb2F0U2l6ZSgxLCAxKSk7
Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXJHZW9tZXRyeTo6bWFwSW1hZ2VTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBpbWFnZVNpemUgKiBtX2ZpbHRl
clNjYWxlOworfQorCitGbG9hdFNpemUgRmlsdGVyR2VvbWV0cnk6Om1hcFJlc29sdmVkSW1hZ2VT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplKSBjb25zdAoreworICAgIHJldHVybiBtYXBJ
bWFnZVNpemUocmVzb2x2ZUltYWdlU2l6ZShpbWFnZVNpemUpKTsKK30KKworCitGbG9hdFJlY3Qg
RmlsdGVyR2VvbWV0cnk6Om1hcEltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkg
Y29uc3QKK3sKKyAgICBhdXRvIHNjYWxlZEltYWdlUmVjdCA9IGltYWdlUmVjdDsKKyAgICBzY2Fs
ZWRJbWFnZVJlY3Quc2NhbGUobV9maWx0ZXJTY2FsZSk7CisgICAgcmV0dXJuIHNjYWxlZEltYWdl
UmVjdDsKK30KKworRmxvYXRSZWN0IEZpbHRlckdlb21ldHJ5OjptYXBJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0SW1hZ2VSZWN0KSBj
b25zdAoreworICAgIGF1dG8gbW92ZWRJbWFnZVJlY3QgPSBpbWFnZVJlY3Q7CisgICAgbW92ZWRJ
bWFnZVJlY3QubW92ZUJ5KC10YXJnZXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJu
IG1hcEltYWdlUmVjdChtb3ZlZEltYWdlUmVjdCk7Cit9CisKK0ZpbHRlckJvdW5kYXJ5U2V0IEZp
bHRlckdlb21ldHJ5Ojpib3VuZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSwgdW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VHcmFwaGljIHx8IHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChtX2ZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaW5kZXggPj0gbV9m
aWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMuc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBtX2ZpbHRl
ckVmZmVjdEJvdW5kYXJ5U2V0c1tpbmRleF07Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRy
eTo6Y2xpcFRvRmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdAoreworICAgIHJldHVybiBpbnRlcnNlY3Rpb24ocHJpbWl0aXZlU3VicmVnaW9uLCBt
X2ZpbHRlclJlZ2lvbik7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXJHZW9tZXRyeTo6Y2xpcFRvUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGlwT3BlcmF0
aW9uID09IENsaXBPcGVyYXRpb246OkludGVyc2VjdCA/IGludGVyc2VjdGlvbihpbWFnZVJlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbikgOiB1bmlvblJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJy
ZWdpb24pOworfQorCitGbG9hdFJlY3QgRmlsdGVyR2VvbWV0cnk6OmNsaXBUb01heFByaW1pdGl2
ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGNsaXBUb1ByaW1pdGl2ZVN1
YnJlZ2lvbihpbWFnZVJlY3QsIGNsaXBUb0ZpbHRlclJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJHZW9tZXRyeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU3NzNkNWZhODc4MzYzNGYzZjM0NDg0NDJmNGViOGYxYzNlOTA0NGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckdl
b21ldHJ5LmgKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJCb3VuZGFy
eVNldC5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXJHZW9tZXRyeSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZW51bSBjbGFzcyBDbGlwT3BlcmF0aW9uIHsgSW50ZXJzZWN0LCBVbml0ZSB9OworCisg
ICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGZsb2F0IGZp
bHRlclNjYWxlID0gMSwgQ2xpcE9wZXJhdGlvbiA9IENsaXBPcGVyYXRpb246OkludGVyc2VjdCk7
CisgICAgRmlsdGVyR2VvbWV0cnkoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiYg
dGFyZ2V0Qm91bmRpbmdTaXplLCBWZWN0b3I8RmlsdGVyQm91bmRhcnlTZXQ+JiYpOworCisgICAg
c3RhdGljIEZsb2F0U2l6ZSBjYWxjdWxhdGVGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRTaXplJiBhYnNvbHV0ZVNjYWxlKTsKKworICAgIEZs
b2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQor
ICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7
IH0KKworICAgIEZsb2F0U2l6ZSByZXNvbHZlSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplKSBjb25zdDsKKworICAgIEZsb2F0U2l6ZSBtYXBJbWFnZVNpemUoY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBtYXBSZXNvbHZlZEltYWdlU2l6
ZShjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbWFw
SW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0KSBjb25zdDsKKyAgICBGbG9hdFJl
Y3QgbWFwSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmVndEltYWdlUmVjdCkgY29uc3Q7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCBib3Vu
ZGFyeVNldChGaWx0ZXJFZmZlY3Q6OlR5cGUsIHVuc2lnbmVkKSBjb25zdDsKKworICAgIEZsb2F0
UmVjdCBjbGlwVG9GaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworCisgICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworICAgIEZsb2F0UmVjdCBjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxGaWx0ZXJHZW9tZXRyeT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGaWx0ZXJHZW9tZXRyeShjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxG
bG9hdFNpemU+JiB0YXJnZXRCb3VuZGluZ1NpemUsIFZlY3RvcjxGaWx0ZXJCb3VuZGFyeVNldD4m
JiwgQ2xpcE9wZXJhdGlvbik7CisKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAg
RmxvYXRTaXplIG1fZmlsdGVyU2NhbGU7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4g
bV90YXJnZXRCb3VuZGluZ1NpemU7CisgICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBtX2Zp
bHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKworICAgIENsaXBPcGVyYXRpb24gbV9jbGlwT3BlcmF0
aW9uIHsgQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0IH07Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBGaWx0ZXJHZW9tZXRyeTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBlbmNvZGVyIDw8IG1f
ZmlsdGVyU2NhbGU7CisKKyAgICBlbmNvZGVyIDw8IG1fdGFyZ2V0Qm91bmRpbmdTaXplOworICAg
IGVuY29kZXIgPDwgbV9maWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisKKyAgICBlbmNvZGVyIDw8
IG1fY2xpcE9wZXJhdGlvbjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8RmlsdGVyR2VvbWV0cnk+IEZpbHRlckdlb21ldHJ5OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZmlsdGVyUmVnaW9uOworICAg
IGRlY29kZXIgPj4gZmlsdGVyUmVnaW9uOworICAgIGlmICghZmlsdGVyUmVnaW9uKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IGZp
bHRlclNjYWxlOworICAgIGRlY29kZXIgPj4gZmlsdGVyU2NhbGU7CisgICAgaWYgKCFmaWx0ZXJT
Y2FsZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjpvcHRpb25hbDxGbG9hdFNpemU+PiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgZGVjb2Rl
ciA+PiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgaWYgKCF0YXJnZXRCb3VuZGluZ1NpemUpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxG
aWx0ZXJCb3VuZGFyeVNldD4+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKyAgICBkZWNvZGVy
ID4+IGZpbHRlckVmZmVjdEJvdW5kYXJ5U2V0czsKKyAgICBpZiAoIWZpbHRlckVmZmVjdEJvdW5k
YXJ5U2V0cykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Q2xpcE9wZXJhdGlvbj4gY2xpcE9wZXJhdGlvbjsKKyAgICBkZWNvZGVyID4+IGNsaXBPcGVy
YXRpb247CisgICAgaWYgKCFjbGlwT3BlcmF0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIEZpbHRlckdlb21ldHJ5KCpmaWx0ZXJSZWdpb24sICpmaWx0ZXJT
Y2FsZSwgKnRhcmdldEJvdW5kaW5nU2l6ZSwgV1RGTW92ZSgqZmlsdGVyRWZmZWN0Qm91bmRhcnlT
ZXRzKSwgKmNsaXBPcGVyYXRpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZp
bHRlckdlb21ldHJ5OjpDbGlwT3BlcmF0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24sCisK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OkludGVyc2Vj
dCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb246OlVuaXRl
CisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jYmE1MTAwMjQ2Y2Y5OTc2NTAwZmU5NGNlODY1MWQ5ODFmNjQwMjkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVNvZnR3YXJlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgorCisjaWYgVVNFKENPUkVfSU1BR0UpCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VD
b3JlSW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2lu
Y2x1ZGUgPGFybV9uZW9uLmg+CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9v
bCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5p
c0VtcHR5KCkgfHwgaW1hZ2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6
ZSkpOworI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIGlmIChyZW5kZXJpbmdNb2RlID09IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0
ZXJJbWFnZUNvcmVJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgaXNBbHBoYUlt
YWdlLCBsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWx0ZXJJbWFnZVNvZnR3
YXJlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGxvZ2ljYWxT
aXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpKTsKK30KKwor
UmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgUmVmPEltYWdl
QnVmZmVyPiYmIGltYWdlQnVmZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRl
ckltYWdlU29mdHdhcmUocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIFdURk1vdmUoaW1h
Z2VCdWZmZXIpKSk7Cit9CisKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wg
aXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlKQorICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0
aXZlU3VicmVnaW9uKQorICAgICwgbV9pbWFnZVJlY3QoaW1hZ2VSZWN0KQorICAgICwgbV9pc0Fs
cGhhSW1hZ2UoaXNBbHBoYUltYWdlKQorICAgICwgbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkK
KyAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9yZXNvbHV0aW9u
U2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7
Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNpemVfdCBy
b3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZmZXIgc3Jj
OworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWlnaHQgPSBp
bnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgc3Jj
LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKworICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Cisg
ICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9
IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3Rp
bmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291
cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBz
b3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpOworICAg
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworCisg
ICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBz
b3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxwaGEgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogYWxwaGEgLyAyNTU7CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBv
bmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNl
bmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHNp
emVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Cisg
ICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKKwor
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRo
KCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVpbnQ4X3Qq
IGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRh
KCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAgICAgICBpbnQgYWxw
aGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGlmIChhbHBoYSkgeworICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBv
bmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7
CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4o
c291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOworICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMV0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
Ml0gPSAwOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxw
aGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiYgRmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlciA6IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmls
dGVySW1hZ2U6OnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQp
Cit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9y
bWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIu
dmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFjZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBp
bWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIEludFNpemUo
bV9sb2dpY2FsU2l6ZSkgfSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOwor
ICAgIH0KKyAgICAKKyAgICBJbnRTaXplIHNjYWxlZFNpemUobV9sb2dpY2FsU2l6ZSk7CisgICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAg
IHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgcGl4ZWxCdWZmZXIg
PSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAocGl4ZWxCdWZm
ZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAg
ICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRh
dGEoKSwgc2NhbGVkU2l6ZSk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgY29weVVucHJlbXVs
dGlwbHlpbmdBbHBoYShwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIHNjYWxlZFNpemUp
OworCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHNjYWxlZFNpemUpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZs
b3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb3B5UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8vIFRoaXMgZnVuY3Rp
b24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4gZXh0cmEgY29sb3Ig
c3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBjb2xvciBjb252ZXJz
aW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBpbnB1dAorICAgIC8v
IEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxzCisgICAgcmV0dXJu
IGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOworI2Vsc2UKKyAgICAv
LyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24t
Q0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Cisg
ICAgc2NhbGVkUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRTaXplIHNj
YWxlZFBhaW50U2l6ZShtX2xvZ2ljYWxTaXplKTsKKyAgICBzY2FsZWRQYWludFNpemUuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24g
dG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3Vy
Y2UuCisgICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwg
c2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0
Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3Rp
bmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkg
cmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisg
ICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8
fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0
LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBp
ZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9y
aWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7CisgICAg
aWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpOworCisgICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsK
KyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVz
dCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQg
PSBzY2FsZWRSZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKKworICAgIGlu
dCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2Nhbmxp
bmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNj
YWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVs
ID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4
RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEo
KSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsK
KworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGluYXRp
b25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9
IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5s
aW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sK
KyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVj
dC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0
IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJz
aW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVydGVk
SW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29sb3Ig
c3BhY2UgY29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25l
IGltYWdlIGJ1ZmZlciB0byBhbm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3Bh
Y2UgfTsKKyAgICByZXR1cm4gY29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgcmVjdCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdl
OjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlKSBjb25zdAoreworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZl
ci5zaXplKCkpOworICAgIHJlY3Quc2NhbGUoMSAvIG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXpl
KCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBp
eGVsQnVmZmVyCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIG1fcmVzb2x1dGlvblNjYWxl
LCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOwor
fQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29s
b3JTcGFjZSkKK3sKKyAgICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMo
YWxwaGFGb3JtYXQpID8gJnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkg
OiBudWxscHRyOworCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWly
ZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAg
ICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7
CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZShtX2xvZ2ljYWxTaXplKSB9OworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZv
cm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VC
eXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcGl4ZWxCdWZmZXIgPSB0aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAg
fQorCisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAg
ICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAg
IGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9u
LCBzcmNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVz
KHBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBG
aWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8g
TXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fu
bm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJy
YXkgPSBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBp
eGVsRGF0YSA9IGltYWdlQXJyYXkuZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0g
aW1hZ2VBcnJheS5sZW5ndGgoKTsKKworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBl
ciBwaXhlbCwgYW5kIGNvbXBsZXRlIHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5n
dGggJSA0KSk7CisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVs
QXJyYXlMZW5ndGggPj0gNjQpIHsKKyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxE
YXRhICsgKHBpeGVsQXJyYXlMZW5ndGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIC8vIEluY3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4
NF90IHNpeHRlZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4
dGVlblBpeGVscy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVl
blBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlu
cV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAg
ICAgICAgc2l4dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsy
XSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRh
LCBzaXh0ZWVuUGl4ZWxzKTsKKyAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAg
fSB3aGlsZSAocGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVu
Z3RoICY9IDB4M2Y7CisgICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5
TGVuZ3RoIC8gNDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBh
bHBoYSBhbmQgYWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hp
bGUgKC0tbnVtUGl4ZWxzID49IDApIHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRl
IGluIGEgcGl4ZWwKKyAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAg
ICAgLy8gQ2xhbXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBp
eGVsIGxvY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoKnBpeGVsRGF0YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9
IGE7CisgICAgICAgICAgICArK3BpeGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNy
ZW1lbnQgZm9yIGFscGhhCisgICAgICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBG
aWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworI2lmIFVTRShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNl
IGFkanVzdG1lbnRzIGludGVybmFsbHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOwor
I2Vsc2UKKyAgICBpZiAoY29sb3JTcGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vz
c2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNl
IHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAg
ICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGlt
YWdlQnVmZmVyLT50cmFuc2Zvcm1Db2xvclNwYWNlKG1fY29sb3JTcGFjZSwgY29sb3JTcGFjZSk7
CisKKyAgICBtX2NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOworICAgIG1fdW5wcmVtdWx0aXBsaWVk
UGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZm
ZXIgPSBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0ZmE4N2MwNzJiYjc2YzVjYjY4OTA5MzAwYThmMGNiZjA1
ZWJkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKKworY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Rmls
dGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1h
Z2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxv
YXRSZWN0JiBpbWFnZVJlY3QsIFJlZjxJbWFnZUJ1ZmZlcj4mJik7CisKKyAgICB2aXJ0dWFsIH5G
aWx0ZXJJbWFnZSgpID0gZGVmYXVsdDsKKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlUmVjdDsgfQorICAgIGJvb2wgaXNB
bHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KKworICAgIEZsb2F0
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01v
ZGU7IH0KKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXJJZkV4aXN0cygpID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlQnVmZmVy
KiBpbWFnZUJ1ZmZlcigpID0gMDsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBw
aXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIFBpeGVsQnVm
ZmVyKiBwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0
ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICAK
KyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAgICB2b2lkIHRy
YW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcm90ZWN0ZWQ6
CisgICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1
ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQ
aXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKworICAgIEZs
b2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFJlY3QgbV9pbWFnZVJlY3Q7
CisgICAgYm9vbCBtX2lzQWxwaGFJbWFnZSB7IGZhbHNlIH07CisKKyAgICBGbG9hdFNpemUgbV9s
b2dpY2FsU2l6ZTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9h
dCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNw
YWNlOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2VWZWN0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1h
Z2VWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTc1MzU5MmE3YzZhOWQyZjZmYzU0OWU0ZDdlZjk0Y2Y3
MjAwOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZVZlY3Rvci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVySW1hZ2U7CisKK3VzaW5nIEZpbHRlckltYWdlVmVjdG9yID0gVmVjdG9yPFJlZjxGaWx0ZXJJ
bWFnZT4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlcHJlc2VudGF0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGRiZmY3ZDgwNDdjZWY5ZWY2M2EzNmVjYzM1ZTVlOWIyMDExY2Vl
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyUmVwcmVzZW50YXRpb24uaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBGaWx0ZXJSZXByZXNlbnRhdGlvbiA6IHVpbnQ4
X3QgeworICAgIFRlc3RPdXRwdXQsCisgICAgRGVidWdnaW5nCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQyODdkMTUzYzA0MWIyOTk4
MWE2OWRhZmUzYTY0OWU5NzU0YzMyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmNwcApAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJSZXN1bHQuaCIKKworI2luY2x1ZGUgIkZp
bHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGaWx0ZXJSZXN1bHQ6OkZpbHRlclJlc3VsdChSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUpCisgICAgOiBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKK3sKK30KKwor
UmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJSZXN1bHQ6OmNyZWF0ZUZpbHRlckltYWdlKGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGRyYXdpbmdS
ZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBGaWx0
ZXJJbWFnZTo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgZHJhd2luZ1JlY3QsIGlzQWxwaGFJ
bWFnZSwgbG9naWNhbFNpemUsIG1fcmVuZGVyaW5nTW9kZSwgMSwgY29sb3JTcGFjZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyUmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkYzg4MzRm
NzdmZjlkM2VkY2NmMGFiMjgxZjgyMTIzM2U4OGM3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlclJlc3VsdC5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJGdW5j
dGlvbjsKK2NsYXNzIEZpbHRlckdlb21ldHJ5OworY2xhc3MgRmlsdGVySW1hZ2U7CisKK2NsYXNz
IEZpbHRlclJlc3VsdCB7CitwdWJsaWM6CisgICAgdXNpbmcgSW1hZ2VzID0gSGFzaE1hcDxSZWY8
Y29uc3QgRmlsdGVyRnVuY3Rpb24+LCBSZWY8RmlsdGVySW1hZ2U+PjsKKworICAgIEZpbHRlclJl
c3VsdChSZW5kZXJpbmdNb2RlKTsKKworICAgIEltYWdlcyYgaW1hZ2VzKCkgeyByZXR1cm4gbV9p
bWFnZXM7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmluZ01vZGU7IH0KKworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlRmls
dGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgZHJhd2luZ1JlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworcHJpdmF0ZToKKyAg
ICBJbWFnZXMgbV9pbWFnZXM7CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUy
ZjBlYjk0ODJjNjEwZjU1ZGJiMzIzNGZhNjJlY2RlZTdhMjc4OTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNw
cApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5h
dGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMaWdodFNvdXJjZTo6TGlnaHRTb3VyY2UoRGF0
YSYmIGRhdGEpCisgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKK3sKK30KKwordm9pZCBMaWdo
dFNvdXJjZTo6c2V0QXppbXV0aChmbG9hdCBhemltdXRoKQoreworICAgIGlmIChhdXRvKiBkYXRh
ID0gc3RkOjpnZXRfaWY8RGlzdGFudExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpCisgICAgICAg
IGRhdGEtPnNldEF6aW11dGgoYXppbXV0aCk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldEVs
ZXZhdGlvbihmbG9hdCBlbGV2YXRpb24pCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6Omdl
dF9pZjxEaXN0YW50TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0
RWxldmF0aW9uKGVsZXZhdGlvbik7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFgoZmxvYXQg
eCkKK3sKKyAgICBpZiAoYXV0byogZGF0YSA9IHN0ZDo6Z2V0X2lmPFBvaW50TGlnaHRTb3VyY2VE
YXRhPigmbV9kYXRhKSkgeworICAgICAgICBkYXRhLT5zZXRYKHgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3Vy
Y2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0WCh4KTsKK30KKwordm9pZCBMaWdo
dFNvdXJjZTo6c2V0WShmbG9hdCB5KQoreworICAgIGlmIChhdXRvKiBkYXRhID0gc3RkOjpnZXRf
aWY8UG9pbnRMaWdodFNvdXJjZURhdGE+KCZtX2RhdGEpKSB7CisgICAgICAgIGRhdGEtPnNldFko
eSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXV0byogZGF0YSA9IHN0ZDo6
Z2V0X2lmPFNwb3RMaWdodFNvdXJjZURhdGE+KCZtX2RhdGEpKQorICAgICAgICBkYXRhLT5zZXRZ
KHkpOworfQorCit2b2lkIExpZ2h0U291cmNlOjpzZXRaKGZsb2F0IHopCit7CisgICAgaWYgKGF1
dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxQb2ludExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkpIHsK
KyAgICAgICAgZGF0YS0+c2V0Wih6KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdXRvKiBkYXRhID0gc3RkOjpnZXRfaWY8U3BvdExpZ2h0U291cmNlRGF0YT4oJm1fZGF0YSkp
CisgICAgICAgIGRhdGEtPnNldFooeik7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50
c0F0WChmbG9hdCBwb2ludHNBdFgpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9p
ZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRz
QXRYKHBvaW50c0F0WCk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WShmbG9h
dCBwb2ludHNBdFkpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGln
aHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRZKHBvaW50
c0F0WSk7Cit9CisKK3ZvaWQgTGlnaHRTb3VyY2U6OnNldFBvaW50c0F0WihmbG9hdCBwb2ludHNB
dFopCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VE
YXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0UG9pbnRzQXRaKHBvaW50c0F0Wik7Cit9
CisgICAgCit2b2lkIExpZ2h0U291cmNlOjpzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQpCit7CisgICAgaWYgKGF1dG8qIGRhdGEgPSBzdGQ6OmdldF9pZjxTcG90TGln
aHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0YS0+c2V0U3BlY3VsYXJFeHBvbmVu
dChzcGVjdWxhckV4cG9uZW50KTsKK30KKwordm9pZCBMaWdodFNvdXJjZTo6c2V0TGltaXRpbmdD
b25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCit7CisgICAgaWYgKGF1dG8qIGRhdGEg
PSBzdGQ6OmdldF9pZjxTcG90TGlnaHRTb3VyY2VEYXRhPigmbV9kYXRhKSkKKyAgICAgICAgZGF0
YS0+c2V0TGltaXRpbmdDb25lQW5nbGUobGltaXRpbmdDb25lQW5nbGUpOworfQorCitMaWdodFNv
dXJjZVBhaW50RGF0YSBMaWdodFNvdXJjZTo6Y29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNv
bnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3IpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9kYXRhLAorICAgICAgICBbJl0gKGNvbnN0IERpc3RhbnRMaWdodFNvdXJjZURh
dGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXB1dGVMaWdodFNvdXJjZVBh
aW50RGF0YShjb2xvclZlY3Rvcik7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUG9p
bnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXB1
dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb2xvclZlY3Rvcik7CisgICAgICAgIH0sCisgICAgICAg
IFsmXSAoY29uc3QgU3BvdExpZ2h0U291cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0
dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbG9yVmVjdG9yKTsKKyAgICAg
ICAgfQorICAgICk7Cit9CisKK0xpZ2h0U291cmNlUGl4ZWxEYXRhIExpZ2h0U291cmNlOjpjb21w
dXRlTGlnaHRTb3VyY2VQaXhlbERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdAoreworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25zdCBEaXN0YW50TGlnaHRTb3VyY2VE
YXRhJiBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5jb21wdXRlTGlnaHRTb3VyY2VQ
aXhlbERhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZd
IChjb25zdCBQb2ludExpZ2h0U291cmNlRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJu
IGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7
CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgU3BvdExpZ2h0U291cmNlRGF0YSYgZGF0
YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRh
KHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CisgICAgICAgIH0KKyAgICApOworfQorCitUZXh0U3Ry
ZWFtJiBMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykg
Y29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAo
Y29uc3QgRGlzdGFudExpZ2h0U291cmNlRGF0YSYgZGF0YSkgLT4gVGV4dFN0cmVhbSYgeworICAg
ICAgICAgICAgcmV0dXJuIGRhdGEuZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CisgICAgICAg
IH0sCisgICAgICAgIFsmXSAoY29uc3QgUG9pbnRMaWdodFNvdXJjZURhdGEmIGRhdGEpIC0+IFRl
eHRTdHJlYW0mIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFNwb3RMaWdodFNvdXJjZURh
dGEmIGRhdGEpIC0+IFRleHRTdHJlYW0mIHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICB9CisgICAgKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1
NWQyMzVhNzM4OWY1ZDUuLmQ1ZTYxYjkzMDBjMDhjMmIxZjNhZTAyN2RkMjhiNjViNmY3ZTVkYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmgKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOCArMjQs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiRGlzdGFudExpZ2h0U291cmNlRGF0YS5o
IgorI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiU3BvdExpZ2h0
U291cmNlRGF0YS5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CkBAIC0z
Miw2NiArMzQsNjEgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1lbnVtIExpZ2h0VHlwZSB7Ci0gICAgTFNfRElTVEFOVCwKLSAgICBMU19QT0lOVCwKLSAgICBM
U19TUE9UCi19OworY2xhc3MgTGlnaHRTb3VyY2UgeworcHVibGljOgorICAgIHVzaW5nIERhdGEg
PSBzdGQ6OnZhcmlhbnQ8CisgICAgICAgIERpc3RhbnRMaWdodFNvdXJjZURhdGEsCisgICAgICAg
IFBvaW50TGlnaHRTb3VyY2VEYXRhLAorICAgICAgICBTcG90TGlnaHRTb3VyY2VEYXRhCisgICAg
PjsKIAotY2xhc3MgRmlsdGVyRWZmZWN0OworICAgIFdFQkNPUkVfRVhQT1JUIExpZ2h0U291cmNl
KERhdGEmJik7CisKKyAgICB2b2lkIHNldEF6aW11dGgoZmxvYXQpOworICAgIHZvaWQgc2V0RWxl
dmF0aW9uKGZsb2F0KTsKKyAgICAKKyAgICAvLyBUaGVzZSBhcmUgaW4gdXNlciBzcGFjZSBjb29y
ZGluYXRlcy4KKyAgICB2b2lkIHNldFgoZmxvYXQpOworICAgIHZvaWQgc2V0WShmbG9hdCk7Cisg
ICAgdm9pZCBzZXRaKGZsb2F0KTsKKyAgICB2b2lkIHNldFBvaW50c0F0WChmbG9hdCk7CisgICAg
dm9pZCBzZXRQb2ludHNBdFkoZmxvYXQpOworICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZsb2F0KTsK
KyAgICAKKyAgICB2b2lkIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpOworICAgIHZvaWQgc2V0
TGltaXRpbmdDb25lQW5nbGUoZmxvYXQpOworCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgY29t
cHV0ZUxpZ2h0U291cmNlUGFpbnREYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgY29sb3JWZWN0b3Ip
IGNvbnN0OwogCi1jbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291
cmNlPiB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IENvbXB1dGVkTGlnaHRpbmdEYXRhIHsKLSAgICAg
ICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yOwotICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JW
ZWN0b3I7Ci0gICAgICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgaW5pdGlh
bExpZ2h0aW5nRGF0YTsKLSAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKLSAg
ICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OwotICAgICAgICBmbG9hdCBjb25lRnVsbExpZ2h0
OwotICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKLSAgICB9OwotCi0gICAgTGlnaHRTb3Vy
Y2UoTGlnaHRUeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgeyB9Ci0KLSAg
ICB2aXJ0dWFsIH5MaWdodFNvdXJjZSgpID0gZGVmYXVsdDsKLQotICAgIExpZ2h0VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFp
bnRpbmdEYXRhJikgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlz
IHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJm
YWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3Rh
bmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0
ZXJFZmZlY3QncyBidWZmZXIuCi0gICAgdmlydHVhbCBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21w
dXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCB6KSBjb25zdCA9IDA7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEgY29tcHV0ZUxpZ2h0
U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiwgaW50IHgsIGludCB5
LCBmbG9hdCB6KSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzZXRBemltdXRoKGZsb2F0KSB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgLy8gVGhlc2UgYXJlIGluIHVzZXIgc3BhY2UgY29v
cmRpbmF0ZXMuCi0gICAgdmlydHVhbCBib29sIHNldFgoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBib29sIHNldFkoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNldFooZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IHNldFBvaW50c0F0WChmbG9hdCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2V0UG9pbnRzQXRZKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
ZXRQb2ludHNBdFooZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgdmlydHVhbCBi
b29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxMaWdodFNvdXJjZT4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBM
aWdodFR5cGUgbV90eXBlOworICAgIERhdGEgbV9kYXRhOwogfTsKIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgTGlnaHRTb3VyY2U6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9kYXRhOworfQog
Ci0jZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElHSFRTT1VSQ0UoQ2xhc3NOYW1lLCBU
eXBlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNsYXNzTmFtZSkg
XAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpMaWdodFNvdXJjZSYgc291
cmNlKSB7IHJldHVybiBzb3VyY2UudHlwZSgpID09IFdlYkNvcmU6OlR5cGU7IH0gXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8TGlnaHRTb3VyY2U+IExpZ2h0U291cmNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOwor
ICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biBMaWdodFNvdXJjZShXVEZNb3ZlKCpkYXRhKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
TGlnaHRTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0xpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjOGMwYTc2ZWZjODE4ZDdmYzc5MTQ0
ZDcyYWMwNDFiZjVkY2E1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlRGF0YS5oCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWlu
Ym9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZsb2F0UG9pbnQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBMaWdodFNv
dXJjZVBpeGVsRGF0YSB7CisgICAgRmxvYXRQb2ludDNEIGNvbG9yVmVjdG9yOworICAgIEZsb2F0
UG9pbnQzRCBsaWdodFZlY3RvcjsKKyAgICBmbG9hdCBsaWdodFZlY3Rvckxlbmd0aDsKK307CisK
K3N0cnVjdCBMaWdodFNvdXJjZVBhaW50RGF0YSB7CisgICAgTGlnaHRTb3VyY2VQaXhlbERhdGEg
aW5pdGlhbExpZ2h0aW5nRGF0YTsKKyAgICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uVmVjdG9yOwor
ICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKKyAgICBmbG9hdCBjb25lRnVsbExpZ2h0OworICAg
IGludCBzcGVjdWxhckV4cG9uZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYjVl
MTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBI
ZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJl
bmlAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBv
aW50TGlnaHRTb3VyY2UuaCIKLQotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFBv
aW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCi17Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShm
aWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3Np
dGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20g
bV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBv
aW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
eyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVk
Wi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci19Ci0KLUxpZ2h0U291cmNlOjpDb21wdXRl
ZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikg
Y29uc3QKLXsKLSAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7Ci0gICAgICAgIG1fYnVm
ZmVyUG9zaXRpb24ueCgpIC0geCwKLSAgICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAot
ICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKLSAgICB9OwotCi0gICAgcmV0dXJuIHsg
bGlnaHRWZWN0b3IsIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9y
LCBsaWdodFZlY3Rvci5sZW5ndGgoKSB9OwotfQotCi1ib29sIFBvaW50TGlnaHRTb3VyY2U6OnNl
dFgoZmxvYXQgeCkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi54KCkgPT0geCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WCh4KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQb2ludExpZ2h0U291cmNlOjpzZXRZKGZsb2F0IHkp
Ci17Ci0gICAgaWYgKG1fdXNlclNwYWNlUG9zaXRpb24ueSgpID09IHkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFkoeSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUG9pbnRMaWdodFNvdXJjZTo6c2V0WihmbG9hdCB6KQotewotICAgIGlm
IChtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSA9PSB6KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgbV91c2VyU3BhY2VQb3NpdGlvbi5zZXRaKHopOwotICAgIHJldHVybiB0cnVlOwotfQotCi1U
ZXh0U3RyZWFtJiBQb2ludExpZ2h0U291cmNlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJbdHlwZT1QT0lOVC1MSUdIVF0gIjsKLSAg
ICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJcIl0iOwotICAgIHJldHVy
biB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5ODU5
NmQ3MTE1ZjRiYjk1YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0j
aW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBvaW50
TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb2ludExpZ2h0U291cmNlKHBv
c2l0aW9uKSk7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlclNwYWNlUG9zaXRpb247IH0KLSAgICBib29sIHNldFgoZmxvYXQp
IG92ZXJyaWRlOwotICAgIGJvb2wgc2V0WShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRa
KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKLSAgICBDb21wdXRlZExpZ2h0aW5n
RGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgs
IGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKLQotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQot
cHJpdmF0ZToKLSAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRp
b24pCi0gICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQpCi0gICAgICAgICwgbV91c2VyU3Bh
Y2VQb3NpdGlvbihwb3NpdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludDNEIG1f
dXNlclNwYWNlUG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTElH
SFRTT1VSQ0UoUG9pbnRMaWdodFNvdXJjZSwgTFNfUE9JTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxNDhlZWNjZDNjNjkzM2I5ZTIyNDI4OGI4MjQ5ZGQ3
ZGViZTEyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmNwcApAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8
emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2ludExpZ2h0U291
cmNlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BvaW50TGlnaHRTb3VyY2VEYXRhOjpQb2ludExpZ2h0U291cmNlRGF0
YShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKQorICAgIDogbV9wb3NpdGlvbihwb3NpdGlv
bikKK3sKK30KKworTGlnaHRTb3VyY2VQYWludERhdGEgUG9pbnRMaWdodFNvdXJjZURhdGE6OmNv
bXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9y
KSBjb25zdAoreworICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkobV9wb3NpdGlvbi54eSgpKTsK
KyAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBv
c2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgorICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9
IHsgbV9wb3NpdGlvbi54KCkgKyBtX3Bvc2l0aW9uLnooKSwgbV9wb3NpdGlvbi55KCkgfTsKKyAg
ICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngo
KSk7CisgICAgCisgICAgTGlnaHRTb3VyY2VQYWludERhdGEgcGFpbnREYXRhID0geyB9OworICAg
IHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gY29sb3JWZWN0b3I7
CisgICAgcmV0dXJuIHBhaW50RGF0YTsKK30KKworTGlnaHRTb3VyY2VQaXhlbERhdGEgUG9pbnRM
aWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdodFNvdXJjZVBpeGVsRGF0YShjb25zdCBMaWdodFNv
dXJjZVBhaW50RGF0YSYgcGFpbnREYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0Cit7
CisgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yID0geworICAgICAgICBtX2J1ZmZlclBvc2l0
aW9uLngoKSAtIHgsCisgICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueSgpIC0geSwKKyAgICAgICAg
bV9idWZmZXJQb3NpdGlvbi56KCkgLSB6CisgICAgfTsKKworICAgIHJldHVybiB7IHBhaW50RGF0
YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLCBsaWdodFZlY3RvciwgbGlnaHRWZWN0
b3IubGVuZ3RoKCkgfTsKK30KKworVGV4dFN0cmVhbSYgUG9pbnRMaWdodFNvdXJjZURhdGE6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwg
Ilt0eXBlPVBPSU5ULUxJR0hUXSAiOworICAgIHRzIDw8ICJbcG9zaXRpb249XCIiIDw8IG1fcG9z
aXRpb24gPDwgIlwiXSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNDFmMWNmZTI4
YWNmMWQwMjA2MThhMTc2NTZmNzhhOWFjNTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZURhdGEuaApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8
cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJMaWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQb2ludExpZ2h0U291cmNlRGF0YSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgUG9pbnRMaWdodFNvdXJjZURhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbik7CisK
KyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3Bvc2l0aW9uLnNldFgoeCk7IH0KKyAgICB2b2lk
IHNldFkoZmxvYXQgeSkgeyBtX3Bvc2l0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFooZmxv
YXQgeikgeyBtX3Bvc2l0aW9uLnNldFkoeik7IH0KKworICAgIExpZ2h0U291cmNlUGFpbnREYXRh
IGNvbXB1dGVMaWdodFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVj
dG9yKSBjb25zdDsKKyAgICBMaWdodFNvdXJjZVBpeGVsRGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQ
aXhlbERhdGEoY29uc3QgTGlnaHRTb3VyY2VQYWludERhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0
IHopIGNvbnN0OworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBvaW50TGlnaHRTb3VyY2VEYXRhPiBkZWNvZGUoRGVjb2Rl
ciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIG11dGFi
bGUgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBQb2ludExpZ2h0U291cmNlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3Bvc2l0aW9uOworfQorCit0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxQb2ludExpZ2h0U291cmNlRGF0YT4gUG9pbnRM
aWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRQb2ludDNEPiBwb3NpdGlvbjsKKyAgICBkZWNvZGVyID4+IHBvc2l0aW9uOwor
ICAgIGlmICghcG9zaXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gUG9pbnRMaWdodFNvdXJjZURhdGEoKnBvc2l0aW9uKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3
ZmZmOTA5MGFkNmNmM2EzLi4xZDM3MzEwN2QzYmQzZGFmZGNhMzViMmVlOGQzYzk5ODU0ZDMxNzVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjAsNjAgKzIxLDMyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNl
QWxwaGEuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgi
CisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVm
ZmVjdCYgc291cmNlRWZmZWN0KQorUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRl
KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3Qp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYSgpKTsKIH0KIAotY29uc3Qg
QXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJj
ZUFscGhhKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0
TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQorRmlsdGVySW1hZ2VWZWN0b3IgU291cmNlQWxwaGE6OnRha2VJ
bnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0
KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBBU1NFUlQoIXN0
YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCi12
b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVy
Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAo
IWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIGZpbHRlckNv
bnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwotICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OkRlc3RpbmF0aW9uSW4pOwotfQotCi1UZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdAorVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGlu
ZGVudCA8PCAiW1NvdXJjZUFscGhhXVxuIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFs
cGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRl
ckVmZmVjdChzb3VyY2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAg
IHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFh
ZGU2NGM1NjFlODY0YTM5NDkwZi4uZmI2NmRiOGRjZGM5N2ZiMTQwMGVjMjY0NjNlYjZlZjVmZWVl
N2Y3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTcsOCArMTgsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI2LDIxICsyNiwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUo
RmlsdGVyRWZmZWN0Jik7Ci0KLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFt
ZSgpOworICAgIHN0YXRpYyBSZWY8U291cmNlQWxwaGE+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQorICAgIFNvdXJjZUFscGhhKCk7CisKKyAgICBGaWx0ZXJJ
bWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIlNvdXJjZUFscGhhIjsgfQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYg
b3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9t
ZXRyeSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRl
clJlcHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gU291cmNlQWxwaGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXgg
ODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIwMjc0YzExMDdkNzgzOTJlOS4uZTYyMmVhOWQzNzliNWU2
MDkwYzYyNzJiZWJiYjAyNTI2Y2M5MzRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw0NyArMjEsMzQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKLSNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNv
dXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxT
b3VyY2VHcmFwaGljPiBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU291cmNlR3JhcGhpYygpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhp
Yzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZp
bHRlckVmZmVjdChUeXBlOjpTb3VyY2VHcmFwaGljKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFk
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VHcmFw
aGljIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2Vm
ZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwot
ICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAgQVNTRVJUKGlucHV0cy5zaXpl
KCkgPT0gMSk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQg
U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0ZpbHRlckltYWdlVmVjdG9y
IFNvdXJjZUdyYXBoaWM6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25z
dAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0KLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghcmVz
dWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkp
OworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtl
TGFzdCgpIH07CiB9CiAKLVRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKK1RleHRT
dHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W1NvdXJjZUdyYXBoaWNdXG4iOwogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXgg
MzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uOGRkY2JkZTAyNzQ2YjQx
NzcyYzY3ZDY0NTk5M2Q3NmRjYjMyNjQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVu
Z3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOCw0MSArMTksMzEgQEAKICAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlR3JhcGhp
Y19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJG
aWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsK
LQotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxTb3VyY2VHcmFwaGljPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToK
LSAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQotICAgICAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCi0gICAgewotICAgICAgICBzZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICB9Ci0KLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdy
YXBoaWMiOyB9CisgICAgU291cmNlR3JhcGhpYygpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVy
RWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3Vy
Y2VJbnB1dDsgfQotfTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlcklt
YWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKLX0gLy9uYW1lc3BhY2UgV2ViQ29y
ZQorICAgIGJvb2wgYXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IG92ZXJy
aWRlOwogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBo
aWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYg
ZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJ
bWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29s
IGFwcGx5Q29yZUltYWdlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CisjZW5k
aWYKIAorICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7Cit9OwogCi0j
ZW5kaWYgLy8gU291cmNlR3JhcGhpY19oCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjA3YWIwMGZm
OWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYzNDhkMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWlu
Ym9iQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
VW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3Zh
biA8cmVuaUB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU3BvdExpZ2h0U291cmNlLmgiCi0KLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
c3BvdC1saWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFuIGFic29sdXRlIHRyZXNob2xk
Ci0vLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwot
c3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwotCi12b2lkIFNw
b3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRl
ckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgbV9idWZmZXJQb3Np
dGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91
c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7Ci0gICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQg
b2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4K
LSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRp
b24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7Ci0gICAgCi0gICAgcGFp
bnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBtX3VzZXJT
cGFjZVBvc2l0aW9uOwotICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9ybWFsaXpl
KCk7Ci0KLSAgICBpZiAoIW1fbGltaXRpbmdDb25lQW5nbGUpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmNvbmVDdXRPZmZMaW1pdCA9IDAuMGY7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVs
bExpZ2h0ID0gLWFudGlBbGlhc1RyZXNob2xkOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgaWYgKGxp
bWl0aW5nQ29uZUFuZ2xlIDwgMC4wZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0g
LWxpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPiA5MC4w
ZikKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlID0gOTAuMGY7Ci0gICAgICAgIHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgPSBjb3NmKGRlZzJyYWQoMTgwLjBmIC0gbGltaXRpbmdD
b25lQW5nbGUpKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQgPSBwYWludGlu
Z0RhdGEuY29uZUN1dE9mZkxpbWl0IC0gYW50aUFsaWFzVHJlc2hvbGQ7Ci0gICAgfQotCi0gICAg
Ly8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBvbmVudCB2YWx1ZXMKLSAgICBp
ZiAoIW1fc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAwOwotICAgIGVsc2UgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAg
ICAgICBwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCA9IDE7Ci0gICAgZWxzZSAvLyBJdCBp
cyBuZWl0aGVyIDAuMGYgbm9yIDEuMGYKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSAyOwotfQotCi1MaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgU3BvdExp
Z2h0U291cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKLXsKLSAgICBGbG9hdFBv
aW50M0QgbGlnaHRWZWN0b3IgPSB7Ci0gICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwK
LSAgICAgICAgbV9idWZmZXJQb3NpdGlvbi55KCkgLSB5LAotICAgICAgICBtX2J1ZmZlclBvc2l0
aW9uLnooKSAtIHoKLSAgICB9OwotICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRW
ZWN0b3IubGVuZ3RoKCk7Ci0KLSAgICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9y
ICogcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKLSAg
ICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKLSAg
ICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQK
LSAgICAgICAgcmV0dXJuIHsgbGlnaHRWZWN0b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5ndGggfTsK
LSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbAotICAgIGZsb2F0IGxp
Z2h0U3RyZW5ndGg7Ci0gICAgc3dpdGNoIChwYWludGluZ0RhdGEuc3BlY3VsYXJFeHBvbmVudCkg
ewotICAgIGNhc2UgMDoKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVP
ZkFuZ2xlIF4gMCA9PSAxCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgICAgbGln
aHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAvLyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNv
c2luZU9mQW5nbGUKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUsIG1fc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChjb3NpbmVPZkFuZ2xlID4gcGFpbnRpbmdEYXRh
LmNvbmVGdWxsTGlnaHQpCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggKj0gKHBhaW50aW5nRGF0YS5j
b25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0IC0gcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGlnaHQpOwotCi0gICAgaWYgKGxpZ2h0U3Ry
ZW5ndGggPiAxLjBmKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKLQotICAgIHJldHVy
biB7Ci0gICAgICAgIGxpZ2h0VmVjdG9yLAotICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExp
Z2h0aW5nRGF0YS5jb2xvclZlY3RvciAqIGxpZ2h0U3RyZW5ndGgsCi0gICAgICAgIGxpZ2h0VmVj
dG9yTGVuZ3RoCi0gICAgfTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFgoZmxvYXQg
eCkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb3NpdGlvbi54KCkgPT0geCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WCh4KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFkoZmxvYXQgeSkKLXsKLSAgICBp
ZiAobV91c2VyU3BhY2VQb3NpdGlvbi55KCkgPT0geSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdXNlclNwYWNlUG9zaXRpb24uc2V0WSh5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBTcG90TGlnaHRTb3VyY2U6OnNldFooZmxvYXQgeikKLXsKLSAgICBpZiAobV91c2VyU3Bh
Y2VQb3NpdGlvbi56KCkgPT0geikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdXNlclNw
YWNlUG9zaXRpb24uc2V0Wih6KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90TGln
aHRTb3VyY2U6OnNldFBvaW50c0F0WChmbG9hdCBwb2ludHNBdFgpCi17Ci0gICAgaWYgKG1fdXNl
clNwYWNlUG9pbnRzQXQueCgpID09IHBvaW50c0F0WCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fdXNlclNwYWNlUG9pbnRzQXQuc2V0WChwb2ludHNBdFgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0UG9pbnRzQXRZKGZsb2F0IHBvaW50c0F0
WSkKLXsKLSAgICBpZiAobV91c2VyU3BhY2VQb2ludHNBdC55KCkgPT0gcG9pbnRzQXRZKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV91c2VyU3BhY2VQb2ludHNBdC5zZXRZKHBvaW50c0F0
WSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU3BvdExpZ2h0U291cmNlOjpzZXRQb2lu
dHNBdFooZmxvYXQgcG9pbnRzQXRaKQotewotICAgIGlmIChtX3VzZXJTcGFjZVBvaW50c0F0Lnoo
KSA9PSBwb2ludHNBdFopCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3VzZXJTcGFjZVBv
aW50c0F0LnNldFoocG9pbnRzQXRaKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTcG90
TGlnaHRTb3VyY2U6OnNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQgc3BlY3VsYXJFeHBvbmVudCkK
LXsKLSAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IHNwZWN1bGFyRXhwb25lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NwZWN1bGFyRXhwb25lbnQgPSBzcGVjdWxhckV4cG9u
ZW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0TGlt
aXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCi17Ci0gICAgaWYgKG1fbGlt
aXRpbmdDb25lQW5nbGUgPT0gbGltaXRpbmdDb25lQW5nbGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX2xpbWl0aW5nQ29uZUFuZ2xlID0gbGltaXRpbmdDb25lQW5nbGU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVRleHRTdHJlYW0mIFNwb3RMaWdodFNvdXJjZTo6ZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9U1BP
VC1MSUdIVF0gIjsKLSAgICB0cyA8PCAiW3Bvc2l0aW9uPVwiIiA8PCBwb3NpdGlvbigpIDw8ICJc
Il0iOwotICAgIHRzIDw8ICJbZGlyZWN0aW9uPVwiIiA8PCBkaXJlY3Rpb24oKSA8PCAiXCJdIjsK
LSAgICB0cyA8PCAiW3NwZWN1bGFyRXhwb25lbnQ9XCIiIDw8IHNwZWN1bGFyRXhwb25lbnQoKSA8
PCAiXCJdIjsKLSAgICB0cyA8PCAiW2xpbWl0aW5nQ29uZUFuZ2xlPVwiIiA8PCBsaW1pdGluZ0Nv
bmVBbmdsZSgpIDw8ICJcIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfTsgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZhZTQ0MmE1ZWE1MzRmZDFmM2JmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vz
c2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJj
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uLAotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRp
cmVjdGlvbiwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTcG90TGlnaHRTb3VyY2UocG9z
aXRpb24sIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBvbmVudCwgbGltaXRpbmdDb25lQW5nbGUpKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV91c2VyU3BhY2VQb3NpdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3BhY2VQb2ludHNBdDsgfQotICAgIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KLSAg
ICBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGltaXRpbmdDb25l
QW5nbGU7IH0KLQotICAgIGJvb2wgc2V0WChmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRZ
KGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwotICAgIGJv
b2wgc2V0UG9pbnRzQXRYKGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29sIHNldFBvaW50c0F0WShm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRQb2ludHNBdFooZmxvYXQpIG92ZXJyaWRlOwot
Ci0gICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKLSAgICBib29s
IHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5pdFBh
aW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsK
LSAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKLQotICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBTcG90TGlnaHRTb3VyY2UoY29uc3Qg
RmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgICAgICA6
IExpZ2h0U291cmNlKExTX1NQT1QpCi0gICAgICAgICwgbV91c2VyU3BhY2VQb3NpdGlvbihwb3Np
dGlvbikKLSAgICAgICAgLCBtX3VzZXJTcGFjZVBvaW50c0F0KGRpcmVjdGlvbikKLSAgICAgICAg
LCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKLSAgICAgICAgLCBtX2xpbWl0
aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9h
dFBvaW50M0QgbV91c2VyU3BhY2VQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV91c2VyU3Bh
Y2VQb2ludHNBdDsKLQotICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOwotCi0gICAg
ZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwotICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TElHSFRTT1VSQ0UoU3BvdExpZ2h0U291cmNlLCBMU19TUE9UKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2VEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVlNzlmODc2YmVmMmU0NjFmMzFjZjU2NmNmNDIwMTk4
NmQ3MWM5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlRGF0YS5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9i
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFu
IEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8
cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Bv
dExpZ2h0U291cmNlRGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nwb3RMaWdodFNvdXJjZURhdGE6OlNwb3RMaWdodFNv
dXJjZURhdGEoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludDNE
JiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFu
Z2xlKQorICAgIDogbV91c2VyU3BhY2VQb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fdXNlclNw
YWNlUG9pbnRzQXQoZGlyZWN0aW9uKQorICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFy
RXhwb25lbnQpCisgICAgLCBtX2xpbWl0aW5nQ29uZUFuZ2xlKGxpbWl0aW5nQ29uZUFuZ2xlKQor
eworfQorCisvLyBzcG90LWxpZ2h0IGVkZ2UgZGFya2VuaW5nIGRlcGVuZHMgb24gYW4gYWJzb2x1
dGUgdHJlc2hvbGQKKy8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNz
aW9uIHRlc3RzCitzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7
CisKK0xpZ2h0U291cmNlUGFpbnREYXRhIFNwb3RMaWdodFNvdXJjZURhdGE6OmNvbXB1dGVMaWdo
dFNvdXJjZVBhaW50RGF0YShjb25zdCBGbG9hdFBvaW50M0QmIGNvbG9yVmVjdG9yKSBjb25zdAor
eworICAgIExpZ2h0U291cmNlUGFpbnREYXRhIHBhaW50RGF0YTsKKyAgICAKKyAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSk7CisgICAgLy8gVG8gc2Nh
bGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUg
eCBkaXJlY3Rpb24gYnkgei4KKyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSB7IG1fdXNlclNwYWNl
UG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRp
b24ueSgpIH07CisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZm
ZXJQb3NpdGlvbi54KCkpOworICAgIAorICAgIHBhaW50RGF0YS5pbml0aWFsTGlnaHRpbmdEYXRh
LmNvbG9yVmVjdG9yID0gY29sb3JWZWN0b3I7CisKKyAgICBwYWludERhdGEuZGlyZWN0aW9uVmVj
dG9yID0gbV91c2VyU3BhY2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRpb247CisgICAgcGFp
bnREYXRhLmRpcmVjdGlvblZlY3Rvci5ub3JtYWxpemUoKTsKKworICAgIGlmICghbV9saW1pdGlu
Z0NvbmVBbmdsZSkgeworICAgICAgICBwYWludERhdGEuY29uZUN1dE9mZkxpbWl0ID0gMC4wZjsK
KyAgICAgICAgcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQgPSAtYW50aUFsaWFzVHJlc2hvbGQ7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUgPSBtX2xpbWl0aW5n
Q29uZUFuZ2xlOworICAgICAgICBpZiAobGltaXRpbmdDb25lQW5nbGUgPCAwLjBmKQorICAgICAg
ICAgICAgbGltaXRpbmdDb25lQW5nbGUgPSAtbGltaXRpbmdDb25lQW5nbGU7CisgICAgICAgIGlm
IChsaW1pdGluZ0NvbmVBbmdsZSA+IDkwLjBmKQorICAgICAgICAgICAgbGltaXRpbmdDb25lQW5n
bGUgPSA5MC4wZjsKKyAgICAgICAgcGFpbnREYXRhLmNvbmVDdXRPZmZMaW1pdCA9IGNvc2YoZGVn
MnJhZCgxODAuMGYgLSBsaW1pdGluZ0NvbmVBbmdsZSkpOworICAgICAgICBwYWludERhdGEuY29u
ZUZ1bGxMaWdodCA9IHBhaW50RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpQWxpYXNUcmVzaG9s
ZDsKKyAgICB9CisKKyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBzcGVjdWxhckV4cG9u
ZW50IHZhbHVlcworICAgIGlmICghbV9zcGVjdWxhckV4cG9uZW50KQorICAgICAgICBwYWludERh
dGEuc3BlY3VsYXJFeHBvbmVudCA9IDA7CisgICAgZWxzZSBpZiAobV9zcGVjdWxhckV4cG9uZW50
ID09IDEuMGYpCisgICAgICAgIHBhaW50RGF0YS5zcGVjdWxhckV4cG9uZW50ID0gMTsKKyAgICBl
bHNlIC8vIEl0IGlzIG5laXRoZXIgMC4wZiBub3IgMS4wZgorICAgICAgICBwYWludERhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9IDI7CisgICAgCisgICAgcmV0dXJuIHBhaW50RGF0YTsKK30KKworTGln
aHRTb3VyY2VQaXhlbERhdGEgU3BvdExpZ2h0U291cmNlRGF0YTo6Y29tcHV0ZUxpZ2h0U291cmNl
UGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCB4LCBp
bnQgeSwgZmxvYXQgeikgY29uc3QKK3sKKyAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3IgPSB7
CisgICAgICAgIG1fYnVmZmVyUG9zaXRpb24ueCgpIC0geCwKKyAgICAgICAgbV9idWZmZXJQb3Np
dGlvbi55KCkgLSB5LAorICAgICAgICBtX2J1ZmZlclBvc2l0aW9uLnooKSAtIHoKKyAgICB9Owor
ICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoID0gbGlnaHRWZWN0b3IubGVuZ3RoKCk7CisKKyAg
ICBmbG9hdCBjb3NpbmVPZkFuZ2xlID0gKGxpZ2h0VmVjdG9yICogcGFpbnREYXRhLmRpcmVjdGlv
blZlY3RvcikgLyBsaWdodFZlY3Rvckxlbmd0aDsKKyAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBh
aW50RGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKKyAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVj
ZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKKyAgICAgICAgcmV0dXJuIHsgbGlnaHRWZWN0
b3IsIHsgfSwgbGlnaHRWZWN0b3JMZW5ndGggfTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNv
bG9yIG9mIHRoZSBwaXhlbAorICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgc3dpdGNoIChw
YWludERhdGEuc3BlY3VsYXJFeHBvbmVudCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IDEuMGY7IC8vIC1jb3NpbmVPZkFuZ2xlIF4gMCA9PSAxCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMToKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IC1jb3NpbmVPZkFuZ2xlOyAv
LyAtY29zaW5lT2ZBbmdsZSBeIDEgPT0gLWNvc2luZU9mQW5nbGUKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IHBvd2YoLWNvc2luZU9mQW5nbGUs
IG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChj
b3NpbmVPZkFuZ2xlID4gcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQpCisgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggKj0gKHBhaW50RGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBjb3NpbmVPZkFuZ2xlKSAvIChw
YWludERhdGEuY29uZUN1dE9mZkxpbWl0IC0gcGFpbnREYXRhLmNvbmVGdWxsTGlnaHQpOworCisg
ICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxLjBmKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMS4w
ZjsKKworICAgIHJldHVybiB7CisgICAgICAgIGxpZ2h0VmVjdG9yLAorICAgICAgICBwYWludERh
dGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciAqIGxpZ2h0U3RyZW5ndGgsCisgICAg
ICAgIGxpZ2h0VmVjdG9yTGVuZ3RoCisgICAgfTsKK30KKworVGV4dFN0cmVhbSYgU3BvdExpZ2h0
U291cmNlRGF0YTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QK
K3sKKyAgICB0cyA8PCAiW3R5cGU9U1BPVC1MSUdIVF0gIjsKKyAgICB0cyA8PCAiW3Bvc2l0aW9u
PVwiIiA8PCBtX3VzZXJTcGFjZVBvc2l0aW9uIDw8ICJcIl0iOworICAgIHRzIDw8ICJbZGlyZWN0
aW9uPVwiIiA8PCBtX3VzZXJTcGFjZVBvaW50c0F0IDw8ICJcIl0iOworICAgIHRzIDw8ICJbc3Bl
Y3VsYXJFeHBvbmVudD1cIiIgPDwgbV9zcGVjdWxhckV4cG9uZW50IDw8ICJcIl0iOworICAgIHRz
IDw8ICJbbGltaXRpbmdDb25lQW5nbGU9XCIiIDw8IG1fbGltaXRpbmdDb25lQW5nbGUgPDwgIlwi
XSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZmRiOTM0MmI2ZDUwOGE5YjA4YzljMzhm
NDg2NzAzMTA2YmJhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZURhdGEuaApAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3Vp
bmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJM
aWdodFNvdXJjZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTcG90TGln
aHRTb3VyY2VEYXRhIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBTcG90TGlnaHRTb3Vy
Y2VEYXRhKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQzRCYg
ZGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmds
ZSk7CisKKyAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFgo
eCk7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFko
eSk7IH0KKyAgICB2b2lkIHNldFooZmxvYXQgeikgeyBtX3VzZXJTcGFjZVBvc2l0aW9uLnNldFoo
eik7IH0KKworICAgIHZvaWQgc2V0UG9pbnRzQXRYKGZsb2F0IHBvaW50c0F0WCkgeyBtX3VzZXJT
cGFjZVBvaW50c0F0LnNldFgocG9pbnRzQXRYKTsgfQorICAgIHZvaWQgc2V0UG9pbnRzQXRZKGZs
b2F0IHBvaW50c0F0WSkgeyBtX3VzZXJTcGFjZVBvaW50c0F0LnNldFkocG9pbnRzQXRZKTsgfQor
ICAgIHZvaWQgc2V0UG9pbnRzQXRaKGZsb2F0IHBvaW50c0F0WikgeyBtX3VzZXJTcGFjZVBvaW50
c0F0LnNldFoocG9pbnRzQXRaKTsgfQorCisgICAgdm9pZCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQpIHsgbV9zcGVjdWxhckV4cG9uZW50ID0gc3BlY3VsYXJFeHBv
bmVudDsgfQorICAgIHZvaWQgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQgbGltaXRpbmdDb25l
QW5nbGUpIHsgbV9saW1pdGluZ0NvbmVBbmdsZSA9IGxpbWl0aW5nQ29uZUFuZ2xlOyB9CisKKyAg
ICBMaWdodFNvdXJjZVBhaW50RGF0YSBjb21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoY29uc3Qg
RmxvYXRQb2ludDNEJiBjb2xvclZlY3RvcikgY29uc3Q7CisgICAgTGlnaHRTb3VyY2VQaXhlbERh
dGEgY29tcHV0ZUxpZ2h0U291cmNlUGl4ZWxEYXRhKGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdDsKKworICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTcG90TGlnaHRTb3Vy
Y2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQzRCBt
X3VzZXJTcGFjZVBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvaW50c0F0
OworCisgICAgbXV0YWJsZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKworICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOwor
fTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU3BvdExpZ2h0U291cmNlRGF0YTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3VzZXJT
cGFjZVBvc2l0aW9uOworICAgIGVuY29kZXIgPDwgbV91c2VyU3BhY2VQb2ludHNBdDsKKyAgICBl
bmNvZGVyIDw8IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBlbmNvZGVyIDw8IG1fbGltaXRpbmdD
b25lQW5nbGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNw
b3RMaWdodFNvdXJjZURhdGE+IFNwb3RMaWdodFNvdXJjZURhdGE6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludDNEPiB1c2VyU3BhY2VQb3Np
dGlvbjsKKyAgICBkZWNvZGVyID4+IHVzZXJTcGFjZVBvc2l0aW9uOworICAgIGlmICghdXNlclNw
YWNlUG9zaXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UG9pbnQzRD4gdXNlclNwYWNlUG9pbnRzQXQ7CisgICAgZGVjb2RlciA+PiB1
c2VyU3BhY2VQb2ludHNBdDsKKyAgICBpZiAoIXVzZXJTcGFjZVBvaW50c0F0KQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3BlY3VsYXJF
eHBvbmVudDsKKyAgICBkZWNvZGVyID4+IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgaWYgKCFzcGVj
dWxhckV4cG9uZW50KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gbGltaXRpbmdDb25lQW5nbGU7CisgICAgZGVjb2RlciA+PiBsaW1pdGlu
Z0NvbmVBbmdsZTsKKyAgICBpZiAoIWxpbWl0aW5nQ29uZUFuZ2xlKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNwb3RMaWdodFNvdXJjZURhdGEoKnVzZXJTcGFj
ZVBvc2l0aW9uLCAqdXNlclNwYWNlUG9pbnRzQXQsICpzcGVjdWxhckV4cG9uZW50LCAqbGltaXRp
bmdDb25lQW5nbGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRT
b2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVlYjA3MmQ1ZjZiNzIwZDE3
NDFmOGU1MzRjZDE2MjgzNTM2YTMwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlLmNwcApA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVCbGVuZC5oIgorCisjaW5jbHVkZSAi
RmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZp
bHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKK2Jvb2wgRkVCbGVuZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJH
ZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0g
Mik7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisgICAgYXV0byYgaW5wdXQy
ID0gaW5wdXRzWzFdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBhdXRvIGlucHV0MkltYWdlID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFpbnB1dEltYWdlIHx8ICFpbnB1dDJJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlm
ICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VS
ZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1h
Z2VSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VSZWN0MiA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChp
bnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIAorICAg
IG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW1hZ2VSZWN0Mik7
CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGltYWdlUmVj
dCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xv
ck1hdHJpeFNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjMzZGRiYjI2ZGUxZTdkOTZkMWY1Njgx
YmU0MDc3ZWM5MzkwYzI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVDb2xvck1hdHJpeC5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYg
Ymx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAg
ZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0gZ3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7
CisgICAgZmxvYXQgYSA9IGFscGhhOworCisgICAgcmVkICAgICA9IHZhbHVlc1sgMF0gKiByICsg
dmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVz
WyA0XSAqIDI1NTsKKyAgICBncmVlbiAgID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICog
ZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1Owor
ICAgIGJsdWUgICAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEy
XSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgICA9
IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVl
c1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKK30KKworaW5saW5lIHZvaWQgc2F0dXJhdGVB
bmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3Qg
ZmxvYXQqIGNvbXBvbmVudHMpCit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0g
Z3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIGNvbXBvbmVu
dHNbMF0gKyBnICogY29tcG9uZW50c1sxXSArIGIgKiBjb21wb25lbnRzWzJdOworICAgIGdyZWVu
ICAgPSByICogY29tcG9uZW50c1szXSArIGcgKiBjb21wb25lbnRzWzRdICsgYiAqIGNvbXBvbmVu
dHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBjb21wb25lbnRzWzZdICsgZyAqIGNvbXBvbmVudHNb
N10gKyBiICogY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB0
aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1pbmFuY2UuaC4KK2lubGluZSB2
b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpCit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiAr
IDAuMDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9
IDA7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3RlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBm
aWx0ZXJUeXBlPgorYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVu
dHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSkKK3sKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5n
dGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAgIGlmIChmaWx0ZXJUeXBl
ID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKKyAgICAgICAgLy8gdkltYWdlTWF0cml4
TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhl
IGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAgICAgLy8g
aXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgICAgIGlmICh2
YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQzMl90IGRpdmlzb3Ig
PSAyNTY7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOworCisgICAgdklt
YWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOworICAg
IHNyYy5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IGJ1
ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgc3JjLmRhdGEgPSBkYXRhOworICAgIAorICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gYnVmZmVyU2l6ZS53aWR0aCgpOwor
ICAgIGRlc3QuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVz
ID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBkZXN0LmRhdGEgPSBkYXRhOworCisgICAg
c3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
OiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAq
IGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihy
b3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKwor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2
aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTog
eworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10g
KiBkaXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZp
c29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAg
ICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZp
c29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Cisg
ICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAg
IHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlz
b3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0
ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KK3ZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTaXpl
IGJ1ZmZlclNpemUpCit7CisgICAgZmxvYXQgY29tcG9uZW50c1s5XTsKKworICAgIGlmIChmaWx0
ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
CisgICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
KQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNv
bXBvbmVudHMsIHZhbHVlc1swXSk7CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS5sZW5ndGgoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGlmIChlZmZl
Y3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9u
ZW50cywgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGJ1ZmZlclNpemUpOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGZvciAodW5zaWduZWQg
cGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsg
cGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhl
bEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7CisgICAgICAgICAgICBmbG9hdCBibHVl
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOworICAgICAgICAgICAgZmxv
YXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7CisgICAgICAg
ICAgICBtYXRyaXgocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHZhbHVlcyk7CisgICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBw
aXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBw
aXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJh
eS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVs
QXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUg
PSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9h
dCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAg
ICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFO
Q0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBp
eGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7
CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9m
ZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhl
bEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9m
ZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCAr
IDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsg
MywgYWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworVmVjdG9y
PGZsb2F0PiBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcykKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVz
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ld
KTsKKyAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4
OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1sw
XS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIp
IHsKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXQu
aW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisgICAgICAgIG91dHB1dEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICB9
CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2Uo
KSB9OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIG91dHB1dEltYWdlLT5sb2dp
Y2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRh
dGEoKTsKKyAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUo
KTsKKworICAgIGF1dG8gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisKKyAg
ICBzd2l0Y2ggKG1fY29sb3JNYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOgorICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBp
eGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEU6CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6
CisgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBpbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThmN2VmYWEyM2NkNjNiODU5MjhhNzQ2M2Q2ZTc5NWJh
YzZiYjFkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlLmNwcApAQCAt
MCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgorCisjaW5jbHVkZSAiRmls
dGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgTG9va3VwVGFi
bGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
Cit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZh
bHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikK
K3sKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rp
b24udGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAg
ICBpZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOwor
ICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsK
KyAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107CisgICAgICAgIGRvdWJsZSB2MiA9
IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKKyAgICAgICAgZG91Ymxl
IHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOworICAg
ICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAg
dmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVz
OworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQor
ICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChp
ICogbikgLyAyNTUuMCk7CisgICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjpt
YXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21wdXRlTGlu
ZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0
aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OworICAgICAg
ICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFs
dWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgZXhwb25l
bnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNz
aW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJs
ZQorICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1
ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0
KTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Cisg
ICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQor
CitzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAg
ICAgdGFibGVbaV0gPSBpOworCisgICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgVHJhbnNm
ZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisg
ICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLAorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxl
LAorICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwKKyAgICAgICAgY29tcHV0ZUxpbmVhclRh
YmxlLAorICAgICAgICBjb21wdXRlR2FtbWFUYWJsZQorICAgIH07CisKKyAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVm
ZmVjdCkpOworICAgIGNhbGxFZmZlY3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsK
KworICAgIHJldHVybiB0YWJsZTsKK30KKworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjphcHBs
eVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NF
UlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQo
KTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dFBp
eGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVm
ZmVyLT5kYXRhKCk7CisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFn
ZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1
dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KG91dHB1dEltYWdlUmVjdCksIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisKKyAgICBMb29rdXBUYWJsZSByZWRUYWJsZSA9IGNvbXB1dGVMb29rdXBU
YWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlID0gY29tcHV0
ZUxvb2t1cFRhYmxlKG1fZ3JlZW5GdW5jdGlvbik7CisgICAgTG9va3VwVGFibGUgYmx1ZVRhYmxl
ID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1ZUZ1bmN0aW9uKTsKKyAgICBMb29rdXBUYWJsZSBh
bHBoYVRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fYWxwaGFGdW5jdGlvbik7CisKKyAgICB1
bnNpZ25lZCBvdXRwdXRQaXhlbEFycmF5TGVuZ3RoID0gb3V0cHV0UGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICB1aW50OF90KiBkYXRhID0gb3V0cHV0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBvdXRwdXRQaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRd
ID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0
ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CisgICAgICAgIGRhdGFb
cGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOworICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQg
KyAzXV07CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMGQ2ZjNhZTk0ZTdjN2Q4MDhiNTdjMWZjYzQ0MjRjYjg4MTBiMTAwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
RUNvbXBvc2l0ZS5oIgorCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHVuc2ln
bmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0g
eyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgdW5zaWduZWQg
dWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7CisgICAgcmV0dXJuIGJ1ZmZbISEodWMgJiB+
MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07Cit9CisKK3RlbXBsYXRlIDxpbnQgYjEsIGlu
dCBiND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25l
ZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAg
ZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQorICAgICAg
ICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2NhbGVkSzQg
PSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgewor
ICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWduZWQgY2hh
ciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGsz
ICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAq
IGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRL
NDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSBjbGFtcEJ5dGUocmVzdWx0KTsKKyAgICAgICAg
Kytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRpb247CisgICAgfQorfQorCisvLyBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKKy8vIGlz
IG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0
aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlvbi4KK3RlbXBsYXRlIDxpbnQgYjEsIGludCBi
ND4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7
CisgICAgZmxvYXQgc2NhbGVkSzE7CisgICAgZmxvYXQgc2NhbGVkSzQ7CisgICAgaWYgKGIxKQor
ICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOworICAgIGlmIChiNCkKKyAgICAgICAgc2Nh
bGVkSzQgPSBrNCAqIDI1NS4wZjsKKworICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0g
MCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKKyAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBp
MSArIGszICogaTI7CisgICAgICAgIGlmIChiMSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzY2Fs
ZWRLMSAqIGkxICogaTI7CisgICAgICAgIGlmIChiNCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBz
Y2FsZWRLNDsKKworICAgICAgICAqZGVzdGluYXRpb24gPSByZXN1bHQ7CisgICAgICAgICsrc291
cmNlOworICAgICAgICArK2Rlc3RpbmF0aW9uOworICAgIH0KK30KKworI2lmICFIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVu
c2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhl
bEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sK
KyAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3RkOjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4w
ZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMpICsgazQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9
IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYs
IGszKSArIGs0OworICAgIGlmICgoazQgPj0gMC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJM
aW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQgPD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4w
ZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7CisgICAgICAgIGlmIChrNCkgeworICAgICAgICAg
ICAgaWYgKGsxKQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoazEpCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8
MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGs0KSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0
aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgs
IGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwg
azEsIGsyLCBrMywgazQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAg
ICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4
ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0KK30KKyNlbmRpZgorCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc291
cmNlLmxlbmd0aCgpOworICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0
aW5hdGlvbi5sZW5ndGgoKSkpOworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5
IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkuCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQorICAgIEFTU0VSVCghKGxlbmd0aCAmIDB4MykpOworICAgIHBsYXRmb3JtQXJpdGhtZXRpY05l
b24oc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKKyNlbHNlCisgICAgYXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZS5kYXRhKCksIGRlc3Rp
bmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisjZW5kaWYKK30KKworYm9v
bCBGRUNvbXBvc2l0ZTo6YXBwbHlBcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1
dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkm
IGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAg
IGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0
c1sxXS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0
cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIG91
dHB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCks
IGlucHV0LmltYWdlUmVjdCgpKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0Lmdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJl
Y3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIWlu
cHV0UGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXQy
SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5w
dXQyLmltYWdlUmVjdCgpKTsKKyAgICBpbnB1dDIuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0
cHV0MkltYWdlUmVjdCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisKKyAgICBwbGF0Zm9ybUFy
aXRobWV0aWNTb2Z0d2FyZSgqaW5wdXRQaXhlbEFycmF5LCBvdXRwdXRQaXhlbEFycmF5LCBtX2sx
LCBtX2syLCBtX2szLCBtX2s0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUNvbXBv
c2l0ZTo6YXBwbHlOb25Bcml0aG1ldGljU29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDIpOworICAgIGF1dG8m
IGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworICAgIGF1dG8mIGlucHV0MiA9IGlucHV0c1sxXS5n
ZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAg
YXV0byBpbnB1dDJJbWFnZSA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJ
bWFnZSB8fCAhaW5wdXQySW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
b3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNv
bnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVj
dCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdChpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdl
UmVjdCgpKTsKKyAgICBhdXRvIGlucHV0MkltYWdlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBzd2l0Y2gg
KG1fY29tcG9zaXRlT3BlcmF0b3IpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VO
S05PV046CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewor
ICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAg
ICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICAgICAgYXV0byBpbWFn
ZVJlY3QyID0gaW5wdXQyLmltYWdlUmVjdCgpOworICAgICAgICBhdXRvIG91dHB1dFJlY3QgPSBv
dXRwdXQuaW1hZ2VSZWN0KCk7CisKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbWFn
ZVJlY3Q7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW1hZ2VSZWN0Mik7Cisg
ICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qob3V0cHV0UmVjdCk7CisgICAgICAgIGlm
IChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgYXV0byBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdDsKKyAgICAg
ICAgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QubW92ZUJ5KC1vdXRwdXRSZWN0LmxvY2F0aW9uKCkp
OworICAgICAgICBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVj
dChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCk7CisKKyAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0g
ZGVzdGluYXRpb25SZWN0OworICAgICAgICBzb3VyY2VSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0Lmxv
Y2F0aW9uKCkpOworICAgICAgICBzb3VyY2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KHNv
dXJjZVJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7
CisgICAgICAgIHNvdXJjZTJSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0Mi5sb2NhdGlvbigpKTsKKyAg
ICAgICAgc291cmNlMlJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qoc291cmNlMlJlY3QpOwor
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dDJJbWFnZSwgYWRq
dXN0ZWREZXN0aW5hdGlvblJlY3QsIHNvdXJjZTJSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBz
b3VyY2VSZWN0LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3Qp
OworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlu
cHV0MkltYWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dDJJbWFnZS0+bG9naWNhbFNp
emUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0MkltYWdlLCBpbnB1dDJJbWFnZVJlY3QpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFn
ZVJlY3QsIEludFJlY3QoSW50UG9pbnQoKSwgaW5wdXRJbWFnZS0+bG9naWNhbFNpemUoKSksIENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbnB1dDJJbWFnZSwgaW5wdXQySW1hZ2VSZWN0KTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0LCBJbnRSZWN0
KEludFBvaW50KCksIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRv
cjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgorICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXQySW1hZ2UsIGlucHV0MkltYWdlUmVjdCk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dElt
YWdlUmVjdCwgSW50UmVjdChJbnRQb2ludCgpLCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OmFwcGx5U29mdHdhcmUo
RmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIGlmIChtX2NvbXBvc2l0
ZU9wZXJhdG9yID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJl
dHVybiBhcHBseUFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2VvbWV0cnkpOwor
ICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWNTb2Z0d2FyZShvdXRwdXQsIGlucHV0cywgZ2Vv
bWV0cnkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdkNDJk
MTcwZmYyMTU2MDlkMjgzZjY5YzY2YWZmMGNmNmIxZDg3MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKKworI2lu
Y2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVu
dGF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUg
aW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwKKyAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAg
fAorICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAgICAg
IHwgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBF
ICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIHJl
Z2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUgY2Fs
Y3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisKKyAg
IEV4YW1wbGU6CisgICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKworICAg
ICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAgICAg
VGFyZ2V0OiB4OjEsIHk6MworCisgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUg
dGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAgICAg
Li4uCisgICAgICAgIC4uLgorICAgICAgICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhpcyBj
YXNlIGFyZSB0aGUgZm9sbG93aW5nOgorICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQgYW5k
ICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cgeDIg
YW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBvbmx5
IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8IHky
CisKKyAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAgIFJl
Z2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4MTog
MSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKKyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMsIHgy
OiAxMCwgeTI6IDEwCisgICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5Mjog
MTAgKGVtcHR5IHJlZ2lvbikKKworICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlucyBt
b3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0gdG8g
Y2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4KKyAg
IEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2ggY2Fs
bHMgZ2V0UGl4ZWxWYWx1ZSwKKyAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUgaW1h
Z2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJpZ2dl
ciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisgICBm
dW5jdGlvbi4KKworICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBpbiBj
b21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9yIHRo
ZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3b3Vs
ZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCisqLworCisvLyBQYXJhbGxlbGl6
YXRpb24gcGFydHMKK3N0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMK
Kworc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNy
Y1BpeGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAg
aW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgCisgICAgSW50U2l6ZSBrZXJuZWxTaXpl
OworICAgIGZsb2F0IGRpdmlzb3I7CisgICAgZmxvYXQgYmlhczsKKyAgICBJbnRQb2ludCB0YXJn
ZXRPZmZzZXQ7CisgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgIGJvb2wgcHJlc2VydmVB
bHBoYTsKKyAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKK307CisKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5z
aWduZWQgY2hhciBtYXggPSAyNTUpCit7CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKGNoYW5uZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4gbWF4Owor
ICAgIHJldHVybiBjaGFubmVsOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldERl
c3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCB0b3RhbHNbNF0s
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcykKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6
IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xh
bXBSR0JBVmFsdWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CisKKyAg
ICBpZiAocHJlc2VydmVBbHBoYVZhbHVlcykgeworICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhl
bCwgc291cmNlUGl4ZWxzLml0ZW0ocGl4ZWwpKTsKKyAgICAgICAgKytwaXhlbDsKKyAgICB9IGVs
c2UKKyAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOworfQorCitzdGF0
aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50
IHlFbmQpCit7CisgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMK
KyAgICBpbnQgcGl4ZWwgPSAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGlu
Z0RhdGEud2lkdGggKyBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGlu
dCBrZXJuZWxJbmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChw
YWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAgIC8vIENvbnRhaW5z
IHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAgICBmbG9hdCB0b3RhbHNbNF07CisKKyAg
ICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVu
c3VyZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICAvLyBT
a2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKKyAgICBwaXhlbCArPSAo
Y2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwor
ICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVh
c2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKKworICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsg
eSA+IHlTdGFydDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4
ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBz
dGFydEtlcm5lbFBpeGVsOworICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAg
ICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAg
ICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDAp
IHsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOworICAg
ICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5w
cmVzZXJ2ZUFscGhhKQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAg
ICsra2VybmVsUGl4ZWw7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwg
Kz0ga2VybmVsSW5jcmVhc2U7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdE
YXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRp
bmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVB
bHBoYSk7CisgICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAg
ICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZh
bHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYg
KHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRp
bmdEYXRhLmhlaWdodCkKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsg
eCkgPDwgMjsKKworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7CisgICAgZGVm
YXVsdDogLy8gRURHRU1PREVfTk9ORQorICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBFREdF
TU9ERV9EVVBMSUNBVEU6CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHggPSAwOwor
ICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgICAgIHgg
PSBwYWludGluZ0RhdGEud2lkdGggLSAxOworICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAg
ICB5ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAg
ICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOworICAgICAgICByZXR1cm4gKHkg
KiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIGNhc2UgRURHRU1PREVfV1JBUDoK
KyAgICAgICAgd2hpbGUgKHggPCAwKQorICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lk
dGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB3aGlsZSAoeSA8
IDApCisgICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHkgJT0g
cGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndp
ZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CisKKy8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwor
c3RhdGljIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwor
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhl
bFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAt
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFp
bnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9m
IHJnYihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gbV9kaXZp
c29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMK
KyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOworCisgICAgZm9yIChpbnQgeSA9IGhl
aWdodDsgeSA+IDA7IC0teSkgeworICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAt
LXgpIHsKKyAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxN
YXRyaXguc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtl
cm5lbFBpeGVsWDsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBp
eGVsWTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndp
ZHRoKCk7CisKKyAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNb
MV0gPSAwOworICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sz
XSA9IDA7CisKKyAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2Vy
bmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOworICAgICAgICAgICAgICAgIGlmIChwaXhlbEluZGV4
ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCkpOworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4
ICsgMSkpOworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVs
SW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKKyAgICAgICAgICAgICAg
ICArK2tlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAg
ICAgICAgICAgIGlmICghLS13aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhl
bFggPSBzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhl
bFk7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUu
d2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAg
ICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICB9CisgICAgICAgIHBpeGVsICs9IHhJ
bmNyZWFzZTsKKyAgICAgICAgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsK
KyAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWTsKKyAgICB9Cit9CisKK2Jvb2wgRkVDb252b2x2
ZU1hdHJpeDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBp
bnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBp
eGVsQnVmZmVyKG1fcHJlc2VydmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
IGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1
dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAg
YXV0byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdl
UmVjdCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGlucHV0UGl4ZWxBcnJheTsKKyAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQorICAgICAgICBp
bnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0
LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIElu
dFJlY3Qob3V0cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIGlm
ICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRTaXpl
IHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworCisgICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKKyAgICAgICAgKmlucHV0UGl4ZWxBcnJheSwKKyAgICAg
ICAgb3V0cHV0UGl4ZWxBcnJheSwKKyAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCisgICAgICAg
IHBhaW50U2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rp
dmlzb3IsCisgICAgICAgIG1fYmlhcyAqIDI1NSwKKyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisg
ICAgICAgIG1fZWRnZU1vZGUsCisgICAgICAgIG1fcHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVD
b2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICB9OworCisg
ICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBw
YWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90
dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworCisgICAg
aWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8gUmFyZSBz
aXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0
KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaW50IGl0ZXJhdGlv
bnMgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbikgeworICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJh
dGlvbnM7CisgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAx
KSAvIHN0cmlkZTsKKworICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0Nv
dW50LCBbJl0oc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlk
ZSAqIGluZGV4KTsKKyAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUg
KiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRp
bmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xp
cFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBtX3Rh
cmdldE9mZnNldC55KCkgKyAxOworICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgp
LCBtX3RhcmdldE9mZnNldC55KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhl
aWdodCgpKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0
b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChtX3Rh
cmdldE9mZnNldC54KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsK
KyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCisgICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9OyAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM5MDMyOWQ2N2JiMTkxOTA0N2Ni
MjBiOWRhNGFhYWZhMjU5MGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2Fy
ZS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCisKKyNpbmNs
dWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVk
ZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHks
IHVuc2lnbmVkIHJvd0J5dGVzKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwg
PSA0OworICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKK30KKwor
Ym9vbCBGRURpc3BsYWNlbWVudE1hcDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYg
Z2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFO
TkVMX1VOS05PV04pOworICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9V
TktOT1dOKTsKKyAgICAKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBhdXRv
JiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSBpbnB1dHNbMV0u
Z2V0KCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0
UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBp
eGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJ
bWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1
dC5pbWFnZVJlY3QoKSk7CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZW5jbG9zaW5n
SW50UmVjdChvdXRwdXRJbWFnZVJlY3QpKTsKKyAgICAKKyAgICBhdXRvIG91dHB1dDJJbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgpLCBpbnB1dDIuaW1h
Z2VSZWN0KCkpOworICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVl
cyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNv
bG9yIHZhbHVlcy4KKyAgICBhdXRvIGlucHV0MlBpeGVsQnVmZmVyID0gaW5wdXQyLmdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZW5jbG9zaW5n
SW50UmVjdChvdXRwdXQySW1hZ2VSZWN0KSk7CisKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIg
fHwgIWlucHV0MlBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NF
UlQoaW5wdXRQaXhlbEJ1ZmZlci0+bGVuZ3RoKCkgPT0gaW5wdXQyUGl4ZWxCdWZmZXItPmxlbmd0
aCgpKTsKKworICAgIGF1dG8gcGFpbnRTaXplID0gZXhwYW5kZWRJbnRTaXplKG91dHB1dC5sb2dp
Y2FsU2l6ZSgpKTsKKworICAgIGF1dG8gc2NhbGUgPSBnZW9tZXRyeS5tYXBJbWFnZVNpemUoeyBt
X3NjYWxlLCBtX3NjYWxlIH0pOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lk
dGgoKSAvIDI1NS4wOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkg
LyAyNTUuMDsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAq
IDAuNTsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAw
LjU7CisgICAgCisgICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgp
OworICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKworICAg
IGludCByb3dCeXRlcyA9IHBhaW50U2l6ZS53aWR0aCgpICogNDsKKworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgaW50IGxpbmVTdGFy
dE9mZnNldCA9IHkgKiByb3dCeXRlczsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBh
aW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4
ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlu
dCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBpbnB1dDJQaXhl
bEJ1ZmZlci0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsg
c2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JZICogaW5wdXQyUGl4ZWxCdWZmZXItPml0ZW0oZGVzdGluYXRpb25J
bmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOworCisgICAgICAg
ICAgICB1bnNpZ25lZCogb3V0cHV0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAw
IHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgKm91dHB1
dFBpeGVsUHRyID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBz
cmNZLCByb3dCeXRlcykpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURy
b3BTaGFkb3dTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA0ZTllZWEyZjlmMWZjYjcwMTI0N2Jj
ZGYzZGI5N2FiZjU2NWZkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmUuY3BwCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRkVEcm9wU2hhZG93LmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93OjphcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9
PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBibHVyUmFkaXVzID0gMiAqIGdlb21ldHJ5Lm1hcFJlc29sdmVkSW1hZ2VTaXpl
KHsgbV9zdGREZXZpYXRpb25YLCBtX3N0ZERldmlhdGlvblkgfSk7CisgICAgYXV0byBvZmZzZXQg
PSBnZW9tZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSk7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW5wdXRJbWFnZVJl
Y3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5wdXRJbWFnZVJlY3QsIG91dHB1dC5pbWFnZVJl
Y3QoKSk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCA9IGlucHV0SW1hZ2VS
ZWN0OworICAgIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBh
dXRvJiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRD
b250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCk7CisgICAg
b3V0cHV0Q29udGV4dC5zZXRBbHBoYSgxKTsKKworICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRv
dyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOworCisgICAgYXV0byBmb3JtYXQg
PSBQaXhlbEJ1ZmZlckZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIGF1dG8g
c2hhZG93QXJlYSA9IEludFJlY3QgeyBJbnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+bG9naWNhbFNp
emUoKSB9OworICAgIGF1dG8gc2hhZG93UGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXNoYWRvd1BpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJyYXkg
PSBzaGFkb3dQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVy
SW1hZ2Uoc2hhZG93UGl4ZWxBcnJheS5kYXRhKCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCks
IDQgKiBzaGFkb3dQaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOworCisgICAgb3V0cHV0SW1h
Z2UtPnB1dFBpeGVsQnVmZmVyKCpzaGFkb3dQaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisKKyAg
ICBvdXRwdXRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlSW4pOworICAgIG91dHB1dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgb3V0cHV0LmxvZ2ljYWxTaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICBvdXRwdXRD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRp
b25PdmVyKTsKKworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdl
LCBpbnB1dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MmJlYWUxMGJlNTBlZWNmMTk5NGI3ZWY1Yzk0YWQ1MWY2MDk1ODk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUZsb29kU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2QuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgRkVGbG9vZDo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JikgY29uc3QKK3sKKyAgICBhdXRv
IG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fZmxvb2RDb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShtX2Zsb29kT3BhY2l0eSk7CisgICAgb3V0cHV0
SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRJ
bWFnZS0+bG9naWNhbFNpemUoKSksIGNvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU1MTQ2MGY3OGQ1ZDZiNDJiNmU2MWE5MDg4
NTM2NWNmNDc1NGRlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZS5jcHAKQEAg
LTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSwgUy5MLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2lu
Y2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB2b2lkIGtlcm5l
bFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRh
TGVmdCwgaW50JiBkZWx0YVJpZ2h0KQoreworICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgor
ICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgeworICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCEo
cmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOwor
ICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDI7CisgICAgICAgICAgICBk
ZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0OworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAg
IGRlbHRhTGVmdCsrOworICAgICAgICAgICAgZGVsdGFSaWdodC0tOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAg
ICAgICAgICAgIGRlbHRhUmlnaHQrKzsKKyAgICAgICAgICAgIHJhZGl1cysrOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJh
dGVzIG9uIEFscGhhIGNoYW5uZWwuCitzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25s
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJy
YXkmIGRzdFBpeGVsQXJyYXksCisgICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4
UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGlu
dCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCit7CisgICAgY29uc3Qg
dWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOworICAgIHVpbnQ4X3QqIGRz
dERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKKyAgICAvLyBNZW1vcnkgYWxpZ25tZW50IGlz
OiBSR0JBLCB6ZXJvLWluZGV4IGJhc2VkLgorICAgIGNvbnN0IGludCBjaGFubmVsID0gMzsKKwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50
IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bSA9IDA7CisKKyAgICAgICAg
Ly8gRmlsbCB0aGUga2VybmVsLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5l
bFNpemU7ICsraSkgeworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBz
dHJpZGU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zm
c2V0OworICAgICAgICAgICAgc3VtICs9IHNyY1B0cltjaGFubmVsXTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEJsdXJyaW5nLgorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdp
ZHRoOyArK3gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUg
KyB4ICogc3RyaWRlICsgY2hhbm5lbDsKKyAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRz
dERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7CisgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4oc3VtIC8gZHgpOworCisgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisg
ICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
ZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAg
ICAgICAgICAgICAgIHN1bSAtPSAqc3JjUHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAg
ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgc3VtICs9ICpzcmNQdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheSwKKyAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJp
ZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJv
b2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIGNvbnN0IGludCBt
YXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOworICAgIGlmIChh
bHBoYUltYWdlKQorICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5
LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUs
ICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKKworICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBk
c3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICAvLyBDb25jZXJuaW5nIHRoZSBh
cnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4g
VGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQorICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAq
IGNoYW5uZWxzLgorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsK
KyAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bVIgPSAw
LCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOworCisgICAgICAgIGlmIChlZGdlTW9kZSA9
PSBFREdFTU9ERV9OT05FKSB7CisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgc3VtRyArPSAqc3Jj
UHRyKys7CisgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAg
ICAgc3VtQSArPSAqc3JjUHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCbHVy
cmluZy4KKyAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkg
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICog
c3RyaWRlOworICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhl
bEJ5dGVPZmZzZXQ7CisKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW1SIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKKworICAgICAgICAgICAgICAgIC8vIFNo
aWZ0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVm
dCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0g
c3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRy
WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgLT0g
c3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh4ICsg
ZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJp
Z2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0
OworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtRyArPSBzcmNQdHJbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3Jj
UHRyWzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUuCisgICAgICAgICAgICAvLyBH
ZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUnLgorICAgICAgICAgICAgY29u
c3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOworICAgICAgICAgICAg
Y29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVj
dFdpZHRoIC0gMSkgKiBzdHJpZGUpOworCisgICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwu
CisgICAgICAgICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kp
IHsKKyAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMg
b2YgJ2knPworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3Ry
aWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBv
ZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9
IGVkZ2VWYWx1ZUxlZnRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVl
TGVmdFsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgeworICAgICAgICAg
ICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOworICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9
IGVkZ2VWYWx1ZVJpZ2h0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1
ZVJpZ2h0WzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHN1bVIgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIr
KzsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAg
ICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIEJsdXJyaW5nLgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgdWludDhfdCog
ZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKKworICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7CisgICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKKyAgICAgICAg
ICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOworICAg
ICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwor
CisgICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAgICAgIGlmICh4
IDwgZHhMZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFsw
XTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOworICAgICAg
ICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0
IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBz
cmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAt
PSBzcmNQdHJbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOworICAg
ICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAg
c3VtQSAtPSBzcmNQdHJbM107CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHN1
bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRn
ZVZhbHVlUmlnaHRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmln
aHRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmln
aHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAg
ICAgICBzdW1HICs9IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQ
dHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworI2lmIFVTRShB
Q0NFTEVSQVRFKQorc3RhdGljIGlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhl
aWdodCkKK3sKKyAgICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJp
ZGUgPD0gMCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgorICAg
IGlmIChrZXJuZWxTaXplICUgMiAhPSAxKQorICAgICAgICBrZXJuZWxTaXplICs9IDE7CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVmZmVyOworICAgIGVmZmVjdEluQnVmZmVyLmRhdGEg
PSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKKyAgICBlZmZlY3RJbkJ1ZmZl
ci53aWR0aCA9IGVmZmVjdFdpZHRoOworICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVj
dEhlaWdodDsKKyAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIHZJ
bWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVyOworICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0g
dGVtcEJ1ZmZlci5kYXRhKCk7CisgICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lk
dGg7CisgICAgZWZmZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZl
Y3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHNp
emUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdp
dGggYSBzcGVjaWFsIGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgorICAgIC8vIHRoZSBzaXplIG5l
ZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgorICAgIHNpemVfdCB0
bXBCdWZmZXJTaXplID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVy
LCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7CisgICAgaWYgKHRt
cEJ1ZmZlclNpemUgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogdG1wQnVmZmVy
ID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJTaXplKTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdC
ODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwg
a2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFn
ZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwg
dG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCk7CisgICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAm
ZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUs
IDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAgICBXVEY6OmZhc3RGcmVlKHRtcEJ1ZmZlcik7CisK
KyAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisg
ICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOworICAg
IG1lbWNweShpb0J1ZmZlci5kYXRhKCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5n
dGgoKSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUs
IEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKK3sKKyAgICBpbnQgZHhMZWZ0ID0gMDsKKyAgICBpbnQgZHhSaWdodCA9IDA7CisgICAg
aW50IGR5TGVmdCA9IDA7CisgICAgaW50IGR5UmlnaHQgPSAwOworICAgIAorICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKKyAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CisgICAgICAgICAgICBrZXJuZWxQb3Np
dGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAg
ICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhM
ZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21C
dWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRl
LCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7
CisjZWxzZQorICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJu
ZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBw
YWludFNpemUuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAg
ICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGtlcm5lbFNpemVZKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBr
ZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJ
Q1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hC
bHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJp
Z2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0
b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNp
emUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQor
ICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
LndpZHRoKCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBz
dGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIGlm
ICgmaW9CdWZmZXIgIT0gZnJvbUJ1ZmZlcikgeworICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVu
Z3RoKCkgPT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICBtZW1jcHkoaW9CdWZmZXIu
ZGF0YSgpLCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICB9Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwg
Ym9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgc3Ry
aWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAg
aWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9O
T05FIHx8IGVkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKKyAgICAgICAgYWNjZWxl
cmF0ZUJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUs
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKKyAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVs
QXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxw
aGFJbWFnZSwgZWRnZU1vZGUpOworfQorCisjaWYgIVVTRShBQ0NFTEVSQVRFKQorc3RhdGljIHZv
aWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKK3sKKyAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVy
cy0+aGVpZ2h0KTsKKyAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWlu
dFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisjaWYg
IVVTRShBQ0NFTEVSQVRFKQorICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgo
KTsKKyAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworICAgIGlu
dCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhl
aWdodCgpKSAvIChzX21pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNp
emUud2lkdGgoKSk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAg
ICAgV1RGOjpQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmcGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAg
aW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChqb2Jz
ID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCIt
c2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkg
bGFyZ2VyIHNpbmNlCisgICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBz
aXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhF
eHRyYSIuCisgICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVp
Z2h0KCkgLyBqb2JzOworICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWlu
dFNpemUuaGVpZ2h0KCkgJSBqb2JzOworCisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwor
ICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAg
ICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2Jz
LnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwor
CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRy
YUhlaWdodDsKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJh
ID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7CisgICAgICAgICAgICAgICAgaW50IGVu
ZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7
CisKKyAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXplID0gKGVuZFkgLSBzdGFydFkpICogc2Nh
bmxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCFqb2IpIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFt
cGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5p
bml0aWFsaXplZChibG9ja1NpemUpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1z
LmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGlu
ZSwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwYXJh
bXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuaGVp
Z2h0ID0gZW5kWSAtIHN0YXJ0WTsKKyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVgg
PSBrZXJuZWxTaXplWDsKKyAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJu
ZWxTaXplWTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1
dGUoKTsKKworICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGlt
YWdlLgorICAgICAgICAgICAgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9i
ID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAg
ICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0
aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgICAgIGlu
dCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0
ICsgMSA6IGJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0
ZWRCbG9ja0hlaWdodDsKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdo
dCAqIHNjYW5saW5lOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVu
dFkgKiBzY2FubGluZTsKKyAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdo
dCAqIHNjYW5saW5lOworCisgICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSAr
IGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VP
ZmZzZXQsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0K
KyNlbmRpZgorCisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhh
cHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBw
YWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworfQorCitib29sIEZFR2F1c3NpYW5C
bHVyOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlucHV0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0
cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgCisgICAgYXV0
byBvdXRwdXRJbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVj
dCgpLCBpbnB1dC5pbWFnZVJlY3QoKSk7CisKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0
cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
UmVjdChvdXRwdXRJbWFnZVJlY3QpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICgh
bV9zdGREZXZpYXRpb25YICYmICFtX3N0ZERldmlhdGlvblkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShnZW9tZXRyeS5t
YXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fc3RkRGV2aWF0aW9uWCwgbV9zdGREZXZpYXRpb25ZIH0p
KTsKKyAgICBhdXRvIHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOwor
CisgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7CisgICAgaWYgKCF0bXBJbWFnZURhdGEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBsYXRmb3JtQXBwbHkob3V0cHV0UGl4ZWxB
cnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdo
dCgpLCBwYWludFNpemUsIG91dHB1dC5pc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGlu
Z1NvZnR3YXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjZlMDM1YTU2ODc5
NTc5YTRkNWViNTNiMTllZTIwMmJkZjk3ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdh
cmUuY3BwCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTGlnaHRpbmcuaCIKKwor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNp
bmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkxpZ2h0aW5nRGF0YS5oIgor
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dHJ1Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKKyAgICBMaWdodGluZ0RhdGEg
ZGF0YTsKKyAgICBMaWdodFNvdXJjZVBhaW50RGF0YSBwYWludERhdGE7CisgICAgaW50IHlTdGFy
dDsKKyAgICBpbnQgeUVuZDsKK307CisKKy8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3JtYWwg
Y29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lgorc3RhdGljIGNv
bnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKK3N0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGNG
YWN0b3IxZGl2NCA9IC0xIC8gNC5mOworc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRp
djMgPSAtMiAvIDMuZjsKKworc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50
RGF0YSYgcGFpbnREYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rv
clksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQoreworICAgIGZsb2F0IHog
PSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOworICAgIExpZ2h0U291cmNlUGl4ZWxEYXRhIHBp
eGVsRGF0YSA9IGRhdGEuc291cmNlLT5jb21wdXRlTGlnaHRTb3VyY2VQaXhlbERhdGEocGFpbnRE
YXRhLCB4LCB5LCB6KTsKKworICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgaWYgKG5vcm1h
bDJEVmVjdG9yLmlzWmVybygpKSB7CisgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAs
IDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KKyAgICAgICAgaWYgKGRhdGEudHlw
ZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogcGl4ZWxEYXRhLmxpZ2h0VmVj
dG9yLnooKSAvIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKKyAgICAgICAgICAgICAg
ICBwaXhlbERhdGEubGlnaHRWZWN0b3IueCgpLAorICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5s
aWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLnoo
KSArIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aAorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwor
ICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9y
LnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndh
eVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZl
Y3RvciA9IHsKKyAgICAgICAgICAgIGZhY3RvclggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICog
ZGF0YS5zdXJmYWNlU2NhbGUsCisgICAgICAgICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3Iu
aGVpZ2h0KCkgKiBkYXRhLnN1cmZhY2VTY2FsZSwKKyAgICAgICAgICAgIDEuMGYKKyAgICAgICAg
fTsKKyAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0
aCgpOworCisgICAgICAgIGlmIChkYXRhLnR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VD
b25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBwaXhlbERhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIHBpeGVsRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CisgICAgICAg
ICAgICAgICAgcGl4ZWxEYXRhLmxpZ2h0VmVjdG9yLngoKSwKKyAgICAgICAgICAgICAgICBwaXhl
bERhdGEubGlnaHRWZWN0b3IueSgpLAorICAgICAgICAgICAgICAgIHBpeGVsRGF0YS5saWdodFZl
Y3Rvci56KCkgKyBwaXhlbERhdGEubGlnaHRWZWN0b3JMZW5ndGgKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5n
dGgoKTsKKyAgICAgICAgICAgIGlmIChkYXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAg
ICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogKG5vcm1h
bFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlW
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxm
d2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwg
ZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsaWdo
dFN0cmVuZ3RoID4gMSkKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7CisgICAgaWYgKGxpZ2h0
U3RyZW5ndGggPCAwKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKKworICAgIHVpbnQ4X3Qg
cGl4ZWxWYWx1ZVszXSA9IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIHBpeGVsRGF0YS5jb2xvclZlY3Rvci54KCkgKiAyNTUuMGYpLAorICAgICAgICBzdGF0
aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogcGl4ZWxEYXRhLmNvbG9yVmVjdG9yLnko
KSAqIDI1NS4wZiksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGgg
KiBwaXhlbERhdGEuY29sb3JWZWN0b3IueigpICogMjU1LjBmKQorICAgIH07CisgICAgCisgICAg
ZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCB4LCBpbnQgeSwg
ZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK3sK
KyAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCB4LCB5LCBmYWN0
b3JYLCBmYWN0b3JZLCBub3JtYWwyRFZlY3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCisvLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9t
IGFuZCB3cml0ZSB0byB0aGUgc2FtZSBwaXhlbCBidWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRo
ZSBhbHBoYSBjaGFubmVsLCBhbmQgd3JpdGVzIHRoZSBub24tYWxwaGEgY2hhbm5lbHMuCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlUGFpbnREYXRhJiBwYWludERhdGEsIGludCBzdGFy
dFksIGludCBlbmRZKQoreworICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdl
IHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgorICAgIEFTU0VSVChzdGFy
dFkpOworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIGZvciAoaW50IHkgPSBzdGFy
dFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgaW50IHJvd1N0YXJ0T2Zmc2V0ID0geSAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGludCBwcmV2aW91c1Jvd1N0
YXJ0ID0gcm93U3RhcnRPZmZzZXQgLSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgICAgICBpbnQgbmV4dFJvd1N0YXJ0ID0gcm93U3RhcnRPZmZzZXQgKyBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOworCisgICAgICAgIC8vIGFscGhhV2luZG93IGlzIGEgbG9jYWwg
Y2FjaGUgb2YgYWxwaGEgdmFsdWVzLgorICAgICAgICAvLyBGaWxsIHRoZSB0d28gcmlnaHQgY29s
dW1ucyBwdXR0aW5nIHRoZSBsZWZ0IGVkZ2UgdmFsdWUgaW4gdGhlIGNlbnRlciBjb2x1bW4uCisg
ICAgICAgIC8vIEZvciBlYWNoIHBpeGVsLCB3ZSBzaGlmdCBlYWNoIHJvdyBsZWZ0IHRoZW4gZmls
bCB0aGUgcmlnaHQgY29sdW1uLgorICAgICAgICBBbHBoYVdpbmRvdyBhbHBoYVdpbmRvdzsKKyAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0VG9wKGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3Rh
cnQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldFRvcFJp
Z2h0KGRhdGEucGl4ZWxzLT5pdGVtKHByZXZpb3VzUm93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGFscGhhV2luZG93LnNldENlbnRlcihkYXRh
LnBpeGVscy0+aXRlbShyb3dTdGFydE9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworCisgICAgICAgIGFscGhh
V2luZG93LnNldEJvdHRvbShkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldEJvdHRvbVJpZ2h0KGRhdGEu
cGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisKKyAgICAgICAgaW50IG9mZnNldCA9IHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6
ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7
ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIGFscGhhV2luZG93LnNo
aWZ0KCk7CisgICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRE
YXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1h
bChvZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOworICAgICAgICB9
CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAgIHBs
YXRmb3JtQXBwbHlHZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFp
bnREYXRhLCBwYXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBk
YXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSBwYWludERhdGEpCit7CisgICAgdW5zaWdu
ZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOworICAgIHVu
c2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKKyAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lIC0gMSkgKiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24s
IG1heE51bVRocmVhZHMpOworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAg
ICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3Jt
QXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKworICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKKyAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKKyAgICAgICAgaWYgKGpvYiA+IDEpIHsKKyAgICAgICAgICAgIC8vIFNw
bGl0IHRoZSBqb2IgaW50byAieVN0ZXAiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMg
dGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQorICAgICAgICAgICAgLy8geVN0
ZXAgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSBy
ZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAgICAgICAgICAgY29uc3QgaW50IHlTdGVwID0g
cm93c1RvUHJvY2VzcyAvIGpvYjsKKyAgICAgICAgICAgIGNvbnN0IGludCBqb2JzV2l0aEV4dHJh
ID0gcm93c1RvUHJvY2VzcyAlIGpvYjsKKworICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7Cisg
ICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKKyAgICAgICAgICAgICAg
ICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnBhaW50RGF0YSA9IHBhaW50RGF0YTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OworICAgICAgICAgICAgICAgIHlTdGFydCArPSBqb2Ig
PCBqb2JzV2l0aEV4dHJhID8geVN0ZXAgKyAxIDogeVN0ZXA7CisgICAgICAgICAgICAgICAgcGFy
YW1zLnlFbmQgPSB5U3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0KKworICAgIHBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnREYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZVBhaW50RGF0YSYgcGFpbnREYXRhKQor
eworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHlu
YW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCisjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJN
X1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyAgICBwbGF0Zm9ybUFw
cGx5TmVvbihkYXRhLCBwYWludERhdGEpOworI2Vsc2UKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJp
YyhkYXRhLCBwYWludERhdGEpOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIGRyYXdMaWdodGlu
Zyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBk
YXRhLmNvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0Nv
bG9yU3BhY2UpOworICAgIExpZ2h0U291cmNlUGFpbnREYXRhIHBhaW50RGF0YSA9IGRhdGEuc291
cmNlLT5jb21wdXRlTGlnaHRTb3VyY2VQYWludERhdGEoRmxvYXRQb2ludDNEKHIsIGcsIGIpKTsK
KworICAgIC8vIFRvcCBsZWZ0LgorICAgIGludCBvZmZzZXQgPSAwOworICAgIHNldFBpeGVsKG9m
ZnNldCwgZGF0YSwgcGFpbnREYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOworCisgICAgLy8gVG9wIHJpZ2h0LgorICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9m
ZnNldCkpOworCisgICAgLy8gQm90dG9tIGxlZnQuCisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zm
c2V0KSk7CisKKyAgICAvLyBCb3R0b20gcmlnaHQuCisgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBj
UGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnREYXRhLCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2
MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOworCisgICAg
aWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyKSB7CisgICAgICAgIC8vIFRvcCByb3cu
CisgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQor
ICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludERhdGEsIHgsIDAsIGNGYWN0
b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKKworICAg
ICAgICAvLyBCb3R0b20gcm93LgorICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Cisg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IG9mZnNldCArPSBjUGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRh
LCBwYWludERhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2Mywg
Y0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAg
ICBpZiAoZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA+PSAyKSB7CisgICAgICAgIC8vIExlZnQg
Y29sdW1uLgorICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7
ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAg
ICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50RGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYy
LCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKworICAgICAg
ICAvLyBSaWdodCBjb2x1bW4uCisgICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludERhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFj
dG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CisgICAgfQorCisgICAg
aWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyICYmIGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUgPj0gMikgeworICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCisgICAgICAgIHBsYXRm
b3JtQXBwbHkoZGF0YSwgcGFpbnREYXRhKTsKKyAgICB9CisKKyAgICBpbnQgbGFzdFBpeGVsID0g
KGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgaWYgKGRhdGEudHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0
OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCisgICAgICAgICAgICBkYXRhLnBpeGVs
cy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgdWlu
dDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOworICAgICAgICAgICAgdWludDhfdCBhMiA9
IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKKyAgICAgICAgICAgIHVpbnQ4X3QgYTMgPSBkYXRh
LnBpeGVscy0+aXRlbShpICsgMik7CisgICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRv
IG1heChhMSwgYTIsIGEzKQorICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEg
Pj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZFTGlnaHRpbmc6
OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAg
IEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOworICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBd
LmdldCgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1
dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQ
aXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gb3V0cHV0
SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KG91dHB1dC5pbWFnZVJlY3QoKSwgaW5w
dXQuaW1hZ2VSZWN0KCkpOworCisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3Qob3V0
cHV0SW1hZ2VSZWN0KSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKworICAgIC8vIEZJWE1FOiBz
dXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJl
IGlzIHRoYXQgdGhlIFczCisgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhl
bSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8g
b3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0
aGV5IGFyZSByZWxpYWJsZS4KKyAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxk
IGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgSW50U2l6ZSBzaXplID0gSW50U2l6
ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlm
IHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMgc3Bl
YyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMu
CisgICAgaWYgKHNpemUud2lkdGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmNvbG9y
ID0gbV9jb2xvcjsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1
LjBmOworICAgIGRhdGEuZGlmZnVzZUNvbnN0YW50ID0gbV9kaWZmdXNlQ29uc3RhbnQ7CisgICAg
ZGF0YS5zcGVjdWxhckNvbnN0YW50ID0gbV9zcGVjdWxhckNvbnN0YW50OworICAgIGRhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9IG1fc3BlY3VsYXJFeHBvbmVudDsKKyAgICBkYXRhLnNvdXJjZSA9ICZt
X3NvdXJjZTsKKyAgICBkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UgPSAmb3BlcmF0aW5nQ29sb3JT
cGFjZSgpOworICAgIGRhdGEudHlwZSA9IHR5cGUoKTsKKworICAgIGRhdGEucGl4ZWxzID0gJm91
dHB1dFBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHNp
emUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0g
c2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gc2l6ZS5o
ZWlnaHQoKSAtIDE7CisKKyAgICBkcmF3TGlnaHRpbmcoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJn
ZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDQ4NTJjOTRlZmJhMzEzYzdmYzlhYTg3YTAwZWE5
MjFiMmUwYjIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1l
cmdlLmgiCisKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRlcklt
YWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgRkVNZXJnZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgcmVzdWx0LCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2Vv
bWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpbnB1dHMuaXNFbXB0eSgpKTsKKworICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSByZXN1bHQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXJlc3VsdElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworCisgICAgZm9yIChhdXRvJiBpbnB1
dCA6IGlucHV0cykgeworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gaW5wdXQtPmltYWdlQnVm
ZmVyKCk7CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW5w
dXQtPmltYWdlUmVjdCgpLCByZXN1bHQuaW1hZ2VSZWN0KCkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3Jw
aG9sb2d5U29mdHdhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzMWVi
OTM1ZGM3N2M1ZjgxMjhjN2Q0NDhkNjAyN2I3NTk1MWVhOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9s
b2d5U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTW9ycGhvbG9neS5o
IgorCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5o
IgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHsKKyAg
ICBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yOworICAgIGludCByYWRpdXNY
OworICAgIGludCByYWRpdXNZOworCisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1Bp
eGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgaW50
IHdpZHRoOworICAgIGludCBoZWlnaHQ7Cit9OworCitzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMgeworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBNb3JwaG9sb2d5UGFpbnRpbmdE
YXRhJiwgaW50LCBpbnQpPiBmaWxsUmVnaW9uOworICAgIGludCBzdGFydFk7CisgICAgaW50IGVu
ZFk7CisgICAgY29uc3QgTW9ycGhvbG9neVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworfTsK
KwordXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4sIDE2PjsKKworc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoKQoreworICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OworfQorCitp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKK3sKKyAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOworfQorCitpbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Cit9
CisKK3RlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiYgYikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKKwor
ICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Cit9CisKK3RlbXBsYXRlPE1vcnBob2xv
Z3lPcGVyYXRvciBtb3JwaG9sb2d5T3BlcmF0b3I+CitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCit7
CisgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQ
YWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3Jj
UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0p
OworCisgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKKyAgICAg
ICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAg
ZXh0cmVtdW0gPSBtaW5Pck1heDxtb3JwaG9sb2d5T3BlcmF0b3I+KGV4dHJlbXVtLCBwaXhlbCk7
CisgICAgfQorICAgIHJldHVybiBleHRyZW11bTsKK30KKworQUxXQVlTX0lOTElORSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRo
LCBNb3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQoreworICAgIGlmIChtb3Jw
aG9sb2d5T3BlcmF0b3IgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQorICAgICAgICBy
ZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhl
bEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKKworICAgIHJldHVybiBjb2x1bW5FeHRy
ZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhlbEFycmF5LCB4LCB5U3Rh
cnQsIHlFbmQsIHdpZHRoKTsKK30KKwordGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yIG1vcnBo
b2xvZ3lPcGVyYXRvcj4KK0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK3sKKyAgICBhdXRv
IGV4dHJlbXVtID0ga2VybmVsWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVs
LnNpemUoKTsgKytpKQorICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PG1vcnBob2xvZ3lPcGVy
YXRvcj4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7CisKKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisK
K0FMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVt
KGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xv
Z3lPcGVyYXRvcikKK3sKKyAgICBpZiAobW9ycGhvbG9neU9wZXJhdG9yID09IEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSkKKyAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKKworICAgIHJldHVybiBrZXJuZWxFeHRyZW11
bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOworfQorCitzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uKGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisg
ICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eTsKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
OworCisgICAgY29uc3QgaW50IHJhZGl1c1ggPSBwYWludGluZ0RhdGEucmFkaXVzWDsKKyAgICBj
b25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5nRGF0YS5yYWRpdXNZOworICAgIGNvbnN0IGludCB3
aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRp
bmdEYXRhLmhlaWdodDsKKworICAgIEFTU0VSVChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kg
PD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQoc3RhcnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYg
c3RhcnRZIDwgZW5kWSk7CisKKyAgICBDb2x1bW5FeHRyZW1hIGV4dHJlbWE7CisgICAgZXh0cmVt
YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIgKiByYWRpdXNYICsgMSk7CisKKyAgICBmb3IgKGlu
dCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIGludCB5UmFkaXVzU3RhcnQg
PSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7CisgICAgICAgIGludCB5UmFkaXVzRW5kID0gc3Rk
OjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSArIDEpOworCisgICAgICAgIGV4dHJlbWEuc2hyaW5r
KDApOworCisgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUg
ZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCByYWRpdXNYOyArK3gpCisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRy
ZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yKSk7CisKKyAgICAgICAgLy8gS2VybmVsIGlz
IGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVz
WCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhl
bEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFp
bnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpOworCisgICAgICAgICAgICBpZiAoeCA+IHJh
ZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4
ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAgICAgICAg
ICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVs
RXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLm1vcnBob2xvZ3lPcGVyYXRvcikpLnZhbHVl
OworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2Vy
KFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKK3sKKyAgICBwYXJhbS0+ZmlsbFJlZ2lv
bigqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworfQor
CitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IE1vcnBob2xvZ3lQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKK3sKKyAgICAvLyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hp
bWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBv
ZiBhYm91dCAwLjY1LgorICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRh
LnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1OworCisgICAgc3RhdGljIGNv
bnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworICAgIAorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBw
YWludGluZ0RhdGEuaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVy
ID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEu
aGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKKyAg
ICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQYXJhbGxlbEpv
YnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4g
MSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBq
b2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIg
c2luY2UKKyAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2Ug
ZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAg
ICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRz
OworICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUg
bnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAg
IGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgeworICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbS5maWxsUmVnaW9uID0gZmls
bFJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEg
OiBqb2JTaXplOworICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKKyAgICAg
ICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1v
ZGVsCisgICAgfQorCisgICAgZmlsbFJlZ2lvbihwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0
YS5oZWlnaHQpOworfQorCitzdGF0aWMgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShGaWx0
ZXJJbWFnZSYgaW4sIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwg
aW50IHJhZGl1c1gsIGludCByYWRpdXNZKQoreworICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRp
dXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7CisgICAgICAgIGluLmNvcHlQaXhl
bEJ1ZmZlcihkc3RQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBpbWFnZVJlY3QsIGNvbG9yU3BhY2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZFTW9ycGhvbG9neTo6YXBwbHlTb2Z0d2Fy
ZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlucHV0
cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBJ
bnRSZWN0KGdlb21ldHJ5Lm1hcEltYWdlUmVjdChvdXRwdXQuaW1hZ2VSZWN0KCksIGlucHV0Lmlt
YWdlUmVjdCgpKSk7CisKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0
U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5l
cmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCksIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgb3V0cHV0SW1hZ2VS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShnZW9t
ZXRyeS5tYXBSZXNvbHZlZEltYWdlU2l6ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAg
ICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKG91dHB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFk
aXVzLndpZHRoKCkpOworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4ob3V0cHV0SW1hZ2VSZWN0
LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShpbnB1dCwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCksIHJhZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBNb3JwaG9sb2d5UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBw
YWludGluZ0RhdGEubW9ycGhvbG9neU9wZXJhdG9yID0gbV9tb3JwaG9sb2d5T3BlcmF0b3I7Cisg
ICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0Rh
dGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOworCisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXkgPSBpbnB1dFBpeGVsQXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVs
QXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWls
ZihvdXRwdXRJbWFnZVJlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNl
aWxmKG91dHB1dEltYWdlUmVjdC5oZWlnaHQoKSk7CisKKyAgICBwbGF0Zm9ybUFwcGx5KHBhaW50
aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
ZmIwYjhhYWFkMGE1YTU1Mjg4ZDE3ZWVjNDA4MDEyZTZlN2VmYjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zm
c2V0U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorCisjaW5j
bHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbHRlckltYWdlVmVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZF
T2Zmc2V0OjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlcklt
YWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAxKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlu
cHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9
IGlucHV0LmltYWdlUmVjdCgpOworICAgIGlucHV0SW1hZ2VSZWN0Lm1vdmUoZ2VvbWV0cnkucmVz
b2x2ZUltYWdlU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIGlucHV0SW1hZ2VSZWN0ID0gZ2Vv
bWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0SW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOwor
CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2Us
IGlucHV0SW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mY2EwNTM1Y2MyN2M0MzQyMmM2OGIxZWM5ZjY4MGIzMGIzMTAxOWI4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVRpbGVTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRVRpbGUuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2Uu
aCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZVZlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZFVGlsZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQg
PSBpbnB1dHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0
cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJl
Y3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbnB1dEltYWdlUmVjdCA9IGdlb21ldHJ5Lm1h
cEltYWdlUmVjdChpbnB1dEltYWdlUmVjdCk7CisKKyAgICBhdXRvIHRpbGVSZWN0ID0gZ2VvbWV0
cnkuY2xpcFRvRmlsdGVyUmVnaW9uKGlucHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICB0
aWxlUmVjdCA9IGdlb21ldHJ5Lm1hcEltYWdlUmVjdCh0aWxlUmVjdCk7CisKKyAgICBhdXRvIG91
dHB1dEltYWdlUmVjdCA9IG91dHB1dC5pbWFnZVJlY3QoKTsKKyAgICBvdXRwdXRJbWFnZVJlY3Qg
PSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0SW1hZ2VSZWN0KTsKKworICAgIGF1dG8gbWF4
T3V0cHV0UmVjdCA9IGdlb21ldHJ5LmNsaXBUb0ZpbHRlclJlZ2lvbihvdXRwdXQucHJpbWl0aXZl
U3VicmVnaW9uKCkpOworICAgIG1heE91dHB1dFJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3Qo
bWF4T3V0cHV0UmVjdCk7CisKKyAgICBhdXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGlsZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAx
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBpZiAoIXRpbGVJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3Jh
cGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0
KCk7CisgICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkp
OworICAgIHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1
dEltYWdlUmVjdC5sb2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBp
ZiAoIXRpbGVJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5lVHJhbnNm
b3JtIHBhdHRlcm5UcmFuc2Zvcm07CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGls
ZVJlY3QubG9jYXRpb24oKSAtIG1heE91dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRv
IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsg
dHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
b3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4
dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKKyAgICAKKyAgICBvdXRwdXRDb250
ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dEltYWdlUmVjdC5zaXpl
KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45OTdiNDAxNTFlNDc2MGRlNWNlZmJmOTFiMDkwMmViM2ZmNWQyZDI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVR1cmJ1bGVuY2VTb2Z0d2FyZS5jcHAKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdl
ZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdHVyYnVs
ZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVh
cnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKKworLyoKKyAgICBQcm9kdWNlcyByZXN1
bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAo
YSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9
IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2Vl
IFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgK
KyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0
MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmln
aW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5
NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKioz
MSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7
IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3Mzsg
Ly8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0
YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOworCitzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJl
Y3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBh
cmFsbGVsIGpvYnMuCisKK3N0cnVjdCBUdXJidWxlbmNlUGFpbnRpbmdEYXRhIHsKKyAgICBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlIHR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25n
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAg
ICAgICAgOiB0dXJidWxlbmNlVHlwZSh0dXJidWxlbmNlVHlwZSkKKyAgICAgICAgLCBiYXNlRnJl
cXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJl
cXVlbmN5WSkKKyAgICAgICAgLCBudW1PY3RhdmVzKG51bU9jdGF2ZXMpCisgICAgICAgICwgc2Vl
ZChzZWVkKQorICAgICAgICAsIHN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKQorICAgICAgICAsIHBh
aW50aW5nU2l6ZShwYWludGluZ1NpemUpCisgICAgeworICAgIH0KKworICAgIC8vIENvbXB1dGUg
cHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgaW5saW5lIGxvbmcgcmFuZG9tKCkKKyAgICB7Cisg
ICAgICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAt
IHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOworICAgICAgICBpZiAocmVzdWx0IDw9IDApCisg
ICAgICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKKyAgICAgICAgc2VlZCA9IHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUdXJidWxlbmNlVHlwZSB0
dXJidWxlbmNlVHlwZTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WTsKKyAgICBpbnQgbnVtT2N0YXZlczsKKyAgICBsb25nIHNlZWQ7CisgICAgYm9v
bCBzdGl0Y2hUaWxlczsKKyAgICBJbnRTaXplIHBhaW50aW5nU2l6ZTsKKworICAgIGludCBsYXR0
aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07CisgICAgZmxvYXQgZ3JhZGllbnRbNF1b
MiAqIHNfYmxvY2tTaXplICsgMl1bMl07Cit9OworCitzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAg
U3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKKworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11
Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAg
fTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAg
aW50IHdyYXBZIHsgMCB9OworfTsKKworc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0aXRjaERh
dGEsIGludCwgaW50KT4gZmlsbFJlZ2lvbjsKKyAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxB
cnJheTsKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2Nh
bGU7CisgICAgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgIFN0aXRj
aERhdGEgc3RpdGNoRGF0YTsKKyAgICBpbnQgc3RhcnRZOworICAgIGludCBlbmRZOworfTsKKwor
aW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCit7CisgICAgcmV0dXJuIHQgKiB0ICog
KDMgLSAyICogdCk7Cit9CisKK2lubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0
IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKK30K
Kworc3RhdGljIHZvaWQgaW5pdFBhaW50KFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSkKK3sKKyAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOworCisgICAgLy8gVGhlIHNl
ZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAg
aWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0g
LShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBpZiAo
cGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdE
YXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKworICAgIGZsb2F0KiBncmFkaWVudDsKKyAg
ICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAgICAgIHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOworICAgICAgICAgICAgZ3JhZGllbnQg
PSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5n
RGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxv
Y2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6
ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAh
Z3JhZGllbnRbMV0pOworICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlw
b3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGdyYWRpZW50WzBdIC89
IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxp
emF0aW9uRmFjdG9yOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IHNfYmxv
Y2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgp
ICUgc19ibG9ja1NpemU7CisgICAgICAgIEFTU0VSVChqID49IDApOworICAgICAgICBBU1NFUlQo
aiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKKyAgICAgICAgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CisgICAgfQorCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsr
Y2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3Nf
YmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07
CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUg
KyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKKyAgICAgICAg
fQorICAgIH0KK30KKworc3RhdGljIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXpl
IHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwg
Ym9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKKyAgICBm
bG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgQVNTRVJUKHRpbGVXaWR0
aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOworCisgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQg
dHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAvLyBzbyB0
aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgorICAgIGlmIChiYXNlRnJl
cXVlbmN5WCkgeworICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICBmbG9hdCBoaWdoRnJlcXVl
bmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAg
ICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRv
IHRoZSBzdGFuZGFyZC4KKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5
IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAgICAgYmFzZUZyZXF1
ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKKyAgICB9CisgICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7
CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZy
ZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNl
aWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBp
ZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZy
ZXF1ZW5jeVkpCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5Owor
ICAgIH0KKworICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKKyAgICBzdGl0Y2hEYXRhLndy
YXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgc3RpdGNoRGF0YS5o
ZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICBzdGl0Y2hE
YXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OworCisgICAgcmV0
dXJuIHN0aXRjaERhdGE7Cit9CisKKy8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6
IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVt
ZW50Lgorc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBUdXJi
dWxlbmNlUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQoreworICAgIHN0cnVjdCBOb2lz
ZVBvc2l0aW9uIHsKKyAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0
ZXh0LgorICAgICAgICBpbnQgbmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0
LgorICAgICAgICBmbG9hdCBmcmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4K
KworICAgICAgICBOb2lzZVBvc2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gIHQgPSB2ZWNbMF0gKyBQZXJsaW5OOworICAgICAgICAgICAgLy8gIGJ4MCA9
IChpbnQpdDsKKyAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKKyAgICAgICAgICAgIC8vICBy
eDAgPSB0IC0gKGludCl0OworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQg
KyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAg
IGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzdGl0Y2goaW50IHNpemUsIGludCB3cmFwU2l6ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gaWYgKGJ4MCA+PSBwU3RpdGNoSW5mby0+bldyYXBYKQorICAgICAgICAgICAgLy8g
ICBieDAgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSB3
cmFwU2l6ZSkKKyAgICAgICAgICAgICAgICBpbmRleCAtPSBzaXplOworCisgICAgICAgICAgICAv
LyBpZiAoYngxID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAgICAvLyAgIGJ4MSAt
PSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFw
U2l6ZSkKKyAgICAgICAgICAgICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOworICAgIE5v
aXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7CisKKyAgICAvLyBJZiBzdGl0Y2hp
bmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAocGFpbnRpbmdE
YXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0
aCwgc3RpdGNoRGF0YS53cmFwWCk7CisgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5o
ZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOworICAgIH0KKworICAgIC8vIGJ4MCAmPSBCTTsKKyAg
ICAvLyBieDEgJj0gQk07CisgICAgLy8gYnkwICY9IEJNOworICAgIC8vIGJ5MSAmPSBCTTsKKyAg
ICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VYLm5leHRJbmRleCAmPSBz
X2Jsb2NrTWFzazsKKyAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZ
Lm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKworICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9y
W2J4MF07CisgICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKKyAgICBpbnQgbGF0dGlj
ZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOworICAg
IGludCBuZXh0TGF0dGljZUluZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lz
ZVgubmV4dEluZGV4XTsKKworICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7CisgICAg
Ly8gc3kgPSBkb3VibGUoc19jdXJ2ZShyeTApKTsKKyAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZl
KG5vaXNlWC5mcmFjdGlvbik7CisgICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJh
Y3Rpb24pOworCisgICAgYXV0byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsK
KyAgICAgICAgLy8gYjAwID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQorICAgICAgICBpbnQg
YjAwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVku
aW5kZXhdOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUg
PSByeDAgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjAwXTsKKyAgICAgICAgZmxvYXQgdSA9IG5vaXNl
WC5mcmFjdGlvbiAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOworCisgICAgICAgIC8v
IGIxMCA9IHVMYXR0aWNlU2VsZWN0b3JbaiArIGJ5MF07CisgICAgICAgIGludCBiMTAgPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhd
OworICAgICAgICAvLyByeDEgPSByeDAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50
W25Db2xvckNoYW5uZWxdW2IxMF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAg
ICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOworICAgICAgICBmbG9h
dCB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFb
MV07CisgICAgICAgIC8vIGEgPSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYSA9IGxp
bmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworCisgICAgICAgIC8vIGIwMSA9IHVMYXR0aWNl
U2VsZWN0b3JbaSArIGJ5MV07CisgICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyBy
eTEgPSByeTAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxd
W2IwMV07IHUgPSByeDAgKiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDFdOworICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9u
ICogcVswXSArIChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisKKyAgICAgICAgLy8gYjEx
ID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkxXTsKKyAgICAgICAgaW50IGIxMSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhd
OworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEg
KiBxWzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMTFdOworICAgICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSAr
IChub2lzZVkuZnJhY3Rpb24gLSAxKSAqIHFbMV07CisgICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1
LCB2KTsKKyAgICAgICAgZmxvYXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOwor
CisgICAgICAgIC8vIHJldHVybiBsZXJwKHN5LCBhLCBiKTsKKyAgICAgICAgcmV0dXJuIGxpbmVh
ckludGVycG9sYXRpb24oc3ksIGEsIGIpOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAg
ICBub2lzZUZvckNoYW5uZWwoMCksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKKyAgICAg
ICAgbm9pc2VGb3JDaGFubmVsKDIpLAorICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKKyAgICB9
OworfQorCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50
cy4KKy8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4o
U1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUgYmVoYXZpb3IuCitzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKK3sKKyAgICByZXR1
cm4geworICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90
PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCisg
ICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVu
dHNbMl0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRp
Y19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKKyAgICB9Owor
fQorCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0IFR1cmJ1bGVuY2VQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKKyAg
ICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJl
cXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKKyAgICBm
bG9hdCByYXRpbyA9IDE7CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRp
bmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEu
dHVyYnVsZW5jZVR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87CisKKyAgICAgICAgbm9pc2VWZWN0b3Iu
c2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lz
ZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8gKj0gMjsKKworICAgICAgICBpZiAocGFp
bnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZh
bHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9u
IGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1
YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Cisg
ICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Bl
cmxpbk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAg
ICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9p
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUp
ICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCisgICAgaWYgKHBhaW50aW5nRGF0YS50dXJi
dWxlbmNlVHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsg
MC41ZjsKKworICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKQorewor
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmls
dGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBz
dGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7CisKKyAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsg
MSk7CisgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAg
cG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQ
b2ludCA9IHBvaW50LnNjYWxlZCgxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNj
YWxlLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsK
KyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgp
LCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKKyAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5u
ZWwgKz0gNDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldv
cmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBwYXJhbWV0ZXJz
LT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5maWx0ZXJS
ZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRh
LCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMt
PmVuZFkpOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFn
ZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5
JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0
LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7Cisg
ICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAg
ICBJbnRTaXplIG91dHB1dFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkpOworICAgIEludFNpemUg
dGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6
ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKKyAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7CisgICAgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBtX3N0aXRjaFRpbGVzKTsKKworICAgIFR1cmJ1bGVuY2VQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhKG1fdHVyYnVsZW5jZVR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbV9udW1PY3RhdmVzLCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMsIHRpbGVTaXpl
KTsKKyAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKworICAgIGF1dG8gYXJlYSA9IG91dHB1
dFNpemUuYXJlYSgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGhlaWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CisKKyAg
ICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25lZCBvcHRp
bWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0
RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChnZW9tZXRyeS5tYXBJbWFnZVJlY3Qob3V0cHV0LmltYWdlUmVjdCgp
KSk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgV1RGOjpQ
YXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmZmlsbFJlZ2lv
bldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFy
YW1ldGVyIGFycmF5CisgICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJP
ZkpvYnMoKTsKKyAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxp
dCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmlidXRpbmcgdGhlIGV4dHJh
IHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMuCisgICAgICAgICAgICB1
bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBq
b2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0WSA9IDA7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2Jz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0g
cGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsbFJl
Z2lvbiA9IHN0YXRpY19jYXN0PHZvaWQoKikoVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgVHVyYnVsZW5jZVBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEsIGludCwgaW50KT4oJmZpbGxSZWdpb24pOworICAgICAgICAgICAgICAgIHBhcmFt
cy5waXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LmZpbHRlclJlZ2lvbiA9IG91dHB1dEltYWdlUmVjdDsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
ZmlsdGVyU2NhbGUgPSBnZW9tZXRyeS5maWx0ZXJTY2FsZSgpOworICAgICAgICAgICAgICAgIHBh
cmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZ
ID0gc3RhcnRZOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgam9iSGVpZ2h0ID0gKGkgPCBq
b2JzV2l0aEV4dHJhKSA/IHN0ZXBZICsgMSA6IHN0ZXBZOworICAgICAgICAgICAgICAgIHBhcmFt
cy5lbmRZID0gcGFyYW1zLnN0YXJ0WSArIGpvYkhlaWdodDsKKyAgICAgICAgICAgICAgICBzdGFy
dFkgKz0gam9iSGVpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBu
byByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgor
ICAgIGZpbGxSZWdpb24ob3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBnZW9tZXRy
eS5maWx0ZXJTY2FsZSgpLCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRmlsdGVy
SW1hZ2VTb2Z0d2FyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNWZmYzJl
OGUzYTUzNzE3MGZhMjk4YzlmNGQyYzg3YzZhNzZiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZpbHRlckltYWdl
U29mdHdhcmUuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlU29mdHdhcmUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJJbWFnZVNvZnR3YXJlOjpGaWx0ZXJJbWFnZVNvZnR3
YXJlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IGltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQorICAgIDogRmlsdGVy
SW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGZhbHNlLCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSwgaW1hZ2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIt
PnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci0+Y29sb3JTcGFjZSgpKQorICAgICwgbV9p
bWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIEZp
bHRlckltYWdlU29mdHdhcmU6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9jb2xvclNwYWNlLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9n
aWNhbFNpemUpIH07CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0UGl4
ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCksIHJlY3QpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlci5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFn
ZVNvZnR3YXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZpbHRlckltYWdlU29mdHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTYyN2U4ZWRkZWQ3ZTJl
OTU3YjE3ZTkzZGUyMGQ0MmViMTBiOTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GaWx0ZXJJbWFnZVNvZnR3YXJl
LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUg
bWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmlsdGVySW1hZ2VTb2Z0d2FyZSA6IHB1YmxpYyBGaWx0ZXJJbWFnZSB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlOworICAgIEZpbHRlckltYWdlU29mdHdh
cmUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
aW1hZ2VSZWN0LCBSZWY8SW1hZ2VCdWZmZXI+JiYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSBvdmVycmlkZSB7IHJldHVybiBtX2lt
YWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKCkgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVySW1hZ2VTb2Z0d2FyZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RmlsdGVySW1hZ2UmIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0LnJlbmRlcmluZ01vZGUoKSA9PSBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0xpZ2h0aW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdodGluZ0RhdGEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MTQ5ZDRhYmM4NTJlYjBiMTQxMzAyN2MwNGEzY2NlNDZlMjliYTBjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9MaWdo
dGluZ0RhdGEuaApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVn
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29u
c3RleHByIGludCBjUGl4ZWxTaXplID0gNDsKK3N0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNo
YW5uZWxPZmZzZXQgPSAzOworc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOworCitzdHJ1Y3QgQWxwaGFXaW5kb3cgeworICAg
IHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OworICAgIAorICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlv
bnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgorICAgIHVp
bnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9
CisgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFb
MV1bMF07IH0KKyAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVy
biBhbHBoYVsyXVswXTsgfQorCisgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAg
ICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KKyAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAg
ICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQorICAgIHVpbnQ4X3QgYm90dG9tKCkg
Y29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICB2b2lkIHNl
dFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAg
ICB2b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFs
dWU7IH0KKyAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJd
WzFdID0gdmFsdWU7IH0KKworICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAg
IHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1
ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0Qm90dG9tUmln
aHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQorCisgICAgc3RhdGlj
IHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAgICB7CisgICAgICAgIGFscGhhWzBd
ID0gYWxwaGFbMV07CisgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2hpZnQoKQorICAgIHsKKyAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOworICAg
ICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAg
ICB9Cit9OworCitzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBj
b250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAgICBDb2xvciBjb2xvcjsK
KyAgICBmbG9hdCBzdXJmYWNlU2NhbGU7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAg
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7CisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAg
ICBjb25zdCBMaWdodFNvdXJjZSogc291cmNlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKyAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZTsK
KworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAgaW50IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOworICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOworICAgIGludCBoZWln
aHREZWNyZWFzZWRCeU9uZTsKKworICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0OworICAgIAorICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNl
dCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21M
ZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJv
d05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKK307CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5n
RGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBp
bnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAg
IC0yICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAg
IC0yICogY2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9Owor
fQorCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2Vu
dGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0
ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBib3R0b21SaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLTIgKiBsZWZ0ICsg
MiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAorICAgICAgICAtbGVmdCAtIDIg
KiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQK
KyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50
ZXIgLSBib3R0b21MZWZ0ICsgYm90dG9tLAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBi
b3R0b21MZWZ0ICsgMiAqIGJvdHRvbQorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIExpZ2h0
aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBj
ZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZz
ZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSAyICogd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10
b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBib3R0b21S
aWdodCwKKyAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBib3R0b20gKyBib3R0b21S
aWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6aW50ZXJpb3JO
b3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoreworICAg
IGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQ7CisgICAgCisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ocmlnaHRBbHBoYU9mZnNldCkpOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSkpOworICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwor
CisgICAgaW50IGxlZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7CisgICAgaW50IHRvcExlZnQgPSBh
bHBoYVdpbmRvdy50b3BMZWZ0KCk7CisgICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwor
CisgICAgaW50IGJvdHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7CisgICAgaW50
IGJvdHRvbSA9IGFscGhhV2luZG93LmJvdHRvbSgpOworCisgICAgLy8gVGhlIGFscGhhV2luZG93
IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4K
KyAgICBhbHBoYVdpbmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OworICAgIGFscGhhV2luZG93
LmFscGhhWzFdWzJdID0gcmlnaHQ7CisgICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0
b21SaWdodDsKKyAgICAKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3Jr
aW5nIHdpdGggc29tZSBzcG90LWNoZWNrcy4KKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVm
dCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKKyAgICBBU1NF
UlQoYWxwaGFXaW5kb3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKKworICAgIHJl
dHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdo
dCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9w
IC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAg
fTsKK30KKworaW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAg
IGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAyICog
Y2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9w
ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBM
aWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAg
b2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3AgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAg
ICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAorICAgICAgICAt
MiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5s
aW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICog
bGVmdCArIDIgKiByaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQg
KyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUg
TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAg
IGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAg
ICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKKyAgICAgICAgLXRv
cExlZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBjZW50ZXIKKyAgICB9OworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3
YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMTc0MjhlNzY0ZGNjZmMxNTdkOTgwYTBjOTc5ZGJlZTc1ZDYx
ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlLmNwcApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkZpbHRl
ckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgU291cmNlQWxwaGE6OmFwcGx5U29mdHdhcmUoRmlsdGVySW1hZ2UmIG91
dHB1dCwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmlsdGVyR2VvbWV0
cnkmIGdlb21ldHJ5KSBjb25zdAoreworICAgIEFTU0VSVChpbnB1dHMuc2l6ZSgpID09IDEpOwor
ICAgIGF1dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBpbnB1dEltYWdl
ID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gZ2VvbWV0cnkubWFwSW1hZ2VSZWN0KGlucHV0LmltYWdlUmVj
dCgpKTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0IHsg
eyB9LCBpbnB1dEltYWdlUmVjdC5zaXplKCkgfSwgQ29sb3I6OmJsYWNrKTsKKyAgICBvdXRwdXRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgSW50UG9pbnQoKSwg
Q29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291
cmNlR3JhcGhpY1NvZnR3YXJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWQwMTUyYjEyNDUyMWY5ODMyNzU4
NTI2M2YzNzMzYmZjN2JmNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmUuY3Bw
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUdy
YXBoaWMuaCIKKworI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVySW1h
Z2VWZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6
YXBwbHlTb2Z0d2FyZShGaWx0ZXJJbWFnZSYgb3V0cHV0LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
cHV0cy5zaXplKCkgPT0gMSk7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisK
KyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5w
dXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9
IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbnB1dEltYWdlLCBGbG9hdFBvaW50KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0KaW5kZXggN2E3ZTQ3ZjMyNjdlZmM4
OTQ0NWFjZDhhM2M4NTZlZDJjMTdjOGMyNy4uYzU0MzEzNmUyMDA0ZjBkOTJlZTk1ZDgxZjMwNjAw
YjA2YjM3MjA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9y
dCAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW1wb3J0ICJTY3JvbGxBbmltYXRpb25SdWJiZXJC
YW5kLmgiCiAjaW1wb3J0ICJTY3JvbGxFeHRlbnRzLmgiCisjaW1wb3J0ICJTY3JvbGxhYmxlQXJl
YS5oIgogI2ltcG9ydCAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCiAjaW1wb3J0IDxwYWwvc3Bp
L21hYy9OU1Njcm9sbFZpZXdTUEkuaD4KICNpbXBvcnQgPHN5cy9zeXNjdGwuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggZjQ0YWUxMjlkMDczOGQzMGM3NmU3MTA4
NWIyYWVjMDVhN2I2ZjFkYS4uMGVhMTNhNTM3NzhiYTNiMWMwMGZhNzFhZjNiYTkxNzJjZDkyYTE4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTEsNiArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0MTIgKzI4LDM1NyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVk
ZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZS5oIgotI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JN
YXRyaXguaCIKICNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVE
cm9wU2hhZG93LmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKLSNpbmNsdWRlICJGRU1l
cmdlLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZS5oIgorI2luY2x1ZGUgIkZpbHRlclJlc3VsdC5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgogI2luY2x1ZGUgIlJlZmVyZW5jZWRTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi0jaWYg
VVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikK
K3sKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKG5ldyBDU1NGaWx0ZXIob3BlcmF0aW9ucykp
OworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25z
LCBjbGlwT3BlcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisjaWYgVVNF
KENPUkVfSU1BR0UpCisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgJiYgIWZpbHRlci0+c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSkKKyAgICAg
ICAgcmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYK
KyAgICAgICAgCisgICAgZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwor
ICAgIHJldHVybiBmaWx0ZXI7Cit9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK1JlZlB0cjxDU1NG
aWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmIGZ1
bmN0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTRmlsdGVyKFdURk1vdmUoZnVuY3Rpb25zKSwgcmVuZGVyaW5nTW9kZSkpOwor
fQogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitDU1NGaWx0ZXI6OkNTU0Zp
bHRlcihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQorICAgIDogRmlsdGVyKFR5
cGU6OkNTU0ZpbHRlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIpOwor
ICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMoKTsKKyAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNl
Y3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbigpOwogfQogCi1DU1NGaWx0ZXI6OkNTU0ZpbHRlcigpCi0gICAgOiBG
aWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgqdGhpcykpCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihWZWN0b3I8UmVmPEZp
bHRlckZ1bmN0aW9uPj4mJiBmdW5jdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkK
KyAgICA6IEZpbHRlcihUeXBlOjpDU1NGaWx0ZXIpCisgICAgLCBtX2Z1bmN0aW9ucyhXVEZNb3Zl
KGZ1bmN0aW9ucykpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKIHsKIH0K
IAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1
ck9wZXJhdGlvbiwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikK
K3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVy
YXRpb24uc3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3Jl
YXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjbGlwT3BlcmF0aW9uID09IEZpbHRlckdl
b21ldHJ5OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9E
VVBMSUNBVEUpOworfQogCi1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0
KCkKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uKQogewotICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdl
KCktPmNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgbnVsbEZ1bmN0aW9uKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVy
OjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZm
ZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVy
YXRpb24pCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3Qo
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVu
c3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5k
ZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOwotICAgIGlmICghZmlsdGVyRWxlbWVu
dCkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0
ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZp
bHRlciByZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRp
b24uZnJhZ21lbnQoKSk7Ci0gICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUg
cmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4K
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxo
dHRwczovL3dlYmtpdC5vcmcvYi8xMzEwODU+Ci0gICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlm
IHRoaXMgZG9lcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSByZW5kZXJl
ci5lbGVtZW50KCkpCi0gICAgICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCks
ICplbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3Vu
dCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFu
c2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQogCi0gICAgYXV0byBidWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotICAgIG1fc291cmNl
QWxwaGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkp
Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoY29u
c3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikKK3sKKyAg
ICBmbG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOworICAgIHJl
dHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGQsIHN0ZCwgZHJvcFNoYWRvd09wZXJhdGlvbi54
KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCks
IDEpOworfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxS
ZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVz
QW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwg
MS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUv
dGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGlu
Zm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1l
dGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAt
IDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsg
MC4yODQ4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAg
ICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KIAotICAg
IGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVj
dCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBp
ZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWls
ZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICB9CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlSHVlUm90YXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CiAKLSAgICAgICAg
ZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAg
ICAgaWYgKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElP
Tl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUo
KS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5l
YXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0g
ICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVm
ZmVjdCk7Ci0gICAgICAgIHJlZmVyZW5jZUVmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0K
LSAgICAKLSAgICBtX2VmZmVjdHMuYXBwZW5kVmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0
cykpOwotICAgIHJldHVybiBlZmZlY3Q7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25z
dW1lciBjb25zdW1lcikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5
RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
ID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0
aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFt
b3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJh
bnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZShudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uKTsKK30KIAotICAgIG1fZWZmZWN0cy5jbGVhcigpOwotICAgIG1fb3V0c2V0cyA9IHsgfTsK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1cmF0ZUVmZmVjdChjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sK
KyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQ
YXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTZXBp
YUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJp
eE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0
dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1s
I3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgor
CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91
bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAg
ICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJz
KSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoY29uc3Qg
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQoreworICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJl
ci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVu
dCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVy
ZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKworICAgIGlmICghZmlsdGVyRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6
Y3JlYXRlKCpmaWx0ZXJFbGVtZW50KTsKK30KKworYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRnVuY3Rp
b25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVy
YXRpb25zLCBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorewor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgp
OworICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKICAgICBm
b3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Ci0gICAgICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0
aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgp
KSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAg
ICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVm
ZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJhdGlv
bik7CisgICAgICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNv
bG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNs
YW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAg
ICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlw
L2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBm
b3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNsaXBPcGVyYXRpb24pOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBk
b3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLncz
Lm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFs
ZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwK
LSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVz
QW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0g
MC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJ
R0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVh
dGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgYXV0
byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBp
bnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFy
YW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAg
ICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAg
ICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OwotICAgICAgICAgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21w
b25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVH
cmF5U2NhbGVFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVz
ZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SFVFX1JPVEFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJ
VFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5j
dGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlv
bjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhp
cywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdChkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewot
ICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRpb24g
PSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwot
ICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3RkRGV2
aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQ
cm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworCisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0
ZVNlcGlhRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICAgICAgYXV0byYgZHJvcFNo
YWRvd09wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZSgq
dGhpcywgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5zdGREZXZpYXRpb24oKSwKLSAgICAgICAgICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9u
LngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3Io
KSwgMSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAg
ICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcihkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlcik7CisgICAgICAgICAgICBlZmZlY3QgPSBu
dWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZWZmZWN0KSB7
Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywg
ZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBh
cHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25z
LgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRl
ckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAg
ICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOwogICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0g
RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAg
ICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAgICAgICAgICAgIG1fZnVuY3Rp
b25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQorCisgICAgICAgIGlmIChlZmZlY3QpCisgICAgICAgICAgICBtX2Z1bmN0
aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgIH0KIAogICAgIC8vIElmIHdlIGRpZG4ndCBt
YWtlIGFueSBlZmZlY3RzLCB0ZWxsIG91ciBjYWxsZXIgd2UgYXJlIG5vdCB2YWxpZC4KLSAgICBp
ZiAobV9lZmZlY3RzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mdW5jdGlvbnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2VmZmVjdHMuc2hyaW5rVG9GaXQoKTsKLQot
ICAgIHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENP
UkVfSU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJl
bmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5n
cygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMu
bGFzdCgpLmdldCgpKTsKLSNlbmRpZgorICAgIG1fZnVuY3Rpb25zLnNocmlua1RvRml0KCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCkKKyNpZiBVU0UoQ09SRV9JTUFHRSkKK2Jv
b2wgQ1NTRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0CiB7Ci0gICAg
aWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhmaWx0ZXJSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChm
aWx0ZXJSZWN0ID09IHNvdXJjZUltYWdlUmVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzZXRTb3VyY2VJbWFnZVJlY3QoZmlsdGVyUmVjdCk7CisgICAgZm9yIChhdXRvJiBmdW5j
dGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlmICghZnVuY3Rpb24tPnN1cHBvcnRzQ29y
ZUltYWdlUmVuZGVyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAg
IHJldHVybiB0cnVlOwogfQotCi12b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCi17Ci0gICAgLy8g
QXQgdGhpcyBwb2ludCB0aGUgZWZmZWN0IGNoYWluIGhhcyBiZWVuIGJ1aWx0LCBhbmQgdGhlCi0g
ICAgLy8gc291cmNlIGltYWdlIHNpemVzIHNldC4gV2UganVzdCBuZWVkIHRvIGF0dGFjaCB0aGUg
Z3JhcGhpYwotICAgIC8vIGJ1ZmZlciBpZiB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBzby4KLQotICAg
IGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIElu
dFNpemUgbG9naWNhbFNpemUgeyBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpIH07Ci0gICAg
aWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0gbG9n
aWNhbFNpemUpIHsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdlKElt
YWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENv
bnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhl
bEZvcm1hdDo6QkdSQTgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250
ZXh0KTsKLSAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRT
b3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJT
Y2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KSk7CiAjZW5kaWYKLSAgICB9Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gdHJ1ZTsK
LX0KIAotdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
CitJbnRPdXRzZXRzIENTU0ZpbHRlcjo6Y2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0CiB7Ci0gICAg
YXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVj
dC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3Vi
UmVnaW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgLy8gQXQgbGVhc3Qgb25l
IEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBl
ZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7
Ci0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgp
LCBzY2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAg
IGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQot
fQorICAgIGlmICghbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgICAgIHJldHVybiB7
IH07CiAKLXZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQotewotICAg
IG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAgICBpZiAobV9zb3VyY2VBbHBoYSkK
LSAgICAgICAgbV9zb3VyY2VBbHBoYS0+Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIElu
dE91dHNldHMgb3V0c2V0czsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMp
CisgICAgICAgIG91dHNldHMgKz0gZnVuY3Rpb24tPmNhbGN1bGF0ZU91dHNldHMoKTsKKyAgICAK
KyAgICByZXR1cm4gb3V0c2V0czsKIH0KIAotdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKK0ZpbHRl
ckVmZmVjdFZlY3RvciBDU1NGaWx0ZXI6OmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBl
IHR5cGUpIGNvbnN0CiB7Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQo
KTsKLSAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikgewotICAgICAgICBtX2ZpbHRlclJlbmRlcmVy
LT5hcHBseUVmZmVjdHMoZWZmZWN0KTsKLSAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXItPmhh
c1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIGVmZmVjdHM7CisKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9u
IDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLT50eXBlKCkgPT0gdHlwZSkg
eworICAgICAgICAgICAgZWZmZWN0cy5hcHBlbmQoeyBkb3duY2FzdDxGaWx0ZXJFZmZlY3Q+KGZ1
bmN0aW9uLmdldCgpKSB9KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIGZpbHRlciA9IGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24uZ2V0KCkpOworICAg
ICAgICAgICAgZWZmZWN0cy5hcHBlbmRWZWN0b3IoZmlsdGVyLmVmZmVjdHNPZlR5cGUodHlwZSkp
OwogICAgICAgICB9CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVjdC50cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLX0K
IAotTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGly
dHlSZWN0KQotewotICAgIC8vIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGUgYXJl
YSBpbiB0aGUgImZpbHRlckJveFJlY3QiIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLCBzbyB0
aGF0IHdlIGZ1bGx5IGNvdmVyIHRoZSAiZGlydHlSZWN0Ii4KLSAgICBhdXRvIHJlY3RGb3JSZXBh
aW50ID0gZGlydHlSZWN0OwotICAgIGlmIChoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKLSAg
ICAgICAgcmVjdEZvclJlcGFpbnQgKz0gb3V0c2V0cygpOwotICAgIHJlY3RGb3JSZXBhaW50Lmlu
dGVyc2VjdChmaWx0ZXJCb3hSZWN0KTsKLSAgICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7CisgICAg
cmV0dXJuIGVmZmVjdHM7CiB9CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNv
bnN0Citib29sIENTU0ZpbHRlcjo6YXBwbHkoRmlsdGVyUmVzdWx0JiByZXN1bHQsIEZpbHRlcklt
YWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5KSBjb25zdAog
ewotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7Ci0gICAgCi0g
ICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci19Ci0KLXZv
aWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QpCi17Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0
OwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgc2V0RmlsdGVy
UmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9h
dFJlY3QmIGVmZmVjdFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMp
Ci0gICAgICAgIGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RSZWN0KTsKLX0KLQotSW50
UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKSBjb25zdAotewotICAgIGF1dG8mIGxhc3RFZmZl
Y3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhh
c1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jl
c3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKLSAgICByZXR1
cm4geyB9OworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAg
ICBpZiAoIWZ1bmN0aW9uLT5hcHBseShyZXN1bHQsIHN0YWNrLCBnZW9tZXRyeSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1JbnRPdXRz
ZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CitUZXh0U3RyZWFtJiBDU1NGaWx0ZXI6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9u
IHJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAgIGlmICghbV9oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoIW1fb3V0c2V0cy5pc1plcm8o
KSkKLSAgICAgICAgcmV0dXJuIG1fb3V0c2V0czsKKyAgICBhdXRvIGVuZCA9IG1fZnVuY3Rpb25z
LnJlbmQoKTsKKyAgICB1bnNpZ25lZCBsZXZlbCA9IDA7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBt
X2Z1bmN0aW9ucy5yYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGF1dG8gZnVu
Y3Rpb24gPSAqaXQ7CisgICAgICAgIGlmIChmdW5jdGlvbi0+dHlwZSgpID09IEZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlQWxwaGEpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdCAhPSBlbmQpOwor
ICAgICAgICAgICAgKytpdDsKKyAgICAgICAgfQorICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRT
Y29wZSBpbmRlbnRTY29wZSh0cywgbGV2ZWwrKyk7CisgICAgICAgIGZ1bmN0aW9uLT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7CisgICAgfQogCi0gICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91
dHNldHMoKTsKLSAgICByZXR1cm4gbV9vdXRzZXRzOworICAgIHJldHVybiB0czsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4
IDAwYjkxOTE3YjgwNGM5MmQ5NDA4Yjc1OGUzNzVjMjUyZjI5ZGIwYzUuLjYyMmJlMjUzYTJhOGMz
NzAwZTJkZGJkNTA5N2MzMjRmZmQ2OGM3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw4MiArMjYsNTIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSAiRmlsdGVyR2VvbWV0cnku
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXI7CiBjbGFzcyBGaWx0
ZXJPcGVyYXRpb25zOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uOwogY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFNvdXJjZUFscGhhOwot
Y2xhc3MgU291cmNlR3JhcGhpYzsKLQotZW51bSBjbGFzcyBGaWx0ZXJDb25zdW1lciB7IEZpbHRl
clByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwogCiBjbGFzcyBDU1NGaWx0ZXIgZmluYWwgOiBw
dWJsaWMgRmlsdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRmls
dGVyPiBjcmVhdGUoKTsKLQotICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOwotICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBJbWFnZUJ1
ZmZlciogb3V0cHV0KCkgY29uc3Q7CiAKLSAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZvaWQgY2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgdm9pZCBhcHBseSgpOworcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVhdGUoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24gPSBGaWx0ZXJHZW9tZXRyeTo6Q2xpcE9w
ZXJhdGlvbjo6SW50ZXJzZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPENT
U0ZpbHRlcj4gY3JlYXRlKFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiYmLCBSZW5kZXJpbmdN
b2RlKTsKIAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9p
ZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFs
IH5DU1NGaWx0ZXIoKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4mIGZ1
bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25zOyB9CiAKLSAgICBib29sIGlzQ1NT
RmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgc2V0UmVuZGVy
aW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0g
cmVuZGVyaW5nTW9kZTsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQogCi0gICAgRmxvYXRSZWN0IHNvdXJj
ZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlRHJhd2luZ1JlZ2lvbjsg
fQorICAgIEludE91dHNldHMgY2FsY3VsYXRlT3V0c2V0cygpIGNvbnN0IGZpbmFsOwogCi0gICAg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVn
aW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZp
b3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mKTsKLQotICAgIHZvaWQgc2V0TWF4
RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGlu
cHV0Q29udGV4dCgpOwotCi0gICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVjdCk7Ci0gICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworcHJpdmF0ZToKKyAgICBDU1NGaWx0ZXIoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIENTU0ZpbHRlcihWZWN0b3I8UmVmPEZpbHRlckZ1
bmN0aW9uPj4mJiwgUmVuZGVyaW5nTW9kZSk7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBj
b25zdDsKKyAgICBib29sIGJ1aWxkRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiwgRmlsdGVyR2VvbWV0cnk6OkNsaXBPcGVyYXRpb24pOwogCi0gICAgTGF5
b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CisjaWYgVVNF
KENPUkVfSU1BR0UpCisgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0
IGZpbmFsOworI2VuZGlmCiAKLSAgICBGbG9hdFJlY3QgbV9zb3VyY2VEcmF3aW5nUmVnaW9uOwot
ICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZWZm
ZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+
IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhh
OworICAgIGJvb2wgYXBwbHkoRmlsdGVyUmVzdWx0JiwgRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
LCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYpIGNvbnN0IGZpbmFsOwogCi0gICAgbXV0YWJsZSBJbnRP
dXRzZXRzIG1fb3V0c2V0czsKKyAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3QgZmluYWw7CiAKLSAgICBi
b29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKLSAgICAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXI+IG1fZmlsdGVyUmVuZGVyZXI7CisK
KyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisgICAgUmVuZGVy
aW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCBlOGMwMzgzY2U5ZTExMDRjZWQzNTE4YmM2Mjg2YjQyZmJkYzU0
MDYyLi4xYTNlYmIxZWRiNWU1NDk5MjQzOGM3NjIyZDgyNWZkMzAyNWQwMDE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTU1NjcsNyArNTU2Nyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogSW50T3V0c2V0
cyBSZW5kZXJMYXllcjo6ZmlsdGVyT3V0c2V0cygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZmlsdGVy
cykKLSAgICAgICAgcmV0dXJuIG1fZmlsdGVycy0+ZmlsdGVyKCkgPyBtX2ZpbHRlcnMtPmZpbHRl
cigpLT5vdXRzZXRzKCkgOiBJbnRPdXRzZXRzKCk7CisgICAgICAgIHJldHVybiBtX2ZpbHRlcnMt
PmZpbHRlcigpID8gbV9maWx0ZXJzLT5maWx0ZXIoKS0+Y2FsY3VsYXRlT3V0c2V0cygpIDogSW50
T3V0c2V0cygpOwogICAgIHJldHVybiByZW5kZXJlcigpLnN0eWxlKCkuZmlsdGVyT3V0c2V0cygp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGViOTY3YjUz
OWQwMmM2MGZiNDE1ZGQ4M2JmMjYzNzMzYWUxMTNjZTYuLjMwMjJhN2E3NjNiNTFkMWU3ZGFlNWRk
MjU4M2ZlZWNmMmU4Njk2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CkBAIC02Miw3ICs2Miw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgQ2xpcFJlY3RzOwogY2xhc3MgQ2xpcFJlY3Rz
Q2FjaGU7CiBjbGFzcyBFdmVudFJlZ2lvbkNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5
MGM4MThiNjFhMDVmOTViOTY0YTQuLmRlNWQxNmYyZGEwY2NkMTIwYmY3MjcxOTc2OTc0YjJjM2U1
YjRiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2luY2x1
ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgorI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMTE4LDM3ICsxMjAsNTUgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OnJl
bW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQogCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6
YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikgewotICAg
ICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmlsdGVyLT5z
ZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJp
bmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZpbHRlclNj
YWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxl
KHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0
cygpOwotICAgIH0KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCBy
ZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBGaWx0ZXJHZW9tZXRyeTo6
Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOworICAgIG1fc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsK
K30KKworR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmlucHV0Q29udGV4dCgp
Cit7CisgICAgcmV0dXJuIG1fc291cmNlSW1hZ2UgPyAmbV9zb3VyY2VJbWFnZS0+Y29udGV4dCgp
IDogbnVsbHB0cjsKK30KIAotICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJl
bW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0gICAgLy8g
Z28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2
ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGly
ZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgot
ICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRl
cigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2ZpbHRlciA9
IG51bGxwdHI7Cit2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCgpCit7CisgICAgaWYgKG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEludFNpemUgc2l6ZSB7IG1fc291cmNlSW1hZ2VSZWN0LnNpemUo
KSAqIG1fc2NhbGVGYWN0b3IgfTsKKyAgICBhdXRvIGhvc3RXaW5kb3cgPSBtX2xheWVyLnJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnJvb3QoKSA/IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkucm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworCisgICAgbV9z
b3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgbV9maWx0ZXItPnJlbmRlcmlu
Z01vZGUoKSwgU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vLCBSZW5kZXJpbmdQdXJwb3NlOjpET00s
IDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgsIGhv
c3RXaW5kb3cpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBpbWFnZUNvbnRleHQgPSBtX3NvdXJj
ZUltYWdlLT5jb250ZXh0KCk7CisgICAgaW1hZ2VDb250ZXh0LnNjYWxlKG1fc2NhbGVGYWN0b3Ip
OworICAgIAorICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
clJlcGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2lu
RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5
ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKLSAgICBhdXRvIGZpbHRlclNv
dXJjZVJlY3QgPSBmaWx0ZXIuY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChmaWx0
ZXJCb3hSZWN0LCBkaXJ0eVJlY3QpOworICAgIAorICAgIGF1dG8gZmlsdGVyU291cmNlUmVjdCA9
IGRpcnR5UmVjdDsKKyAgICBpZiAoZmlsdGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQor
ICAgICAgICBmaWx0ZXJTb3VyY2VSZWN0ICs9IGZpbHRlci5jYWxjdWxhdGVPdXRzZXRzKCk7Cisg
ICAgZmlsdGVyU291cmNlUmVjdC5pbnRlcnNlY3QoZmlsdGVyQm94UmVjdCk7CisKICAgICBpZiAo
ZmlsdGVyU291cmNlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYm9vbCBoYXNVcGRhdGVkQmFja2luZ1N0b3JlID0gZmlsdGVyLnVwZGF0ZUJhY2tpbmdTdG9y
ZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7CisgICAgCisgICAgaWYgKGZpbHRlclNvdXJjZVJlY3Qg
IT0gbV9zb3VyY2VJbWFnZVJlY3QpIHsKKyAgICAgICAgbV9zb3VyY2VJbWFnZVJlY3QgPSBmaWx0
ZXJTb3VyY2VSZWN0OworICAgICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsK
KyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkp
CiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgZWxzZSB7Ci0gICAgICAg
IGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlKQorICAgICAgICBpZiAoIW1fZ3JhcGhpY3NCdWZm
ZXJBdHRhY2hlZCkKICAgICAgICAgICAgIG1fcmVwYWludFJlY3QgPSBmaWx0ZXJTb3VyY2VSZWN0
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7
CkBAIC0xNTksMTEgKzE3OSw5IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJz
OjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0CiAgICAgbV9wYWlu
dE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3QubG9jYXRpb24oKTsKICAgICByZXNldERpcnR5U291
cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOwotCi0gICAgZmlsdGVyLmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoZGVzdGluYXRp
b25Db250ZXh0KTsKLSAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQgPSBmaWx0ZXIuaW5w
dXRDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQgfHwgZmlsdGVyLmZp
bHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
ZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUoKSkpCisgICAgYWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCgpOworICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNzQ29udGV4dCA9IGlucHV0Q29udGV4
dCgpOworICAgIGlmICghc291cmNlR3JhcGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBjb250ZW50
cyBvZiB0aGUgbGF5ZXIgaXMgY2FwdHVyZWQgaW4gdGhlIG9mZnNjcmVlbiBtZW1vcnkgYnVmZmVy
LgpAQCAtMTc3LDIzICsxOTUsMTkgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRl
cnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKIAogdm9pZCBS
ZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXRpb25Db250ZXh0KQogewotICAgIEFTU0VSVChtX2ZpbHRlci0+aW5wdXRDb250ZXh0KCkp
OworICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJcblJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRoaXMgPDwgIiBhcHBs
eUZpbHRlckVmZmVjdCIpOwogCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGZp
bHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwotCi0gICAgZmlsdGVyLmFwcGx5KCk7Cisg
ICAgaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAotICAgIC8vIEdldCB0aGUgZmlsdGVyZWQg
b3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBm
aWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCks
IG1fcGFpbnRPZmZzZXQueSgpKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoMSAvIG1f
c2NhbGVGYWN0b3IpOwogCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRw
dXQoKSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0
QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgRmlsdGVyR2VvbWV0cnkg
Z2VvbWV0cnkobV9zb3VyY2VJbWFnZVJlY3QsIG1fc2NhbGVGYWN0b3IsIEZpbHRlckdlb21ldHJ5
OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdGaWx0
ZXJJbWFnZUJ1ZmZlcihtX3NvdXJjZUltYWdlLmdldCgpLCBtX3NvdXJjZUltYWdlUmVjdCwgZmls
dGVyLCBnZW9tZXRyeSk7CiAKLSAgICBmaWx0ZXIuY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7
CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKG1fc2NhbGVGYWN0b3IpOwogCiAgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJGaWx0ZXJzICIgPDwg
dGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMx
OTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjkyZWYyZmY5ZDg3NjI2NjQ4MWNkYzcwOGQzOTExNDBm
YzMwYmJhNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmgKQEAgLTM3LDggKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENh
Y2hlZFNWR0RvY3VtZW50OworY2xhc3MgQ1NTRmlsdGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNz
IEZpbHRlck9wZXJhdGlvbnM7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgUmVuZGVyTGF5
ZXJGaWx0ZXJzIGZpbmFsIDogcHJpdmF0ZSBDYWNoZWRTVkdEb2N1bWVudENsaWVudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02OSwxNCArNzEsMjAgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0
d29ya0xvYWRNZXRyaWNzJikgZmluYWw7CiAgICAgdm9pZCByZXNldERpcnR5U291cmNlUmVjdCgp
IHsgbV9kaXJ0eVNvdXJjZVJlY3QgPSBMYXlvdXRSZWN0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRl
eHQqIGlucHV0Q29udGV4dCgpOworICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRl
ZCgpOwogCiAgICAgUmVuZGVyTGF5ZXImIG1fbGF5ZXI7CiAKICAgICBWZWN0b3I8UmVmUHRyPEVs
ZW1lbnQ+PiBtX2ludGVybmFsU1ZHUmVmZXJlbmNlczsKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+PiBtX2V4dGVybmFsU1ZHUmVmZXJlbmNlczsKIAor
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9z
b3VyY2VJbWFnZVJlY3Q7CiAgICAgUmVmUHRyPENTU0ZpbHRlcj4gbV9maWx0ZXI7CisgICAgZmxv
YXQgbV9zY2FsZUZhY3RvciB7IDEgfTsKICAgICBMYXlvdXRSZWN0IG1fZGlydHlTb3VyY2VSZWN0
OworICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICAKICAg
ICAvLyBEYXRhIHVzZWQgcGVyIHBhaW50CiAgICAgTGF5b3V0UG9pbnQgbV9wYWludE9mZnNldDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyLmNwcAppbmRleCA1MDc4ZjljYWVmYjUwNmY5MjIzN2YyY2U3YWI2ZjZlNTky
MDg2N2IxLi5jMjlmMjE0MGRhNWQwMmM3ODQ5ZmZjN2E3ZDFmNmFkZGU5ZmQwOWMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAog
ICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJl
bmRlcmVyKTsKICAgICBpZiAoIWNsaXBwZXJEYXRhLmlzVmFsaWRGb3JHZW9tZXRyeShvYmplY3RC
b3VuZGluZ0JveCwgY2xpcHBlZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtKSkgewog
ICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBi
ZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250
ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgYXV0byBtYXNrSW1h
Z2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjbGlwcGVkQ29udGVu
dEJvdW5kcywgYWJzb2x1dGVUcmFuc2Zvcm0sIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CisgICAgICAgIGF1dG8g
bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY2xpcHBl
ZENvbnRlbnRCb3VuZHMsIGFic29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghbWFz
a0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4
IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjc1ZDEzNDU3MWIyMmY3
MjZhODkzNzEwNmJiMDcwNTY4NDcwMjhmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC00LDYgKzQs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNyw3IEBACiAKICNpbmNs
dWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgor
I2luY2x1ZGUgIkZpbHRlckdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zNyw2ICsz
OSw4IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgi
CisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgog
I2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1
ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtODIs
NDcgKzg2LDExIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUNsaWVudEZy
b21DYWNoZShSZW5kZXJFbGVtZW50JiBjbGllbnQsIGJvb2wKICAgICBtYXJrQ2xpZW50Rm9ySW52
YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlk
YXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNW
R0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMo
U1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1h
eENvdW50Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBpZiAoZmlsdGVyRWxlbWVudCgpLmNvdW50Q2hp
bGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci50YXJnZXRCb3VuZGlu
Z0JveCgpOwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKLSAgICBhdXRvIGJ1
aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZShmaWx0ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50
KCkucHJpbWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVpbGRlci0+c2V0VGFyZ2V0Qm91bmRpbmdCb3go
dGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIAotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxk
cmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxl
bWVudCgpKSkgewotICAgICAgICBhdXRvIGVmZmVjdCA9IGVsZW1lbnQuYnVpbGQoYnVpbGRlci5n
ZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIGJ1aWxk
ZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dC5jb3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7Ci0gICAgICAgIGVsZW1lbnQuc2V0U3Rh
bmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0
Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmlt
aXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAgICBpZiAoZWxlbWVudC5y
ZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQu
cmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMo
KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UK
LSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5h
ZGQoZWxlbWVudC5yZXN1bHQoKSwgV1RGTW92ZShlZmZlY3QpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGJ1aWxkZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3Vy
Y2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3Vy
Y2VNb2RlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291
cmNlTW9kZSwgIXJlc291cmNlTW9kZSk7CiAKLSAgICBMT0coRmlsdGVycywgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyICVwIGFwcGx5UmVzb3VyY2UgcmVuZGVyZXIgJXAiLCB0aGlzLCAmcmVuZGVy
ZXIpOwotCiAgICAgaWYgKG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJl
cikpIHsKICAgICAgICAgRmlsdGVyRGF0YSogZmlsdGVyRGF0YSA9IG1fcmVuZGVyZXJGaWx0ZXJE
YXRhTWFwLmdldCgmcmVuZGVyZXIpOwogICAgICAgICBpZiAoZmlsdGVyRGF0YS0+c3RhdGUgPT0g
RmlsdGVyRGF0YTo6UGFpbnRpbmdTb3VyY2UgfHwgZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVy
RGF0YTo6QXBwbHlpbmcpCkBAIC0xMzAsMTAxICs5OCw1NSBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFscmVhZHkgYnVpbHQsIG9yIHdlJ3JlIGlu
IGEgY3ljbGUsIG9yIHdlJ3JlIG1hcmtlZCBmb3IgcmVtb3ZhbC4gUmVnYXJkbGVzcywganVzdCBk
byBub3RoaW5nIG1vcmUgbm93LgogICAgIH0KIAorICAgIC8vIEJ1aWxkIHRoZSBTVkdGaWx0ZXIK
ICAgICBhdXRvIGZpbHRlckRhdGEgPSBtYWtlVW5pcXVlPEZpbHRlckRhdGE+KCk7Ci0gICAgRmxv
YXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsK
LQotICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZl
UmVjdGFuZ2xlPFNWR0ZpbHRlckVsZW1lbnQ+KCZmaWx0ZXJFbGVtZW50KCksIGZpbHRlckVsZW1l
bnQoKS5maWx0ZXJVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgaWYgKGZpbHRlckRh
dGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgpKQorICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0Zp
bHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSk7CisgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdXRvIHRhcmdldEJvdW5kaW5n
Qm94ID0gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBmaWx0ZXJEYXRhLT5ib3Vu
ZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJFbGVt
ZW50PigmZmlsdGVyRWxlbWVudCgpLCBmaWx0ZXJFbGVtZW50KCkuZmlsdGVyVW5pdHMoKSwgdGFy
Z2V0Qm91bmRpbmdCb3gpOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFu
c2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0
ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7Ci0gICAgaWYgKCFhYnNvbHV0ZVRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRWxp
bWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJl
IGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KLSAgICBm
aWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShh
YnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFuc2Zvcm0ueVNjYWxl
KCksIDAsIDApOwotCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIGJvdW5kYXJpZXMgb2YgdGhl
IGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgorICAgIC8vIENhbGN1bGF0ZSB0aGUgc291
cmNlSW1hZ2VSZWN0CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0
cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNl
Y3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2lu
Z1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qo
ZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRl
ciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVt
ZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVh
dGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2lu
Z1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1p
dGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAgICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRl
ciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMo
KmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBm
aWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJl
IGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVj
dCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0g
ICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwg
c2NhbGUpOwotICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKIAotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgotICAg
IGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKLSAgICBG
aWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0
KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRvdGFsTnVtYmVyT2ZFZmZl
Y3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisgICAgLy8gQ2FsY3VsYXRlIHRo
ZSBhYnNvbHV0ZVRyYW5zZm9ybQorICAgIGF1dG8gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0
ZVN5c3RlbShyZW5kZXJlcik7CisgICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2VcbiIg
PDwgKmZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKSk7Ci0KLSAgICBsYXN0RWZmZWN0
LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3Vi
UmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwotICAgIC8vIEF0IGxlYXN0IG9u
ZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAotICAgIC8vIHJlY2FsY3Vs
YXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewot
ICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwot
ICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBpcyBlbXB0eSwgd2UgaGF2ZSBz
b21ldGhpbmcgbGlrZSA8ZyBmaWx0ZXI9Ii4uIi8+LgotICAgIC8vIEV2ZW4gaWYgdGhlIHRhcmdl
dCBvYmplY3RCb3VuZGluZ0JveCgpIGlzIGVtcHR5LCB3ZSBzdGlsbCBoYXZlIHRvIGRyYXcgdGhl
IGxhc3QgZWZmZWN0IHJlc3VsdCBpbWFnZSBpbiBwb3N0QXBwbHlSZXNvdXJjZS4KLSAgICBpZiAo
ZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKCFt
X3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKLSAgICAgICAgZmls
dGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKLSAgICAgICAgbV9yZW5kZXJlckZpbHRl
ckRhdGFNYXAuc2V0KCZyZW5kZXJlciwgV1RGTW92ZShmaWx0ZXJEYXRhKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0
ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQg
dGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KKyAgICBhdXRvIGFic29sdXRlU2NhbGUgPSBGbG9hdFNp
emUoYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgp
KTsKKyAgICBmaWx0ZXJEYXRhLT5zY2FsZSA9IEZpbHRlckdlb21ldHJ5OjpjYWxjdWxhdGVGaWx0
ZXJTY2FsZShmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBhYnNvbHV0ZVNjYWxlKTsKIAotICAg
IC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBm
aWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4K
LSAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKKyAgICBhdXRvIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNm
b3JtKGZpbHRlckRhdGEtPnNjYWxlLndpZHRoKCksIDAsIDAsIGZpbHRlckRhdGEtPnNjYWxlLmhl
aWdodCgpLCAwLCAwKTsKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRp
bmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5B
VElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKTsKICNlbHNlCiAgICAgYXV0byBjb2xvclNw
YWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAjZW5kaWYKLSAgICBhdXRvIHNv
dXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIGNvbnRleHQpOworCisgICAgYXV0byBob3N0V2luZG93ID0gcmVuZGVyZXIu
dmlldygpLmZyYW1lVmlldygpLnJvb3QoKSA/IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5y
b290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisKKyAgICBhdXRvIHNvdXJjZUdyYXBoaWMg
PSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3
aW5nUmVnaW9uLCBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgaG9zdFdpbmRvdyk7CiAgICAgaWYgKCFzb3VyY2VHcmFw
aGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMo
JnJlbmRlcmVyKSk7CiAgICAgICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7
CiAgICAgICAgIG1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLnNldCgmcmVuZGVyZXIsIFdURk1vdmUo
ZmlsdGVyRGF0YSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIC8v
IFNldCB0aGUgcmVuZGVyaW5nIG1vZGUgZnJvbSB0aGUgcGFnZSdzIHNldHRpbmdzLgotICAgIGZp
bHRlckRhdGEtPmZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKIAorICAg
IC8vIFNldCB0aGUgd29ya2luZyBHcmFwaGljQ29udGV4dCB0byB0aGUgZmlsdGVyIHNvdXJjZUdy
YXBoaWMKICAgICBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUdyYXBoaWNDb250ZXh0ID0gc291cmNl
R3JhcGhpYy0+Y29udGV4dCgpOwotICAKKwogICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNC
dWZmZXIgPSBXVEZNb3ZlKHNvdXJjZUdyYXBoaWMpOwogICAgIGZpbHRlckRhdGEtPnNhdmVkQ29u
dGV4dCA9IGNvbnRleHQ7CiAKICAgICBjb250ZXh0ID0gJnNvdXJjZUdyYXBoaWNDb250ZXh0Owog
Ci0gICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIp
KTsKICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5zZXQoJnJlbmRlcmVyLCBXVEZNb3ZlKGZp
bHRlckRhdGEpKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjksMzggKzE5MSwyMiBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBG
aWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3Qo
KTsKLQotICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0
eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4g
SXQganVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCi0gICAgICAgIC8vIGluaXRpYWwgZmls
dGVyaW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24g
YQotICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4KLSAgICAgICAgaWYgKGZpbHRlckRhdGEuc3Rh
dGUgIT0gRmlsdGVyRGF0YTo6QnVpbHQpCi0gICAgICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+
c2V0U291cmNlSW1hZ2UoV1RGTW92ZShmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIpKTsK
LQotICAgICAgICAvLyBBbHdheXMgdHJ1ZSBpZiBmaWx0ZXJEYXRhIGlzIGp1c3QgYnVpbHQgKGZp
bHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkJ1aWx0KS4KLSAgICAgICAgaWYgKCFsYXN0
RWZmZWN0LT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZp
bHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKLSAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAg
ICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWZpbHRlckRhdGEuYm91
bmRhcmllcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRh
dGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZl
Y3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAg
ICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgICAg
IGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5zY2FsZS53aWR0aCgpLCAx
IC8gZmlsdGVyRGF0YS5zY2FsZS5oZWlnaHQoKSkpOwogCi0gICAgICAgICAgICBjb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCku
d2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0
KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2Us
IGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+
c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7CisgICAgICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiB0YXJnZXRCb3VuZGluZ1NpemU7CisgICAgICAgIGlmIChm
aWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgICAgICAgICB0YXJnZXRCb3VuZGluZ1NpemUg
PSByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLnNpemUoKTsKIAotICAgICAgICAgICAgY29u
dGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51
bGxwdHI7CisgICAgICAgIGF1dG8gZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzID0gU1ZHRmlsdGVy
QnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RCb3VuZGFyeVNldHMoZmlsdGVyRWxlbWVudCgpLCBy
ZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgRmlsdGVyR2VvbWV0cnkgZ2Vv
bWV0cnkoZmlsdGVyRGF0YS5ib3VuZGFyaWVzLCBmaWx0ZXJEYXRhLnNjYWxlLCB0YXJnZXRCb3Vu
ZGluZ1NpemUsIFdURk1vdmUoZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzKSk7CisKKyAgICAgICAg
Y29udGV4dC0+ZHJhd0ZpbHRlckltYWdlQnVmZmVyKGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1
ZmZlci5nZXQoKSwgZmlsdGVyRGF0YS5kcmF3aW5nUmVnaW9uLCAqZmlsdGVyRGF0YS5maWx0ZXIs
IGdlb21ldHJ5KTsKIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RBcHBseVJlc291cmNlIGRv
bmVcbiIpOworICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKKyAgICB9
CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKQEAgLTMwOCwyNyArMjE0LDEzIEBAIEZs
b2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChjb25z
dCBSZW5kZXJPYmplY3QmIG9iamVjCiAgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyRWxlbWVudD4oJmZpbHRlckVsZW1lbnQoKSwgZmlsdGVyRWxl
bWVudCgpLmZpbHRlclVuaXRzKCksIG9iamVjdC5vYmplY3RCb3VuZGluZ0JveCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5k
ZXJPYmplY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKLSAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMqIHByaW1pdHZlID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKj4ob2JqZWN0LT5ub2RlKCkpOwotCi0gICAgTE9HKEZp
bHRlcnMsICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAlcCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFu
Z2VkIHJlbmRlcmVyICVwIiwgdGhpcywgb2JqZWN0KTsKLQogICAgIGZvciAoY29uc3QgYXV0byYg
b2JqZWN0RmlsdGVyRGF0YVBhaXIgOiBtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcCkgewogICAgICAg
ICBjb25zdCBhdXRvJiBmaWx0ZXJEYXRhID0gb2JqZWN0RmlsdGVyRGF0YVBhaXIudmFsdWU7CiAg
ICAgICAgIGlmIChmaWx0ZXJEYXRhLT5zdGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIqIGJ1aWxkZXIgPSBm
aWx0ZXJEYXRhLT5idWlsZGVyLmdldCgpOwotICAgICAgICBGaWx0ZXJFZmZlY3QqIGVmZmVjdCA9
IGJ1aWxkZXItPmVmZmVjdEJ5UmVuZGVyZXIob2JqZWN0KTsKLSAgICAgICAgaWYgKCFlZmZlY3Qp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gU2luY2UgYWxsIGVmZmVjdHMgc2hh
cmVzIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgYWxsCi0gICAgICAgIC8vIG9yIG5vbmUgb2Yg
dGhlbSB3aWxsIGJlIGNoYW5nZWQuCi0gICAgICAgIGlmICghcHJpbWl0dmUtPnNldEZpbHRlckVm
ZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3QpOwotCiAgICAgICAg
IC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgIG1hcmtDbGllbnRG
b3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVwYWludEludmFsaWRh
dGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDhjZTBjN2FiYzE0M2JkYjY1Mzg1MGM5M2Uz
MjkyYWM5ZGE0OWJiYzcuLjhjMGYwZmMxMzYyZjlmMGUwNDQ2Mjg1YmU5OTc2ZDIzMTFiNDNhNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgKQEAgLTIzLDEwICsyMyw5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsMTEg
KzQyLDkgQEAgcHVibGljOgogCiAgICAgRmlsdGVyRGF0YSgpID0gZGVmYXVsdDsKIAotICAgIFJl
ZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVp
bGRlcj4gYnVpbGRlcjsKKyAgICBSZWZQdHI8RmlsdGVyPiBmaWx0ZXI7CiAgICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4dCogc2F2
ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwotICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKICAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFNpemUgc2NhbGU7CkBAIC03Miw4ICs2OSw2IEBAIHB1
YmxpYzoKIAogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9i
amVjdCYpIG92ZXJyaWRlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+
IGJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImKSBjb25zdDsKLQogICAgIGlubGluZSBTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIGZpbHRlclVuaXRzKCkgY29uc3Q7CiAgICAgaW5saW5lIFNWR1Vu
aXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyUHJpbWl0aXZlLmNwcAppbmRleCBhZGQ3MWE2NjM3YWIyNDVhOWNjNDQyYWUwYmYz
Yzk4NzBlNGM5MWJjLi5lNDI3NzQyZjUxZjkyM2JkMGM3Y2RkOTkzYzc0YTZhNTljNWNkODQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmNwcApAQCAtNTUsMjIgKzU1LDE4IEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zCiB7CiAgICAgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpz
dHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKLSAgICBhdXRvKiBmaWx0ZXIgPSBwYXJl
bnQoKTsKLSAgICBpZiAoIWZpbHRlcikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKGRpZmYg
PT0gU3R5bGVEaWZmZXJlbmNlOjpFcXVhbCB8fCAhb2xkU3R5bGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUo
KTsKICAgICBpZiAoaXM8U1ZHRkVGbG9vZEVsZW1lbnQ+KGZpbHRlclByaW1pdGl2ZUVsZW1lbnQo
KSkpIHsKICAgICAgICAgaWYgKG5ld1N0eWxlLmZsb29kQ29sb3IoKSAhPSBvbGRTdHlsZS0+c3Zn
U3R5bGUoKS5mbG9vZENvbG9yKCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCh0aGlzLCBTVkdO
YW1lczo6Zmxvb2RfY29sb3JBdHRyKTsKKyAgICAgICAgICAgIGZpbHRlclByaW1pdGl2ZUVsZW1l
bnQoKS5wcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFNWR05hbWVzOjpmbG9vZF9jb2xvckF0dHIp
OwogICAgICAgICBpZiAobmV3U3R5bGUuZmxvb2RPcGFjaXR5KCkgIT0gb2xkU3R5bGUtPnN2Z1N0
eWxlKCkuZmxvb2RPcGFjaXR5KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcj4oKmZpbHRlcikucHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCh0aGlzLCBTVkdO
YW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpOworICAgICAgICAgICAgZmlsdGVyUHJpbWl0aXZlRWxl
bWVudCgpLnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoU1ZHTmFtZXM6OmZsb29kX29wYWNpdHlB
dHRyKTsKICAgICB9IGVsc2UgaWYgKGlzPFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudD4oZmls
dGVyUHJpbWl0aXZlRWxlbWVudCgpKSB8fCBpczxTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
PihmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkpKSB7CiAgICAgICAgIGlmIChuZXdTdHlsZS5saWdo
dGluZ0NvbG9yKCkgIT0gb2xkU3R5bGUtPnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKQotICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI+KCpmaWx0ZXIpLnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQodGhpcywgU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cik7
CisgICAgICAgICAgICBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KCkucHJpbWl0aXZlQXR0cmlidXRl
Q2hhbmdlZChTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5jcHAKaW5kZXggYjIzODc4NjJkZGYyMjIxNzFlNGE1ZDljMmRmNTVmNmM5ODM5YmI2Mi4u
NmE1M2FmYTFlYmQxNGY3MDMxMzk2NzU4MDRmZjdiMjg1YzdlNTJiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlS
ZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICNlbmRpZgogCiAg
ICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRl
eHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBtYXNrQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0
ZVRyYW5zZm9ybSwgbWFza0NvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYzY1MDIxYmVlMDM1NTY1YWFiMzFjNjdmYjkzMTlmODhl
NjE4MDdjNy4uNjllN2E1Y2UwNjk5Y2JhNmFmNWZjOGViZjM3MmYyYzAyOTM1YWU5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgog
CiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC01Miw2ICs1Myw3IEBACiAjaW5jbHVk
ZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5o
IgogI2luY2x1ZGUgIlNWR0VsbGlwc2VFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgi
CiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveElubGluZXMuaCIKICNpbmNsdWRlICJTVkdMaW5l
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCkBAIC00MzEsMTMgKzQzMyw5
IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0
cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLnByaW1pdGl2ZVVuaXRzKCkpOwogICAgICAgICB0
cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGlj
aCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7
Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFu
c2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAg
IGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdl
dCgpKSkgeworICAgICAgICBpZiAoUmVmUHRyPEZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0
ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpKSkgewogICAgICAgICAgICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotCi0gICAgICAgICAgICBpZiAoRmls
dGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQotICAgICAgICAg
ICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOworICAgICAgICAg
ICAgZHVtbXlGaWx0ZXItPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVzb3VyY2VU
eXBlKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIGNsaXBwZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXImPihyZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyMGI4YjVl
N2IwN2IzMWExMmM1YWFjYmEzODU4OTJmYmYzYTIzNTczLi4xNjM3MDJhYWIwYzQxNTk1ZTRiMzdh
YTYyZWEzZDVmYmVjYmNmOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTIyOCw3ICsyMjgsNyBAQCBBZmZpbmVU
cmFuc2Zvcm0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091
dGVybW9zdENvb3JkaW5hdAogICAgIHJldHVybiBhYnNvbHV0ZVRyYW5zZm9ybTsKIH0KIAotUmVm
UHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
CitSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBh
YnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cpCiB7CiAgICAgSW50UmVjdCBwYWludFJlY3QgPSBjYWxjdWxhdGVJbWFnZUJ1ZmZlclJlY3Qo
dGFyZ2V0UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgIC8vIERvbid0IGNyZWF0ZSBlbXB0
eSBJbWFnZUJ1ZmZlcnMuCkBAIC0yMzgsMTIgKzIzOCw3IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0
YXJnCiAgICAgRmxvYXRTaXplIHNjYWxlOwogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShwYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7CiAKLSNpZiBV
U0UoRElSRUNUMkQpCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQsIDEsIGNvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVy
aW5nTW9kZSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSNlbmRpZgorICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5k
ZXJpbmdNb2RlLCBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm8sIFJlbmRlcmluZ1B1cnBvc2U6OkRP
TSwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBob3N0V2luZG93KTsKICAgICBp
ZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAppbmRleCA1OTY1
OTdiZTEyNDdhOTZhNjA0YWNjZjQ1N2UwOTI5ZmQwZjUwYTBlLi5jMzlmYjEwMmViZDFmNjljODFi
NDI3ZTc4MTNmM2E4ZDg0YjM5YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlckVsZW1lbnQmLCBQYWludElu
Zm8mLCBOZWVkc0dyYXBoaWNzQ29udGV4dFNhdmUgPSBEb250U2F2ZUdyYXBoaWNzQ29udGV4dCk7
CiAgICAgYm9vbCBpc1JlbmRlcmluZ1ByZXBhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJp
bmdGbGFncyAmIFJlbmRlcmluZ1ByZXBhcmVkOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxs
cHRyKTsKKyAgICBzdGF0aWMgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGNsYW1wZWRSZWN0LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CiAKICAgICBz
dGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRl
ckVsZW1lbnQmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJkNmQw
NjQzMWY2ODYuLjJlZjA3ZTRkOGRhMWZiZDc4ODEzZGJmMTFlNTc5MTMwOTcyM2RiZjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtNzMsMTYgKzczLDYgQEAg
dm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbVN0cmkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRUJs
ZW5kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCogZWZmZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAgICBGRUJsZW5kKiBibGVuZCA9
IHN0YXRpY19jYXN0PEZFQmxlbmQqPihlZmZlY3QpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6bW9kZUF0dHIpCi0gICAgICAgIHJldHVybiBibGVuZC0+c2V0QmxlbmRNb2RlKG1vZGUo
KSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjptb2Rl
QXR0cikgewpAQCAtMTAwLDIwICs5MCwyNyBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3ZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAg
YXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBG
RUJsZW5kJiBibGVuZCA9IGRvd25jYXN0PEZFQmxlbmQ+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjptb2RlQXR0cikKKyAgICAgICAgYmxlbmQuc2V0QmxlbmRNb2RlKG1v
ZGUoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
U1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7Cisg
ICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBhdXRvIGlu
cHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOwogCiAgICAgaWYgKCFpbnB1dDEgfHwg
IWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZF
QmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIG1vZGUoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5y
ZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAg
IGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAg
IHNldEZpbHRlckVmZmVjdChGRUJsZW5kOjpjcmVhdGUobW9kZSgpKSk7CisKKyAgICByZXR1cm4g
eyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJlbGVh
c2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLjY1MDg4
MWZlMjI2ZTVkYWZiNTgzN2U5MWM0MjBjNTcxNDI1NWMyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw4ICs2OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUp
IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJF
ZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCAwNTI0ODU3OGMy
NzRjOGZhMmIzZTFmMjQ0ZTQzNjc4NjhmNDJiYTljLi42OTM0YzhlMmZjNTU5MDY0NmVmMjY0ZDk5
NzdhN2NlMmVjMTdlODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHAKQEAgLTcxLDE4ICs3MSw2IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnNldEZp
bHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVDb2xvck1hdHJpeCogY29sb3JNYXRyaXggPSBzdGF0
aWNfY2FzdDxGRUNvbG9yTWF0cml4Kj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnR5cGVBdHRyKQotICAgICAgICByZXR1cm4gY29sb3JNYXRyaXgtPnNldFR5cGUodHlw
ZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpCi0gICAgICAg
IHJldHVybiBjb2xvck1hdHJpeC0+c2V0VmFsdWVzKHZhbHVlcygpKTsKLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB7CkBAIC0xMDAsNTAgKzg4LDYzIEBAIHZvaWQg
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRUNvbG9yTWF0cml4
RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVmZmVj
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQotICAgIGlmICghaW5wdXQxKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiBjb2xvck1hdHJpeCA9IGRvd25jYXN0
PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0
eXBlQXR0cikgeworICAgICAgICBjb2xvck1hdHJpeC5zZXRDb2xvck1hdHJpeFR5cGUodHlwZSgp
KTsKKyAgICAgICAgY29sb3JNYXRyaXguc2V0VmFsdWVzKGZpbHRlclZhbHVlcygpKTsKKyAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQorICAgICAgICBjb2xv
ck1hdHJpeC5zZXRWYWx1ZXMoZmlsdGVyVmFsdWVzKCkpOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IGZpbHRlclZhbHVlczsK
LSAgICBDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZSA9IHR5cGUoKTsKK1ZlY3RvcjxmbG9hdD4g
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmZpbHRlclZhbHVlcygpIGNvbnN0Cit7CisgICAgVmVj
dG9yPGZsb2F0PiBmaWx0ZXJWYWx1ZXMgPSB2YWx1ZXMoKTsKKyAgICB1bnNpZ25lZCBzaXplID0g
dmFsdWVzKCkuc2l6ZSgpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF0cml4VmFs
dWVDb3VudCA9IDIwOwogCiAgICAgLy8gVXNlIGRlZmF1bHRzIGlmIHZhbHVlcyBpcyBlbXB0eSAo
U1ZHIDEuMSAxNS4xMCkuCi0gICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0
dHIpKSB7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewotICAgICAgICBjYXNlIEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF0cml4VmFsdWVDb3VudCA9IDIwOwotICAgICAgICAgICAgZmlsdGVyVmFsdWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobWF0cml4VmFsdWVDb3VudCk7CisgICAgc3dpdGNoICh0eXBl
KCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CisgICAgICAgIGlmICgh
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNBdHRyKSB8fCBzaXplICE9IG1hdHJpeFZhbHVl
Q291bnQpIHsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlcy5jbGVhcigpOwogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRyaXhWYWx1ZUNvdW50OyBpKyspCi0gICAgICAgICAg
ICAgICAgZmlsdGVyVmFsdWVzLnVuY2hlY2tlZEFwcGVuZCgoaSAlIDYpID8gMCA6IDEpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVzLmFwcGVuZCgoaSAl
IDYpID8gMCA6IDEpOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X0hVRVJPVEFURToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9IVUVST1RBVEU6CisgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp2YWx1ZXNB
dHRyKSB8fCBzaXplICE9IDEpCiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZXMgPSB7IDAgfTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RToKKyAgICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZhbHVlc0F0dHIpIHx8IHNp
emUgIT0gMSkKICAgICAgICAgICAgIGZpbHRlclZhbHVlcyA9IHsgMSB9OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSB2YWx1ZXMoKS5zaXplKCk7Ci0K
LSAgICAgICAgaWYgKChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVggJiYg
c2l6ZSAhPSAyMCkKLSAgICAgICAgICAgIHx8IChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhf
VFlQRV9IVUVST1RBVEUgJiYgc2l6ZSAhPSAxKQotICAgICAgICAgICAgfHwgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFICYmIHNpemUgIT0gMSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIGZpbHRlclZhbHVlcyA9IHZhbHVl
cygpOwotICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIGZpbHRlclR5cGUsIFdURk1vdmUoZmls
dGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0g
ICAgcmV0dXJuIGVmZmVjdDsKKyAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBy
ZXR1cm4gZmlsdGVyVmFsdWVzOworfQorCisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVj
dD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gaW5wdXQxID0gYnVp
bGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CisgICAgaWYgKCFpbnB1dDEpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJF
ZmZlY3QoRkVDb2xvck1hdHJpeDo6Y3JlYXRlKHR5cGUoKSwgZmlsdGVyVmFsdWVzKCkpKTsKKwor
ICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0g
fTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5OGIxMmU3N2JlMjA2
YjljNWM0MTAyM2ZkLi5mOGRlYTUyMWI5MWEzNTcwOTVjMTFiNTgzYTYzYjc0MDA4MmUyMzkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaApAQCAtODUs
OCArODUsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPGZsb2F0PiBmaWx0
ZXJWYWx1ZXMoKSBjb25zdDsKKworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdl
ZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CisgICAgc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAppbmRl
eCA5MGE1NWI3ZWZmZjdhM2ZlNjA2YTllMDU3OWE3NmVkZTlmOTY4MDExLi45ZDQ4NDcxMTAwZGMy
OTU1NTMxZDVlZmM3MzUxMmQzZjU1NTNjMDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKQEAgLTYzLDEyICs2MywxNCBA
QCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxl
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwotICAgIAorICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAg
ICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
eyB9OworCisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0
ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiAKICAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIHJlZDsKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIGdy
ZWVuOwpAQCAtODUsMTAgKzg3LDEwIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0CiAgICAgICAg
IGVsc2UgaWYgKGlzPFNWR0ZFRnVuY0FFbGVtZW50PihjaGlsZCkpCiAgICAgICAgICAgICBhbHBo
YSA9IGRvd25jYXN0PFNWR0ZFRnVuY0FFbGVtZW50PihjaGlsZCkudHJhbnNmZXJGdW5jdGlvbigp
OwogICAgIH0KLSAgICAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNy
ZWF0ZShmaWx0ZXIsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworCisgICAgc2V0Rmls
dGVyRWZmZWN0KEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VO
b25OdWxsKCkgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZl
OGI5OTNhNGRkNTQ4NjMuLjY1ZjY5NjExMGMzMWEyN2JiNmRjZWEzMTEzMDQwZmM5MTA2NjQzZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJp
YnV0ZUNoYW5nZWQgbWlzc2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNj
YTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgyMzUuLmJkMDQwMDk2MDQ0NWVkNzI4
ZGExYjRkYzZlOTE5YTMyZDllMTY3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC00MCw3ICs0MCw3IEBAIGlubGluZSBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKICAgICAgICAgUHJvcGVydHlS
ZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6aW5BdHRyLCAmU1ZHRkVDb21wb3Np
dGVFbGVtZW50OjptX2luMT4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQ
cm9wZXJ0eTxTVkdOYW1lczo6aW4yQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6bV9pbjI+
KCk7Ci0gICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJlZ2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6
Om9wZXJhdG9yQXR0ciwgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSwgJlNWR0ZFQ29tcG9zaXRlRWxl
bWVudDo6bV9zdmdPcGVyYXRvcj4oKTsKKyAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0
ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBGRUNvbXBvc2l0ZU9wZXJhdG9yLCAm
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2NvbXBvc2l0ZU9wZXJhdG9yPigpOwogICAgICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3BlcnR5PFNWR05hbWVzOjprMUF0dHIsICZTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQ6Om1fazE+KCk7CiAgICAgICAgIFByb3BlcnR5UmVnaXN0cnk6OnJl
Z2lzdGVyUHJvcGVydHk8U1ZHTmFtZXM6OmsyQXR0ciwgJlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6
bV9rMj4oKTsKICAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdO
YW1lczo6azNBdHRyLCAmU1ZHRkVDb21wb3NpdGVFbGVtZW50OjptX2szPigpOwpAQCAtNTYsOSAr
NTYsOSBAQCBSZWY8U1ZHRkVDb21wb3NpdGVFbGVtZW50PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YQogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21T
dHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIp
IHsKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJv
cGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwor
ICAgICAgICBGRUNvbXBvc2l0ZU9wZXJhdG9yIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRy
YWl0czxGRUNvbXBvc2l0ZU9wZXJhdG9yPjo6ZnJvbVN0cmluZyh2YWx1ZSk7CiAgICAgICAgIGlm
IChwcm9wZXJ0eVZhbHVlID4gMCkKLSAgICAgICAgICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VW
YWxJbnRlcm5hbDxDb21wb3NpdGVPcGVyYXRpb25UeXBlPihwcm9wZXJ0eVZhbHVlKTsKKyAgICAg
ICAgICAgIG1fY29tcG9zaXRlT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxGRUNvbXBvc2l0
ZU9wZXJhdG9yPihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
OTUsMjUgKzk1LDYgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b20KICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0K
IAotYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShG
aWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0g
ICAgRkVDb21wb3NpdGUqIGNvbXBvc2l0ZSA9IHN0YXRpY19jYXN0PEZFQ29tcG9zaXRlKj4oZWZm
ZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKLSAgICAg
ICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0T3BlcmF0aW9uKHN2Z09wZXJhdG9yKCkpOwotICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azFBdHRyKQotICAgICAgICByZXR1cm4gY29tcG9zaXRl
LT5zZXRLMShrMSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmsyQXR0cikKLSAg
ICAgICAgcmV0dXJuIGNvbXBvc2l0ZS0+c2V0SzIoazIoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjprM0F0dHIpCi0gICAgICAgIHJldHVybiBjb21wb3NpdGUtPnNldEszKGszKCkp
OwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKQotICAgICAgICByZXR1cm4g
Y29tcG9zaXRlLT5zZXRLNChrNCgpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotCiB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1l
czo6azFBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjprMkF0dHIgfHwgYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmszQXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6azRBdHRyKSB7CkBAIC0x
MzEsMjAgKzExMiwzNSBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9p
ZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmls
dGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAg
YXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKLSAgICAK
KyAgICBhdXRvJiBjb21wb3NpdGUgPSBkb3duY2FzdDxGRUNvbXBvc2l0ZT4oZWZmZWN0KTsKKyAg
ICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICAgICAgY29tcG9z
aXRlLnNldENvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdG9yKCkpOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprMUF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRL
MShrMSgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6azJBdHRyKQorICAg
ICAgICBjb21wb3NpdGUuc2V0SzIoazIoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmszQXR0cikKKyAgICAgICAgY29tcG9zaXRlLnNldEszKGszKCkpOworICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprNEF0dHIpCisgICAgICAgIGNvbXBvc2l0ZS5zZXRL
NChrNCgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitz
dGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+
PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIp
Cit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKKyAgICBh
dXRvIGlucHV0MiA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4yKCkpOworCiAgICAgaWYgKCFpbnB1
dDEgfHwgIWlucHV0MikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVj
dCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigp
LCBrMygpLCBrNCgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgy
KTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFw
cGVuZChpbnB1dDIpOyAgICAKLSAgICByZXR1cm4gZWZmZWN0OworICAgICAgICByZXR1cm4geyB9
OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0
KEZFQ29tcG9zaXRlOjpjcmVhdGUoY29tcG9zaXRlT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMo
KSwgazQoKSkpOworICAgIAorICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5y
ZWxlYXNlTm9uTnVsbCgpLCBpbnB1dDIucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3
YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3OTcyMmY2Li5lZmJjZjVkMTM2MDI5Yzc1N2NhMWJhODFk
ZTk4ODA0MDRmNGE3M2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxl
bWVudC5oCkBAIC0yNywxNSArMjcsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxh
dGU8PgotaW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8Q29tcG9zaXRlT3BlcmF0aW9u
VHlwZT46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzsgfQoraW5saW5lIHVuc2lnbmVkIFNWR0lETEVudW1MaW1pdHM8RkVD
b21wb3NpdGVPcGVyYXRvcj46OmhpZ2hlc3RFeHBvc2VkRW51bVZhbHVlKCkgeyByZXR1cm4gRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzsgfQogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8Q29tcG9zaXRlT3BlcmF0aW9uVHlwZT4geworc3RydWN0IFNWR1Byb3Bl
cnR5VHJhaXRzPEZFQ29tcG9zaXRlT3BlcmF0b3I+IHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGln
aGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI7IH0K
IAotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBl
KQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoRkVDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvcikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBzd2l0
Y2ggKGNvbXBvc2l0ZU9wZXJhdG9yKSB7CiAgICAgICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfVU5LTk9XTjoKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgICAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6CkBAIC01OCw3ICs1OCw3IEBAIHN0cnVjdCBT
VkdQcm9wZXJ0eVRyYWl0czxDb21wb3NpdGVPcGVyYXRpb25UeXBlPiB7CiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogICAgIH0KIAotICAgIHN0YXRpYyBDb21wb3NpdGVPcGVyYXRpb25U
eXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgRkVDb21wb3Np
dGVPcGVyYXRvciBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAodmFsdWUgPT0gIm92ZXIiKQogICAgICAgICAgICAgcmV0dXJuIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX09WRVI7CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBpbjEo
KSBjb25zdCB7IHJldHVybiBtX2luMS0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBTdHJpbmcgaW4y
KCkgY29uc3QgeyByZXR1cm4gbV9pbjItPmN1cnJlbnRWYWx1ZSgpOyB9Ci0gICAgQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSBzdmdPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3It
PmN1cnJlbnRWYWx1ZTxDb21wb3NpdGVPcGVyYXRpb25UeXBlPigpOyB9CisgICAgRkVDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRl
T3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxGRUNvbXBvc2l0ZU9wZXJhdG9yPigpOyB9CiAgICAgZmxv
YXQgazEoKSBjb25zdCB7IHJldHVybiBtX2sxLT5jdXJyZW50VmFsdWUoKTsgfQogICAgIGZsb2F0
IGsyKCkgY29uc3QgeyByZXR1cm4gbV9rMi0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCBr
MygpIGNvbnN0IHsgcmV0dXJuIG1fazMtPmN1cnJlbnRWYWx1ZSgpOyB9CkBAIC05Myw3ICs5Myw3
IEBAIHB1YmxpYzoKIAogICAgIFNWR0FuaW1hdGVkU3RyaW5nJiBpbjFBbmltYXRlZCgpIHsgcmV0
dXJuIG1faW4xOyB9CiAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcmIGluMkFuaW1hdGVkKCkgeyByZXR1
cm4gbV9pbjI7IH0KLSAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uJiBzdmdPcGVyYXRvckFuaW1h
dGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRvcjsgfQorICAgIFNWR0FuaW1hdGVkRW51bWVyYXRp
b24mIGNvbXBvc2l0ZU9wZXJhdG9yQW5pbWF0ZWQoKSB7IHJldHVybiBtX2NvbXBvc2l0ZU9wZXJh
dG9yOyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIGsxQW5pbWF0ZWQoKSB7IHJldHVybiBtX2sx
OyB9CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIGsyQW5pbWF0ZWQoKSB7IHJldHVybiBtX2syOyB9
CiAgICAgU1ZHQW5pbWF0ZWROdW1iZXImIGszQW5pbWF0ZWQoKSB7IHJldHVybiBtX2szOyB9CkBA
IC0xMDgsMTMgKzEwOCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0g
ICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRl
ckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsK
IAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAg
ICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0
ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjIgeyBTVkdBbmltYXRl
ZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+
IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1ZFUikgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV9jb21wb3NpdGVPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0
aGlzLCBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51
bWJlcj4gbV9rMSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8
U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazIgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMp
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2szIHsgU1ZHQW5pbWF0ZWROdW1iZXI6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9zaXRlRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmlkbAppbmRleCA3OGU0MDIwN2Y1YjAyZjY3MGYwNDBiMjkzNzVlYWQ3YzJiNDUyZGUwLi5m
YzY3MGM5ZWM1NmM0MWMxMDkyODU0ODQyN2M1ZjZhOGUxODViMWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmlkbApAQCAtMzgsNyArMzgsNyBAQAogCiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkU3RyaW5nICAgICAgaW4xOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMjsKLSAgICBbSW1wbGVt
ZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9Y29tcG9zaXRlT3BlcmF0b3JdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uIG9wZXJhdG9yOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsxOwogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGsyOwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIGszOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1MDU4MTVkZWNhYmI0ZWEz
NGI0MzViNDdlYTVhODBjNmEyNmRmMS4uNjQ4MjMyMTA1YjlmZTRjMzc1M2JiODQ5MTc5NTZiZTQy
MGY2OTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuY3BwCkBAIC0xMzgsMjggKzEzOCw2IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
CiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0
ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNl
dEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVDb252b2x2ZU1hdHJpeCogY29udm9sdmVNYXRy
aXggPSBzdGF0aWNfY2FzdDxGRUNvbnZvbHZlTWF0cml4Kj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZl
TWF0cml4LT5zZXRFZGdlTW9kZShlZGdlTW9kZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmRpdmlzb3JBdHRyKQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldERp
dmlzb3IoZGl2aXNvcigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJpYXNBdHRy
KQotICAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldEJpYXMoYmlhcygpKTsKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFhBdHRyKQotICAgICAgICByZXR1cm4gY29u
dm9sdmVNYXRyaXgtPnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFko
KSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WUF0dHIpCi0gICAgICAg
IHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdldFgo
KSwgdGFyZ2V0WSgpKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0
TGVuZ3RoQXR0cikKLSAgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRLZXJuZWxVbml0
TGVuZ3RoKEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCi0g
ICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFs
cGhhKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzZXRPcmRlcihmbG9hdCB4LCBm
bG9hdCB5KQogewogICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7CkBAIC0xOTEs
MTMgKzE2OSwzNiBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K3ZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNo
YW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEo
KSk7CisgICAgYXV0byYgY29udm9sdmVNYXRyaXggPSBkb3duY2FzdDxGRUNvbnZvbHZlTWF0cml4
PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKQor
ICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRFZGdlTW9kZShlZGdlTW9kZSgpKTsKKyAgICBlbHNl
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGl2aXNvckF0dHIpCisgICAgICAgIGNvbnZvbHZl
TWF0cml4LnNldERpdmlzb3IoZGl2aXNvcigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6Ymlhc0F0dHIpCisgICAgICAgIGNvbnZvbHZlTWF0cml4LnNldEJpYXMoYmlhcygp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6dGFyZ2V0WEF0dHIpCisgICAg
ICAgIGNvbnZvbHZlTWF0cml4LnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRh
cmdldFkoKSkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRZQXR0
cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdl
dFgoKSwgdGFyZ2V0WSgpKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtl
cm5lbFVuaXRMZW5ndGhBdHRyKQorICAgICAgICBjb252b2x2ZU1hdHJpeC5zZXRLZXJuZWxVbml0
TGVuZ3RoKEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFscGhhQXR0
cikKKyAgICAgICAgY29udm9sdmVNYXRyaXguc2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFscGhh
KCkpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKK3N0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
KQoreworICAgIGF1dG8gaW5wdXQxID0gYnVpbGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAg
aWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogCisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICByZXR1cm4geyBmaWx0ZXJF
ZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CisgICAgCiAgICAgaW50IG9y
ZGVyWFZhbHVlID0gb3JkZXJYKCk7CiAgICAgaW50IG9yZGVyWVZhbHVlID0gb3JkZXJZKCk7CiAg
ICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Om9yZGVyQXR0cikpIHsKQEAgLTIwNiwyMiAr
MjA3LDIyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCCiAgICAgfQogICAgIC8vIFNwZWMgc2F5
cyBvcmRlciBtdXN0IGJlID4gMC4gQmFpbCBpZiBpdCBpcyBub3QuCiAgICAgaWYgKG9yZGVyWFZh
bHVlIDwgMSB8fCBvcmRlcllWYWx1ZSA8IDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIGF1dG8mIGtlcm5lbE1hdHJpeCA9IHRoaXMtPmtlcm5lbE1h
dHJpeCgpOwogICAgIGludCBrZXJuZWxNYXRyaXhTaXplID0ga2VybmVsTWF0cml4Lml0ZW1zKCku
c2l6ZSgpOwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhpcyBpcyBhIHJlcXVpcmVtZW50LCBhbmQg
c2hvdWxkIGJhaWwgb3V0IGlmIGZhaWxzCiAgICAgaWYgKG9yZGVyWFZhbHVlICogb3JkZXJZVmFs
dWUgIT0ga2VybmVsTWF0cml4U2l6ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBpbnQgdGFyZ2V0WFZhbHVlID0gdGFyZ2V0WCgpOwogICAgIGlu
dCB0YXJnZXRZVmFsdWUgPSB0YXJnZXRZKCk7CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1l
czo6dGFyZ2V0WEF0dHIpICYmICh0YXJnZXRYVmFsdWUgPCAwIHx8IHRhcmdldFhWYWx1ZSA+PSBv
cmRlclhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4geyB9
OwogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhlIGRlZmF1bHQgdmFsdWUgaXM6IHRhcmdldFggPSBm
bG9vciAoIG9yZGVyWCAvIDIgKSkKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6dGFy
Z2V0WEF0dHIpKQogICAgICAgICB0YXJnZXRYVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29y
ZihvcmRlclhWYWx1ZSAvIDIpKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJn
ZXRZQXR0cikgJiYgKHRhcmdldFlWYWx1ZSA8IDAgfHwgdGFyZ2V0WVZhbHVlID49IG9yZGVyWVZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
Ly8gVGhlIHNwZWMgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpczogdGFyZ2V0WSA9IGZsb29yICgg
b3JkZXJZIC8gMiApKQogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp0YXJnZXRZQXR0
cikpCiAgICAgICAgIHRhcmdldFlWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9yZGVy
WVZhbHVlIC8gMikpOwpAQCAtMjM0LDExICsyMzUsMTEgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckIKICAgICAgICAga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA9IDE7CiAgICAgfQogICAgIGlmIChr
ZXJuZWxVbml0TGVuZ3RoWFZhbHVlIDw9IDAgfHwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSA8PSAw
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZs
b2F0IGRpdmlzb3JWYWx1ZSA9IGRpdmlzb3IoKTsKICAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05h
bWVzOjpkaXZpc29yQXR0cikgJiYgIWRpdmlzb3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmRpdmlzb3JBdHRyKSkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbE1hdHJp
eFNpemU7ICsraSkKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSArPSBrZXJuZWxNYXRyaXguaXRl
bXMoKVtpXS0+dmFsdWUoKTsKQEAgLTI0Niw5ICsyNDcsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckIKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJbnRTaXplKG9yZGVyWFZh
bHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRY
VmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExl
bmd0aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2Vy
bmVsTWF0cml4KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAg
ICByZXR1cm4gZWZmZWN0OworICAgIGF1dG8ga2VybmVsU2l6ZSA9IEludFNpemUob3JkZXJYVmFs
dWUsIG9yZGVyWVZhbHVlKTsKKyAgICBhdXRvIHRhcmdldE9mZnNldCA9IEludFBvaW50KHRhcmdl
dFhWYWx1ZSwgdGFyZ2V0WVZhbHVlKTsKKyAgICBhdXRvIGtlcm5lbFVuaXRMZW5ndGggPSBGbG9h
dFBvaW50KGtlcm5lbFVuaXRMZW5ndGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpOwor
ICAgIHNldEZpbHRlckVmZmVjdChGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoa2VybmVsU2l6ZSwg
ZGl2aXNvclZhbHVlLCBiaWFzKCksIHRhcmdldE9mZnNldCwgZWRnZU1vZGUoKSwga2VybmVsVW5p
dExlbmd0aCwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpKTsKKworICAgIHJldHVybiB7
IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMwMDI2OThjNjI3N2UwNDM3MGQzNTk4MmE5NWI4ZDkw
NDliMzM5Li4wZTA4ZTI5YWMzMWMxNThiMGRkMGM3YmI2ZDViZTJiN2MxNDRjMzJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMTAy
LDggKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0
QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxG
aWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQuY3BwCmluZGV4IDE1MmM5ODVmZDhlOTVhZTk5NTdlNmUyMWQ2YmYyYTEwYzQ1NGJkZDUuLjVl
NTg4ZmU5NzA2MjJhODFhZWZkMzFiZTAzM2FlZDk2N2NhNDUyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC04MSw1MCAr
ODEsNiBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29ucwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29s
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCogZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKLXsKLSAg
ICBGRURpZmZ1c2VMaWdodGluZyogZGlmZnVzZUxpZ2h0aW5nID0gc3RhdGljX2Nhc3Q8RkVEaWZm
dXNlTGlnaHRpbmcqPihlZmZlY3QpOwotCi0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjps
aWdodGluZ19jb2xvckF0dHIpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgICAgIENvbG9y
IGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVu
ZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwotICAgICAgICByZXR1
cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKLSAgICB9Ci0gICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyKQotICAgICAgICByZXR1
cm4gZGlmZnVzZUxpZ2h0aW5nLT5zZXRTdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKCkpOwotICAg
IGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKLSAgICAgICAg
cmV0dXJuIGRpZmZ1c2VMaWdodGluZy0+c2V0RGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFu
dCgpKTsKLQotICAgIGF1dG8mIGxpZ2h0U291cmNlID0gY29uc3RfY2FzdDxMaWdodFNvdXJjZSY+
KGRpZmZ1c2VMaWdodGluZy0+bGlnaHRTb3VyY2UoKSk7Ci0gICAgY29uc3QgU1ZHRkVMaWdodEVs
ZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50
KHRoaXMpOwotICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOwotCi0gICAgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjphemltdXRoQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEF6
aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRoKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ZWxldmF0aW9uQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldEVsZXZh
dGlvbihsaWdodEVsZW1lbnQtPmVsZXZhdGlvbigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnhBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WChsaWdodEVsZW1l
bnQtPngoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAg
cmV0dXJuIGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVtZW50LT55KCkpOwotICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6ekF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRa
KGxpZ2h0RWxlbWVudC0+eigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50
c0F0WEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFgobGlnaHRF
bGVtZW50LT5wb2ludHNBdFgoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2lu
dHNBdFlBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRZKGxpZ2h0
RWxlbWVudC0+cG9pbnRzQXRZKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9p
bnRzQXRaQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WihsaWdo
dEVsZW1lbnQtPnBvaW50c0F0WigpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNw
ZWN1bGFyRXhwb25lbnRBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0U3BlY3Vs
YXJFeHBvbmVudChsaWdodEVsZW1lbnQtPnNwZWN1bGFyRXhwb25lbnQoKSk7Ci0gICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpCi0gICAgICAgIHJldHVy
biBsaWdodFNvdXJjZS5zZXRMaW1pdGluZ0NvbmVBbmdsZShsaWdodEVsZW1lbnQtPmxpbWl0aW5n
Q29uZUFuZ2xlKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OmRpZmZ1c2VDb25zdGFudEF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRM
ZW5ndGhBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsK
QEAgLTE1MSwyOCArMTA3LDgwIEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojps
aWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHRFCiAgICAgcHJpbWl0
aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvJiBkaWZmdXNl
TGlnaHRpbmcgPSBkb3duY2FzdDxGRURpZmZ1c2VMaWdodGluZz4oZWZmZWN0KTsKKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKSB7CisgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgICAgICBBU1NFUlQo
cmVuZGVyZXIpOworICAgICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9y
QnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRp
bmdDb2xvcigpKTsKKyAgICAgICAgZGlmZnVzZUxpZ2h0aW5nLnNldENvbG9yKGNvbG9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikgeworICAgICAgICBkaWZmdXNlTGlnaHRpbmcuc2V0U3VyZmFjZVNjYWxl
KHN1cmZhY2VTY2FsZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpIHsKKyAgICAgICAgZGlm
ZnVzZUxpZ2h0aW5nLnNldERpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8
TGlnaHRTb3VyY2UmPihkaWZmdXNlTGlnaHRpbmcuc291cmNlKCkpOworICAgIGNvbnN0IFNWR0ZF
TGlnaHRFbGVtZW50KiBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxlbWVudDo6ZmluZExpZ2h0
RWxlbWVudCh0aGlzKTsKKyAgICBBU1NFUlQobGlnaHRFbGVtZW50KTsKKworICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldEF6
aW11dGgobGlnaHRFbGVtZW50LT5hemltdXRoKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRFbGV2YXRp
b24obGlnaHRFbGVtZW50LT5lbGV2YXRpb24oKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRYKGxpZ2h0RWxlbWVudC0+
eCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAg
IGxpZ2h0U291cmNlLnNldFkobGlnaHRFbGVtZW50LT55KCkpOworICAgIGVsc2UgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp6QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0WihsaWdodEVs
ZW1lbnQtPnooKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0
WEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WChsaWdodEVsZW1lbnQtPnBv
aW50c0F0WCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRZ
QXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRZKGxpZ2h0RWxlbWVudC0+cG9p
bnRzQXRZKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFpB
dHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFoobGlnaHRFbGVtZW50LT5wb2lu
dHNBdFooKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRTcGVjdWxhckV4cG9uZW50KGxpZ2h0
RWxlbWVudC0+c3BlY3VsYXJFeHBvbmVudCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRM
aW1pdGluZ0NvbmVBbmdsZShsaWdodEVsZW1lbnQtPmxpbWl0aW5nQ29uZUFuZ2xlKCkpOworICAg
IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVm
UHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAg
ICBhdXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOwogICAgIGlmICghaW5w
dXQxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCks
IHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogCiAgICAgUmVmUHRyIGxpZ2h0RWxlbWVu
dCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVtZW50KHRoaXMpOwogICAgIGlmICgh
bGlnaHRFbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJj
ZSgqZmlsdGVyQnVpbGRlcik7CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+
bGlnaHRTb3VyY2UoYnVpbGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5
bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdo
dGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3Rh
bnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShs
aWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9Owot
ICAgIHJldHVybiBlZmZlY3Q7CisgICAgc2V0RmlsdGVyRWZmZWN0KEZFRGlmZnVzZUxpZ2h0aW5n
OjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVs
VW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkp
KTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVs
bCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUy
MDU1ODAuLjVmYWQ3NTk1NDUwNjNmMzJlNTQxZjlmZDQ2MGE3OTBmZGEwMDk3YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU3
LDggKzU3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RB
dHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5jcHAKaW5kZXggMGM1ZTgyNWJjODI1NjBmMzZhMjY5ZWE2ZDcyMmRmZDA1MTczZDhjMi4uYTgz
YmFhNGNmYjA0YjMyYzMwZGNhZWY3YmZjZTQwYjNmODAyZDQ1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKQEAgLTg0LDIwICs4
NCw2IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLWJvb2wg
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAg
IEZFRGlzcGxhY2VtZW50TWFwKiBkaXNwbGFjZW1lbnRNYXAgPSBzdGF0aWNfY2FzdDxGRURpc3Bs
YWNlbWVudE1hcCo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp4Q2hh
bm5lbFNlbGVjdG9yQXR0cikKLSAgICAgICAgcmV0dXJuIGRpc3BsYWNlbWVudE1hcC0+c2V0WENo
YW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBT
VkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIpCi0gICAgICAgIHJldHVybiBkaXNwbGFjZW1l
bnRNYXAtPnNldFlDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcigpKTsKLSAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikKLSAgICAgICAgcmV0dXJuIGRpc3BsYWNl
bWVudE1hcC0+c2V0U2NhbGUoc2NhbGUoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewog
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIgfHwgYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyIHx8IGF0dHJOYW1lID09IFNW
R05hbWVzOjpzY2FsZUF0dHIpIHsKQEAgLTExNSwyMCArMTAxLDMxIEBAIHZvaWQgU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJC
dWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYgZWZmZWN0
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICBhdXRvJiBkaXNwbGFjZW1l
bnRNYXAgPSBkb3duY2FzdDxGRURpc3BsYWNlbWVudE1hcD4oZWZmZWN0KTsKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKQorICAgICAgICBkaXNwbGFj
ZW1lbnRNYXAuc2V0WENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9yKCkpOworICAgIGVs
c2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0cikKKyAgICAg
ICAgZGlzcGxhY2VtZW50TWFwLnNldFlDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3Rvcigp
KTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2NhbGVBdHRyKQorICAgICAg
ICBkaXNwbGFjZW1lbnRNYXAuc2V0U2NhbGUoc2NhbGUoKSk7CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0
PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGJ1
aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gYnVpbGRlci5uYW1l
ZEVmZmVjdChpbjIoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50TWFw
OjpjcmVhdGUoZmlsdGVyLCB4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwg
c2NhbGUoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0g
ICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQo
aW5wdXQyKTsgICAgCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRURp
c3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3Rv
cigpLCBzY2FsZSgpKSk7CisKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEu
cmVsZWFzZU5vbk51bGwoKSwgaW5wdXQyLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKaW5k
ZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uZDE1Zjg4ZThlMDlh
YzNlZjk2ODYwZDkzZjZlZTJlMmJkNjdlZDI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTAsOCArOTAsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNo
YW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJy
aWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcApp
bmRleCBhNjg2YmI4ZmEzOGQ5ZGRmYTI4ZTAyYWVkOTVlNDFiMDhhMzZmMmY3Li45ZWEwZTA3ODNi
ZThhMmY4MGRkNmI3YWJiNjZkMzA4ZWJmNzBhMDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5h
Yy5uej4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCIKIAotI2luY2x1ZGUg
IkRpc3RhbnRMaWdodFNvdXJjZS5oIgorI2luY2x1ZGUgIkRpc3RhbnRMaWdodFNvdXJjZURhdGEu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw5
ICszNyw5IEBAIFJlZjxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+IFNWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJl
ZjxMaWdodFNvdXJjZT4gU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3QKK0xpZ2h0U291cmNlIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dDo6bGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIERpc3RhbnRMaWdodFNvdXJjZTo6Y3JlYXRlKGF6aW11dGgoKSwgZWxldmF0aW9uKCkpOwor
ICAgIHJldHVybiB7IERpc3RhbnRMaWdodFNvdXJjZURhdGEoYXppbXV0aCgpLCBlbGV2YXRpb24o
KSkgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxl
bWVudC5oCmluZGV4IGZiZGY3MWMwZWNiZDlmOTk3ZDY5ZWE2NTRiOWY1YmEwMzE3ZDcxY2MuLjBk
OTk2MmNlZDBiMTIxZjEzZTgxMzg4NDRhMTg5ZWFlOTVlYmU3YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVkZW50LmNhbnRlcmJ1
cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCw4ICszMSw5IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCYpOwogCi0gICAgUmVmPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZShTVkdGaWx0
ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGlnaHRTb3VyY2UgbGlnaHRTb3VyY2Uo
Y29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogfTsKKwogc3RhdGljX2Fz
c2VydChzaXplb2YoU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50KSA9PSBzaXplb2YoU1ZHRkVMaWdo
dEVsZW1lbnQpKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1
ZDc5ZjRiMzI2YTg5YmZjNWI2ODEuLmZlMjMyOGI1Y2E2NjNiNGQ0YzliNzdlOTMyNzRjZWMwYThl
MWRmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5j
cHAKQEAgLTg4LDcgKzg4LDEzIEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvCiAKIHZvaWQgU1ZH
RkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKIHsKLSAgICBpZiAoUHJvcGVydHlSZWdpc3RyeTo6aXNLbm93bkF0dHJp
YnV0ZShhdHRyTmFtZSkpIHsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmR4QXR0ciB8
fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpz
dGREZXZpYXRpb25BdHRyKSB7CisgICAgICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3Vh
cmQoKnRoaXMpOworICAgICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
aW5BdHRyKSB7CiAgICAgICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMp
OwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk3LDI3ICsxMDMs
NDQgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRURy
b3BTaGFkb3dFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVj
dCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKKyAgICBhdXRvJiBm
ZURyb3BTaGFkb3cgPSBkb3duY2FzdDxGRURyb3BTaGFkb3c+KGVmZmVjdCk7CisgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpkeEF0dHIpCisgICAgICAgIGZlRHJvcFNoYWRvdy5zZXREeChk
eCgpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAg
ICBmZURyb3BTaGFkb3cuc2V0RHkoZHkoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldFN0ZERl
dmlhdGlvblgoc3RkRGV2aWF0aW9uWCgpKTsKKyAgICAgICAgZmVEcm9wU2hhZG93LnNldFN0ZERl
dmlhdGlvblkoc3RkRGV2aWF0aW9uWSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3Rv
cjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVk
RWZmZWN0KGluMSgpKTsKKyAgICBpZiAoIWlucHV0MSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0
KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OworCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoc3RkRGV2aWF0
aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdT
dHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgCiAgICAgQ29sb3IgY29s
b3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHls
ZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNp
dHkoKTsKIAotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7Ci0gICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIHNl
dEZpbHRlckVmZmVjdChGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERl
dmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpKTsKIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERl
dmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA5YjYy
ZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFkLi43NmJmOTI1MzE1OTgzMTliMjUx
ZTU5ZmIxN2Y3ZmUzNDM1ZDMwMjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBv
dmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJp
YnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVk
MGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZjMi4uMjdjMTViMGZlMWM4YzdmNjQ0M2ViZjYzYWMx
MjVhZjFlODYzZjVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3Bw
CkBAIC00MiwzNCArNDIsMzggQEAgUmVmPFNWR0ZFRmxvb2RFbGVtZW50PiBTVkdGRUZsb29kRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEQKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTVkdGRUZsb29kRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkpOwogfQog
Ci1ib29sIFNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVy
RWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQordm9pZCBTVkdG
RUZsb29kRWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsK
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBG
RUZsb29kKiBmbG9vZCA9IHN0YXRpY19jYXN0PEZFRmxvb2QqPihlZmZlY3QpOwotCisgICAgCisg
ICAgYXV0byYgZmxvb2QgPSBkb3duY2FzdDxGRUZsb29kPihlZmZlY3QpOwogICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6Zmxvb2RfY29sb3JBdHRyKQotICAgICAgICByZXR1cm4gZmxvb2Qt
PnNldEZsb29kQ29sb3Ioc3R5bGUuc3ZnU3R5bGUoKS5mbG9vZENvbG9yKCkpOwotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCi0gICAgICAgIHJldHVybiBm
bG9vZC0+c2V0Rmxvb2RPcGFjaXR5KHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RPcGFjaXR5KCkpOwot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgICAgICBm
bG9vZC5zZXRGbG9vZENvbG9yKHN0eWxlLnN2Z1N0eWxlKCkuZmxvb2RDb2xvcigpKTsKKyAgICBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6Zmxvb2Rfb3BhY2l0eUF0dHIpCisgICAgICAg
IGZsb29kLnNldEZsb29kT3BhY2l0eShzdHlsZS5zdmdTdHlsZSgpLmZsb29kT3BhY2l0eSgpKTsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVj
dG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKQogeworICAgIGlmIChoYXNGaWx0ZXJFZmZlY3QoKSkKKyAgICAgICAgcmV0dXJu
IHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OworCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSYgc3ZnU3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpOwogCiAgICAgQ29s
b3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihz
dmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9v
ZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwg
b3BhY2l0eSk7CisgICAgc2V0RmlsdGVyRWZmZWN0KEZFRmxvb2Q6OmNyZWF0ZShjb2xvciwgb3Bh
Y2l0eSkpOworCisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCksIHsgfSB9OwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCmluZGV4IGI5NmE0M2FhMzEzZTc1ZTRh
MzE2NzI0OGExYjZmNWNmNTFmZWU5MTEuLmE5ZDUyM2ViY2QwODcxZjAzNGZkNGNlYjA0ZGM2YTA3
MzU5NzVkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCkBAIC0zNSw4
ICszNSw4IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3Bl
cnR5T3duZXJSZWdpc3RyeTxTVkdGRUZsb29kRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0
eVJlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAK
LSAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5jcHAKaW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1
NjNjNTk5ZC4uMWQ1NzE1NmE3ODJlYTk1YzYxNjdlMDY5N2UyNzI0ODg4ZTkwYTU0YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTg2
LDcgKzg2LDEzIEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBCiAKIHZvaWQgU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0
ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1vZGVBdHRyKSB7CisgICAgICAgIEluc3Rh
bmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOworICAgICAgICBwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6aW5BdHRyKSB7CiAgICAgICAgIEluc3RhbmNlSW52YWxp
ZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwogICAgICAgICBpbnZhbGlkYXRlKCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTk1LDE4ICsxMDEsMzEgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUKICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVj
dEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byYgZmVHYXVzc2lhbkJsdXIgPSBkb3duY2FzdDxGRUdh
dXNzaWFuQmx1cj4oZWZmZWN0KTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERl
dmlhdGlvbkF0dHIpIHsKKyAgICAgICAgZmVHYXVzc2lhbkJsdXIuc2V0U3RkRGV2aWF0aW9uWChz
dGREZXZpYXRpb25YKCkpOworICAgICAgICBmZUdhdXNzaWFuQmx1ci5zZXRTdGREZXZpYXRpb25Z
KHN0ZERldmlhdGlvblkoKSk7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
ZWRnZU1vZGVBdHRyKQorICAgICAgICBmZUdhdXNzaWFuQmx1ci5zZXRFZGdlTW9kZShlZGdlTW9k
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIp
Cit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBp
ZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmICgh
aGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRUdhdXNzaWFuQmx1
cjo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKSk7
CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmlsdGVyLCBzdGRE
ZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRnZU1vZGUoKSk7Ci0gICAgZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1
cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9IH07CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRl
eCBkODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi4zODU1MThmZWYyYzhk
ZDYxOWJjOTUzMDk0OTY1MWI3YWI0NDBhNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01Myw3ICs1Myw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmlu
ZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8
UmVmPEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAK
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUo
dGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUx
NDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODExOTVkM2MyN2VjNGYuLmQ1NTg3MDAwODI4MTM3OWFh
Mzc3OGY5OTY1NGFiNzY0YjQzMGE0YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDEwIERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUu
aCIKKyNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTc0LDE2ICsxNzUsNTIg
QEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Um
LCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitzdGQ6OnR1cGxlPFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIEZsb2F0UmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmltYWdlQnVmZmVyRm9yRWZm
ZWN0KCkgY29uc3QKIHsKLSAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZF
SW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShmaWx0ZXIsIG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVu
ZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7Ci0KICAgICBhdXRvIHRh
cmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigp
LCB0cmVlU2NvcGUoKSk7CisgICAgaWYgKCFpczxTVkdFbGVtZW50Pih0YXJnZXQuZWxlbWVudCkp
CisgICAgICAgIHJldHVybiB7IH07CisKICAgICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNj
ZW5kYW50T2YodGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gY29udGV4dE5vZGUgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KTsKKyAgICBhdXRvIHJlbmRlcmVy
ID0gY29udGV4dE5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGVUcmFuc2Zvcm0KKyAg
ICBhdXRvIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRl
VHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnJlbmRlcmVyKTsKKyAg
ICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgYXV0byBzaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5z
Zm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFuc2Zvcm0u
eVNjYWxlKCksIDAsIDApOworCisgICAgYXV0byBpbWFnZVJlY3QgPSByZW5kZXJlci0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihpbWFnZVJlY3QsIHNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIGF1dG8mIGNvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwor
ICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQoY29udGV4dCwg
KnJlbmRlcmVyLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisKKyAgICByZXR1cm4geyBpbWFnZUJ1ZmZl
ciwgaW1hZ2VSZWN0IH07Cit9CisKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJikKK3sKKyAgICBpZiAoaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHJldHVy
biB7IGZpbHRlckVmZmVjdCgpLCB7IH0gfTsKKworICAgIGlmIChtX2NhY2hlZEltYWdlKQorICAg
ICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVJbWFnZTo6Y3JlYXRlKFJlZjxJbWFnZT4geyAqbV9jYWNo
ZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSB9LCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKCkpKTsKKworICAgIGF1dG8gW2ltYWdlQnVmZmVyLCBpbWFnZVJlY3RdID0gaW1hZ2VCdWZm
ZXJGb3JFZmZlY3QoKTsKKyAgICBpZiAoaW1hZ2VCdWZmZXIpCisgICAgICAgIHNldEZpbHRlckVm
ZmVjdChGRUltYWdlOjpjcmVhdGUoaW1hZ2VCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VS
ZWN0LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpKTsKIAotICAgIHJldHVybiBGRUltYWdlOjpjcmVh
dGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVB
c3BlY3RSYXRpbygpKTsKKyAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyB9IH07CiB9CiAK
IHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0
SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li43MGY1
ZWYxN2U1MTUzYTc0ODJkYTE3N2E2NDMxODY5NGVmMWQ1Mjc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEltYWdlQnVmZmVyPiwgRmxvYXRSZWN0PiBpbWFnZUJ1
ZmZlckZvckVmZmVjdCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmli
dXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGUg
eyB9CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3Vy
Y2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKaW5kZXggY2QwYmZiOWVk
Y2ZkN2I0ZTFhZjM5YjU1ZWRiYmJkNzg0YWFlYTg5ZC4uMzcxYzQyYWM0NTY2ZGMwNmY2YzA2MmE2
MGEyZmVkMzY5NDkwYmYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGln
aHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgK
QEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBPbGl2
ZXIgSHVudCA8b2xpdmVyQG5lcmdldC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTMyLDcgKzMyLDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNzIFNWR0ZFTGlnaHRF
bGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
U1ZHRkVMaWdodEVsZW1lbnQpOwogcHVibGljOgotICAgIHZpcnR1YWwgUmVmPExpZ2h0U291cmNl
PiBsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
TGlnaHRTb3VyY2UgbGlnaHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0g
MDsKICAgICBzdGF0aWMgU1ZHRkVMaWdodEVsZW1lbnQqIGZpbmRMaWdodEVsZW1lbnQoY29uc3Qg
U1ZHRWxlbWVudCopOwogCiAgICAgZmxvYXQgYXppbXV0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXpp
bXV0aC0+Y3VycmVudFZhbHVlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1l
bnQuY3BwCmluZGV4IGJlMmY2ZTAzMDdkYzU1MTYwMDc5MGZkNWJmMTgyZjFkOTQ2MjNkZDYuLjQ2
NDdlNDY5MmRhZThjOTIwZDJiZDlhY2U0NDI4ZmFiZTBhNjk0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1
ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAKQEAgLTQ1LDI0ICs0NCwyNSBAQCBSZWY8U1ZHRkVNZXJnZUVsZW1lbnQ+IFNWR0ZFTWVy
Z2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRAogICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFTWVyZ2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7
CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6
dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNW
R0ZFTWVyZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKQogewotICAg
IGF1dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgYXV0byYgbWVyZ2VJ
bnB1dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOworICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZm
ZWN0Pj4gbWVyZ2VJbnB1dHM7CiAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVu
T2ZUeXBlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVy
Z2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7
CisgICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBidWlsZGVyLm5hbWVkRWZmZWN0KG1lcmdlTm9k
ZS5pbjEoKSk7CiAgICAgICAgIGlmICghbWVyZ2VFZmZlY3QpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKFdURk1vdmUobWVyZ2VFZmZlY3Qp
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZCht
ZXJnZUVmZmVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKICAgICBtZXJnZUlucHV0cy5z
aHJpbmtUb0ZpdCgpOwotCiAgICAgaWYgKG1lcmdlSW5wdXRzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRl
ckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVNZXJnZTo6Y3JlYXRlKG1lcmdl
SW5wdXRzLnNpemUoKSkpOwogCi0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICByZXR1cm4geyBmaWx0
ZXJFZmZlY3QoKSwgV1RGTW92ZShtZXJnZUlucHV0cykgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgw
MmQyODNjZjRlM2MyLi5lODgwZTZlOTdiM2NlMmUyY2JmZjMzMmUxZDkzYTExZDI0NmM5ZjNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBw
cml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVn
aXN0cnk8U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1
YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIxYi4uMGFiNTViMmFjMWY4MThlYzJlZjQ1
NjE1NGY1NDJlOTRiYzhjYTNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmNwcApAQCAtMzksNyArMzksNyBAQCBpbmxpbmUgU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YQogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKICAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlRmxhZywgW10gewogICAgICAgICBQcm9wZXJ0eVJlZ2lzdHJ5OjpyZWdpc3RlclByb3Bl
cnR5PFNWR05hbWVzOjppbkF0dHIsICZTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjptX2luMT4oKTsK
LSAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6b3Bl
cmF0b3JBdHRyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCAmU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dDo6bV9zdmdPcGVyYXRvcj4oKTsKKyAgICAgICAgUHJvcGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQ
cm9wZXJ0eTxTVkdOYW1lczo6b3BlcmF0b3JBdHRyLCBNb3JwaG9sb2d5T3BlcmF0b3IsICZTVkdG
RU1vcnBob2xvZ3lFbGVtZW50OjptX21vcnBob2xvZ3lPcGVyYXRvcj4oKTsKICAgICAgICAgUHJv
cGVydHlSZWdpc3RyeTo6cmVnaXN0ZXJQcm9wZXJ0eTxTVkdOYW1lczo6cmFkaXVzQXR0ciwgJlNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6Om1fcmFkaXVzWCwgJlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6
Om1fcmFkaXVzWT4oKTsKICAgICB9KTsKIH0KQEAgLTU5LDkgKzU5LDkgQEAgdm9pZCBTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpzZXRSYWRpdXMoZmxvYXQgeCwgZmxvYXQgeSkKIHZvaWQgU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6
Om9wZXJhdG9yQXR0cikgewotICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHByb3BlcnR5
VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6ZnJvbVN0
cmluZyh2YWx1ZSk7CisgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvciBwcm9wZXJ0eVZhbHVlID0g
U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yPjo6ZnJvbVN0cmluZyh2YWx1ZSk7
CiAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKLSAgICAgICAgICAgIG1fc3ZnT3BlcmF0
b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPihwcm9wZXJ0eVZh
bHVlKTsKKyAgICAgICAgICAgIG1fbW9ycGhvbG9neU9wZXJhdG9yLT5zZXRCYXNlVmFsSW50ZXJu
YWw8TW9ycGhvbG9neU9wZXJhdG9yPihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtODEsMjIgKzgxLDYgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG8KICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUs
IHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQotewotICAgIEZFTW9ycGhvbG9neSogbW9ycGhvbG9neSA9IHN0YXRpY19jYXN0PEZF
TW9ycGhvbG9neSo+KGVmZmVjdCk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpvcGVy
YXRvckF0dHIpCi0gICAgICAgIHJldHVybiBtb3JwaG9sb2d5LT5zZXRNb3JwaG9sb2d5T3BlcmF0
b3Ioc3ZnT3BlcmF0b3IoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNB
dHRyKSB7Ci0gICAgICAgIC8vIEJvdGggc2V0UmFkaXVzIGZ1bmN0aW9ucyBzaG91bGQgYmUgZXZh
bHVhdGVkIHNlcGFyYXRlbHkuCi0gICAgICAgIGJvb2wgaXNSYWRpdXNYQ2hhbmdlZCA9IG1vcnBo
b2xvZ3ktPnNldFJhZGl1c1gocmFkaXVzWCgpKTsKLSAgICAgICAgYm9vbCBpc1JhZGl1c1lDaGFu
Z2VkID0gbW9ycGhvbG9neS0+c2V0UmFkaXVzWShyYWRpdXNZKCkpOwotICAgICAgICByZXR1cm4g
aXNSYWRpdXNYQ2hhbmdlZCB8fCBpc1JhZGl1c1lDaGFuZ2VkOwotICAgIH0KLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdGRU1vcnBo
b2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyIHx8
IGF0dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CkBAIC0xMTQsMjEgKzk4LDM0IEBA
IHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3ZvaWQgU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBmbG9hdCB4UmFkaXVz
ID0gcmFkaXVzWCgpOwotICAgIGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7CisgICAgYXV0byYg
bW9ycGhvbG9neSA9IGRvd25jYXN0PEZFTW9ycGhvbG9neT4oZWZmZWN0KTsKKyAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKKyAgICAgICAgbW9ycGhvbG9neS5zZXRN
b3JwaG9sb2d5T3BlcmF0b3IobW9ycGhvbG9neU9wZXJhdG9yKCkpOworICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7CisgICAgICAgIC8vIEJvdGggc2V0UmFk
aXVzIGZ1bmN0aW9ucyBzaG91bGQgYmUgZXZhbHVhdGVkIHNlcGFyYXRlbHkuCisgICAgICAgIG1v
cnBob2xvZ3kuc2V0UmFkaXVzWChyYWRpdXNYKCkpOworICAgICAgICBtb3JwaG9sb2d5LnNldFJh
ZGl1c1kocmFkaXVzWSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CiAKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRlckVmZmVjdD4sIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGlu
MSgpKTsKICAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB7IH07CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOworICAgIGZsb2F0
IHlSYWRpdXMgPSByYWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMgPCAw
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlm
ICghaGFzRmlsdGVyRWZmZWN0KCkpCisgICAgICAgIHNldEZpbHRlckVmZmVjdChGRU1vcnBob2xv
Z3k6OmNyZWF0ZShtb3JwaG9sb2d5T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cykpOwogCi0g
ICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9y
KCksIHhSYWRpdXMsIHlSYWRpdXMpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlu
cHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsgZmlsdGVyRWZmZWN0KCks
IHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAppbmRleCAx
YTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li44NDBiNWJhYWYyODM2MGM2
ZjY1OWYzZTk5NzU0NzA3MTg5MzRjN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmgKQEAgLTI2LDEyICsyNiwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJh
dG9yVHlwZT4geworc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvcj4g
ewogICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQogCi0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhN
b3JwaG9sb2d5T3BlcmF0b3IgbW9ycGhvbG9neU9wZXJhdG9yKQogICAgIHsKLSAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIHN3aXRjaCAobW9ycGhvbG9neU9wZXJhdG9yKSB7CiAgICAg
ICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046CiAgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REU6CkBAIC00NCw3ICs0NCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlPiB7CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yIGZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZXJvZGUiKQogICAg
ICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERTsKQEAgLTYyLDEyICs2
MiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSYWRpdXMoZmxvYXQgcmFkaXVzWCwgZmxvYXQg
cmFkaXVzWSk7CiAKICAgICBTdHJpbmcgaW4xKCkgY29uc3QgeyByZXR1cm4gbV9pbjEtPmN1cnJl
bnRWYWx1ZSgpOyB9Ci0gICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBzdmdPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3ZnT3BlcmF0b3ItPmN1cnJlbnRWYWx1ZTxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlPigpOyB9CisgICAgTW9ycGhvbG9neU9wZXJhdG9yIG1vcnBob2xvZ3lPcGVyYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fbW9ycGhvbG9neU9wZXJhdG9yLT5jdXJyZW50VmFsdWU8TW9ycGhv
bG9neU9wZXJhdG9yPigpOyB9CiAgICAgZmxvYXQgcmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFkaXVzWC0+Y3VycmVudFZhbHVlKCk7IH0KICAgICBmbG9hdCByYWRpdXNZKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYWRpdXNZLT5jdXJyZW50VmFsdWUoKTsgfQogCiAgICAgU1ZHQW5pbWF0ZWRTdHJp
bmcmIGluMUFuaW1hdGVkKCkgeyByZXR1cm4gbV9pbjE7IH0KLSAgICBTVkdBbmltYXRlZEVudW1l
cmF0aW9uJiBzdmdPcGVyYXRvckFuaW1hdGVkKCkgeyByZXR1cm4gbV9zdmdPcGVyYXRvcjsgfQor
ICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24mIG1vcnBob2xvZ3lPcGVyYXRvckFuaW1hdGVkKCkg
eyByZXR1cm4gbV9tb3JwaG9sb2d5T3BlcmF0b3I7IH0KICAgICBTVkdBbmltYXRlZE51bWJlciYg
cmFkaXVzWEFuaW1hdGVkKCkgeyByZXR1cm4gbV9yYWRpdXNYOyB9CiAgICAgU1ZHQW5pbWF0ZWRO
dW1iZXImIHJhZGl1c1lBbmltYXRlZCgpIHsgcmV0dXJuIG1fcmFkaXVzWTsgfQogCkBAIC04MCwx
MiArODAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RB
dHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZp
bHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0Fu
aW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fbW9ycGhvbG9neU9wZXJh
dG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9P
UEVSQVRPUl9FUk9ERSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7
IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fcmFkaXVzWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5pZGwKaW5kZXgg
YTJjMTgxZjJlNjM3Y2QzOTA5OGViZTY5ZTYwOThhYmUzYzM4NWNkMS4uMmQyMWYyYTFkODg4ZDAy
ZWMxNzlkZjEwZTJkZTQzZmM2NTI5N2Q1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RU1vcnBob2xvZ3lFbGVtZW50LmlkbApAQCAtMzMsNyArMzMsNyBAQAogICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFNWR19NT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURSAgID0gMjsKIAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZFN0cmluZyAgICAgIGluMTsKLSAgICBbSW1wbGVt
ZW50ZWRBcz1zdmdPcGVyYXRvcl0gcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gb3BlcmF0b3I7CisgICAgW0ltcGxlbWVudGVkQXM9bW9ycGhvbG9neU9wZXJhdG9yXSBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBvcGVyYXRvcjsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0ZWROdW1iZXIgICAgICByYWRpdXNYOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZE51bWJlciAgICAgIHJhZGl1c1k7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlm
OWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uNTk0NTA2YTNlYjZiZTBiNmU3NWEyZjcwNGJiYWI2
ODViNmQ1MDQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAK
QEAgLTcyLDcgKzcyLDEzIEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyCiAKIHZvaWQgU1ZHRkVP
ZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKQogewotICAgIGlmIChQcm9wZXJ0eVJlZ2lzdHJ5Ojppc0tub3duQXR0cmlidXRlKGF0
dHJOYW1lKSkgeworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHhBdHRyIHx8IGF0dHJO
YW1lID09IFNWR05hbWVzOjpkeUF0dHIpIHsKKyAgICAgICAgSW5zdGFuY2VJbnZhbGlkYXRpb25H
dWFyZCBndWFyZCgqdGhpcyk7CisgICAgICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF0dHJOYW1lID09IFNW
R05hbWVzOjppbkF0dHIpIHsKICAgICAgICAgSW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZCBndWFy
ZCgqdGhpcyk7CiAgICAgICAgIGludmFsaWRhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODEs
MTYgKzg3LDI3IEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFT2Zm
c2V0RWxlbWVudDo6ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvJiBmZU9mZnNl
dCA9IGRvd25jYXN0PEZFT2Zmc2V0PihlZmZlY3QpOworICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6ZHhBdHRyKQorICAgICAgICBmZU9mZnNldC5zZXREeChkeCgpKTsKKyAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBTVkdOYW1lczo6ZHlBdHRyKQorICAgICAgICBmZU9mZnNldC5zZXREeShk
eSgpKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCitzdGQ6
OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+PiBT
VkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCit7Cisg
ICAgYXV0byBpbnB1dDEgPSBidWlsZGVyLm5hbWVkRWZmZWN0KGluMSgpKTsKICAgICBpZiAoIWlu
cHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBzZXRGaWx0ZXJFZmZlY3QoRkVPZmZz
ZXQ6OmNyZWF0ZShkeCgpLCBkeSgpKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFT2Zmc2V0Ojpj
cmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIHJldHVybiB7IGZpbHRlckVmZmVj
dCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IDU3NDczZGNjNzJkYjY3YjEyNWVhMmVkNDY1
ZTM1YjU3MzcwNDliZWUuLjlkM2RhZjA5ZGQ1MzFjNGMyM2I0ZTFiYWM2NGZiNTU0NmE0YTQ0YmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOworICAgIHN0ZDo6dHVwbGU8UmVmUHRyPEZpbHRl
ckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0
ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9p
bnRMaWdodEVsZW1lbnQuY3BwCmluZGV4IDlmZjg0NzMzOGExYjZhNTVmY2RiODIxYTA5ZjBhY2Mz
YzIwN2VhODEuLmNhYTc2MGZmNTMwZmJiYWFlMDVmODlhMWIzM2MwZmVmOTVjNmUyZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IE9saXZlciBIdW50IDxvamgxNkBzdHVk
ZW50LmNhbnRlcmJ1cnkuYWMubno+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMSArMjEsOCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQu
aCIKIAotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUG9pbnRMaWdo
dFNvdXJjZS5oIgotI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJQb2lu
dExpZ2h0U291cmNlRGF0YS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwyMSArMzcsMTAg
QEAgUmVmPFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ+IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZF
UG9pbnRMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmPExpZ2h0U291
cmNlPiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShTVkdGaWx0ZXJCdWlsZGVy
JiBidWlsZGVyKSBjb25zdAorTGlnaHRTb3VyY2UgU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGln
aHRTb3VyY2UoY29uc3QgU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7Ci0gICAgRmxvYXRQb2lu
dDNEIHBvc2l0aW9uOwotICAgIGlmIChidWlsZGVyLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0
UmVjdCByZWZlcmVuY2VCb3ggPSBidWlsZGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0gICAgICAg
IAotICAgICAgICBwb3NpdGlvbi5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyB4KCkgKiByZWZlcmVu
Y2VCb3gud2lkdGgoKSk7Ci0gICAgICAgIHBvc2l0aW9uLnNldFkocmVmZXJlbmNlQm94LnkoKSAr
IHkoKSAqIHJlZmVyZW5jZUJveC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50
YWdlCi0gICAgICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJl
bmNlQm94Lm1pblhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAv
IHNxcnRPZlR3b0Zsb2F0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBv
aW50M0QoeCgpLCB5KCksIHooKSk7Ci0gICAgCi0gICAgcmV0dXJuIFBvaW50TGlnaHRTb3VyY2U6
OmNyZWF0ZShwb3NpdGlvbik7CisgICAgYXV0byBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCks
IHkoKSwgeigpKTsKKyAgICByZXR1cm4geyBQb2ludExpZ2h0U291cmNlRGF0YShwb3NpdGlvbikg
fTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmgK
aW5kZXggMzNhNWJkNzQ5MjA4MjhjOTk4NjQ1YjcyMmY3MmE3NDVlNDhkYTc5ZS4uM2UzNzQ4NDA0
MGFmMjQ3Njc1MDY4MmI4OWU3MmRhNWQzOWRkMTg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oCkBAIC0zMCw4ICszMCw5IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU1ZHRkVQb2ludExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQmKTsKIAotICAgIFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVp
bGRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIExpZ2h0U291cmNlIGxpZ2h0U291cmNlKGNvbnN0
IFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIH07CisKIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVu
dCkpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFl
NGYzMzVmNTRiMjRjZGE0NTlhODQyOWE1OS4uYmM4MjVmYTRhNDUxMTAzMWI5MmFlOWJhZDFlYjM3
YmUyOWFkMGNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmNwcApAQCAtODgsNTIgKzg4LDYgQEAgdm9pZCBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBjb24KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0
cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotYm9vbCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQotewotICAgIEZFU3BlY3VsYXJMaWdodGluZyogc3Bl
Y3VsYXJMaWdodGluZyA9IHN0YXRpY19jYXN0PEZFU3BlY3VsYXJMaWdodGluZyo+KGVmZmVjdCk7
Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgQVNTRVJUKHJlbmRlcmVyKTsKLSAgICAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5
bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHls
ZSgpLmxpZ2h0aW5nQ29sb3IoKSk7Ci0gICAgICAgIHJldHVybiBzcGVjdWxhckxpZ2h0aW5nLT5z
ZXRMaWdodGluZ0NvbG9yKGNvbG9yKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpzdXJmYWNlU2NhbGVBdHRyKQotICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdodGluZy0+
c2V0U3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKQotICAgICAgICByZXR1cm4gc3BlY3VsYXJMaWdo
dGluZy0+c2V0U3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KCkpOwotICAgIGlmIChh
dHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCi0gICAgICAgIHJldHVy
biBzcGVjdWxhckxpZ2h0aW5nLT5zZXRTcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQo
KSk7Ci0KLSAgICBhdXRvJiBsaWdodFNvdXJjZSA9IGNvbnN0X2Nhc3Q8TGlnaHRTb3VyY2UmPihz
cGVjdWxhckxpZ2h0aW5nLT5saWdodFNvdXJjZSgpKTsKLSAgICBjb25zdCBTVkdGRUxpZ2h0RWxl
bWVudCogbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVsZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQo
dGhpcyk7Ci0gICAgQVNTRVJUKGxpZ2h0RWxlbWVudCk7Ci0KLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OmF6aW11dGhBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0QXpp
bXV0aChsaWdodEVsZW1lbnQtPmF6aW11dGgoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjplbGV2YXRpb25BdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0RWxldmF0
aW9uKGxpZ2h0RWxlbWVudC0+ZWxldmF0aW9uKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6eEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRYKGxpZ2h0RWxlbWVu
dC0+eCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICBy
ZXR1cm4gbGlnaHRTb3VyY2Uuc2V0WShsaWdodEVsZW1lbnQtPnkoKSk7Ci0gICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjp6QXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFoo
bGlnaHRFbGVtZW50LT56KCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRz
QXRYQXR0cikKLSAgICAgICAgcmV0dXJuIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WChsaWdodEVs
ZW1lbnQtPnBvaW50c0F0WCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50
c0F0WUF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFkobGlnaHRF
bGVtZW50LT5wb2ludHNBdFkoKSk7Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2lu
dHNBdFpBdHRyKQotICAgICAgICByZXR1cm4gbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRaKGxpZ2h0
RWxlbWVudC0+cG9pbnRzQXRaKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3Bl
Y3VsYXJFeHBvbmVudEF0dHIpCi0gICAgICAgIHJldHVybiBsaWdodFNvdXJjZS5zZXRTcGVjdWxh
ckV4cG9uZW50KGxpZ2h0RWxlbWVudC0+c3BlY3VsYXJFeHBvbmVudCgpKTsKLSAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKLSAgICAgICAgcmV0dXJu
IGxpZ2h0U291cmNlLnNldExpbWl0aW5nQ29uZUFuZ2xlKGxpZ2h0RWxlbWVudC0+bGltaXRpbmdD
b25lQW5nbGUoKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAoYXR0ck5h
bWUgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIgfHwgYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
OnNwZWN1bGFyQ29uc3RhbnRBdHRyIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzcGVjdWxhckV4
cG9uZW50QXR0ciB8fCBhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKQEAgLTE2MCwyOCArMTE0LDg1IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJp
bWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAordm9pZCBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3RBdHRyaWJ1dGVDaGFuZ2VkKEZpbHRlckVmZmVj
dCYgZWZmZWN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKLSAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8mIHNw
ZWN1bGFyTGlnaHRpbmcgPSBkb3duY2FzdDxGRVNwZWN1bGFyTGlnaHRpbmc+KGVmZmVjdCk7CiAK
LSAgICBpZiAoIWlucHV0MSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpIHsKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJl
cik7CisgICAgICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5
aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9y
KCkpOworICAgICAgICBzcGVjdWxhckxpZ2h0aW5nLnNldENvbG9yKGNvbG9yKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIFJlZlB0ciBsaWdodEVsZW1lbnQgPSBTVkdGRUxpZ2h0RWxl
bWVudDo6ZmluZExpZ2h0RWxlbWVudCh0aGlzKTsKLSAgICBpZiAoIWxpZ2h0RWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdXJm
YWNlU2NhbGVBdHRyKSB7CisgICAgICAgIHNwZWN1bGFyTGlnaHRpbmcuc2V0U3VyZmFjZVNjYWxl
KHN1cmZhY2VTY2FsZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
YXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKSB7CisgICAgICAgIHNw
ZWN1bGFyTGlnaHRpbmcuc2V0U3BlY3VsYXJDb25zdGFudChzcGVjdWxhckNvbnN0YW50KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdo
dEVsZW1lbnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKSB7CisgICAgICAgIHNwZWN1bGFyTGln
aHRpbmcuc2V0U3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byYgbGlnaHRTb3VyY2UgPSBjb25zdF9jYXN0PExpZ2h0
U291cmNlJj4oc3BlY3VsYXJMaWdodGluZy5zb3VyY2UoKSk7CisgICAgY29uc3QgU1ZHRkVMaWdo
dEVsZW1lbnQqIGxpZ2h0RWxlbWVudCA9IFNWR0ZFTGlnaHRFbGVtZW50OjpmaW5kTGlnaHRFbGVt
ZW50KHRoaXMpOworICAgIEFTU0VSVChsaWdodEVsZW1lbnQpOworCisgICAgaWYgKGF0dHJOYW1l
ID09IFNWR05hbWVzOjphemltdXRoQXR0cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0QXppbXV0
aChsaWdodEVsZW1lbnQtPmF6aW11dGgoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OmVsZXZhdGlvbkF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldEVsZXZhdGlvbihs
aWdodEVsZW1lbnQtPmVsZXZhdGlvbigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6eEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFgobGlnaHRFbGVtZW50LT54KCkp
OworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp5QXR0cikKKyAgICAgICAgbGln
aHRTb3VyY2Uuc2V0WShsaWdodEVsZW1lbnQtPnkoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnpBdHRyKQorICAgICAgICBsaWdodFNvdXJjZS5zZXRaKGxpZ2h0RWxlbWVu
dC0+eigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0
cikKKyAgICAgICAgbGlnaHRTb3VyY2Uuc2V0UG9pbnRzQXRYKGxpZ2h0RWxlbWVudC0+cG9pbnRz
QXRYKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRy
KQorICAgICAgICBsaWdodFNvdXJjZS5zZXRQb2ludHNBdFkobGlnaHRFbGVtZW50LT5wb2ludHNB
dFkoKSk7CisgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIp
CisgICAgICAgIGxpZ2h0U291cmNlLnNldFBvaW50c0F0WihsaWdodEVsZW1lbnQtPnBvaW50c0F0
WigpKTsKKyAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVu
dEF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldFNwZWN1bGFyRXhwb25lbnQobGlnaHRFbGVt
ZW50LT5zcGVjdWxhckV4cG9uZW50KCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05h
bWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpCisgICAgICAgIGxpZ2h0U291cmNlLnNldExpbWl0
aW5nQ29uZUFuZ2xlKGxpZ2h0RWxlbWVudC0+bGltaXRpbmdDb25lQW5nbGUoKSk7CisgICAgZWxz
ZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAorc3RkOjp0dXBsZTxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBh
dXRvIGlucHV0MSA9IGJ1aWxkZXIubmFtZWRFZmZlY3QoaW4xKCkpOworICAgIGlmICghaW5wdXQx
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGhhc0ZpbHRlckVmZmVjdCgpKQorICAg
ICAgICByZXR1cm4geyBmaWx0ZXJFZmZlY3QoKSwgeyBpbnB1dDEucmVsZWFzZU5vbk51bGwoKSB9
IH07CisgICAgCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBSZWZQdHIgbGlnaHRFbGVtZW50ID0gU1ZHRkVMaWdodEVs
ZW1lbnQ6OmZpbmRMaWdodEVsZW1lbnQodGhpcyk7CisgICAgaWYgKCFsaWdodEVsZW1lbnQpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50
LT5saWdodFNvdXJjZShidWlsZGVyKTsKKwogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5
bGUoKS5saWdodGluZ0NvbG9yKCkpOworICAgIAorICAgIHNldEZpbHRlckVmZmVjdChGRVNwZWN1
bGFyTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29uc3Rh
bnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0
TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBG
RVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwg
c3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhY
KCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKLSAgICByZXR1cm4gZWZmZWN0OworICAg
IHJldHVybiB7IGZpbHRlckVmZmVjdCgpLCB7IGlucHV0MS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmgKaW5kZXggODk3YjhkZTE1NmQxYzc5YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3YjE0Ni4u
ZmE2ODc4ZmI1Y2I0NzY0NmM0MmVlM2I5MDc3YWY4ZTE3MjAxOTIwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCkBAIC01Nyw4ICs1
Nyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHNldEZp
bHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikg
b3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmlsdGVyRWZmZWN0QXR0cmli
dXRlQ2hhbmdlZChGaWx0ZXJFZmZlY3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7
CisgICAgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVy
dHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmlt
YXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCmluZGV4IGQ2ZGEz
MTA2NGNiMWIzN2U4Y2M5Mzg3NGVhNGFhOWNmMmRmYmZmZWUuLjQ0Y2E4ODYyZWU4ODgyMmJkODFk
ZDJhMTI3NWNjMzZiYmMyYmNmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwb3RMaWdodEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RM
aWdodEVsZW1lbnQuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjAsMTEgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
Ci0jaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlICJTcG90TGlnaHRTb3VyY2VEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzksMjkgKzM3LDExIEBAIFJlZjxTVkdGRVNwb3RMaWdodEVsZW1lbnQ+IFNWR0ZF
U3BvdExpZ2h0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhCiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVTcG90TGlnaHRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KSk7CiB9CiAKLVJlZjxMaWdodFNvdXJjZT4gU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNv
dXJjZShTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyKSBjb25zdAorTGlnaHRTb3VyY2UgU1ZHRkVT
cG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZShjb25zdCBTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3QKIHsKLSAgICBGbG9hdFBvaW50M0QgcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIHBvaW50
c0F0OwotCi0gICAgaWYgKGJ1aWxkZXIucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6
OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJl
ZmVyZW5jZUJveCA9IGJ1aWxkZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLSAgICAgICAgCi0gICAg
ICAgIHBvc2l0aW9uLnNldFgocmVmZXJlbmNlQm94LngoKSArIHgoKSAqIHJlZmVyZW5jZUJveC53
aWR0aCgpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0WShyZWZlcmVuY2VCb3gueSgpICsgeSgpICog
cmVmZXJlbmNlQm94LmhlaWdodCgpKTsKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RS
L1NWRy9maWx0ZXJzLmh0bWwjZmVQb2ludExpZ2h0WkF0dHJpYnV0ZSBhbmQgaHR0cHM6Ly93d3cu
dzMub3JnL1RSL1NWRy9jb29yZHMuaHRtbCNVbml0c192aWV3cG9ydF9wZXJjZW50YWdlCi0gICAg
ICAgIHBvc2l0aW9uLnNldFooeigpICogZXVjbGlkaWFuRGlzdGFuY2UocmVmZXJlbmNlQm94Lm1p
blhNaW5ZQ29ybmVyKCksIHJlZmVyZW5jZUJveC5tYXhYTWF4WUNvcm5lcigpKSAvIHNxcnRPZlR3
b0Zsb2F0KTsKLQotICAgICAgICBwb2ludHNBdC5zZXRYKHJlZmVyZW5jZUJveC54KCkgKyBwb2lu
dHNBdFgoKSAqIHJlZmVyZW5jZUJveC53aWR0aCgpKTsKLSAgICAgICAgcG9pbnRzQXQuc2V0WShy
ZWZlcmVuY2VCb3gueSgpICsgcG9pbnRzQXRZKCkgKiByZWZlcmVuY2VCb3guaGVpZ2h0KCkpOwot
ICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVBvaW50
TGlnaHRaQXR0cmlidXRlIGFuZCBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1s
I1VuaXRzX3ZpZXdwb3J0X3BlcmNlbnRhZ2UKLSAgICAgICAgcG9pbnRzQXQuc2V0Wihwb2ludHNB
dFooKSAqIGV1Y2xpZGlhbkRpc3RhbmNlKHJlZmVyZW5jZUJveC5taW5YTWluWUNvcm5lcigpLCBy
ZWZlcmVuY2VCb3gubWF4WE1heFlDb3JuZXIoKSkgLyBzcXJ0T2ZUd29GbG9hdCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSk7Ci0g
ICAgICAgIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBvaW50c0F0WCgpLCBwb2ludHNBdFkoKSwg
cG9pbnRzQXRaKCkpOwotICAgIH0KLQotICAgIHJldHVybiBTcG90TGlnaHRTb3VyY2U6OmNyZWF0
ZShwb3NpdGlvbiwgcG9pbnRzQXQsIHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5n
bGUoKSk7CisgICAgYXV0byBwb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKTsK
KyAgICBhdXRvIHBvaW50c0F0ID0gRmxvYXRQb2ludDNEKHBvaW50c0F0WCgpLCBwb2ludHNBdFko
KSwgcG9pbnRzQXRaKCkpOworICAgIHJldHVybiB7IFNwb3RMaWdodFNvdXJjZURhdGEocG9zaXRp
b24sIHBvaW50c0F0LCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0aW5nQ29uZUFuZ2xlKCkpIH07
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuaAppbmRl
eCAzZjc3MTdjMTI2NWM0ZjMxZjUzMDg4NjhkNDdjOTc4Nzk3YTczMjExLi5jYWI5NjQ5NzYwMjcy
MDcyYzYzNjNkN2VlOWI0M2FiYTk3NjNlZGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BvdExpZ2h0RWxlbWVudC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNSBPbGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzAsNyArMzEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR0ZF
U3BvdExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAg
IFJlZjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIExpZ2h0U291cmNlIGxpZ2h0U291cmNlKGNvbnN0IFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTVkdGRVNwb3RM
aWdodEVsZW1lbnQpID09IHNpemVvZihTVkdGRUxpZ2h0RWxlbWVudCkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXggMzliZGNjNzczNTk2NjUwMzZlMWFlNzQ3
NjEyZWFkNmY5YWMzNzM3MC4uNjM3YTMyZjljZGUyOGQ0YzYzMmUxMzFiNzI5NDg4YWM4Y2NiYTBh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcApAQCAtNzAsMTYgKzcw
LDE2IEBAIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK3N0ZDo6dHVwbGU8UmVmUHRyPEZpbHRl
ckVmZmVjdD4sIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIpCiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLQorICAgIGF1dG8gaW5wdXQxID0gYnVp
bGRlci5uYW1lZEVmZmVjdChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFoYXNGaWx0ZXJFZmZl
Y3QoKSkKKyAgICAgICAgc2V0RmlsdGVyRWZmZWN0KEZFVGlsZTo6Y3JlYXRlKCkpOwogCi0gICAg
YXV0byBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IGlucHV0MSB9OwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgcmV0dXJuIHsg
ZmlsdGVyRWZmZWN0KCksIHsgaW5wdXQxLnJlbGVhc2VOb25OdWxsKCkgfSB9OwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0NWIzMjcxODUxZDdmYzBkYzJk
M2JjYzg3OWEyMmRjNDJhMzNhOTFmLi5iZTM3OTY5OTA5MzAxZDI5NmNmZjVlMDE5NzQyZDQwNWEx
YjEwZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKQEAgLTQyLDcgKzQy
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVmPEZpbHRl
ckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAppbmRleCAx
MTU2MTExOWQ4M2UzZmM3ODhhNDJiMTQ4NjdjNjU2NDEyMzM0YTRkLi4xMjk0YmY0YTUxYTA1MjRm
YzM5MmYxODQ0NmRjZWUxMzM1ZDQwYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuY3BwCkBAIC04OCwyNCArODgsNiBAQCB2b2lkIFNWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0bwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1ib29sIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCi17Ci0gICAgRkVUdXJidWxlbmNlKiB0dXJidWxlbmNlID0g
c3RhdGljX2Nhc3Q8RkVUdXJidWxlbmNlKj4oZWZmZWN0KTsKLSAgICBpZiAoYXR0ck5hbWUgPT0g
U1ZHTmFtZXM6OnR5cGVBdHRyKQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0VHlwZSh0
eXBlKCkpOwotICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyKQot
ICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0U3RpdGNoVGlsZXMoc3RpdGNoVGlsZXMoKSk7
Ci0gICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikKLSAgICAg
ICAgcmV0dXJuICh0dXJidWxlbmNlLT5zZXRCYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCgp
KSB8fCB0dXJidWxlbmNlLT5zZXRCYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSgpKSk7Ci0g
ICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzZWVkQXR0cikKLSAgICAgICAgcmV0dXJuIHR1
cmJ1bGVuY2UtPnNldFNlZWQoc2VlZCgpKTsKLSAgICBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6
Om51bU9jdGF2ZXNBdHRyKQotICAgICAgICByZXR1cm4gdHVyYnVsZW5jZS0+c2V0TnVtT2N0YXZl
cyhudW1PY3RhdmVzKCkpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgaWYgKFByb3BlcnR5
UmVnaXN0cnk6OmlzS25vd25BdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CkBAIC0xMTcsMTEgKzk5LDMz
IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Cit2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OmZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGF1dG8mIHR1cmJ1bGVuY2UgPSBkb3du
Y2FzdDxGRVR1cmJ1bGVuY2U+KGVmZmVjdCk7CisgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVz
Ojp0eXBlQXR0cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXRUdXJidWxlbmNlVHlwZSh0eXBlKCkp
OworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpzdGl0Y2hUaWxlc0F0dHIpCisg
ICAgICAgIHR1cmJ1bGVuY2Uuc2V0U3RpdGNoVGlsZXMoc3RpdGNoVGlsZXMoKSk7CisgICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVuY3lBdHRyKSB7CisgICAgICAg
IHR1cmJ1bGVuY2Uuc2V0QmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgoKSk7CisgICAgICAg
IHR1cmJ1bGVuY2Uuc2V0QmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkoKSk7CisgICAgfSBl
bHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpCisgICAgICAgIHR1cmJ1bGVu
Y2Uuc2V0U2VlZChzZWVkKCkpOworICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjpu
dW1PY3RhdmVzQXR0cikKKyAgICAgICAgdHVyYnVsZW5jZS5zZXROdW1PY3RhdmVzKG51bU9jdGF2
ZXMoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3Rk
Ojp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+Pj4g
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpCiB7CiAgICAg
aWYgKGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VGcmVxdWVuY3lZKCkgPCAwKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoZmlsdGVy
LCB0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMo
KSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoIWhhc0ZpbHRlckVmZmVjdCgpKQorICAgICAgICBz
ZXRGaWx0ZXJFZmZlY3QoRkVUdXJidWxlbmNlOjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5
WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMo
KSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpKTsKKworICAgIHJldHVybiB7IGZpbHRlckVmZmVj
dCgpLCB7IH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3NjllMTk4YS4u
Mzk5ZWI4YTUyZjY0N2ZmNmU1YTMxYjU3ODhhMDJmOWMyZmNkNGFhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTgsOCArMTE4LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0
QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBv
dmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWx0ZXJFZmZlY3RBdHRyaWJ1
dGVDaGFuZ2VkKEZpbHRlckVmZmVjdCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBv
dmVycmlkZTsKKyAgICBzdGQ6OnR1cGxlPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBWZWN0b3I8UmVm
PEZpbHRlckVmZmVjdD4+PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCmlu
ZGV4IDU1NzhiNTE5YTM2MjJiZDcwNmFkMjdiZmU0YzYwMDM5MTQ4NThjYTAuLjljNDMxMTM0YTg3
NzA0ZjA2NDlkOTIyYmE5NzE2MzZkZDI1ZTFjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudElubGluZXMuaCIKLSNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJz
ZXJVdGlsaXRpZXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5kZXggZmY1MjIzMDk0NjZiMDQw
YmVmMDg5ZDE1N2IzODZkZmZiYjA1YzYxOS4uMzg2NmQ4OWNkN2UzZjA4NDVkNGE1N2IzNmZiOWY5
OTg3YTMyZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKQEAgLTI1LDkgKzI1LDcgQEAKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlLmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjYsMTEgKzY0LDE1IEBAIHZvaWQgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuCiAgICAgU1ZHRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUp
OwogfQogCi1ib29sIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKQor
dm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnByaW1pdGl2ZUF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQogewotICAgIC8vIFdo
ZW4gYWxsIGZpbHRlcnMgc3VwcG9ydCB0aGlzIG1ldGhvZCwgaXQgd2lsbCBiZSBjaGFuZ2VkIHRv
IGEgcHVyZSB2aXJ0dWFsIG1ldGhvZC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2VmZmVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZmlsdGVyRWZmZWN0QXR0cmlidXRlQ2hhbmdlZCgqbV9lZmZlY3QsIGF0dHJpYnV0ZSk7CisKKyAg
ICBpZiAoYXV0byogcHJpbWl0aXZlUmVuZGVyZXIgPSByZW5kZXJlcigpKQorICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSo+KHByaW1pdGl2ZVJlbmRl
cmVyKS0+cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGUpOwogfQogCiB2b2lkIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTkzLDIyICs5NSw2IEBAIHZvaWQgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3Qg
Q2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVm
ZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAgIEFTU0VSVChmaWx0ZXJFZmZlY3QpOwot
ICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0
cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0
cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCi0gICAgICAgIGZp
bHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
Ojp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwot
ICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0
ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0KLQogUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y3JlYXRlRWxlbWVudFJl
bmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IGM5OGIx
M2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFjYTcuLmQ3ZmZkZGFkMjRiMmMzNmE3OTdk
ZjIyMGI4OWUxMjIwMWZlZDJhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTM2LDEyICszNiw2
IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMpOwogcHVibGljOgot
ICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCopIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3QgPSAwOwotICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1
ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZS4KLSAgICB2aXJ0dWFsIGJvb2wgc2V0Rmls
dGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
LQogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTVkdFbGVtZW50PjsKIAogICAg
IGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB4KCkgY29uc3QgeyByZXR1cm4gbV94LT5jdXJyZW50VmFs
dWUoKTsgfQpAQCAtNTYsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgm
IGhlaWdodEFuaW1hdGVkKCkgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICBTVkdBbmltYXRlZFN0
cmluZyYgcmVzdWx0QW5pbWF0ZWQoKSB7IHJldHVybiBtX3Jlc3VsdDsgfQogCisgICAgdm9pZCBw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpOworICAgIHZpcnR1YWwgc3RkOjp0dXBsZTxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgVmVjdG9y
PFJlZjxGaWx0ZXJFZmZlY3Q+Pj4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpID0gMDsKKwogcHJv
dGVjdGVkOgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIApAQCAtNjQsNyArNjEsMTEgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKLSAgICB2b2lkIHByaW1pdGl2ZUF0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSk7CisgICAgdmlydHVhbCB2
b2lkIGZpbHRlckVmZmVjdEF0dHJpYnV0ZUNoYW5nZWQoRmlsdGVyRWZmZWN0JiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIHsgfQorCisgICAgYm9vbCBoYXNGaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2VmZmVjdDsgfQorICAgIHZvaWQgc2V0RmlsdGVyRWZmZWN0KFJlZjxGaWx0ZXJFZmZl
Y3Q+IGVmZmVjdCkgeyBtX2VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsgfQorICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGZpbHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0OyB9CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBpc0ZpbHRlckVmZmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KQEAgLTczLDYgKzc0LDggQEAgcHJpdmF0ZToKICAgICBib29sIHJlbmRlcmVy
SXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVycmlkZTsKICAgICBib29sIGNoaWxkU2hv
dWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CiAKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2VmZmVjdDsKKyAgICAKICAgICAv
LyBTcGVjOiBJZiB0aGUgeC95IGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0
IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNwZWNpZmllZC4KICAgICAvLyBTcGVjOiBJ
ZiB0aGUgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0
IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEwMCUiIHdlcmUgc3BlY2lmaWVkLgogICAgIFJlZjxTVkdB
bmltYXRlZExlbmd0aD4gbV94IHsgU1ZHQW5pbWF0ZWRMZW5ndGg6OmNyZWF0ZSh0aGlzLCBTVkdM
ZW5ndGhNb2RlOjpXaWR0aCwgIjAlIikgfTsKQEAgLTkwLDEyICs5Myw2IEBAIGlubGluZSB2b2lk
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aW52YWxpZGF0ZSgpCiAgICAg
ICAgIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZh
bGlkYXRpb24oKnByaW1pdGl2ZVJlbmRlcmVyKTsKIH0KIAotaW5saW5lIHZvaWQgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKLXsKLSAgICBpZiAoYXV0byogcHJpbWl0aXZl
UmVuZGVyZXIgPSByZW5kZXJlcigpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZSo+KHByaW1pdGl2ZVJlbmRlcmVyKS0+cHJpbWl0aXZlQXR0cmli
dXRlQ2hhbmdlZChhdHRyaWJ1dGUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlLmNwcAppbmRleCAxMGM4ODQyOWM3MjQwM2RjZWQzYTNmN2VhNDA2MDBi
NTc0NzAzY2U4Li40MTg0MDJiYjAxYWQ4YjMwZjEwMTc5Y2QxZjBjYTNkZmY5OGQ0MzM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmNw
cApAQCAtMzEsMTUgKzMxLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoKQotICAgIDog
bV9hbGlnbihTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1JRCkKLSAgICAsIG1fbWVldE9y
U2xpY2UoU1ZHX01FRVRPUlNMSUNFX01FRVQpCitTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6
OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTdHJpbmdWaWV3IHZhbHVlKQogeworICAgIHBh
cnNlKHZhbHVlKTsKIH0KIAotU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvVmFsdWUoU3RyaW5nVmlldyB2YWx1ZSkKK1NWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9UeXBlIGFsaWduLCBTVkdNZWV0T3JTbGljZVR5cGUgbWVldE9yU2xpY2UpCisgICAgOiBtX2Fs
aWduKGFsaWduKQorICAgICwgbV9tZWV0T3JTbGljZShtZWV0T3JTbGljZSkKIHsKLSAgICBwYXJz
ZSh2YWx1ZSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZTo6c2V0QWxpZ24odW5zaWduZWQgc2hvcnQgYWxpZ24pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlLmgKaW5kZXggNTE0MGY2OWRmODI3NmI1
ZTc0MzZiMjhmZDU0YzgzMTdjMjk5YWIzMC4uMDlkYzQ0Nzg0ZDc3MjU5OWNhY2FiMDE3YWMwY2Yz
MGMyNTliYTIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUuaApAQCAtNTEsOCArNTEsOSBAQCBwdWJsaWM6CiAgICAgICAgIFNWR19NRUVU
T1JTTElDRV9TTElDRSA9IDIKICAgICB9OwogCi0gICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlKCk7CisgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKCkgPSBkZWZhdWx0OwogICAg
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZShTdHJpbmdWaWV3KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5
cGUsIFNWR01lZXRPclNsaWNlVHlwZSk7CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRBbGln
bih1bnNpZ25lZCBzaG9ydCk7CiAgICAgdW5zaWduZWQgc2hvcnQgYWxpZ24oKSBjb25zdCB7IHJl
dHVybiBtX2FsaWduOyB9CkBAIC03MCwxMyArNzEsMzkgQEAgcHVibGljOgogCiAgICAgU3RyaW5n
IHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVHlwZSBtX2FsaWduOwotICAgIFNWR01lZXRPclNsaWNlVHlwZSBtX21lZXRPclNsaWNl
OworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZUludGVybmFsKFN0
cmluZ1BhcnNpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mLCBib29sIHZhbGlkYXRlKTsKKworICAg
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ24geyBTVkdfUFJFU0VSVkVBU1BFQ1RS
QVRJT19YTUlEWU1JRCB9OworICAgIFNWR01lZXRPclNsaWNlVHlwZSBtX21lZXRPclNsaWNlIHsg
U1ZHX01FRVRPUlNMSUNFX01FRVQgfTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2
b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2FsaWduOworICAgIGVuY29kZXIgPDwgbV9tZWV0
T3JTbGljZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1R5cGU+IGFsaWduOworICAgIGRlY29kZXIgPj4gYWxpZ247CisgICAgaWYgKCFh
bGlnbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
U1ZHTWVldE9yU2xpY2VUeXBlPiBtZWV0T3JTbGljZTsKKyAgICBkZWNvZGVyID4+IG1lZXRPclNs
aWNlOworICAgIGlmICghbWVldE9yU2xpY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlKCphbGlnbiwgKm1lZXRP
clNsaWNlKTsKK30KKwogdGVtcGxhdGU8PiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlPiB7CiAgICAgc3RhdGljIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUoKTsgfQogICAgIHN0YXRpYyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgZnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykgeyByZXR1cm4gU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlKHN0cmluZyk7IH0KQEAgLTg1LDMgKzExMiwzNSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU+IHsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlOjpTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1R5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6U1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19VTktOT1dOLAorICAgICAgICBXZWJDb3Jl
OjpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWU6OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05P
TkUsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSU4sCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JRFlNSU4sCisgICAg
ICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1BWFlNSU4sCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQsCisgICAgICAgIFdlYkNv
cmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
WE1JRFlNSUQsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQsCisgICAgICAgIFdlYkNvcmU6OlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNQVgs
CisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNF
UlZFQVNQRUNUUkFUSU9fWE1JRFlNQVgsCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZTo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNQVgKKyAgICA+Owor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvVmFsdWU6OlNWR01lZXRPclNsaWNlVHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1
ZTo6U1ZHTWVldE9yU2xpY2VUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZTo6U1ZHX01FRVRPUlNMSUNFX1VOS05PV04sCisgICAgICAgIFdlYkNvcmU6
OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX01FRVRPUlNMSUNFX01FRVQsCisgICAg
ICAgIFdlYkNvcmU6OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZTo6U1ZHX01FRVRPUlNMSUNF
X1NMSUNFCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5
MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li5kYjE0NDAyNDdjZGMyOTViMGZmZTkz
ZmJjZGNiYzIzYTRjYThlYjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
MTMxICsyNCw4NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZFSW1hZ2Uu
aCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgor
I2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisjaW5jbHVkZSAiRmlsdGVyUmVzdWx0LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdl
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKLSAgICAsIG1faW1hZ2Uo
aW1hZ2UpCi0gICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykK
LXsKLX0KLQotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVl
U2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlw
ZTo6SW1hZ2UpCi0gICAgLCBtX3RyZWVTY29wZSgmdHJlZVNjb3BlKQotICAgICwgbV9ocmVmKGhy
ZWYpCi0gICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKK1Jl
ZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoUmVmPEltYWdlPiYmIGltYWdlLCBjb25zdCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CisgICAgYXV0
byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfTsKKyAgICByZXR1
cm4gY3JlYXRlKFdURk1vdmUoaW1hZ2UpLCBpbWFnZVJlY3QsIHByZXNlcnZlQXNwZWN0UmF0aW8p
OwogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKEZpbHRlciYgZmls
dGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlKFNv
dXJjZUltYWdlJiYgc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIGltYWdlLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShXVEZN
b3ZlKHNvdXJjZUltYWdlKSwgc291cmNlSW1hZ2VSZWN0LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7
CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRl
ciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29wZSwgaHJlZiwg
cHJlc2VydmVBc3BlY3RSYXRpbykpOwotfQotCi12b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKK0ZFSW1hZ2U6OkZFSW1hZ2UoU291cmNlSW1hZ2UmJiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6IEZpbHRlckVmZmVjdChU
eXBlOjpGRUltYWdlKQorICAgICwgbV9zb3VyY2VJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSkK
KyAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKKyAgICAsIG1fcHJlc2Vy
dmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewotICAgIEZsb2F0UmVjdCBwYWlu
dFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChtX2ltYWdl
KSB7Ci0gICAgICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBt
X3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwot
ICAgIH0gZWxzZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVy
ZXIoKSkKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFw
UmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0KLSAgICBp
ZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVj
dFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVj
dCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVj
dCkpOwogfQogCi1SZW5kZXJFbGVtZW50KiBGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIoKSBj
b25zdAorRmxvYXRSZWN0IEZFSW1hZ2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYsIGNvbnN0IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3RyZWVTY29wZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVu
Y2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKG1faHJlZiwgKm1fdHJlZVNjb3BlKTsKLSAg
ICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigpOworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fc291cmNlSW1hZ2UsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPElt
YWdlPiYpIHsKKyAgICAgICAgICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBwcmltaXRpdmVTdWJyZWdp
b247CisgICAgICAgICAgICBhdXRvIHNyY1JlY3QgPSBtX3NvdXJjZUltYWdlUmVjdDsKKyAgICAg
ICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRyYXdpbmdSZWN0LCBz
cmNSZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeS5jbGlwVG9NYXhQcmltaXRpdmVT
dWJyZWdpb24oZHJhd2luZ1JlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgICAgIH0sCisg
ICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlQnVmZmVyPiYpIHsKKyAgICAgICAgICAgIHJldHVy
biBnZW9tZXRyeS5jbGlwVG9GaWx0ZXJSZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgWyZdIChSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOworICAgICAgICB9CisgICAgKTsKIH0KIAotdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQorYm9vbCBGRUltYWdlOjphcHBseVNvZnR3YXJlKEZpbHRlckltYWdlJiBvdXRw
dXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21l
dHJ5KSBjb25zdAogewotICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJl
bmRlcmVyKCk7Ci0gICAgaWYgKCFtX2ltYWdlICYmICFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKLQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0o
KS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKLQotICAgIEZsb2F0UmVjdCBz
cmNSZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFi
c29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0
aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgfQotCi0gICAgSW50UG9p
bnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICBk
ZXN0UmVjdC5tb3ZlKC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKLQot
ICAgIGF1dG8mIGNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgaWYgKHJl
bmRlcmVyKSB7Ci0gICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAgICAgICBjb250ZXh0LmNvbmNh
dENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0KLSAgICAgICAgUmVmUHRyIGNvbnRleHROb2RlID0g
ZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChj
b250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkpIHsKLSAgICAgICAgICAgIFNWR0xlbmd0
aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0Tm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBG
bG9hdFNpemUgdmlld3BvcnRTaXplOwotCi0gICAgICAgICAgICAvLyBJZiB3ZSdyZSByZWZlcmVu
Y2luZyBhbiBlbGVtZW50IHdpdGggcGVyY2VudGFnZSB1bml0cywgZWcuIDxyZWN0IHdpdGg9IjMw
JSI+IHRob3NlIHZhbHVlcyB3ZXJlIHJlc29sdmVkIGFnYWluc3QgdGhlIHZpZXdwb3J0LgotICAg
ICAgICAgICAgLy8gQnVpbGQgdXAgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IG1hcHMgZnJvbSB0aGUg
dmlld3BvcnQgc3BhY2UgdG8gdGhlIGZpbHRlciBwcmltaXRpdmUgc3VicmVnaW9uLgotICAgICAg
ICAgICAgaWYgKGxlbmd0aENvbnRleHQuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKSkK
LSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbmNhdENUTShtYWtlTWFwQmV0d2VlblJlY3RzKEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIHZpZXdwb3J0U2l6ZSksIGRlc3RSZWN0KSk7CisgICAgYXV0
byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VSZWN0ID0gb3V0cHV0
LnByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGF1dG8mIG91dHB1dENvbnRleHQgPSBvdXRwdXRJ
bWFnZS0+Y29udGV4dCgpOworCisgICAgV1RGOjpzd2l0Y2hPbihtX3NvdXJjZUltYWdlLAorICAg
ICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7CisgICAgICAgICAgICBhdXRvIHNy
Y1JlY3QgPSBtX3NvdXJjZUltYWdlUmVjdDsKKyAgICAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RS
YXRpby50cmFuc2Zvcm1SZWN0KGltYWdlUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBpbWFn
ZVJlY3QgPSBnZW9tZXRyeS5tYXBJbWFnZVJlY3QoaW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0
KCkpOworICAgICAgICAgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVj
dCwgc3JjUmVjdCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgICAgIGltYWdlUmVjdC5tb3ZlQnkobV9zb3Vy
Y2VJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgICAgICBpbWFnZVJlY3QgPSBnZW9tZXRy
eS5tYXBJbWFnZVJlY3QoaW1hZ2VSZWN0LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICAg
ICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5s
b2NhdGlvbigpKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CisgICAgKTsKIAotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGVudFRyYW5zZm9ybWF0aW9u
OwotICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0cmVlVG9Db250ZXh0KGNv
bnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGNvbnRleHQuZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3Jj
UmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXBy
ZXNlbnRhdGlvbikgY29uc3QKK1RleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdAogewotICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemU7Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIGltYWdlU2l6
ZSA9IG1faW1hZ2UtPnNpemUoKTsKLSAgICBlbHNlIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAgICAgIGltYWdlU2l6ZSA9IGVuY2xvc2luZ0lu
dFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpLnNpemUoKTsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUltYWdlIjsKLSAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB0cyA8PCAiIGltYWdl
LXNpemU9XCIiIDw8IGltYWdlU2l6ZS53aWR0aCgpIDw8ICJ4IiA8PCBpbWFnZVNpemUuaGVpZ2h0
KCkgPDwgIlwiXVxuIjsKKyAgICB0cyA8PCAiIGltYWdlLXNpemU9XCIiIDw8IG1fc291cmNlSW1h
Z2VSZWN0LndpZHRoKCkgPDwgIngiIDw8IG1fc291cmNlSW1hZ2VSZWN0LmhlaWdodCgpIDw8ICJc
Il1cbiI7CiAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGR1bXAgYWxzbyBvYmplY3QgcmV0dXJu
ZWQgYnkgU1ZHRkVJbWFnZTo6aW1hZ2UoKSA/CiAgICAgcmV0dXJuIHRzOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYw
ZWRjZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLjIxYjY5YmRjYmQ0OGQxNDc2MGRi
MGNjYWMzYTA1OGE0MjRmOTFmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDQx
ICsyNCw4OCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3Mg
SW1hZ2U7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgVHJlZVNjb3BlOwogCiBjbGFzcyBG
RUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxGRUltYWdl
PiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHVzaW5nIFNvdXJj
ZUltYWdlID0gc3RkOjp2YXJpYW50PAorICAgICAgICBSZWY8SW1hZ2U+LAorICAgICAgICBSZWY8
SW1hZ2VCdWZmZXI+LAorICAgICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIKKyAgICA+
OwogCi1wcml2YXRlOgotICAgIHZpcnR1YWwgfkZFSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJ
bWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJ
bWFnZT4gY3JlYXRlKFJlZjxJbWFnZT4mJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGUoU291
cmNlSW1hZ2UmJiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworCisgICAgU291cmNlSW1hZ2UmIHNvdXJjZUltYWdl
KCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VTb3VyY2UoU291
cmNlSW1hZ2UmJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJ
bWFnZSk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZWY8RkVJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2UiOyB9Citwcml2YXRlOgor
ICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCi0gICAgRmlsdGVyRWZm
ZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZUltYWdlOyB9CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAKLSAgICBSZW5k
ZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZp
bHRlckdlb21ldHJ5JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBmaW5hbDsKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7Ci0gICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBhcHBseVNvZnR3YXJlKEZpbHRlcklt
YWdlJiBvdXRwdXQsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7
CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIC8vIG1fdHJl
ZVNjb3BlIHdpbGwgbmV2ZXIgYmUgYSBkYW5nbGluZyByZWZlcmVuY2UuIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyNDMKLSAgICBUcmVlU2NvcGUqIG1fdHJl
ZVNjb3BlIHsgbnVsbHB0ciB9OwotICAgIFN0cmluZyBtX2hyZWY7CisgICAgU291cmNlSW1hZ2Ug
bV9zb3VyY2VJbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7CiAgICAgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKIH07CiAKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEZFSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIFdURjo6c3dpdGNoT24obV9zb3VyY2VJbWFnZSwKKyAgICAgICAg
WyZdIChjb25zdCBSZWY8SW1hZ2U+JiBpbWFnZSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbmF0
aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBlbmNvZGVy
IDw8IG5hdGl2ZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICAgICAg
fSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikgewor
ICAgICAgICAgICAgZW5jb2RlciA8PCBpbWFnZUJ1ZmZlci0+cmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgeworICAgICAgICAgICAgZW5jb2Rl
ciA8PCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgIH0KKyAgICApOworCisg
ICAgZW5jb2RlciA8PCBtX3NvdXJjZUltYWdlUmVjdDsKKyAgICBlbmNvZGVyIDw8IG1fcHJlc2Vy
dmVBc3BlY3RSYXRpbzsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9u
YWw8UmVmPEZFSW1hZ2U+PiBGRUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlm
aWVyOworICAgIGRlY29kZXIgPj4gaW1hZ2VJZGVudGlmaWVyOworICAgIGlmICghaW1hZ2VJZGVu
dGlmaWVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IHNvdXJjZUltYWdlUmVjdDsKKyAgICBkZWNvZGVyID4+IHNvdXJjZUltYWdl
UmVjdDsKKyAgICBpZiAoIXNvdXJjZUltYWdlUmVjdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlPiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGRlY29kZXIgPj4gcHJlc2VydmVBc3BlY3RSYXRpbzsK
KyAgICBpZiAoIXByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKCppbWFnZUlkZW50aWZpZXIsICpzb3Vy
Y2VJbWFnZVJlY3QsICpwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJbWFnZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
CmluZGV4IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjUwZTVmOTZk
Zjk3NzYyYmRiZmJiZjY4ZWY0NzI5MWEwNTI3NjE0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDI5ICsyMywxMzIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlclJl
c3VsdC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VB
bHBoYS5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFu
c2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJj
ZURyYXdpbmdSZWdpb24pCi0gICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5n
Qm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQotICAgICwgbV9lZmZlY3RC
Qm94TW9kZShlZmZlY3RCQm94TW9kZSkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3Jl
YXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7CisgICAgRmlsdGVyRWZmZWN0
VmVjdG9yIGJ1aWx0aW5FZmZlY3RzID0geworICAgICAgICBTb3VyY2VHcmFwaGljOjpjcmVhdGUo
KSwKKyAgICAgICAgU291cmNlQWxwaGE6OmNyZWF0ZSgpCisgICAgfTsKKworICAgIFNWR0ZpbHRl
ckJ1aWxkZXIgYnVpbGRlcjsKKyAgICBhdXRvIFtmaWx0ZXJFZmZlY3RzLCBleHByZXNzaW9uXSA9
IGJ1aWxkZXIuYnVpbGRFZmZlY3RzKGZpbHRlckVsZW1lbnQsIGJ1aWx0aW5FZmZlY3RzKTsKKyAg
ICBpZiAoZmlsdGVyRWZmZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGJ1aWx0aW5FZmZlY3RzKSwgV1RGTW92ZShmaWx0
ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSk7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+
IFNWR0ZpbHRlcjo6Y3JlYXRlKEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVmZmVjdHMsIFNW
R0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uKQoreworICAgIEZpbHRlckVmZmVjdFZlY3Rv
ciBidWlsdGluRWZmZWN0cyA9IHsgU291cmNlR3JhcGhpYzo6Y3JlYXRlKCksIFNvdXJjZUFscGhh
OjpjcmVhdGUoKSB9OworICAgIHJldHVybiBjcmVhdGUoV1RGTW92ZShidWlsdGluRWZmZWN0cyks
IFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdURk1vdmUoZXhwcmVzc2lvbikpOworfQorCitSZWZQ
dHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWls
dGluRWZmZWN0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVy
RXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdG
aWx0ZXIoV1RGTW92ZShidWlsdGluRWZmZWN0cyksIFdURk1vdmUoZmlsdGVyRWZmZWN0cyksIFdU
Rk1vdmUoZXhwcmVzc2lvbikpKTsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoRmlsdGVyRWZm
ZWN0VmVjdG9yJiYgYnVpbHRpbkVmZmVjdHMsIEZpbHRlckVmZmVjdFZlY3RvciYmIGZpbHRlckVm
ZmVjdHMsIFNWR0ZpbHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uKQorICAgIDogRmlsdGVyKFR5
cGU6OlNWR0ZpbHRlcikKKyAgICAsIG1fYnVpbHRpbkVmZmVjdHMoV1RGTW92ZShidWlsdGluRWZm
ZWN0cykpCisgICAgLCBtX2ZpbHRlckVmZmVjdHMoV1RGTW92ZShmaWx0ZXJFZmZlY3RzKSkKKyAg
ICAsIG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQoreworICAgIEFTU0VSVChtX2J1
aWx0aW5FZmZlY3RzLnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoIW1fZmlsdGVyRWZmZWN0cy5p
c0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9leHByZXNzaW9uLmlzRW1wdHkoKSk7Cit9CisKK1Jl
ZjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6aW5kZXhlZEVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGUgdHlwZSwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUgPT0gRmlsdGVy
RWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQorICAgICAgICByZXR1cm4gbV9idWlsdGluRWZm
ZWN0c1swXTsKKworICAgIGlmICh0eXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxw
aGEpCisgICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzWzFdOworCisgICAgQVNTRVJUKGlu
ZGV4IDwgbV9maWx0ZXJFZmZlY3RzLnNpemUoKSk7CisgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0
c1tpbmRleF07Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6bGFzdEVmZmVj
dCgpIGNvbnN0CiB7Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbiA9IGFic29sdXRlVHJhbnNm
b3JtLm1hcFJlY3QoZmlsdGVyUmVnaW9uKTsKKyAgICBpZiAobV9leHByZXNzaW9uLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBbdHlwZSwgaW5kZXgsIGxldmVs
XSA9IG1fZXhwcmVzc2lvbi5sYXN0KCk7CisgICAgcmV0dXJuIGluZGV4ZWRFZmZlY3QodHlwZSwg
aW5kZXgpOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGaWx0ZXJFZmZlY3RWZWN0b3IgU1ZHRmlsdGVyOjpl
ZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlKSBjb25zdAogewotICAgIGlmICht
X2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdC
b3guc2l6ZSgpOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBlZmZlY3RzOworCisgICAgZm9yIChh
dXRvIGVmZmVjdCA6IG1fZmlsdGVyRWZmZWN0cykgeworICAgICAgICBpZiAoZWZmZWN0LT50eXBl
KCkgPT0gdHlwZSkKKyAgICAgICAgICAgIGVmZmVjdHMuYXBwZW5kKFdURk1vdmUoZWZmZWN0KSk7
CisgICAgfQorCisgICAgcmV0dXJuIGVmZmVjdHM7CisKK30KKworYm9vbCBTVkdGaWx0ZXI6OmFw
cGx5KEZpbHRlclJlc3VsdCYgcmVzdWx0LCBGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2ssIGNvbnN0
IEZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKK3sKKyAgICBpZiAoIWxhc3RFZmZlY3Qo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBzb3Vy
Y2VJbWFnZTsKKyAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlSW1hZ2Ug
PSBzdGFjay50YWtlTGFzdCgpOwogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJS
ZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBtX2ZpbHRl
clJlZ2lvbi5zaXplKCk7CisgICAgQVNTRVJUKHN0YWNrLmlzRW1wdHkoKSk7CisKKyAgICBpZiAo
YXV0byBpbWFnZSA9IHJlc3VsdC5pbWFnZXMoKS5nZXQoeyAqdGhpcyB9KSkgeworICAgICAgICBz
dGFjay5hcHBlbmQoeyAqaW1hZ2UgfSk7CisgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9CisK
KyAgICBmb3IgKGF1dG8gW3R5cGUsIGluZGV4LCBsZXZlbF0gOiBtX2V4cHJlc3Npb24pIHsKKyAg
ICAgICAgYXV0byBlZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5cGUsIGluZGV4KTsKKyAgICAgICAg
YXV0byBib3VuZGFyeVNldCA9IGdlb21ldHJ5LmJvdW5kYXJ5U2V0KHR5cGUsIGluZGV4KTsKKwor
ICAgICAgICBpZiAoZWZmZWN0LT50eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VH
cmFwaGljKSB7CisgICAgICAgICAgICBpZiAoIXNvdXJjZUltYWdlKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgc3RhY2suYXBwZW5kKHsgKnNvdXJjZUltYWdl
IH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFlZmZlY3QtPmFwcGx5KHJlc3VsdCwgc3Rh
Y2ssIGdlb21ldHJ5LCBib3VuZGFyeVNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6
Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZl
Y3RCQm94TW9kZSkKK1RleHRTdHJlYW0mIFNWR0ZpbHRlcjo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGFic29sdXRlVHJhbnNm
b3JtLCBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0
ZXJSZWdpb24sIGVmZmVjdEJCb3hNb2RlKSk7CisgICAgYXV0byBlbmQgPSBtX2V4cHJlc3Npb24u
cmVuZCgpOworCisgICAgZm9yIChhdXRvIGl0ID0gbV9leHByZXNzaW9uLnJiZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYXV0byBbdHlwZSwgaW5kZXgsIGxldmVsXSA9ICppdDsK
KyAgICAgICAgaWYgKHR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkKKyAg
ICAgICAgICAgICsraXQ7CisKKyAgICAgICAgYXV0byBlZmZlY3QgPSBpbmRleGVkRWZmZWN0KHR5
cGUsIGluZGV4KTsKKyAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUo
dHMsIGxldmVsKTsKKyAgICAgICAgZWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCBy
ZXByZXNlbnRhdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIHRzOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2Yu
LmMwNzljYTdjNzg3OTQwMDRjNDE5OWM4NWUyYjkwNmJlNjZjNzQ3YWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDQxICsyMSw0NiBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0VmVjdG9yLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0Zp
bHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZH
RmlsdGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAKLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2Uo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBm
aWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRlRmlsdGVyUmVnaW9u
OyB9CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0
ZXJFbGVtZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+
IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBmaWx0ZXJFZmZlY3RzLCBTVkdGaWx0ZXJFeHBy
ZXNzaW9uJiYpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9h
dFNpemUpIGNvbnN0IGZpbmFsOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3Qo
KSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCB0
YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0K
KyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGZpbHRlckVmZmVjdHMoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlckVmZmVjdHM7IH0KKyAgICBjb25zdCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBl
eHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAKLSAgICBib29sIGlz
U1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEZpbHRlckVmZmVj
dFZlY3RvciBlZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CiAKIHByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdG
aWx0ZXI+IGNyZWF0ZShGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVy
RWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmKTsKKwor
ICAgIFNWR0ZpbHRlcihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBidWlsdGluRWZmZWN0cywgRmlsdGVy
RWZmZWN0VmVjdG9yJiYgZmlsdGVyRWZmZWN0cywgU1ZHRmlsdGVyRXhwcmVzc2lvbiYmKTsKKwor
ICAgIFJlZjxGaWx0ZXJFZmZlY3Q+IGluZGV4ZWRFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlLCB1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICBib29sIGFwcGx5KEZpbHRlclJlc3VsdCYsIEZp
bHRlckltYWdlVmVjdG9yJiBzdGFjaywgY29uc3QgRmlsdGVyR2VvbWV0cnkmKSBjb25zdCBmaW5h
bDsKKworICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYs
IEZpbHRlclJlcHJlc2VudGF0aW9uKSBjb25zdCBmaW5hbDsKIAotICAgIEZsb2F0UmVjdCBtX2Fi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGlu
Z0JveDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJl
Y3QgbV9maWx0ZXJSZWdpb247Ci0gICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworICAgIEZpbHRl
ckVmZmVjdFZlY3RvciBtX2J1aWx0aW5FZmZlY3RzOworICAgIEZpbHRlckVmZmVjdFZlY3RvciBt
X2ZpbHRlckVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Npb247CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQogICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmlsdGVyKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0
aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc1NWR0ZpbHRlcigpOyB9CiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDk2ZjNhODA1MDQyOTU1NTgxMDM0ZDk4
YTRmZGFjNGVhZjMwODdiOTQuLjE3ZDQzODk5NTMyZTliZGMxMTI4N2MxYzU4YTliZTU5ZjU4MTg4
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDg3ICsyMSwxODQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNs
dWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVk
ZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisKKyNpZiBFTkFCTEUoREVTVElO
QVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgor
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmls
dGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQorVmVjdG9yPEZp
bHRlckJvdW5kYXJ5U2V0PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdEJvdW5k
YXJ5U2V0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIGF1dG8gcHJpbWl0aXZlVW5pdHMgPSBmaWx0ZXJF
bGVtZW50LnByaW1pdGl2ZVVuaXRzKCk7CisgICAgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBm
aWx0ZXJFZmZlY3RCb3VuZGFyeVNldHM7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQg
OiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZp
bHRlckVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gYm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRl
eHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigmZWZmZWN0RWxlbWVudCwgcHJpbWl0aXZlVW5pdHMsIHRhcmdldEJvdW5kaW5nQm94KTsKKyAg
ICAgICAgCisgICAgICAgIE9wdGlvblNldDxGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M+IGZsYWdz
OworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRy
KSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gp
OworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0
dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFz
WSk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3
aWR0aEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFn
czo6SGFzV2lkdGgpOworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6aGVpZ2h0QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRh
cnlTZXQ6OkZsYWdzOjpIYXNIZWlnaHQpOworCisgICAgICAgIGZpbHRlckVmZmVjdEJvdW5kYXJ5
U2V0cy5hcHBlbmQoeyBib3VuZGFyaWVzLCBmbGFncyB9KTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmlsdGVyRWZmZWN0Qm91bmRhcnlTZXRzOworfQorCitzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdFZl
Y3RvciwgU1ZHRmlsdGVyRXhwcmVzc2lvbj4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3Rz
KFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgYnVpbHRpbkVmZmVjdHMpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50
Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMo
KSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHNldHVw
QnVpbHRpbkVmZmVjdHMoYnVpbHRpbkVmZmVjdHMpOworCisgICAgRmlsdGVyRWZmZWN0c0lucHV0
cyBlZmZlY3RzSW5wdXRzOworICAgIGlmICghYnVpbGRFZmZlY3RzKGZpbHRlckVsZW1lbnQsIGVm
ZmVjdHNJbnB1dHMpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFidWlsZEV4cHJl
c3Npb24oZWZmZWN0c0lucHV0cykpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4g
eyBXVEZNb3ZlKG1fZmlsdGVyRWZmZWN0cyksIFdURk1vdmUobV9leHByZXNzaW9uKSB9OworfQor
Cit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBidWlsdGluRWZmZWN0cykKK3sKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFk
ZChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1lKCksIGJ1aWx0aW5FZmZlY3RzWzBdKTsK
KyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUFscGhhTmFtZSgp
LCBidWlsdGluRWZmZWN0c1sxXSk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRl
ckJ1aWxkZXI6OnNvdXJjZUdyYXBoaWMoKSBjb25zdAoreworICAgIHJldHVybiBtX2J1aWx0aW5F
ZmZlY3RzLmdldChGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1lKCkpOworfQorCitSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpzb3VyY2VBbHBoYSgpIGNvbnN0CiB7
Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBz
b3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZm
ZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFwaGljKSk7Ci0gICAgYWRk
QnVpbHRpbkVmZmVjdHMoKTsKKyAgICByZXR1cm4gbV9idWlsdGluRWZmZWN0cy5nZXQoRmlsdGVy
RWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKSk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCit2
b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZE5hbWVkRWZmZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5h
bWUsIFJlZjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKIHsKLSAgICBpZiAoaWQuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdDsKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbV9sYXN0RWZmZWN0ID0gZWZmZWN0LnB0cigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMoaWQpKQorICAgIGlm
IChtX2J1aWx0aW5FZmZlY3RzLmNvbnRhaW5zKG5hbWUpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2xhc3RFZmZlY3QgPSBlZmZlY3Q7Ci0gICAgbV9uYW1lZEVmZmVjdHMuc2V0KGlkLCBtX2xh
c3RFZmZlY3QpOworICAgIG1fbGFzdEVmZmVjdCA9IGVmZmVjdC5wdHIoKTsKKyAgICBtX25hbWVk
RWZmZWN0cy5zZXQobmFtZSwgV1RGTW92ZShlZmZlY3QpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6Z2V0RWZmZWN0QnlJZChjb25zdCBBdG9tU3RyaW5nJiBp
ZCkgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6Om5hbWVkRWZm
ZWN0KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKGlkLmlzRW1wdHko
KSkgeworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAobV9sYXN0RWZmZWN0
KQogICAgICAgICAgICAgcmV0dXJuIG1fbGFzdEVmZmVjdDsKIAotICAgICAgICByZXR1cm4gbV9i
dWlsdGluRWZmZWN0cy5nZXQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpKTsKKyAgICAgICAg
cmV0dXJuIHNvdXJjZUdyYXBoaWMoKTsKICAgICB9CiAKLSAgICBpZiAobV9idWlsdGluRWZmZWN0
cy5jb250YWlucyhpZCkpCi0gICAgICAgIHJldHVybiBtX2J1aWx0aW5FZmZlY3RzLmdldChpZCk7
CisgICAgaWYgKG1fYnVpbHRpbkVmZmVjdHMuY29udGFpbnMobmFtZSkpCisgICAgICAgIHJldHVy
biBtX2J1aWx0aW5FZmZlY3RzLmdldChuYW1lKTsKIAotICAgIHJldHVybiBtX25hbWVkRWZmZWN0
cy5nZXQoaWQpOworICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQobmFtZSk7CiB9CiAKLXZv
aWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+JiYgZWZmZWN0LCBSZW5kZXJPYmplY3QqIG9iamVjdCkKKyNpZiBFTkFC
TEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCitzdGF0aWMgQ29sb3JJbnRl
cnBvbGF0aW9uIGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBl
ZmZlY3QuCi0gICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7
Ci0gICAgQVNTRVJUKCFvYmplY3QgfHwgIW1fZWZmZWN0UmVuZGVyZXIuY29udGFpbnMob2JqZWN0
KSk7Ci0gICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgp
KTsKLQotICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKS5zaXplKCk7Ci0KLSAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8gYWRkIHRoZSBz
YW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZklucHV0RWZmZWN0czsgKytpKQotICAgICAgICBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dC0+aW5wdXRFZmZlY3QoaSkpLmFkZChlZmZlY3QuZ2V0KCkpOwotCi0gICAgLy8gSWYgb2JqZWN0
IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgYXR0YWNoZWQgZm9yIHNvbWUK
LSAgICAvLyByZWFzb24sIHdoaWNoIGluIHR1cm4gbWVhbiB0aGF0IGNlcnRhaW4gdHlwZXMgb2Yg
aW52YWxpZGF0aW9uIHdpbGwgbm90Ci0gICAgLy8gd29yayAodGhlIExheW91dE9iamVjdCAtPiBG
aWx0ZXJFZmZlY3QgbWFwcGluZyB3aWxsIG5vdCBiZSBkZWZpbmVkKS4KLSAgICBpZiAob2JqZWN0
KQotICAgICAgICBtX2VmZmVjdFJlbmRlcmVyLmFkZChvYmplY3QsIGVmZmVjdC5nZXQoKSk7Cisg
ICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVy
biByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMo
KTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhl
IGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJh
Y3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlv
bkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwor
ICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87CiB9CisjZW5kaWYK
IAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQorYm9vbCBTVkdGaWx0ZXJC
dWlsZGVyOjpidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgRmls
dGVyRWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cykKIHsKLSAgICBtX2xhc3RFZmZlY3QgPSBu
dWxscHRyOwotICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZWZlcmVu
Y2VzLmNsZWFyKCk7Ci0gICAgbV9lZmZlY3RSZW5kZXJlci5jbGVhcigpOwotICAgIGFkZEJ1aWx0
aW5FZmZlY3RzKCk7CisgICAgZWZmZWN0c0lucHV0cy5zZXQoKnNvdXJjZUFscGhhKCksIEZpbHRl
ckVmZmVjdFZlY3RvciB7ICpzb3VyY2VHcmFwaGljKCkgfSk7CisKKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8gW2VmZmVjdCwgaW5wdXRz
XSA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9T
UEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1l
bnQoZWZmZWN0RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAg
ICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCisgICAgCisgICAgICAgIGVmZmVjdHNJbnB1dHMu
c2V0KHsgKmVmZmVjdCB9LCBXVEZNb3ZlKGlucHV0cykpOworICAgICAgICBhZGROYW1lZEVmZmVj
dChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCB7ICplZmZlY3QgfSk7CisKKyAgICAgICAgbV9maWx0
ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVj
dXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQorYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWls
ZEV4cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgY29uc3QgRmlsdGVy
RWZmZWN0c0lucHV0cyYgZWZmZWN0c0lucHV0cywgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaywg
dW5zaWduZWQgbGV2ZWwpCiB7Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm47CisgICAgLy8gQSBjeWNsZSBpcyBkZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29u
dGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVmZmVjdC5w
dHIoKSA9PSBzb3VyY2VHcmFwaGljKCkpCisgICAgICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwg
eyBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMsIDAsIGxldmVsIH0pOworICAgIGVs
c2UgaWYgKGVmZmVjdC5wdHIoKSA9PSBzb3VyY2VBbHBoYSgpKQorICAgICAgICBtX2V4cHJlc3Np
b24uaW5zZXJ0KDAsIHsgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSwgMSwgbGV2ZWwg
fSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2ZpbHRlckVmZmVjdHMuY29udGFpbnMo
ZWZmZWN0KSk7CisgICAgICAgIG1fZXhwcmVzc2lvbi5pbnNlcnQoMCwgeyBlZmZlY3QtPnR5cGUo
KSwgbV9maWx0ZXJFZmZlY3RzLmZpbmQoZWZmZWN0KSwgbGV2ZWwgfSk7CisgICAgfQorCisgICAg
c3RhY2suYXBwZW5kKGVmZmVjdCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0RWZmZWN0IDogZWZm
ZWN0c0lucHV0cy5nZXQoZWZmZWN0KSkgeworICAgICAgICBpZiAoIWJ1aWxkRXhwcmVzc2lvbihp
bnB1dEVmZmVjdCwgZWZmZWN0c0lucHV0cywgc3RhY2ssIGxldmVsICsgMSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAg
IEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoc3RhY2subGFzdCgpLnB0cigp
ID09IGVmZmVjdC5wdHIoKSk7CisKKyAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKGNvbnN0
IEZpbHRlckVmZmVjdHNJbnB1dHMmIGVmZmVjdHNJbnB1dHMpCit7CisgICAgaWYgKCFtX2xhc3RF
ZmZlY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoYXV0byYgcmVmZXJlbmNl
IDogZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpKQotICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNp
dmUocmVmZXJlbmNlKTsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7CisgICAgcmV0dXJu
IGJ1aWxkRXhwcmVzc2lvbih7ICptX2xhc3RFZmZlY3QgfSwgZWZmZWN0c0lucHV0cywgc3RhY2ss
IDApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUw
OGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uZWVlOGRkNWE4ZDcwYjc1NjkwYzE4
YzZlM2E2NjAzNjBmZTk5ODRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdt
YWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDY4ICsyMSw0NSBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIlNWR1VuaXRU
eXBlcy5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgorI2luY2x1ZGUgIlNWR0Zp
bHRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgU1ZHRmlsdGVy
RWxlbWVudDsKIAogY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+IEZp
bHRlckVmZmVjdFNldDsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyKCkgPSBkZWZhdWx0OwogCi0gICAg
U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAg
ICBzdGF0aWMgVmVjdG9yPEZpbHRlckJvdW5kYXJ5U2V0PiBidWlsZEZpbHRlckVmZmVjdEJvdW5k
YXJ5U2V0cyhTVkdGaWx0ZXJFbGVtZW50JiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGlu
Z0JveCk7CiAKLSAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYg
cikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3Vu
ZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KLSAgICAKLSAg
ICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmltaXRpdmVVbml0czsgfQotICAgIHZvaWQgc2V0UHJpbWl0aXZlVW5pdHMoU1ZHVW5p
dFR5cGVzOjpTVkdVbml0VHlwZSB1bml0cykgeyBtX3ByaW1pdGl2ZVVuaXRzID0gdW5pdHM7IH0K
KyAgICBzdGQ6OnR1cGxlPEZpbHRlckVmZmVjdFZlY3RvciwgU1ZHRmlsdGVyRXhwcmVzc2lvbj4g
YnVpbGRFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3Im
IGJ1aWx0aW5FZmZlY3RzKTsKIAotICAgIHZvaWQgYWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0Pik7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbmFtZWRFZmZl
Y3QoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkgY29uc3Q7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21TdHJpbmcmKSBjb25zdDsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFZmZlY3QuZ2V0KCk7IH0K
LQotICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+JiYsIFJlbmRlck9iamVjdCopOworcHJpdmF0ZToKKyAgICB1c2luZyBGaWx0ZXJFZmZl
Y3RzSW5wdXRzID0gSGFzaE1hcDxSZWY8RmlsdGVyRWZmZWN0PiwgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+Pj47CiAKLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0U2V0JiBlZmZlY3RSZWZlcmVuY2Vz
KEZpbHRlckVmZmVjdCogZWZmZWN0KQotICAgIHsKLSAgICAgICAgLy8gT25seSBhbGxvd2VkIGZv
ciBlZmZlY3RzIGJlbG9uZ3MgdG8gdGhpcyBidWlsZGVyLgotICAgICAgICBBU1NFUlQobV9lZmZl
Y3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOwotICAgICAgICByZXR1cm4gbV9lZmZlY3RS
ZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+dmFsdWU7Ci0gICAgfQorICAgIHZvaWQgc2V0dXBCdWls
dGluRWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGJ1aWx0aW5FZmZlY3RzKTsKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKCkgY29uc3Q7CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gc291cmNlQWxwaGEoKSBjb25zdDsKIAotICAgIC8vIFJlcXVpcmVkIHRv
IGNoYW5nZSB0aGUgYXR0cmlidXRlcyBvZiBhIGZpbHRlciBkdXJpbmcgYW4gc3ZnQXR0cmlidXRl
Q2hhbmdlZC4KLSAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRl
ck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9
CisgICAgdm9pZCBhZGROYW1lZEVmZmVjdChjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBSZWY8Rmls
dGVyRWZmZWN0Pik7CisgICAgYm9vbCBidWlsZEVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYsIEZp
bHRlckVmZmVjdHNJbnB1dHMmKTsKIAotICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0gICAgdm9p
ZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CisgICAgYm9vbCBidWlsZEV4
cHJlc3Npb24oY29uc3QgUmVmPEZpbHRlckVmZmVjdD4mLCBjb25zdCBGaWx0ZXJFZmZlY3RzSW5w
dXRzJiwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaywgdW5zaWduZWQgbGV2ZWwpOworICAgIGJv
b2wgYnVpbGRFeHByZXNzaW9uKGNvbnN0IEZpbHRlckVmZmVjdHNJbnB1dHMmKTsKIAotcHJpdmF0
ZToKLSAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCi0gICAgewotICAgICAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkpCi0gICAgICAgICAg
ICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0KCkpOwotICAg
IH0KLQotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVp
bHRpbkVmZmVjdHM7Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0
Pj4gbV9uYW1lZEVmZmVjdHM7Ci0gICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29u
dGFpbnMgdGhvc2UgZmlsdGVyIGVmZmVjdHMsCi0gICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUg
a2V5IGZpbHRlciBlZmZlY3QuCi0gICAgSGFzaE1hcDxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgRmls
dGVyRWZmZWN0U2V0PiBtX2VmZmVjdFJlZmVyZW5jZXM7Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmpl
Y3QqLCBGaWx0ZXJFZmZlY3QqPiBtX2VmZmVjdFJlbmRlcmVyOworICAgIEZpbHRlckVmZmVjdFZl
Y3RvciBtX2ZpbHRlckVmZmVjdHM7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Np
b247CiAKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0
aW5FZmZlY3RzOworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmPEZpbHRlckVmZmVjdD4+IG1f
bmFtZWRFZmZlY3RzOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKLSAg
ICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBTVkdVbml0VHlwZXM6OlNWR1Vu
aXRUeXBlIG1fcHJpbWl0aXZlVW5pdHMgeyBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVVNF
UlNQQUNFT05VU0UgfTsKIH07Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJl
c3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4
cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjUwMmFkYTk2MjcwZTUwMTkzMmM2YzA3YjVmNDc5NTYy
NDAzYjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordXNpbmcgU1ZHRmlsdGVyRXhwcmVzc2lvbiA9IFZlY3RvcjxzdGQ6OnR1
cGxlPEZpbHRlckVmZmVjdDo6VHlwZSwgdW5zaWduZWQsIHVuc2lnbmVkPj47CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBlZWE5MmZk
ZmFmYWY4NjJmMDBkMjEyOTQ4M2U3MTkxYzE3YzZiNjcyLi43MjllNGE0NmYwMTVmMzA2Nzc0Yjlh
YmJlMDQ3MmI0NDYyYjQzMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJ
bWFnZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtMzAwLDYgKzMwMSw0MyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmRyYXdQ
YXR0ZXJuV2l0aFF1YWxpZmllZElkZW50aWZpZXIoUXVhbGlmaWVkUmVuZAogICAgIHJlc291cmNl
Q2FjaGUoKS5yZWNvcmRSZXNvdXJjZVVzZShpbWFnZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmRyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmls
dGVyUmVmZXJlbmNlLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0cnkpCit7CisgICAgUmVm
UHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICBpZiAoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKSB7CisgICAgICAgIGltYWdlQnVmZmVyID0gcmVzb3VyY2VDYWNoZSgpLmNhY2hlZEltYWdl
QnVmZmVyKHsgKmltYWdlQnVmZmVySWRlbnRpZmllciwgbV93ZWJQcm9jZXNzSWRlbnRpZmllciB9
KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh
dXRvIGZpbHRlciA9IGZpbHRlclJlZmVyZW5jZS50YWtlRmlsdGVyKCk7CisKKyAgICBmb3IgKGF1
dG8mIGVmZmVjdCA6IGZpbHRlci0+ZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
SW1hZ2UpKSB7CisgICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdlPihlZmZl
Y3QuZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgY29uc3QgYXV0byogcmVzb3VyY2VJZGVudGlm
aWVyID0gc3RkOjpnZXRfaWY8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPigmZmVJbWFnZS5z
b3VyY2VJbWFnZSgpKTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZUlkZW50aWZpZXIpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSByZXNvdXJjZUNhY2hlKCkuY2Fj
aGVkTmF0aXZlSW1hZ2UoeyAqcmVzb3VyY2VJZGVudGlmaWVyLCBtX3dlYlByb2Nlc3NJZGVudGlm
aWVyIH0pKSB7CisgICAgICAgICAgICBSZWY8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNy
ZWF0ZShSZWZQdHI8TmF0aXZlSW1hZ2U+IHsgbmF0aXZlSW1hZ2UgfSk7CisgICAgICAgICAgICBm
ZUltYWdlLnNldEltYWdlU291cmNlKFdURk1vdmUoaW1hZ2UpKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSByZXNvdXJj
ZUNhY2hlKCkuY2FjaGVkSW1hZ2VCdWZmZXIoeyAqcmVzb3VyY2VJZGVudGlmaWVyLCBtX3dlYlBy
b2Nlc3NJZGVudGlmaWVyIH0pKSB7CisgICAgICAgICAgICBmZUltYWdlLnNldEltYWdlU291cmNl
KHsgKmltYWdlQnVmZmVyIH0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpEcmF3RmlsdGVySW1hZ2VCdWZmZXIo
aW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzb3VyY2VJbWFnZVJlY3QsIFdURk1vdmUoZmlsdGVyKSwg
Z2VvbWV0cnkpLCBpbWFnZUJ1ZmZlci5nZXQoKSk7Cit9CisKIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAg
IGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggNjJhNDk3MDZlMjhiMDFlMGE2Yjg2OWJk
MzNlNjI0ZWM3ZDhiMzY5MS4uMjJiNjM5Yzk0OTMyZjcxOTFiYTYyY2ZkNzkyNmIwNzY0N2RkOTFi
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAorbmFtZXNw
YWNlIElQQyB7CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwpAQCAtODAsNiArODQsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKICAgICB2b2lkIGRyYXdOYXRpdmVJ
bWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogICAgIHZvaWQgZHJhd1BhdHRlcm4o
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zJik7CisgICAgdm9pZCBkcmF3RmlsdGVySW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGltYWdlSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVm
ZXJlbmNlLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYpOwogICAgIHZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7CiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5t
ZXNzYWdlcy5pbgppbmRleCA1YzE0MDkzYTNiOWFiYTBhMWJlNzIwNjg3ZWZiNDY2OGI1OTVhMzYx
Li5hNmU2YTFjYmY0NzMyYjVmMDAzODg1OWE2MzhjMWU4MzE1YjI3MGZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgpAQCAtNDYsNiArNDYsNyBAQCBtZXNz
YWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsK
ICAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJDb3JlOjpX
aW5kUnVsZSB3aW5kUnVsZSkKICAgICBCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcyhXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdGluYXRpb24sIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQogICAgIEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcyhXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdGluYXRpb24pCisgICAgRHJhd0ZpbHRlckltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpbWFnZUlkZW50aWZpZXIsIFdl
YkNvcmU6OkZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZp
bHRlciwgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkgZ2VvbWV0cnkpCiAgICAgRHJhd0dseXBocyhX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyBpdGVtKQogICAgIERyYXdJbWFnZUJ1ZmZl
cihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpGbG9hdFJl
Y3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMp
CiAgICAgRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBX
ZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwCmluZGV4IGMyOWFhODZjNGVhZWQyMmUwNzRiNmU1NzJhODJhYmIwNzZlYTUwMzQuLjk5Mjhk
YWFjMjUxNjczOTYyZWY4NGZiMDAwZmU3NmY5MDFjZDg4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2lu
Y2x1ZGUgIkZpbHRlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJ
bWFnZUJ1ZmZlci5oIgpAQCAtMzIwLDYgKzMyMSwzNCBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmdldFNoYXJlYWJsZUJpdG1hcEZvckltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50
aQogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7CiB9CiAKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpZGVudGlmaWVyLCBJUEM6OkZpbHRlclJlZmVyZW5jZSYm
IGZpbHRlclJlZmVyZW5jZSwgY29uc3QgRmlsdGVyR2VvbWV0cnkmIGdlb21ldHJ5LAorICAgIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIGZpbHRlciA9IGZpbHRlclJlZmVyZW5jZS50YWtlRmlsdGVyKCk7CisgICAgCisgICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIFsmXSgpIHsKKyAgICAgICAgYXV0byBp
bWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcih7IGlk
ZW50aWZpZXIsIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZp
ZXIoKSB9KTsKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgYXV0byBpbWFnZSA9IGltYWdlQnVmZmVyLT5maWx0ZXJlZEltYWdlKGZpbHRlciwg
Z2VvbWV0cnkpOworICAgICAgICBpZiAoIWltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlLT5zaXplKCk7CisgICAgICAgIGF1dG8gYml0bWFw
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZVNpemUpLCB7
IGltYWdlQnVmZmVyLT5jb2xvclNwYWNlKCkgfSk7CisgICAgICAgIGlmICghYml0bWFwKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOworICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSk7Cisg
ICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgfSgpOworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlKSk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Y2FjaGVOYXRpdmVJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYg
aGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbmF0aXZlSW1hZ2VSZXNvdXJjZUlk
ZW50aWZpZXIpCiB7CiAgICAgLy8gSW1tZWRpYXRlbHkgdHVybiB0aGUgUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyICh3aGljaCBpcyBlcnJvci1wcm9uZSkgdG8gYSBRdWFsaWZpZWRSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAxOWZiMTdmMDI1
ZmIyYzY1ZjFkZGUyNzJjMzBiYjBkZTk0NWNhZjlmLi5jYjlkMGQ3NTAxM2I4YWM2YjAzZjJlNDdh
MjY3YzA0YTZmMmY1NGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTU5LDYgKzU5LDEwIEBA
IGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIH0KIAorbmFtZXNwYWNlIElQQyB7
CitjbGFzcyBGaWx0ZXJSZWZlcmVuY2U7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFz
cyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwpAQCAtMTA5LDYgKzExMyw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1
dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0cmluZyYmKT4mJik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0U2hhcmVhYmxlQml0bWFwRm9y
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQcmVzZXJ2ZVJlc29sdXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmJik+JiYpOworICAgIHZvaWQgZ2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVm
ZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgSVBDOjpGaWx0ZXJSZWZl
cmVuY2UmJiwgY29uc3QgV2ViQ29yZTo6RmlsdGVyR2VvbWV0cnkmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiYpPiYmKTsKICAgICB2b2lkIGNhY2hlTmF0
aXZlSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2FjaGVGb250KFJlZjxXZWJDb3JlOjpG
b250PiYmKTsKICAgICB2b2lkIGRlbGV0ZUFsbEZvbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGExNDJmNDg5NjZmNWM0OTc1OTQ1NjU0NzcyYzc5YzMx
OTc2ZjUzZGMuLjQxNWZkYTU4ZGNmNmJiMDg2NGZiNjExMzUxMDU5OTY3MjQxNzRmYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0zMSw2ICszMSw3IEBAIG1l
c3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291bnRlZCBTdHJlYW0gewog
ICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWltZVR5cGUsIHN0ZDo6b3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5
bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgc3Rk
OjpvcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4g
ZGF0YSkgU3luY2hyb25vdXMKICAgICBHZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIGVudW06dWlu
dDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSAtPiAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzIE5vdFN0
cmVhbUVuY29kYWJsZVJlcGx5CisgICAgR2V0RmlsdGVyZWRJbWFnZUZvckltYWdlQnVmZmVyKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgSVBDOjpGaWx0
ZXJSZWZlcmVuY2UgZmlsdGVyLCBXZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSBnZW9tZXRyeSkgLT4g
KFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBOb3RT
dHJlYW1FbmNvZGFibGVSZXBseQogICAgIENhY2hlTmF0aXZlSW1hZ2UoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIE5vdFN0cmVhbUVuY29kYWJsZQogICAg
IENhY2hlRm9udChJUEM6OkZvbnRSZWZlcmVuY2UgZm9udCkgTm90U3RyZWFtRW5jb2RhYmxlCiAg
ICAgRGVsZXRlQWxsRm9udHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRmlsdGVyUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9GaWx0ZXJS
ZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDUzN2RjMmVkZDM0YWNhZTQzNjI4NmVlZTJjZWY1Yjkx
Zjg5ZWJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRmls
dGVyUmVmZXJlbmNlLmgKQEAgLTAsMCArMSw0MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTRmlsdGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
RUJsZW5kLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbG9yTWF0cml4Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GRUNvbXBvbmVudFRyYW5zZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRUNvbXBv
c2l0ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRkVDb252b2x2ZU1hdHJpeC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRkVEaWZmdXNlTGlnaHRpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFRGlzcGxh
Y2VtZW50TWFwLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRURyb3BTaGFkb3cuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZFRmxvb2QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFR2F1c3NpYW5CbHVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GRU1lcmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GRU1vcnBo
b2xvZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFT2Zmc2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GRVNwZWN1bGFyTGlnaHRpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZFVGlsZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRkVUdXJidWxlbmNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWx0ZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlckVmZmVjdFZlY3Rvci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU1ZHRkVJbWFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1ZHRmlsdGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TVkdGaWx0ZXJFeHByZXNzaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
b3VyY2VHcmFwaGljLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBGaWx0ZXJSZWZlcmVu
Y2UgeworcHVibGljOgorICAgIEZpbHRlclJlZmVyZW5jZShSZWY8V2ViQ29yZTo6RmlsdGVyPiYm
IGZpbHRlcikKKyAgICAgICAgOiBtX2ZpbHRlcihXVEZNb3ZlKGZpbHRlcikpCisgICAgeworICAg
IH0KKworICAgIFJlZjxXZWJDb3JlOjpGaWx0ZXI+IHRha2VGaWx0ZXIoKSB7IHJldHVybiBXVEZN
b3ZlKG1fZmlsdGVyKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0
ZToKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBzdGF0aWMgdm9pZCBlbmNvZGVGaWx0ZXJF
ZmZlY3QoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiwgRW5jb2RlciYpOworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6RmlsdGVyRWZmZWN0PiBk
ZWNvZGVGaWx0ZXJFZmZlY3QoRGVjb2RlciYsIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
KTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZVNWR0Zp
bHRlcihjb25zdCBXZWJDb3JlOjpTVkdGaWx0ZXImLCBFbmNvZGVyJik7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTVkdGaWx0ZXI+IGRlY29kZVNW
R0ZpbHRlcihEZWNvZGVyJik7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiBzdGF0aWMg
dm9pZCBlbmNvZGVDU1NGaWx0ZXIoY29uc3QgV2ViQ29yZTo6Q1NTRmlsdGVyJiwgRW5jb2RlciYp
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBSZWZQdHI8V2ViQ29yZTo6Q1NT
RmlsdGVyPiBkZWNvZGVDU1NGaWx0ZXIoRGVjb2RlciYpOworICAgIAorICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZUZpbHRlcihjb25zdCBXZWJDb3JlOjpGaWx0
ZXImLCBFbmNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIFJlZlB0
cjxXZWJDb3JlOjpGaWx0ZXI+IGRlY29kZUZpbHRlcihEZWNvZGVyJik7CisKKyAgICBSZWY8V2Vi
Q29yZTo6RmlsdGVyPiBtX2ZpbHRlcjsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2
b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlRmlsdGVyRWZmZWN0KGNvbnN0IFdlYkNvcmU6OkZp
bHRlckVmZmVjdCYgZWZmZWN0LCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIEFTU0VSVChlZmZl
Y3QudHlwZSgpID49IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVNaW5pbXVtICYmIGVm
ZmVjdC50eXBlKCkgPD0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1heGltdW0pOwor
CisgICAgZW5jb2RlciA8PCBlZmZlY3QudHlwZSgpOworICAgIGVuY29kZXIgPDwgZWZmZWN0Lm9w
ZXJhdGluZ0NvbG9yU3BhY2UoKTsKKworICAgIHN3aXRjaCAoZWZmZWN0LnR5cGUoKSkgeworICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5kOgorICAgICAgICBkb3du
Y2FzdDxXZWJDb3JlOjpGRUJsZW5kPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1h
dHJpeDoKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVDb2xvck1hdHJpeD4oZWZmZWN0KS5l
bmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CisgICAgICAgIGRvd25jYXN0PFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNv
bXBvc2l0ZToKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVDb21wb3NpdGU+KGVmZmVjdCku
ZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgICAgICBkb3duY2FzdDxXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4PihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNl
TGlnaHRpbmc6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nPihl
ZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXA6CisgICAgICAgIGRvd25j
YXN0PFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6
RkVEcm9wU2hhZG93OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRURyb3BTaGFkb3c+KGVm
ZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUZsb29kOgorICAgICAgICBkb3duY2FzdDxXZWJDb3Jl
OjpGRUZsb29kPihlZmZlY3QpLmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXI6CisgICAg
ICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyPihlZmZlY3QpLmVuY29kZShlbmNv
ZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6RkVJbWFnZToKKyAgICAgICAgZG93bmNhc3Q8V2ViQ29yZTo6RkVJbWFnZT4oZWZmZWN0
KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTWVyZ2U6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZF
TWVyZ2U+KGVmZmVjdCkuZW5jb2RlKGVuY29kZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3k6
CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFTW9ycGhvbG9neT4oZWZmZWN0KS5lbmNvZGUo
ZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBkb3duY2FzdDxXZWJDb3JlOjpGRU9mZnNldD4o
ZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZzoKKyAgICAgICAgZG93
bmNhc3Q8V2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nPihlZmZlY3QpLmVuY29kZShlbmNvZGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlw
ZTo6RkVUaWxlOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRVR1cmJ1bGVuY2U6CisgICAgICAgIGRvd25jYXN0PFdlYkNvcmU6OkZFVHVy
YnVsZW5jZT4oZWZmZWN0KS5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFs
cGhhOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK1JlZlB0cjxXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q+IEZpbHRlclJlZmVyZW5jZTo6ZGVjb2RlRmlsdGVyRWZmZWN0KERlY29kZXImIGRlY29kZXIs
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlIHR5cGUpCit7CisgICAgaWYgKCEodHlwZSA+
PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNaW5pbXVtICYmIHR5cGUgPD0gV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWF4aW11bSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IG9wZXJhdGluZ0NvbG9yU3BhY2U7CisgICAgZGVjb2RlciA+PiBvcGVyYXRpbmdDb2xvclNw
YWNlOworICAgIGlmICghb3BlcmF0aW5nQ29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q+PiBlZmZl
Y3Q7CisgICAgCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFQmxlbmQ6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFQmxlbmQ6
OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoKKyAgICAgICAgZWZm
ZWN0ID0gV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9zaXRlOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4OgorICAgICAg
ICBlZmZlY3QgPSBXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpkZWNvZGUoZGVjb2Rlcik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nOgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpG
RURpZmZ1c2VMaWdodGluZzo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcDoKKyAg
ICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmRlY29kZShkZWNvZGVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlw
ZTo6RkVEcm9wU2hhZG93OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRURyb3BTaGFkb3c6
OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6VHlwZTo6RkVGbG9vZDoKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVG
bG9vZDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFuQmx1cjoKKyAgICAgICAgZWZmZWN0ID0g
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZToKKyAgICAg
ICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVJbWFnZTo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1lcmdlOgor
ICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU1lcmdlOjpkZWNvZGUoZGVjb2Rlcik7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTW9y
cGhvbG9neToKKyAgICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZWNvZGUo
ZGVjb2Rlcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFT2Zmc2V0OgorICAgICAgICBlZmZlY3QgPSBXZWJDb3JlOjpGRU9mZnNldDo6
ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmc6CisgICAgICAgIGVmZmVjdCA9IFdl
YkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGU6CisgICAg
ICAgIGVmZmVjdCA9IFdlYkNvcmU6OkZFVGlsZTo6Y3JlYXRlKCk7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZToKKyAg
ICAgICAgZWZmZWN0ID0gV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpkZWNvZGUoZGVjb2Rlcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUdyYXBoaWM6CisgICAgICAgIGVmZmVjdCA9IFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZSgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoZWZmZWN0KSB7CisgICAgICAgICgqZWZmZWN0KS0+
c2V0T3BlcmF0aW5nQ29sb3JTcGFjZSgqb3BlcmF0aW5nQ29sb3JTcGFjZSk7CisgICAgICAgIHJl
dHVybiB7ICgqZWZmZWN0KS5wdHIoKSB9OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJSZWZlcmVuY2U6OmVuY29k
ZVNWR0ZpbHRlcihjb25zdCBXZWJDb3JlOjpTVkdGaWx0ZXImIGZpbHRlciwgRW5jb2RlciYgZW5j
b2RlcikKK3sKKyAgICBlbmNvZGVyIDw8IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpT
VkdGaWx0ZXI7CisKKyAgICBhdXRvJiBmaWx0ZXJFZmZlY3RzID0gZmlsdGVyLmZpbHRlckVmZmVj
dHMoKTsKKyAgICBlbmNvZGVyIDw8IGZpbHRlckVmZmVjdHMuc2l6ZSgpOworCisgICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBmaWx0ZXJFZmZlY3RzKQorICAgICAgICBlbmNvZGVGaWx0ZXJFZmZlY3Qo
ZWZmZWN0LCBlbmNvZGVyKTsKKyAgICAKKyAgICBhdXRvJiBleHByZXNzaW9uID0gZmlsdGVyLmV4
cHJlc3Npb24oKTsKKyAgICBlbmNvZGVyIDw8IGV4cHJlc3Npb24uc2l6ZSgpOworCisgICAgZm9y
IChhdXRvIFt0eXBlLCBpbmRleCwgbGV2ZWxdIDogZXhwcmVzc2lvbikgeworICAgICAgICBlbmNv
ZGVyIDw8IHR5cGU7CisgICAgICAgIGVuY29kZXIgPDwgaW5kZXg7CisgICAgICAgIGVuY29kZXIg
PDwgbGV2ZWw7CisgICAgfQorfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorUmVmUHRyPFdl
YkNvcmU6OlNWR0ZpbHRlcj4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGVTVkdGaWx0ZXIoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gc2l6ZTsKKyAgICBkZWNv
ZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplIHx8ICEqc2l6ZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBXZWJDb3JlOjpGaWx0ZXJFZmZlY3RWZWN0b3IgZmlsdGVyRWZmZWN0czsK
KyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8ICpzaXplOyArK2kpIHsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAg
ICAgZGVjb2RlciA+PiB0eXBlOworICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAKKyAgICAgICAgYXV0byBlZmZlY3QgPSBkZWNvZGVGaWx0ZXJFZmZl
Y3QoZGVjb2RlciwgKnR5cGUpOworICAgICAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgICAgICBmaWx0ZXJFZmZlY3RzLmFwcGVuZChlZmZlY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlm
ICghc2l6ZSB8fCAhKnNpemUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgV2ViQ29y
ZTo6U1ZHRmlsdGVyRXhwcmVzc2lvbiBleHByZXNzaW9uOworICAgIAorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgKnNpemU7ICsraSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAg
ICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4OworICAgICAgICBkZWNvZGVyID4+
IGluZGV4OworICAgICAgICBpZiAoIWluZGV4KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbGV2ZWw7CisgICAgICAgIGRlY29k
ZXIgPj4gbGV2ZWw7CisgICAgICAgIGlmICghbGV2ZWwpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBleHByZXNzaW9uLmFwcGVuZCh7ICp0eXBlLCAqaW5kZXgsICpsZXZl
bCB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUoV1RG
TW92ZShmaWx0ZXJFZmZlY3RzKSwgV1RGTW92ZShleHByZXNzaW9uKSk7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlQ1NTRmlsdGVyKGNv
bnN0IFdlYkNvcmU6OkNTU0ZpbHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAg
IGVuY29kZXIgPDwgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlcjsKKyAg
ICBlbmNvZGVyIDw8IGZpbHRlci5mdW5jdGlvbnMoKS5zaXplKCk7CisgICAgCisgICAgZm9yIChh
dXRvJiBmdW5jdGlvbiA6IGZpbHRlci5mdW5jdGlvbnMoKSkgeworICAgICAgICBpZiAoaXM8V2Vi
Q29yZTo6U1ZHRmlsdGVyPihmdW5jdGlvbikpCisgICAgICAgICAgICBlbmNvZGVTVkdGaWx0ZXIo
ZG93bmNhc3Q8V2ViQ29yZTo6U1ZHRmlsdGVyPihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmNvZGVGaWx0ZXJFZmZlY3QoZG93bmNhc3Q8V2Vi
Q29yZTo6RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5nZXQoKSksIGVuY29kZXIpOworICAgIH0KKyAg
ICAKKyAgICBlbmNvZGVyIDw8IGZpbHRlci5yZW5kZXJpbmdNb2RlKCk7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIERlY29kZXI+CitSZWZQdHI8V2ViQ29yZTo6Q1NTRmlsdGVyPiBGaWx0ZXJSZWZlcmVu
Y2U6OmRlY29kZUNTU0ZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9u
YWw8c2l6ZV90PiBzaXplOworICAgIGRlY29kZXIgPj4gc2l6ZTsKKyAgICBpZiAoIXNpemUgfHwg
ISpzaXplKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZlY3RvcjxSZWY8V2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb24+PiBmdW5jdGlvbnM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZT4gdHlwZTsKKyAgICAgICAgZGVjb2RlciA+PiB0eXBlOworICAgICAg
ICBpZiAoIXR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAo
KnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0ZpbHRlcikgeworICAg
ICAgICAgICAgaWYgKGF1dG8gZmlsdGVyID0gZGVjb2RlU1ZHRmlsdGVyKGRlY29kZXIpKSB7Cisg
ICAgICAgICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZWZmZWN0ID0gZGVjb2Rl
RmlsdGVyRWZmZWN0KGRlY29kZXIsICp0eXBlKTsKKyAgICAgICAgaWYgKCFlZmZlY3QpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9ucy5hcHBl
bmQoZWZmZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKyAgICAKKyAgICBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGU7CisgICAgZGVjb2RlciA+
PiByZW5kZXJpbmdNb2RlOworICAgIGlmICghcmVuZGVyaW5nTW9kZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUoV1RGTW92
ZShmdW5jdGlvbnMpLCAqcmVuZGVyaW5nTW9kZSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIEZpbHRlclJlZmVyZW5jZTo6ZW5jb2RlRmlsdGVyKGNvbnN0IFdlYkNvcmU6OkZp
bHRlciYgZmlsdGVyLCBFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIGlmIChpczxXZWJDb3JlOjpD
U1NGaWx0ZXI+KGZpbHRlcikpCisgICAgICAgIGVuY29kZUNTU0ZpbHRlcihkb3duY2FzdDxXZWJD
b3JlOjpDU1NGaWx0ZXI+KGZpbHRlciksIGVuY29kZXIpOworICAgIGVsc2UKKyAgICAgICAgZW5j
b2RlU1ZHRmlsdGVyKGRvd25jYXN0PFdlYkNvcmU6OlNWR0ZpbHRlcj4oZmlsdGVyKSwgZW5jb2Rl
cik7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitSZWZQdHI8V2ViQ29yZTo6RmlsdGVy
PiBGaWx0ZXJSZWZlcmVuY2U6OmRlY29kZUZpbHRlcihEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU+IHR5cGU7CisgICAg
ZGVjb2RlciA+PiB0eXBlOworICAgIGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoKnR5cGUgPT0gV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0Zp
bHRlcikKKyAgICAgICAgcmV0dXJuIGRlY29kZUNTU0ZpbHRlcihkZWNvZGVyKTsKKworICAgIGlm
ICgqdHlwZSA9PSBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyKQorICAg
ICAgICByZXR1cm4gZGVjb2RlU1ZHRmlsdGVyKGRlY29kZXIpOworICAgIAorICAgIHJldHVybiBu
dWxscHRyOworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWx0ZXJSZWZlcmVu
Y2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZUZpbHRlciht
X2ZpbHRlciwgZW5jb2Rlcik7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9w
dGlvbmFsPEZpbHRlclJlZmVyZW5jZT4gRmlsdGVyUmVmZXJlbmNlOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICBpZiAoYXV0byBmaWx0ZXIgPSBkZWNvZGVGaWx0ZXIoZGVjb2Rlcikp
CisgICAgICAgIHJldHVybiB7IGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpIH07CisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA2NTg0ZDFhZDdlMTU0ZWIwOTIwMjMxMGRkZmE2
YjVlMTIxYWQyYzM5Li5lYjZjMmI3MDE5ODI5MmYxYWRlZmMzNTg0MDMwODkwODI1NWRmNmRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBi
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI2Niw2ICsyNjYs
NyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJl
dHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnQ1ZQaXhlbEJ1ZmZlclJlZicsCiAgICAgICAgICdJ
UEM6OkRhdGFSZWZlcmVuY2UnLAorICAgICAgICAnSVBDOjpGaWx0ZXJSZWZlcmVuY2UnLAogICAg
ICAgICAnSVBDOjpGb250UmVmZXJlbmNlJywKICAgICAgICAgJ0lQQzo6U2VtYXBob3JlJywKICAg
ICAgICAgJ01hY2hTZW5kUmlnaHQnLApAQCAtMjkwLDcgKzI5MSw2IEBAIGRlZiB0eXBlc190aGF0
X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpNZWRpYUtl
eVN5c3RlbVJlcXVlc3RJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6Ok1lZGlhUGxheWVy
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpNZWRpYVNlc3Npb25JZGVudGlmaWVyJywK
LSAgICAgICAgJ1dlYkNvcmU6Ok5hdGl2ZUltYWdlUmVmZXJlbmNlJywKICAgICAgICAgJ1dlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBsYXliYWNrVGFyZ2V0Q2xp
ZW50Q29udGV4dElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UGx1Z2luTG9hZENsaWVu
dFBvbGljeScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA2NDZlZTY0NjE3NmRjZGUxNzRmZDQ3Zjk1NjgwOTY0NzhmNDk0YjIzLi45OWNj
ZTU0YWNhOTJmZGQ0YjgwNGMxMTM3YjdjYTAyMDE0OWMyZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNDgsNiArMTM0OCw3IEBA
CiAJCTcxQkFBNzMzMjVGRkQwOTgwMEQ3Q0Q1RCAvKiBXS01vZGVsVmlldy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFCQUE3MzEyNUZGQ0NCQTAwRDdD
RDVEIC8qIFdLTW9kZWxWaWV3LmggKi87IH07CiAJCTcxRkI4MTBCMjI2MDYyN0UwMDMyMzY3NyAv
KiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQjgxMEEyMjYwNjI3QTAwMzIz
Njc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi87IH07
CiAJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI4RTg2RUYxNzk1MTg4
QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CisJCTcyRUU3OUJEMjcwRTVB
QjkwMDRDRTQwRSAvKiBGaWx0ZXJSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRUU3OUJBMjcwRTVBQjkwMDRDRTQwRSAvKiBGaWx0ZXJS
ZWZlcmVuY2UuaCAqLzsgfTsKIAkJNzVBOEQyQzgxODdDQ0ZBQjAwQzM5QzlFIC8qIFdLV2Vic2l0
ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNzVBOEQyRDYxODdE
MUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJENDE4N0QxQzAxMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNzYyQjc0OEQxMjBC
Qzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkg
LyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDc2OCw2ICs0NzY5LDcgQEAKIAkJNzI4RTg2RjAxNzk1
MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyQjUzMTU3MjUzQzFFNEQwMDQ5Mjk1QSAvKiBSZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNTMxNTgyNTNDMUU0RDAw
NDkyOTVBIC8qIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJF
RTc5QkEyNzBFNUFCOTAwNENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9y
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlF
IC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9y
ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDE4LDYgKzc0MjAs
NyBAQAogCQkJCUJDMDMyRDlFMTBGNDM3RDEwMDU4QzE1QSAvKiBEZWNvZGVyLmggKi8sCiAJCQkJ
QkMwMzJEOUYxMEY0MzdEMTAwNThDMTVBIC8qIEVuY29kZXIuY3BwICovLAogCQkJCUJDMDMyREEw
MTBGNDM3RDEwMDU4QzE1QSAvKiBFbmNvZGVyLmggKi8sCisJCQkJNzJFRTc5QkEyNzBFNUFCOTAw
NENFNDBFIC8qIEZpbHRlclJlZmVyZW5jZS5oICovLAogCQkJCTlCRDhBQjQ5MjU4MjBFNTIwMDUz
ODZGOCAvKiBGb250UmVmZXJlbmNlLmggKi8sCiAJCQkJNDE1MUU1QzMxRkJCOTBBOTAwRTQ3RTJE
IC8qIEZvcm1EYXRhUmVmZXJlbmNlLmggKi8sCiAJCQkJQzBDRTcyQUMxMjQ3RTc4RDAwQkMwRUM0
IC8qIEhhbmRsZU1lc3NhZ2UuaCAqLywKQEAgLTEyNDM2LDYgKzEyNDM5LDcgQEAKIAkJCQk5MzEy
QkFENjI2RjMzQzI5MDBGRERGNUYgLyogRmlsZVN5c3RlbVN0b3JhZ2VIYW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzNUI1NzlBMjZGNTE5MzMwMDhCNDhBQyAvKiBGaWxlU3lzdGVtU3RvcmFn
ZUhhbmRsZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzEyQkFENTI2RjMzQzI2MDBG
RERGNUYgLyogRmlsZVN5c3RlbVN0b3JhZ2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MkVFNzlCRDI3MEU1QUI5MDA0Q0U0MEUgLyogRmlsdGVyUmVmZXJlbmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwMEI5NjYxQTE4RTI1QUUxMDBDRTFGODggLyogRmluZENsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE5MEMxRjQxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDNTlDNEE1OTE4QjgxMTc0MDA3QkRDQjYgLyogRm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKaW5kZXggOTQyMWRkMjM4Y2I2ZWM2M2ZlMWMwN2Q0NzM2
MWNiMGI2NWZmNDBjYi4uMjVlNGVmMDU3YWM4YThhZDViNGJlZjQxNTYyNWEwYTY3NGM5OWUwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRmlsdGVy
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdC5oPgpAQCAtMjE0LDYgKzIxNSwxMSBAQCB2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQ
YXR0ZXJuKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKIH0KIAordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJJbWFnZUJ1ZmZlcihzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckdlb21ldHJ5JiBnZW9tZXRyeSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVySW1hZ2VCdWZmZXIoaW1hZ2VJZGVudGlmaWVyLCBzb3Vy
Y2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0p
LCBnZW9tZXRyeSkpOworfQorCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgK
aW5kZXggNzFmZGI2M2RmNGFjODQ5NzQ3MjMyNjliN2YwM2Q5OTdiODEzOTg5ZC4uZjc5MGYzNzA1
NTYwMjEyZGU4YzY5MmYwOTllMDFhZmZkOGJlMzA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eS5oCkBAIC05NCw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUlt
YWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRE
cmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlckltYWdl
QnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
PiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZp
bHRlciYsIGNvbnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5JikgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKICAgICB2b2lkIHJlY29y
ZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmREcmF3UmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oCmluZGV4IDY5MzRiYjQ2MTZjZTAwYmVhYjE0MGJhYTk0MTA5YjZiYTk1ZjNjMjQu
LjJmNTZhY2U0MGRmMGI5MDIwYjJkMzU2OTQyOTBkZTljMWIyZmYzOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oCkBAIC0xOTcsNiArMTk3LDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAg
cmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9CiAKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2U+IGZpbHRlcmVkSW1hZ2UoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IFdlYkNvcmU6OkZpbHRlckdlb21ldHJ5JiBnZW9tZXRyeSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQorICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmdldEZpbHRlcmVkSW1h
Z2VGb3JJbWFnZUJ1ZmZlcihtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgZmlsdGVyLCBn
ZW9tZXRyeSk7CisgICAgfQorCiAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZl
cj4gZ2V0UGl4ZWxCdWZmZXIoY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXJGb3JtYXQmIGRlc3Rp
bmF0aW9uRm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBmaW5h
bAogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggMjhi
YjI0NDgxNjgxOTNlZWU3ZGNhY2ViMzgxYThmM2RlMDhkYTFhZi4uYzBhMjI2NjQ4ZmQzNDZiMDQ0
NjRiZmMxYWMwM2E2Nzg1YWJjYmM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQog
CisjaW5jbHVkZSAiRmlsdGVyUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVJl
bW90ZUltYWdlQnVmZmVyUHJveHkuaCIKQEAgLTIyMyw2ICsyMjQsMjIgQEAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRTaGFyZWFibGVCaXRt
YXAoUmVuZGVyaW4KICAgICByZXR1cm4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsK
IH0KIAorUmVmUHRyPEltYWdlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEZpbHRl
cmVkSW1hZ2VGb3JJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJHZW9tZXRyeSYgZ2VvbWV0
cnkpCit7CisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGF1dG8gc2Vu
ZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRG
aWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIElQQzo6RmlsdGVyUmVmZXJl
bmNlIHsgUmVmPEZpbHRlcj4geyBjb25zdF9jYXN0PEZpbHRlciY+KGZpbHRlcikgfSB9LCBnZW9t
ZXRyeSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpHZXRGaWx0ZXJlZEltYWdl
Rm9ySW1hZ2VCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KCksIDFfcyk7CisgICAgQVNTRVJUX1VOVVNFRChzZW5kUmVzdWx0LCBzZW5kUmVzdWx0KTsKKwor
ICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAg
YXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGlmICgh
Yml0bWFwKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBiaXRtYXAtPmNy
ZWF0ZUltYWdlKCk7Cit9CisKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjYWNo
ZU5hdGl2ZUltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUsIFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAg
ICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDYWNoZU5h
dGl2ZUltYWdlKGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA2NGJiOTI2N2ZlNmIzMzQ5NmIzM2Zl
NTcwZDlhNzFlYWNhNTU0Y2NmLi5lMGRmNjM2Y2UwZDgzZTAzMjQ3MmY1YjQ0M2YxNmVmN2NhYTA0
MTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkZpbHRlclJlZmVy
ZW5jZS5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiR1BV
UHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMuaCIKICNpbmNsdWRlICJJUENTZW1hcGhvcmUu
aCIKQEAgLTkzLDYgKzk0LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXREYXRhVVJMRm9ySW1h
Z2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKICAgICBWZWN0b3I8dWludDhfdD4gZ2V0RGF0YUZvckltYWdlQnVm
ZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGdldFNoYXJlYWJsZUJpdG1hcChXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlPiBnZXRGaWx0ZXJlZEltYWdlRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXImLCBjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJHZW9tZXRyeSYpOwogICAgIHZvaWQgY2FjaGVOYXRpdmVJbWFnZShjb25z
dCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiAgICAgdm9pZCBjYWNoZUZvbnQoUmVmPFdlYkNvcmU6OkZvbnQ+JiYpOwogICAg
IHZvaWQgZGVsZXRlQWxsRm9udHMoKTsK
</data>
<flag name="commit-queue"
          id="466967"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>